<!-- 
RSS generated by JIRA (1001.0.0-SNAPSHOT#100246-sha1:7a5c50119eb0633d306e14180817ddef5e80c75d) at Thu Feb 08 23:23:59 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>FOLIO Jira</title>
    <link>https://folio-org.atlassian.net</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>1001.0.0-SNAPSHOT</version>
        <build-number>100246</build-number>
        <build-date>07-02-2024</build-date>
    </build-info>

<item>
            <title>[FOLIO-2885] SPIKE: consider improvements to the release process</title>
                <link>https://folio-org.atlassian.net/browse/FOLIO-2885</link>
                <project id="10290" key="FOLIO">FOLIO</project>
                    <description>&lt;p&gt;Consider what can be done to improve the process of making individual module releases. &lt;/p&gt;

&lt;p&gt;This is especially problematic for bugfix releases where POs would like see individual bugfixes released and deployed (e.g to the bugfest env) as soon as they are ready, while development teams (and devops) prefer that multiple bugfixes are bundled into a single release to minimize the preparation (and deployment) overhead.&lt;/p&gt;

&lt;p&gt;During the DevOps Team standup we have discussed the following improvement ideas:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;simplify the release process (tagging, building, publishing artefacts) to the point where it becomes as simple as running a single job in Jenkins, with all tasks automated. Note: we discussed that certain tasks like preparing release notes cannot/should not be automated so the overhead cannot be removed completely&lt;/li&gt;
	&lt;li&gt;create a new branch of platform-complete that uses artefacts automatically built from release branches (branches created when the FOLIO release process starts) whenever there is a commit to the branch. Switch the bugfest to automatically deploy new modules when there is a new &quot;release branch&quot; artefact created. This would allow individual teams avoid making any bugfix releases until the bugfix process is considered complete while at the same time allow POs to test each individual fix on bugfest as as soon as it completed and merged to the release branch.&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="81951">FOLIO-2885</key>
            <summary>SPIKE: consider improvements to the release process</summary>
                <type id="10003" iconUrl="https://folio-org.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium">Task</type>
                                            <priority id="10002" iconUrl="https://dev.folio.org/assets/jira-priority/jira-p3.svg">P3</priority>
                        <status id="6" iconUrl="https://folio-org.atlassian.net/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10003">Done</resolution>
                                                        <assignee accountid="5f9abc1eb45b2e007453f423">John Malconian</assignee>
                                                                <reporter accountid="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d">Jakub Skoczen</reporter>
                                    <labels>
                            <label>devops-backlog</label>
                    </labels>
                <created>Thu, 19 Nov 2020 13:28:39 +0000</created>
                <updated>Tue, 16 Mar 2021 13:18:53 +0000</updated>
                            <resolved>Tue, 16 Mar 2021 13:18:53 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>13</watches>
                                                                <comments>
                                                            <comment id="197712" author="615afd1cd9820f0070a09ef0" created="Wed, 9 Dec 2020 19:48:45 +0000"  >&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;At minimum, publishing a release from a developer&apos;s workstation requires three sets of credentials (GitHub, Jira, Jenkins), if not more (Slack to post to #releases, GitHub API to create release notes).&lt;/li&gt;
	&lt;li&gt;Most developers do not have permission to create new versions in Jira. Hence, in order to correctly set the fix-version for a ticket, they must ask their tech lead to create the necessary version.&lt;/li&gt;
	&lt;li&gt;Tags take some time to propagate from GitHub to Jenkins, so while there is an HTTP API for triggering builds in Jenkins, it has to be engaged thoughtfully. A script that pushes a tag to GitHub and immediately calls the Jenkins API to build from that tag will inevitably fail.&lt;/li&gt;
	&lt;li&gt;The Jira API has no callbacks/webhooks registry, so the last four steps are impossible to automate, at least from a developer&apos;s workstation, without polling.&lt;/li&gt;
	&lt;li&gt;Finding the tickets that need their fix-version set can be tricky. If developers are good about starting commit messages like &lt;tt&gt;FOO-1234 frob the foo&lt;/tt&gt;, this can make it possible to use git to find the tickets that need to be labeled. Note, however, that the release ticket is not associated with git at all and therefore cannot be found in this way, so it needs to be tracked and updated separately.&lt;/li&gt;
	&lt;li&gt;Outside of &quot;push the tag to GitHub, build from the tag in Jenkins&quot;, there is a metric shittonne of Jira work that goes into a release and it would be oh so lovely to automate some of that away:
	&lt;ul&gt;
		&lt;li&gt;in Jira, create a patch version&lt;/li&gt;
		&lt;li&gt;in Jira, create a release ticket&lt;/li&gt;
		&lt;li&gt;in Jira, set the release-ticket&apos;s &quot;Epic Link&quot; field&lt;/li&gt;
		&lt;li&gt;in Jira, assign the version to relevant tickets, i.e. both the code tickets and the release ticket&lt;/li&gt;
		&lt;li&gt;in Jira, IFF the Jenkins build completes successfully, release the version&lt;/li&gt;
		&lt;li&gt;in Jira, IFF the Jenkins build completes successfully, close the release ticket (or set its status to &quot;Awaiting deployment&quot;)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Questions: &lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Could some of this machinery be invoked by &lt;a href=&quot;https://devcenter.heroku.com/articles/git&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;pushing to a different git remote&lt;/a&gt; or to a particular branch? At present, we maintain release branches such as &lt;tt&gt;b3.4&lt;/tt&gt; and &lt;tt&gt;b3.5&lt;/tt&gt;, etc. What if in addition we maintained a &lt;tt&gt;releases&lt;/tt&gt; branch so that any commit to this branch triggered a release process?&lt;/li&gt;
	&lt;li&gt;Could we make use of the &lt;a href=&quot;https://docs.npmjs.com/cli/v6/commands/npm-version&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;built-in &lt;tt&gt;npm version&lt;/tt&gt; command&lt;/a&gt;, which can handle &lt;tt&gt;package.json&lt;/tt&gt; updates, git commits and tags? This might necessitate using true patch versions in CI, e.g. &lt;tt&gt;3.4.0-alpha.1&lt;/tt&gt; in place of the current &lt;tt&gt;3.4.0000529&lt;/tt&gt;, which has a lot of ripple effects, but would probably be a Good Thing in the end.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                                                            <comment id="197717" author="5ee89462f7aa140abd82d11d" created="Thu, 10 Dec 2020 10:40:20 +0000"  >&lt;p&gt;I suggest to use semantic versioning instead of release branches like b5.6-honeysuckle and b5.6-iris.&lt;br/&gt;
If a module mod-foo doesn&apos;t have new features it uses the b5.6 branch for the version 5.6.7 that is used in honeysuckle and iris.&lt;br/&gt;
The two release branches b5.6-honeysuckle and b5.6-iris need to be manually maintained to always contain the same content. This is work and it is error-prone; this should be avoided.&lt;br/&gt;
Semantic versioning can be used instead:&lt;br/&gt;
If the bugfest environment runs mod-foo-5.6.7 or mod-foo-5.6.7-SNAPSHOT and a new mod-foo-5.6.7-SNAPSHOT or mod-foo-5.6.8-SNAPSHOT artifact is created then deploy it into the bugfest environment.&lt;br/&gt;
The rules:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;major and minor version matches&lt;/li&gt;
	&lt;li&gt;bugfix version is greater than or equal to bugfix version on bugfest&lt;/li&gt;
	&lt;li&gt;it is a -SNAPSHOT version.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;These artifacts are not automatically deployed to bugfest where the current version is mod-foo-5.6.7 or mod-foo-5.6.7-SNAPSHOT:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;mod-foo-6.0.0-SNAPSHOT (major version mismatch)&lt;/li&gt;
	&lt;li&gt;mod-foo-5.7.0-SNAPSHOT (minor version mismatch)&lt;/li&gt;
	&lt;li&gt;mod-foo-5.6.6-SNAPSHOT (bugfix version is smaller, we don&apos;t want automatic downgrade)&lt;/li&gt;
	&lt;li&gt;mod-foo-5.6.7 (we don&apos;t want to downgrade from mod-foo-5.6.7-SNAPSHOT)&lt;/li&gt;
&lt;/ul&gt;
</comment>
                                                            <comment id="197720" author="5ee89462f7aa140abd82d11d" created="Thu, 10 Dec 2020 10:56:48 +0000"  >&lt;blockquote&gt;&lt;p&gt;Tags take some time to propagate from GitHub to Jenkins&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;We should consider using GitHub Actions to build, test and publish artifacts. GitHub Actions are generally available since March 2020. GitHub Action Minutes are free for public repositories.&lt;/p&gt;

&lt;p&gt;Merging a pull request or publishing a release can trigger an action:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/migrating-from-jenkins-to-github-actions&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/migrating-from-jenkins-to-github-actions&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-nodejs&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-nodejs&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-java-with-maven&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-java-with-maven&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://docs.github.com/en/free-pro-team@latest/actions/guides/publishing-nodejs-packages#publishing-packages-using-yarn&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.github.com/en/free-pro-team@latest/actions/guides/publishing-nodejs-packages#publishing-packages-using-yarn&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://docs.github.com/en/free-pro-team@latest/actions/guides/publishing-java-packages-with-maven&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.github.com/en/free-pro-team@latest/actions/guides/publishing-java-packages-with-maven&lt;/a&gt;&lt;br/&gt;
&lt;a href=&quot;https://docs.github.com/en/free-pro-team@latest/actions/guides/publishing-docker-images&quot; class=&quot;external-link&quot; rel=&quot;nofollow noreferrer&quot;&gt;https://docs.github.com/en/free-pro-team@latest/actions/guides/publishing-docker-images&lt;/a&gt;&lt;/p&gt;</comment>
                                                            <comment id="197723" author="5f9abc1eb45b2e007453f423" created="Thu, 10 Dec 2020 17:57:27 +0000"  >&lt;p&gt;Lots of good ideas and suggestions here.   I think there is potential for better Jira/CI/CD integration.  I am also interested in taking a look at Github Actions to eventually replace or at least offload Jenkins.  &lt;/p&gt;</comment>
                                                            <comment id="197725" author="63e2a2771b13d42998e4e706" created="Fri, 11 Dec 2020 16:49:36 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5ee89462f7aa140abd82d11d&quot; class=&quot;user-hover&quot; rel=&quot;5ee89462f7aa140abd82d11d&quot; data-account-id=&quot;5ee89462f7aa140abd82d11d&quot; accountid=&quot;5ee89462f7aa140abd82d11d&quot; rel=&quot;noreferrer&quot;&gt;Julian Ladisch&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I suggest to use semantic versioning instead of release branches like b5.6-honeysuckle and b5.6-iris.&lt;br/&gt;
If a module mod-foo doesn&apos;t have new features it uses the b5.6 branch for the version 5.6.7 that is used in honeysuckle and iris.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I did not know that teams did this, it doesn&apos;t seem to fit with the current release guidance.&lt;/p&gt;

&lt;p&gt;That said, I wouldn&apos;t expect (with RAML Module Builder and stripes upgrades each release) that many modules would retain the same version across official distributions.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The two release branches b5.6-honeysuckle and b5.6-iris need to be manually maintained to always contain the same content. This is work and it is error-prone; this should be avoided.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;This seems like a particularly awkward anti-pattern. There should not be more than one definition of a module version.&lt;/p&gt;</comment>
                                                            <comment id="197729" author="557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d" created="Thu, 14 Jan 2021 13:33:16 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5ee89462f7aa140abd82d11d&quot; class=&quot;user-hover&quot; rel=&quot;5ee89462f7aa140abd82d11d&quot; data-account-id=&quot;5ee89462f7aa140abd82d11d&quot; accountid=&quot;5ee89462f7aa140abd82d11d&quot; rel=&quot;noreferrer&quot;&gt;Julian Ladisch&lt;/a&gt; &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=63e2a2771b13d42998e4e706&quot; class=&quot;user-hover&quot; rel=&quot;63e2a2771b13d42998e4e706&quot; data-account-id=&quot;63e2a2771b13d42998e4e706&quot; accountid=&quot;63e2a2771b13d42998e4e706&quot; rel=&quot;noreferrer&quot;&gt;Marc Johnson&lt;/a&gt; Using branches like b5.8-iris is NOT aligned with our release guidelines. Who is doing that?&lt;/p&gt;</comment>
                                                            <comment id="197731" author="5ee89462f7aa140abd82d11d" created="Thu, 14 Jan 2021 13:41:27 +0000"  >&lt;p&gt;This has been proposed in the first post, see above:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;What if in addition we maintained a &lt;tt&gt;releases&lt;/tt&gt; branch so that any commit to this branch triggered a release process?&lt;/p&gt;&lt;/blockquote&gt;</comment>
                                                            <comment id="197734" author="63e2a2771b13d42998e4e706" created="Thu, 14 Jan 2021 14:29:06 +0000"  >&lt;p&gt;&lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=5ee89462f7aa140abd82d11d&quot; class=&quot;user-hover&quot; rel=&quot;5ee89462f7aa140abd82d11d&quot; data-account-id=&quot;5ee89462f7aa140abd82d11d&quot; accountid=&quot;5ee89462f7aa140abd82d11d&quot; rel=&quot;noreferrer&quot;&gt;Julian Ladisch&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;This has been proposed in the first post, see above&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Who / what is this comment a response to? Is it to &lt;a href=&quot;https://folio-org.atlassian.net/secure/ViewProfile.jspa?accountId=557058%3Ab8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; class=&quot;user-hover&quot; rel=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; data-account-id=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; accountid=&quot;557058:b8e64633-1f7c-402d-9caf-9959a5ba5d0d&quot; rel=&quot;noreferrer&quot;&gt;Jakub Skoczen&lt;/a&gt; question about who is using a branch like &lt;tt&gt;b5.8-iris&lt;/tt&gt;?&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="79707">FOLIO-3023</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="79904">FOLIO-3024</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="38399">DEBT-8</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10057" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Development Team</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10155"><![CDATA[FOLIO DevOps]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|hzx3og:wi</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10020" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="1991">DevOps Sprint 109</customfieldvalue>
    <customfieldvalue id="1880">DevOps Sprint 107</customfieldvalue>
    <customfieldvalue id="1881">DevOps Sprint 108</customfieldvalue>
    <customfieldvalue id="1980">DevOps Sprint 106</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10024" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>[CHART] Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Wed, 9 Dec 2020 19:48:45 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10025" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>[CHART] Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                    </customfields>
    </item>
</channel>
</rss>