<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Operator SDK – How to Contribute</title>
    <link>/docs/contribution-guidelines/</link>
    <description>Recent content in How to Contribute on Operator SDK</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
	  <atom:link href="/docs/contribution-guidelines/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: Development</title>
      <link>/docs/contribution-guidelines/developer-guide/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/contribution-guidelines/developer-guide/</guid>
      <description>
        
        
        &lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;
&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git-scm.com/downloads&#34;&gt;git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://golang.org/dl/&#34;&gt;go&lt;/a&gt; version 1.23&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;download-operator-sdk&#34;&gt;Download Operator SDK&lt;/h3&gt;
&lt;p&gt;Go to the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk&#34;&gt;operator-sdk repo&lt;/a&gt; and follow the &lt;a href=&#34;https://docs.github.com/en/get-started/quickstart/fork-a-repo&#34;&gt;fork guide&lt;/a&gt; to fork and set up a local repository.&lt;/p&gt;
&lt;h3 id=&#34;build-the-operator-sdk-cli&#34;&gt;Build the Operator SDK CLI&lt;/h3&gt;
&lt;p&gt;Build the Operator SDK CLI &lt;code&gt;operator-sdk&lt;/code&gt; binary:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;testing&#34;&gt;Testing&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&#34;/docs/contribution-guidelines/testing&#34;&gt;testing&lt;/a&gt; and &lt;a href=&#34;/docs/contribution-guidelines/documentation&#34;&gt;documentation&lt;/a&gt; guides for more information.&lt;/p&gt;
&lt;h2 id=&#34;releasing&#34;&gt;Releasing&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&#34;/docs/contribution-guidelines/releasing&#34;&gt;release guide&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id=&#34;continuous-integration-ci&#34;&gt;Continuous Integration (CI)&lt;/h2&gt;
&lt;p&gt;The operator-sdk repo uses &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/actions&#34;&gt;Github Actions&lt;/a&gt; to test each pull request and build images for both master commits
and release tags. You can alter these processes by modifying the appropriate &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/tree/master/.github/workflows&#34;&gt;Action config&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;adding-new-architectures&#34;&gt;Adding new architectures&lt;/h3&gt;
&lt;p&gt;The operator-sdk project builds binaries for &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/tree/master/README.md#platforms&#34;&gt;several os&amp;rsquo;s/architectures&lt;/a&gt;.
If you wish to add support for a new one, please create a feature request issue before
implementing support for that platform and submitting a PR.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d like to implement support yourself, you can test a new architecture by enabling Actions
in your repository, add a platform pair to the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/tree/master/.github/workflows/deploy.yml&#34;&gt;&lt;code&gt;deploy&lt;/code&gt;&lt;/a&gt; workflow&amp;rsquo;s &lt;code&gt;build and push&lt;/code&gt; step,
and push to your main branch. Once the updated Action passes, submit a PR linking the passing Action run.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Release Guide</title>
      <link>/docs/contribution-guidelines/releasing/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/contribution-guidelines/releasing/</guid>
      <description>
        
        
        &lt;p&gt;These steps describe how to conduct a release of the operator-sdk repo using example versions.
