<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Sun Feb 11 23:47:40 CET 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 append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>Magnolia - Issue tracker</title>
    <link>https://jira.magnolia-cms.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-uk</language>    <build-info>
        <version>9.4.2</version>
        <build-number>940002</build-number>
        <build-date>19-01-2023</build-date>
    </build-info>


<item>
            <title>[BUILD-1049] Allow triggering of git repository mirroring via webhooks </title>
                <link>https://jira.magnolia-cms.com/browse/BUILD-1049</link>
                <project id="10330" key="BUILD">Build</project>
                    <description>&lt;p&gt;A follow-up ticket to &lt;a href=&quot;https://jira.magnolia-cms.com/browse/BUILD-1037&quot; title=&quot;Turn update_git_mirrors into a magnolia-mgmt task&quot; class=&quot;issue-link&quot; data-issue-key=&quot;BUILD-1037&quot;&gt;&lt;del&gt;BUILD-1037&lt;/del&gt;&lt;/a&gt;.&#160;&lt;/p&gt;

&lt;p&gt;The initial implementation of the git repo mirroring task uses a simple cron job to trigger the relevant command in the magnolia-mgmt app.&#160;&lt;/p&gt;

&lt;p&gt;However, it would be preferable to trigger the command via webhooks. For instance, Bitbucket offers the ability to trigger a web hook upon certain events (e.g. a push to a given repo).&lt;/p&gt;

&lt;p&gt;Some technical issues that need addressing:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;how to pass the necessary parameters (source repo URL and target repo URL) to the lambda function on the receiving end?&lt;br/&gt;
Currently we parse the request body in order to retrieve such parameters.&lt;/li&gt;
	&lt;li&gt;Does Bitbucket allow something similar?&lt;/li&gt;
	&lt;li&gt;Could the payload sent by Bitbucket when triggering the webhook be used to that end?&lt;/li&gt;
	&lt;li&gt;Do we need a new, ad-hoc endpoint instead?&lt;/li&gt;
	&lt;li&gt;Is Bitbucket capable of sending the API Auth token as header parameter as required by the current endpoint?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Ideally the solution should comply with &lt;a href=&quot;https://jira.magnolia-cms.com/browse/BUILD-1048&quot; title=&quot;Standarize request parsing for magnolia-mgmt&amp;#39;s trigger API endpoint&quot; class=&quot;issue-link&quot; data-issue-key=&quot;BUILD-1048&quot;&gt;BUILD-1048&lt;/a&gt; so we can reuse the same endpoint. But, if Bitbucket is not able to send the request as required by the convention stated in &lt;a href=&quot;https://jira.magnolia-cms.com/browse/BUILD-1048&quot; title=&quot;Standarize request parsing for magnolia-mgmt&amp;#39;s trigger API endpoint&quot; class=&quot;issue-link&quot; data-issue-key=&quot;BUILD-1048&quot;&gt;BUILD-1048&lt;/a&gt;, me might need to define a new enpoint for this specific case (or change the convention to address the different cases, if possible).&lt;/p&gt;

&lt;h3&gt;&lt;a name=&quot;Discovery&quot;&gt;&lt;/a&gt;Discovery&lt;/h3&gt;

&lt;p&gt;According to &lt;a href=&quot;https://confluence.atlassian.com/bitbucketserver/manage-webhooks-938025878.html&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Bitbucket server webhook documentation&lt;/a&gt;, the relevant points for this task are:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;It&apos;s not possible to modify the payload (request body)&lt;/li&gt;
	&lt;li&gt;It&apos;s possible to add some parameters to the webhook request URL (project.key, repo.slug, etc.)&lt;/li&gt;
	&lt;li&gt;It&apos;s possible to define webhooks at project level, inherited by the project repositories.&lt;/li&gt;
	&lt;li&gt;There are limitations for request authentication.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Therefore, looks like a new magnolia-mgmt API endpoint is needed to receive webhook requests (mainly because authentication restrictions). &lt;/p&gt;