Replace these versions with the current and new version you are releasing, respectively.&lt;/p&gt;
&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#prerequisites&#34;&gt;Prerequisites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#major-and-minor-releases&#34;&gt;Major and minor releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#patch-releases&#34;&gt;Patch releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#scorecard-test-kuttl-image-releases&#34;&gt;&lt;code&gt;scorecard-test-kuttl&lt;/code&gt; image releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#helpful-tips-and-information&#34;&gt;Release tips&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;The following tools and permissions are needed to conduct a release of the operator-sdk repo.&lt;/p&gt;
&lt;h3 id=&#34;tools&#34;&gt;Tools&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git-scm.com/downloads&#34;&gt;&lt;code&gt;git&lt;/code&gt;&lt;/a&gt;: version 2.2+&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.gnu.org/software/make/&#34;&gt;&lt;code&gt;make&lt;/code&gt;&lt;/a&gt;: version 4.2+&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.gnu.org/software/sed/&#34;&gt;&lt;code&gt;sed&lt;/code&gt;&lt;/a&gt;: version 4.3+&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;permissions&#34;&gt;Permissions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Must be a &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/master/OWNERS&#34;&gt;Netlify admin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Must be an admin on the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/settings/access&#34;&gt;operator-sdk repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;setting-up-tools-for-macos-users&#34;&gt;Setting Up Tools for MacOS Users&lt;/h3&gt;
&lt;p&gt;To install the prerequisite tools on MacOS, complete the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install GNU &lt;code&gt;sed&lt;/code&gt; and &lt;code&gt;make&lt;/code&gt;, which may not be installed by default:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt; brew install gnu-sed make
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the version of &lt;code&gt;make&lt;/code&gt; is higher than 4.2 using command &lt;code&gt;make --version&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the gnubin directory for &lt;code&gt;make&lt;/code&gt; to your PATH from your &lt;code&gt;~/.bashrc&lt;/code&gt;
to allow you to use &lt;code&gt;gmake&lt;/code&gt; as &lt;code&gt;make&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;export PATH=&amp;#34;/usr/local/opt/make/libexec/gnubin:$PATH&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the version of &lt;code&gt;sed&lt;/code&gt; is higher than 4.3 using command &lt;code&gt;gnu-sed --version&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the gnubin directory for &lt;code&gt;gnu-sed&lt;/code&gt; to your PATH from your &lt;code&gt;~/.bashrc&lt;/code&gt;
to allow you to use &lt;code&gt;gnu-sed&lt;/code&gt; as &lt;code&gt;sed&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#204a87&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;export PATH=&amp;#34;/usr/local/opt/gnu-sed/libexec/gnubin:$PATH&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;major-and-minor-releases&#34;&gt;Major and Minor Releases&lt;/h2&gt;
&lt;p&gt;We will use the &lt;code&gt;v1.3.0&lt;/code&gt; release version in this example.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Be sure to substitute
the version you are releasing into the provided commands.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To perform a major or minor release, you must perform the following actions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ensure a new Netlify branch is created&lt;/li&gt;
&lt;li&gt;Create a release branch and lock down the master branch&lt;/li&gt;
&lt;li&gt;Create and merge a PR for the release branch&lt;/li&gt;
&lt;li&gt;Unlock the master branch and push a release tag to it&lt;/li&gt;
&lt;li&gt;Perform some clean up actions and announce the new release to the community&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;procedure&#34;&gt;Procedure&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Before creating a new release branch&lt;/strong&gt;, it is imperative to perform the following initial setup steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the &lt;a href=&#34;https://app.netlify.com/sites/operator-sdk/settings/deploys#branches&#34;&gt;Branches and deploy contexts&lt;/a&gt;
pane in Netlify, click into the Additional branches list section and add &lt;code&gt;v1.13.x&lt;/code&gt;.
&lt;ul&gt;
&lt;li&gt;This will watch the branch when there are changes on Github (creating the branch, or adding a commit).&lt;/li&gt;
&lt;li&gt;NOTE: You must be a &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/master/OWNERS&#34;&gt;Netlify admin&lt;/a&gt; in order to edit the branches list.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a release branch by running the following, assuming the upstream SDK repo is the &lt;code&gt;upstream&lt;/code&gt; remote on your machine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git checkout master
git fetch upstream master
git pull master
git checkout -b v1.3.x
git push upstream v1.3.x
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make sure that the list of supported OLM versions is up to date:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Identify if a new version of OLM needs to be officially supported by ensuring that the latest three releases listed on the &lt;a href=&#34;https://github.com/operator-framework/operator-lifecycle-manager/releases&#34;&gt;OLM release page&lt;/a&gt; are all listed as supported in the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/master/website/content/en/docs/overview/_index.md#olm-version-compatibility&#34;&gt;Overview&lt;/a&gt; section of the SDK docs.&lt;/li&gt;
&lt;li&gt;If a new version of OLM needs to be added and an old version removed, follow the steps in the &lt;a href=&#34;#updating-olm-bindata&#34;&gt;updating OLM bindata&lt;/a&gt; section before moving onto the next step.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lock down the &lt;code&gt;master&lt;/code&gt; branch to prevent further commits before the release completes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;code&gt;Settings -&amp;gt; Branches&lt;/code&gt; in the SDK repo.&lt;/li&gt;
&lt;li&gt;Under &lt;code&gt;Branch protection rules&lt;/code&gt;, click &lt;code&gt;Edit&lt;/code&gt; on the &lt;code&gt;master&lt;/code&gt; branch rule.&lt;/li&gt;
&lt;li&gt;In section &lt;code&gt;Protect matching branches&lt;/code&gt; of the &lt;code&gt;Rule settings&lt;/code&gt; box, increase the number of required approving reviewers to 6.&lt;/li&gt;
&lt;li&gt;Scroll down to save your changes to protect the &lt;code&gt;master&lt;/code&gt; branch.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create and push a release commit&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a new branch to push the release commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;RELEASE_VERSION&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;v1.3.0
git checkout master
git pull master
git checkout -b release-&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the top-level &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/master/Makefile&#34;&gt;Makefile&lt;/a&gt; variable &lt;code&gt;IMAGE_VERSION&lt;/code&gt;
to the upcoming release tag &lt;code&gt;v1.3.0&lt;/code&gt;. This variable ensures sample projects have been tagged
correctly prior to the release commit.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;sed -i -E &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;s/(IMAGE_VERSION = ).+/\1v1\.3\.0/g&amp;#39;&lt;/span&gt; Makefile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If this command fails on MacOS with a warning &amp;ldquo;sed is not found&amp;rdquo;, follow the step 5 in the &lt;a href=&#34;#setting-up-tools-for-macos-users&#34;&gt;Setting Up Tools for MacOS Users&lt;/a&gt; section to map &lt;code&gt;gsed&lt;/code&gt; to &lt;code&gt;sed&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run the pre-release &lt;code&gt;make&lt;/code&gt; target:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;make prerelease
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following changes should be present:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Makefile&lt;/code&gt;: IMAGE_VERSION should be modified to the upcoming release tag. (This variable ensures sampleprojects have been tagged correctly prior to the release commit.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;changelog/generated/v1.3.0.md&lt;/code&gt;: commit changes (created by changelog generation).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;changelog/fragments/*&lt;/code&gt;: commit deleted fragment files (deleted by changelog generation).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;website/content/en/docs/upgrading-sdk-version/v1.3.0.md&lt;/code&gt;: commit changes (created by changelog generation).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;website/config.toml&lt;/code&gt;: commit changes (modified by release script).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;testdata/*&lt;/code&gt;: Generated sample code.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Commit these changes and push to your remote (assuming your remote is named &lt;code&gt;origin&lt;/code&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git add Makefile changelog website testdata
git commit -sm &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Release &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
git push origin release-&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create and merge a new PR for the release-v1.3.0 branch created in step 5.4.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can force-merge your PR to the locked-down &lt;code&gt;master&lt;/code&gt;
if you have admin access to the operator-sdk repo, or ask an administrator to do so.&lt;/li&gt;
&lt;li&gt;Note that the docs PR check will fail because the site isn&amp;rsquo;t published yet; the PR can be merged anyways.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unlock the &lt;code&gt;master&lt;/code&gt; branch&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;code&gt;Settings -&amp;gt; Branches&lt;/code&gt; in the SDK repo.&lt;/li&gt;
&lt;li&gt;Under &lt;code&gt;Branch protection rules&lt;/code&gt;, click &lt;code&gt;Edit&lt;/code&gt; on the &lt;code&gt;master&lt;/code&gt; branch rule.&lt;/li&gt;
&lt;li&gt;In section &lt;code&gt;Protect matching branches&lt;/code&gt; of the &lt;code&gt;Rule settings&lt;/code&gt; box, reduce the number of required approving reviewers back to 1.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create and push a release tag on &lt;code&gt;master&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Refresh your local &lt;code&gt;master&lt;/code&gt; branch, tag the release PR commit, and push to the main operator-sdk repo (assumes the remote&amp;rsquo;s name is &lt;code&gt;upstream&lt;/code&gt;):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git checkout master
git pull master
make tag
git push upstream refs/tags/&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Fast-forward the &lt;code&gt;latest&lt;/code&gt; and release branches&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;latest&lt;/code&gt; branch points to the latest release tag to keep the main website subdomain up-to-date.
Run the following commands to do so:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git checkout latest
git reset --hard refs/tags/&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;
git push -f upstream latest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Similarly, to update the release branch, run:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git checkout v1.3.x
git reset --hard refs/tags/&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;
git push -f upstream v1.3.x
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Post release steps&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Publish the new Netlify subdomain for version-specific docs.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Assuming that the Netlify prestep was done before the new branch was created, a new &lt;a href=&#34;https://app.netlify.com/sites/operator-sdk/settings/domain#branch-subdomains&#34;&gt;branch option&lt;/a&gt;
should be visible to Netlify Admins under Domain management &amp;gt; Branch subdomains and can be mapped to a subdomain. (Note: you may have to scroll down to the bottom of the Branch subdomains section to find the branch that is ready to be mapped.)&lt;/li&gt;
&lt;li&gt;Please test that this subdomain works by going to the link in a browser. You can use the link in the second column to jump to the docs page for this release.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make an &lt;a href=&#34;https://groups.google.com/g/operator-framework&#34;&gt;operator-framework Google Group&lt;/a&gt; post.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can use &lt;a href=&#34;https://groups.google.com/g/operator-framework/c/2fBHHLQOKs8/m/VAd_zd_IAwAJ&#34;&gt;this post&lt;/a&gt; as an example.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Post to Kubernetes slack in #kubernetes-operators and #operator-sdk-dev.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can use &lt;a href=&#34;https://kubernetes.slack.com/archives/C017UU45SHL/p1679082546359389&#34;&gt;this post&lt;/a&gt; as an example.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Clean up the GitHub milestone&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/milestones&#34;&gt;GitHub milestone&lt;/a&gt;, bump any open issues to the following release.&lt;/li&gt;
&lt;li&gt;Close out the milestone.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the newly unsupported branch documentation (1.1.x in this example)to mark it as archived. (Note that this step does not need to be merged before the release is complete.)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Checkout the newly unsupported release branch:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git checkout v1.1.x
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Modify the &lt;code&gt;website/config.toml&lt;/code&gt; file on lines 88-90 to be the following:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;version&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;v1.1&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;archived_version&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&lt;/span&gt;
&lt;span style=&#34;color:#000&#34;&gt;url_latest_version&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;https://sdk.operatorframework.io&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;patch-releases&#34;&gt;Patch releases&lt;/h2&gt;
&lt;p&gt;We will use the &lt;code&gt;v1.3.1&lt;/code&gt; release version in this example.&lt;/p&gt;
&lt;h3 id=&#34;0-lock-down-release-branches-on-github&#34;&gt;0. Lock down release branches on GitHub&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Lock down the &lt;code&gt;v1.3.x&lt;/code&gt; branch to prevent further commits before the release completes:
&lt;ol&gt;
&lt;li&gt;Go to &lt;code&gt;Settings -&amp;gt; Branches&lt;/code&gt; in the SDK repo.&lt;/li&gt;
&lt;li&gt;Under &lt;code&gt;Branch protection rules&lt;/code&gt;, click &lt;code&gt;Edit&lt;/code&gt; on the &lt;code&gt;v*.&lt;/code&gt; branch rule.&lt;/li&gt;
&lt;li&gt;In section &lt;code&gt;Protect matching branches&lt;/code&gt; of the &lt;code&gt;Rule settings&lt;/code&gt; box, increase the number of required approving reviewers to &lt;code&gt;6&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;1-branch&#34;&gt;1. Branch&lt;/h3&gt;
&lt;p&gt;Create a new branch from the release branch (v1.3.x in this example). This branch should already exist prior to cutting a patch release.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;RELEASE_VERSION&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;v1.3.1
git checkout v1.3.x
git pull
git checkout -b release-&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-prepare-the-release-commit&#34;&gt;2. Prepare the release commit&lt;/h3&gt;
&lt;p&gt;Using the version for your release as the IMAGE_VERSION, execute the
following commands from the root of the project.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Update the IMAGE_VERSION in the Makefile&lt;/span&gt;
sed -i -E &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;s/(IMAGE_VERSION = ).+/\1v1\.3\.1/g&amp;#39;&lt;/span&gt; Makefile
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;#  Run the pre-release `make` target:&lt;/span&gt;
make prerelease
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;All of the following changes should be present (and no others).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Makefile: IMAGE_VERSION should be modified to the upcoming release tag. (This variable ensures sampleprojects have been tagged correctpy priror to the release commit.)&lt;/li&gt;
&lt;li&gt;changelog/: all fragments should be deleted and consolidated into the new file &lt;code&gt;changelog/generated/v1.3.1.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;docs: If there are migration steps, a new migration doc will be created. The installation docs should also contain a link update.&lt;/li&gt;
&lt;li&gt;testdata/: Generated samples and tests should have version bumps&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Commit these changes and push these changes &lt;strong&gt;to your fork&lt;/strong&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git add Makefile changelog website testdata
git commit -sm &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Release &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&lt;/span&gt;
git push -u origin release-&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-create-and-merge-pull-request&#34;&gt;3. Create and merge Pull Request&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Create a pull request against the &lt;code&gt;v1.3.x&lt;/code&gt; branch.&lt;/li&gt;
&lt;li&gt;Once approving review is given, merge. You may have to unlock the branch by setting
&amp;ldquo;required approving reviewers&amp;rdquo; to back to &lt;code&gt;1&lt;/code&gt;. (See step 0).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4-create-a-release-tag&#34;&gt;4. Create a release tag&lt;/h3&gt;
&lt;p&gt;Pull down &lt;code&gt;v1.3.x&lt;/code&gt; and tag it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git checkout v1.3.x
git pull upstream v1.3.x
make tag
git push upstream refs/tags/&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;5-fast-forward-the-latest-branch&#34;&gt;5. Fast-forward the &lt;code&gt;latest&lt;/code&gt; branch&lt;/h3&gt;
&lt;p&gt;If the patch release is on the latest y-stream (in the example you would
not ff latest if there was a y-stream for v1.4.x), you will need to
fast-forward the &lt;code&gt;latest&lt;/code&gt; git branch.&lt;/p&gt;
&lt;p&gt;(The &lt;code&gt;latest&lt;/code&gt; branch points to the latest release tag to keep the main website subdomain up-to-date.)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git checkout latest
git reset --hard tags/&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;
git push -f upstream latest
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;6-post-release-steps&#34;&gt;6. Post release steps&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Make an &lt;a href=&#34;https://groups.google.com/g/operator-framework&#34;&gt;operator-framework Google Group&lt;/a&gt; post.&lt;/li&gt;
&lt;li&gt;Post to Kubernetes slack in #kubernetes-operators and #operator-sdk-dev.&lt;/li&gt;
&lt;li&gt;In the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/milestones&#34;&gt;GitHub milestone&lt;/a&gt;, bump any open issues to the following release.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;
In case there are non-transient errors while building the release job, you must:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Revert the release PR. To do so, create a PR which reverts the patch release PR created in step &lt;a href=&#34;#3-create-and-merge-pull-request&#34;&gt;3&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fix what broke in the release branch.&lt;/li&gt;
&lt;li&gt;Re-run the release with an incremented minor version to avoid Go module errors (ex. if v1.3.1 broke, then re-run the release as v1.3.2). Patch versions are cheap so this is not a big deal.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;scorecard-test-kuttl-image-releases&#34;&gt;&lt;code&gt;scorecard-test-kuttl&lt;/code&gt; image releases&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;quay.io/operator-framework/scorecard-test-kuttl&lt;/code&gt; image is released separately from other images because it
contains the &lt;a href=&#34;https://hub.docker.com/r/kudobuilder/kuttl/tags&#34;&gt;&lt;code&gt;kudobuilder/kuttl&lt;/code&gt;&lt;/a&gt; image, which is subject to breaking changes.&lt;/p&gt;
&lt;p&gt;Release tags of this image are of the form: &lt;code&gt;scorecard-kuttl/vX.Y.Z&lt;/code&gt;, where &lt;code&gt;X.Y.Z&lt;/code&gt; is &lt;em&gt;not&lt;/em&gt; the current operator-sdk version.
For the latest version, query the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/tags&#34;&gt;operator-sdk repo tags&lt;/a&gt; for &lt;code&gt;scorecard-kuttl/v&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The only step required is to create and push a tag.
This example uses version &lt;code&gt;v2.0.0&lt;/code&gt;, the first independent release version of this image:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;color:#204a87&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;RELEASE_VERSION&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;scorecard-kuttl/v2.0.0
make tag
git push upstream refs/tags/&lt;span style=&#34;color:#000&#34;&gt;$RELEASE_VERSION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/actions/workflows/deploy.yml&#34;&gt;&lt;code&gt;deploy/image-scorecard-test-kuttl&lt;/code&gt;&lt;/a&gt;
Action workflow will build and push this image.&lt;/p&gt;
&lt;h2 id=&#34;helpful-tips-and-information&#34;&gt;Helpful Tips and Information&lt;/h2&gt;
&lt;h3 id=&#34;binaries-and-signatures&#34;&gt;Binaries and Signatures&lt;/h3&gt;
&lt;p&gt;Binaries will be signed using our CI system&amp;rsquo;s GPG key. Both binary and signature will be uploaded to the release.&lt;/p&gt;
&lt;h3 id=&#34;release-branches&#34;&gt;Release Branches&lt;/h3&gt;
&lt;p&gt;Each minor release has a corresponding release branch of the form &lt;code&gt;vX.Y.x&lt;/code&gt;, where &lt;code&gt;X&lt;/code&gt; and &lt;code&gt;Y&lt;/code&gt; are the major and minor
release version numbers and the &lt;code&gt;x&lt;/code&gt; is literal. This branch accepts bug fixes according to our &lt;a href=&#34;/docs/upgrading-sdk-version/backport-policy&#34;&gt;backport policy&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;cherry-picking&#34;&gt;Cherry-picking&lt;/h3&gt;
&lt;p&gt;Once a minor release is complete, bug fixes can be merged into the release branch for the next patch release.
Fixes can be added automatically by posting a &lt;code&gt;/cherry-pick v1.3.x&lt;/code&gt; comment in the &lt;code&gt;master&lt;/code&gt; PR, or manually by running:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git checkout v1.3.x
git checkout -b cherrypick/some-bug
git cherry-pick &amp;lt;commit&amp;gt;
git push upstream cherrypick/some-bug
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Create and merge a PR from your branch to &lt;code&gt;v1.3.x&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;github-release-information&#34;&gt;GitHub Release Information&lt;/h3&gt;
&lt;p&gt;GitHub releases live under the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/releases&#34;&gt;&lt;code&gt;Releases&lt;/code&gt; tab&lt;/a&gt; in the operator-sdk repo.&lt;/p&gt;
&lt;h3 id=&#34;updating-olm-bindata&#34;&gt;Updating OLM Bindata&lt;/h3&gt;
&lt;p&gt;Prior to an Operator SDK release, add bindata (if required) for a new OLM version by following these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add the new version to the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/6002c70fe770cdaba9ba99da72685e0e7b6b69e8/Makefile#L45&#34;&gt;&lt;code&gt;OLM_VERSIONS&lt;/code&gt;&lt;/a&gt; variable in the Makefile.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove the &lt;em&gt;lowest&lt;/em&gt; version from that variable, as &lt;code&gt;operator-sdk&lt;/code&gt; only supports 3 versions at a time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;make bindata&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check that all files were correctly updated by running this script from the root directory of the repository:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;./hack/check-olm.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the check shows that files were missed by the make target, manually edit them to add the new version and remove the obsolete version.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check that the list of supported OLM versions stated in the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/master/website/content/en/docs/overview/_index.md#olm-version-compatibility&#34;&gt;&lt;code&gt;Overview&lt;/code&gt;&lt;/a&gt; section of SDK documentation is updated.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the changed files to ensure that they will be committed as part of the release commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git add -u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;patch-releases-in-parallel&#34;&gt;Patch Releases in Parallel&lt;/h3&gt;
&lt;p&gt;The following should be considered when doing parallel patch releases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Releasing in order is nice but not worth the inconvenience. Release order affects the order on GitHub releases, and which
is labeled &amp;ldquo;latest release&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Do not unlock v.* branches while other releases are in progress. Instead, have an admin do the merges.&lt;/li&gt;
&lt;li&gt;Release announcements should be consolidated.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Reporting Issues</title>
      <link>/docs/contribution-guidelines/reporting-issues/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/contribution-guidelines/reporting-issues/</guid>
      <description>
        
        
        &lt;p&gt;If any part of the operator-sdk project has bugs or documentation mistakes, please let us know by &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/issues/new&#34;&gt;opening an issue&lt;/a&gt;. We treat bugs and mistakes very seriously and believe no issue is too small. Before creating a bug report, please check that an issue reporting the same problem does not already exist.&lt;/p&gt;
&lt;p&gt;To make the bug report accurate and easy to understand, please try to create bug reports that are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Specific. Include as much details as possible: which version, what environment, what configuration, etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reproducible. Include the steps to reproduce the problem. We understand some issues might be hard to reproduce, please include the steps that might lead to the problem.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Isolated. Please try to isolate and reproduce the bug with minimum dependencies. It would significantly slow down the speed to fix a bug if too many dependencies are involved in a bug report. Debugging external systems that rely on operator-sdk is out of scope, but we are happy to provide guidance in the right direction or help with using operator-sdk itself.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unique. Do not duplicate existing bug report.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Scoped. One bug per report. Do not follow up with another bug inside one report.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It may be worthwhile to read &lt;a href=&#34;https://fantasai.inkedblade.net/style/talks/filing-good-bugs/&#34;&gt;Elika Etemad’s article on filing good bug reports&lt;/a&gt; before creating a bug report.&lt;/p&gt;
&lt;p&gt;We might ask for further information to locate a bug. A duplicated bug report will be closed.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Testing</title>
      <link>/docs/contribution-guidelines/testing/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/contribution-guidelines/testing/</guid>
      <description>
        
        
        &lt;p&gt;On all PRs, a suite of static and cluster tests is run against your changes in a CI environment.
These tests can also be run locally, which is discussed &lt;a href=&#34;#local-test-environment&#34;&gt;below&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Static tests consist of &lt;a href=&#34;https://onsi.github.io/gomega/&#34;&gt;unit&lt;/a&gt;, formatting, and doc link tests.&lt;/p&gt;
&lt;p&gt;Cluster tests consist of several test types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;End-to-end (e2e): simulate the &amp;ldquo;happy path&amp;rdquo; usage of the &lt;code&gt;operator-sdk&lt;/code&gt; binary and resulting operator project.&lt;/li&gt;
&lt;li&gt;Integration: test components of the &lt;code&gt;operator-sdk&lt;/code&gt; binary and features of scaffolded projects that are
bound to external projects, such as &lt;a href=&#34;https://olm.operatorframework.io/&#34;&gt;OLM&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Subcommand: ensure individual subcommands function as intended with a variety of input options.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;before-submitting-a-pr&#34;&gt;Before submitting a PR&lt;/h2&gt;
&lt;p&gt;Always run tests before submitting a PR to reduce the number of needless CI errors.&lt;/p&gt;
&lt;h5 id=&#34;docs-only&#34;&gt;Docs only&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;make test-static
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;code&#34;&gt;Code&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;make test-all
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;local-test-environment&#34;&gt;Local Test Environment&lt;/h2&gt;
&lt;p&gt;If running tests locally, access to a Kubernetes cluster of a &lt;a href=&#34;/docs/overview#kubernetes-version-compatibility&#34;&gt;compatible version&lt;/a&gt; is required.
These tests require &lt;code&gt;KUBECONFIG&lt;/code&gt; be set or kubeconfig file be present in a default location like &lt;code&gt;$HOME/.kube/config&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You will also need to set up an &lt;code&gt;envtest&lt;/code&gt; environment for cluster tests. Follow &lt;a href=&#34;https://book.kubebuilder.io/reference/envtest.html&#34;&gt;this doc&lt;/a&gt;
for setup instructions.&lt;/p&gt;
&lt;h3 id=&#34;local-clusters&#34;&gt;Local clusters&lt;/h3&gt;
&lt;p&gt;A local &lt;a href=&#34;https://kind.sigs.k8s.io/&#34;&gt;kind&lt;/a&gt; cluster is used for running tests.&lt;/p&gt;
&lt;h2 id=&#34;running-tests&#34;&gt;Running Tests&lt;/h2&gt;
&lt;p&gt;All the tests are run through the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/master/Makefile&#34;&gt;&lt;code&gt;Makefile&lt;/code&gt;&lt;/a&gt;. Run &lt;code&gt;make help&lt;/code&gt; for a full list of available tests.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Plugins</title>
      <link>/docs/contribution-guidelines/plugins/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/contribution-guidelines/plugins/</guid>
      <description>
        
        
        &lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;SDK uses the project &lt;a href=&#34;https://github.com/kubernetes-sigs/kubebuilder&#34;&gt;Kubebuilder&lt;/a&gt; as a library for the CLI and plugins features. For further information see the &lt;a href=&#34;https://master.book.kubebuilder.io/plugins/plugins.html&#34;&gt;Plugins&lt;/a&gt; document. To better understand its motivations, check the design documentation &lt;a href=&#34;https://github.com/kubernetes-sigs/kubebuilder/blob/master/designs/integrating-kubebuilder-and-osdk.md&#34;&gt;Integrating Kubebuilder and Operator SDK&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;sdk-language-based-plugins&#34;&gt;SDK Language-based plugins&lt;/h2&gt;
&lt;p&gt;All language-based operator projects provided by SDK (Ansible/Helm/Golang) follow the Kubebuilder standard and have a common base. The common base is generated using &lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize&#34;&gt;kustomize&lt;/a&gt; which is a project maintained and adopted by Kubernetes community to help work with the Kubernertes manifests (YAML files) that are used to configure the resources on the clusters.&lt;/p&gt;
&lt;p&gt;The specific files for each language are scaffolded for the language&amp;rsquo;s plugins. The Operator SDK CLI tool can provide custom plugins and helpers which are common and useful for all language types. To check the common base, you can also run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;operator-sdk init --plugins&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;kustomize
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Also, see the topic &lt;a href=&#34;https://book.kubebuilder.io/plugins/extending/external-plugins&#34;&gt;External Plugins&lt;/a&gt; to understand how it works.&lt;/p&gt;
&lt;h3 id=&#34;common-scaffolds&#34;&gt;Common scaffolds&lt;/h3&gt;
&lt;p&gt;Following the default common scaffolds for the projects which are built with SDK.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File/Directory&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dockerfile&lt;/td&gt;
&lt;td&gt;Defines the operator(manager) image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Makefile&lt;/td&gt;
&lt;td&gt;Provides the helpers and options for the users. (e.g. &lt;code&gt;make bundle&lt;/code&gt; which generate/update the OLM &lt;a href=&#34;https://github.com/operator-framework/operator-registry/blob/v1.16.1/docs/design/operator-bundle.md#operator-bundle&#34;&gt;bundle&lt;/a&gt; manifests )&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PROJECT&lt;/td&gt;
&lt;td&gt;Project configuration. Stores the data used to do the scaffolds. For further information see &lt;a href=&#34;https://master.book.kubebuilder.io/reference/project-config.html&#34;&gt;Project Config&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bundle.Dockerfile&lt;/td&gt;
&lt;td&gt;Docker image which is used to provide the helpers to integrate the project with OLM. (e.g. &lt;a href=&#34;/docs/cli/operator-sdk_run&#34;&gt;operator-sdk run ./bundle&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;config/&lt;/td&gt;
&lt;td&gt;Directory which has all &lt;a href=&#34;https://github.com/kubernetes-sigs/kustomize&#34;&gt;kustomize&amp;rsquo;s&lt;/a&gt; manifest to configure and test the project&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;You can check the &lt;a href=&#34;/docs/overview/project-layout&#34;&gt;Project Layout&lt;/a&gt; to better understand the files and directories scaffolded by SDK CLI, which may be common for each language-type.&lt;/p&gt;
&lt;h2 id=&#34;custom-plugins&#34;&gt;Custom Plugins&lt;/h2&gt;
&lt;p&gt;By default plugins are used by the Operator SDK to provide the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/operator-framework/operator-sdk/tree/master/internal/plugins/manifests/v2&#34;&gt;manifests.sdk.operatorframework.io&lt;/a&gt;: perform the required scaffolds to provide the helpers to allow the projects to be integrated with OLM.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/operator-framework/operator-sdk/tree/master/internal/plugins/scorecard/v2&#34;&gt;scorecard.sdk.operatorframework.io&lt;/a&gt;: perform the required scaffolds to provide the &lt;a href=&#34;/docs/testing-operators/scorecard/&#34;&gt;Scorecard&lt;/a&gt; feature.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;optionalcustom-plugins&#34;&gt;Optional/custom plugins&lt;/h3&gt;
&lt;p&gt;Users can also use custom plugins when they execute the SDK CLI sub-commands as a helper which includes the following options:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;operator-sdk create api --plugins&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;go/v3,declarative&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above example will scaffold custom code in the controllers after an API is created to allow the users to develop solutions using the &lt;a href=&#34;https://github.com/kubernetes-sigs/kubebuilder-declarative-pattern&#34;&gt;kubebuilder declarative pattern&lt;/a&gt;. (e.g &lt;a href=&#34;https://github.com/kubernetes-sigs/kubebuilder/blob/v3.13.0/testdata/project-v3/controllers/admiral_controller.go&#34;&gt;default scaffold&lt;/a&gt; versus &lt;a href=&#34;https://github.com/kubernetes-sigs/kubebuilder/blob/v3.13.0/testdata/project-v3/controllers/firstmate_controller.go&#34;&gt;example&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Note that custom plugins are called via the init sub-command to work as global plugins, and will be added in the &lt;code&gt;layout&lt;/code&gt; field of the PROJECT file. Any sub-command executed will then also be called.&lt;/p&gt;
&lt;h2 id=&#34;plugins-vision&#34;&gt;Plugins Vision&lt;/h2&gt;
&lt;p&gt;Contributors are able to create their own plugin(s) using the same standards and approach described by this document. Following them facilitates in-tree (in other words, built with the &lt;code&gt;operator-sdk&lt;/code&gt; binary) addition of such community-driven plugins to the Operator SDK project by making review easier and code maintainable. Currently, the SDK cannot discover and use plugins that are not in-tree. However, out-of-tree plugins have been discussed in &lt;a href=&#34;https://github.com/kubernetes-sigs/kubebuilder/issues/1378&#34;&gt;kubebuilder/issues/1378&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-to-create-your-own-plugins&#34;&gt;How to create your own plugins&lt;/h2&gt;
&lt;p&gt;If you are looking to develop similar solutions to allow users for example to create projects using other languages or that could work as helpers for the projects built with SDK/Kubebuilder projects, then see the &lt;a href=&#34;https://book.kubebuilder.io/plugins/extending&#34;&gt;Creating your own plugins&lt;/a&gt; to see how you can benefit and apply this approach.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Documentation</title>
      <link>/docs/contribution-guidelines/documentation/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/contribution-guidelines/documentation/</guid>
      <description>
        
        
        &lt;p&gt;If a contribution changes the user interface or existing APIs it must include new or updated documentation.
Since the operator-sdk repository does not expose many public packages, documentation mostly comes in the form of our website&amp;rsquo;s &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/tree/master/website/content/en/docs&#34;&gt;markdown docs&lt;/a&gt;.
Good &lt;a href=&#34;https://blog.golang.org/godoc&#34;&gt;godocs&lt;/a&gt; are expected nonetheless.&lt;/p&gt;
&lt;p&gt;Likewise a &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/master/changelog/fragments/00-template.yaml&#34;&gt;changelog fragment&lt;/a&gt; should be added containing a summary of the change and optionally a migration guide.&lt;/p&gt;
&lt;h2 id=&#34;testing-docs-changes&#34;&gt;Testing docs changes&lt;/h2&gt;
&lt;p&gt;This document discusses how to visually inspect documentation changes as they would be applied
to the live website. All changes to documentation should be inspected locally before being pushed
to a PR.&lt;/p&gt;
&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;
&lt;p&gt;The docs are built with &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; which can be installed along with the
required extensions by following the &lt;a href=&#34;https://www.docsy.dev/docs/get-started/other-options/#prerequisites-and-installation&#34;&gt;docsy install guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note: Be sure to install hugo-extended.&lt;/p&gt;
&lt;p&gt;We use &lt;code&gt;git submodules&lt;/code&gt; to install the docsy theme. From the
&lt;code&gt;operator-sdk&lt;/code&gt; directory, update the submodules to install the theme.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;git submodule update --init --recursive
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;build-and-serve&#34;&gt;Build and Serve&lt;/h3&gt;
&lt;p&gt;You can build and serve your docs to &lt;code&gt;localhost:1313&lt;/code&gt;. From the &lt;code&gt;website/&lt;/code&gt;
directory run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;hugo server
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Any changes will be included in real time.&lt;/p&gt;
&lt;h3 id=&#34;check-docs&#34;&gt;Check Docs&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;make test-docs&lt;/code&gt; will validate changelog fragments, build doc HTML in a container, and check its links.
Please consider running this locally before creating a PR to save CI resources.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Changelog</title>
      <link>/docs/contribution-guidelines/changelog/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/contribution-guidelines/changelog/</guid>
      <description>
        
        
        &lt;p&gt;The Operator SDK project tracks changes across releases by maintaining a live changelog. This changelog is compiled via fragments located in &lt;code&gt;changelog/fragments&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Contributors are asked to add these changelog fragments when creating pull requests by following this &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/blob/master/changelog/fragments/00-template.yaml&#34;&gt;template&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The changlog fragments document the following information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Description of Changes&lt;/li&gt;
&lt;li&gt;Types of Changes
&lt;ul&gt;
&lt;li&gt;One of: addition, change, deprecation, removal, bugfix&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Migration Guide for Changes
&lt;ul&gt;
&lt;li&gt;These are required for breaking changes, and essential (but not required) for scaffolding-related changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Issue Lifecycle</title>
      <link>/docs/contribution-guidelines/issue-lifecycle/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/contribution-guidelines/issue-lifecycle/</guid>
      <description>
        
        
        &lt;p&gt;The Operator SDK project tracks bugs, feature requests, and questions
with &lt;a href=&#34;https://github.com/operator-framework/operator-sdk/issues&#34;&gt;GitHub issues&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;triage&#34;&gt;Triage&lt;/h2&gt;
&lt;p&gt;Each week, there is a &lt;a href=&#34;https://github.com/operator-framework/community#operator-sdk-issue-triage&#34;&gt;triage meeting&lt;/a&gt; to review new
issues. Each issue that has been filed since the previous meeting is
discussed, GitHub labels are applied, and the issue is added to a
&lt;a href=&#34;https://github.com/operator-framework/operator-sdk/milestones&#34;&gt;Milestone&lt;/a&gt;. Additionally, anyone can request that a
previously triaged issue can be retriaged.&lt;/p&gt;
&lt;h2 id=&#34;grooming&#34;&gt;Grooming&lt;/h2&gt;
&lt;p&gt;Following a release, there is a &lt;a href=&#34;https://github.com/operator-framework/community#operator-sdk-grooming-meeting&#34;&gt;grooming meeting&lt;/a&gt; to
review issues that are desired in the next release. Issues are discussed
in the following order:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Issues in the next release milestone&lt;/li&gt;
&lt;li&gt;Issues labeled as &lt;code&gt;priority/important-soon&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Issues in other milestones/backlog if specifically requested&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: Opening Pull Requests</title>
      <link>/docs/contribution-guidelines/opening-pull-requests/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/contribution-guidelines/opening-pull-requests/</guid>
      <description>
        
        
        &lt;p&gt;Changes to Operator SDK are submitted via &lt;a href=&#34;https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests&#34;&gt;Github Pull Request (PR)&lt;/a&gt;
to the relevant repository. Most PRs will be to the &lt;a href=&#34;https://github.com/operator-framework/operator-sdk&#34;&gt;main Operator SDK repo&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;pr-checklist&#34;&gt;PR Checklist&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Add &lt;a href=&#34;https://sdk.operatorframework.io/docs/contribution-guidelines/testing/&#34;&gt;tests&lt;/a&gt; for your change, and ensure they run and pass in CI.&lt;/li&gt;
&lt;li&gt;Add a &lt;a href=&#34;https://sdk.operatorframework.io/docs/contribution-guidelines/changelog/#m-docscontribution-guidelineschangelog&#34;&gt;changelog entry&lt;/a&gt; if necessary.&lt;/li&gt;
&lt;li&gt;Add relevant &lt;a href=&#34;https://sdk.operatorframework.io/docs/contribution-guidelines/documentation/&#34;&gt;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Rebase your commits on master and squash them into a single commit.&lt;/li&gt;
&lt;li&gt;Write a concise commit message that references the issue number.&lt;/li&gt;
&lt;li&gt;Push your commit to your fork and &lt;a href=&#34;https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork&#34;&gt;open a pull request&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;review&#34;&gt;Review&lt;/h2&gt;
&lt;p&gt;Before a pull request can be merged, tests must pass in CI and it must be reviewed. A PR
must be approved by 2 reviewers, one of which must be at least at least a reviewer and one
of which must be at least an approver, per the &lt;a href=&#34;https://github.com/operator-framework/community/blob/master/contributor-ladder.md&#34;&gt;Operator Framework community guidelines&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please feel free to message the developers to get eyes on your PR, whether through @&amp;lsquo;ing on the PR itself,
the #operator-sdk-dev channel on Kubernetes slack, or by attending the Operator SDK &lt;a href=&#34;https://github.com/operator-framework/community#operator-sdk-issue-triage&#34;&gt;triage meeting&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: FAQ</title>
      <link>/docs/contribution-guidelines/faq/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/contribution-guidelines/faq/</guid>
      <description>
        
        
        &lt;h4 id=&#34;q-if-i-find-a-problem-should-i-file-a-pull-request-or-an-issue&#34;&gt;Q: If I find a problem, should I file a Pull Request or an Issue?&lt;/h4&gt;
&lt;p&gt;A: We suggest that you start by filing an issue to potentially save
contributors the implementation time if the change cannot be accepted
for some reason. However, if it is easier to just submit a PR that is
always fine. If you do choose to start with a Pull Request, please make
sure that the motivation is included.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