&lt;p&gt;The&apos;re already two enpoints. &lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;v1/trigger - Used by renovate and authenticated using x-amazon-apigateway-api header param&lt;/li&gt;
	&lt;li&gt;v2/trigger - Used by the magnolia-mgmt-ui using custom lambda authorizer to allow OPTIONS request and with CORS enabled&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;We might as well implement a third one accepting webhook authenticated requests, but reusing the same &lt;a href=&quot;https://git.magnolia-cms.com/projects/INTERNAL/repos/magnolia-mgmt/browse/deployment/modules/magnolia-mgmt-app/lambda/magnolia-mgmt-controller/src/magnolia-mgmt-controller.js&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;magnolia-mgmt-controller.js&lt;/a&gt; parsing the request in an standard way as required by &lt;a href=&quot;https://jira.magnolia-cms.com/browse/BUILD-1048&quot; title=&quot;Standarize request parsing for magnolia-mgmt&amp;#39;s trigger API endpoint&quot; class=&quot;issue-link&quot; data-issue-key=&quot;BUILD-1048&quot;&gt;BUILD-1048&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt; Relevant resources:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;https://git.magnolia-cms.com/projects/INTERNAL/repos/magnolia-mgmt/browse/deployment/modules/magnolia-mgmt-app/api/magnolia-mgmt-openapi/openapi.yml&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;Open API definitions&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;magnolia-mgmt-authorizer.js&amp;#93;&lt;/span&gt;(&lt;a href=&quot;https://git.magnolia-cms.com/projects/INTERNAL/repos/magnolia-mgmt/browse/deployment/modules/magnolia-mgmt-app/lambda/magnolia-mgmt-authorizer/src/magnolia-mgmt-authorizer.js&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.magnolia-cms.com/projects/INTERNAL/repos/magnolia-mgmt/browse/deployment/modules/magnolia-mgmt-app/lambda/magnolia-mgmt-authorizer/src/magnolia-mgmt-authorizer.js&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://git.magnolia-cms.com/projects/INTERNAL/repos/magnolia-mgmt/browse/deployment/modules/magnolia-mgmt-app/lambda/magnolia-mgmt-controller/src/magnolia-mgmt-controller.js&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;magnolia-mgmt-controller.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="131301">BUILD-1049</key>
            <summary>Allow triggering of git repository mirroring via webhooks </summary>
                <type id="3" iconUrl="https://jira.magnolia-cms.com/secure/viewavatar?size=xsmall&amp;avatarId=10898&amp;avatarType=issuetype">Task</type>
                                            <priority id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/priorities/neutral.gif">Neutral</priority>
                        <status id="10009" iconUrl="https://jira.magnolia-cms.com/images/icons/subtask.gif" description="The issue is selected to be on the backlog.">Selected</status>
                    <statusCategory id="2" key="new" colorName="default"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="fgrilli">Federico Grilli</reporter>
                        <labels>
                    </labels>
                <created>Thu, 13 Apr 2023 11:31:05 +0200</created>
                <updated>Mon, 15 May 2023 12:48:09 +0200</updated>
                                                                                <due></due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                    <issuelinks>
                            <issuelinktype id="10460">
                    <name>Issue split</name>
                                                                <inwardlinks description="split from">
                                        <issuelink>
            <issuekey id="130717">BUILD-1037</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                            <issuelinktype id="10020">
                    <name>dependency</name>
                                                                <inwardlinks description="is depended upon by">
                                        <issuelink>
            <issuekey id="131221">BUILD-1048</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_14166" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Acceptance criteria</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10111" key="com.atlassian.jira.toolkit:reporterdomain">
                        <customfieldname>Company</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>magnolia-cms.com</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_12730" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14151" key="com.atlassian.jira.toolkit:message">
                        <customfieldname>Docu info</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10061" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comm is not jira-dev</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>false</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10071" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last participant</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>mmichel</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            43 weeks, 3 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10020" key="com.atlassian.jira.toolkit:attachments">
                        <customfieldname>Number of attachments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10150" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname>Number of comments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>fgrilli</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|y09oyq:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10244" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_14167" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Task DoR</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_14145" key="com.intenso.jira.issue-templates:issue-templates-customfield">
                        <customfieldname>Template</customfieldname>
                        <customfieldvalues>
                            


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_15131" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Time in Discovery</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                        <customfield id="customfield_13933" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Urgency (resolution)</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="15724"><![CDATA[Normal]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_14630" key="com.atlassian.jira.plugin.system.customfieldtypes:datetime">
                        <customfieldname>Work Started</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Thu, 13 Apr 2023 11:31:15 +0200</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                    </customfields>
    </item>
</channel>
</rss>