Skip to content

Commit d5df540

Browse files
committed
SLCORE-1785 Create a common release automation workflow for IDE Experience
1 parent d20a907 commit d5df540

File tree

4 files changed

+28
-11
lines changed

4 files changed

+28
-11
lines changed

create-jira-release-ticket/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ This action depends on:
2727
| `short-description` | A short description for the release | Yes | - |
2828
| `jira-project-key` | The key of the Jira project (e.g., SONARIAC). Can also be set via `JIRA_PROJECT_KEY` environment variable | No* | - |
2929
| `version` | The version being released (e.g., 11.44.2), or leave empty to use the release version | No | - |
30+
| `due-date` | Due date of the release in `yyyy-mm-dd` format, for example '2029-12-24' | No | - |
3031
| `use-jira-sandbox` | Use the sandbox server instead of the production Jira. Can also be controlled via `USE_JIRA_SANDBOX` environment variable | No | `false` |
3132
| `documentation-status` | Status of the documentation | No | `N/A` |
3233
| `rule-props-changed` | Whether rule properties have changed (`Yes` or `No`) | No | `No` |

create-jira-release-ticket/action.yml

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ inputs:
1313
description: 'The key of the project (e.g., SONARIAC). Required if JIRA_PROJECT_KEY env var is not set.'
1414
version:
1515
description: 'The version being released (e.g., 11.44.2), or leave empty to use the release version.'
16+
due-date:
17+
description: 'Due date of the release, for example "2029-12-24".'
1618
use-jira-sandbox:
1719
description: "Use the sandbox server instead of the production Jira."
1820
documentation-status:
@@ -73,8 +75,15 @@ runs:
7375
env:
7476
JIRA_USER: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_USER }}
7577
JIRA_TOKEN: ${{ fromJSON(steps.secrets.outputs.vault).JIRA_TOKEN }}
76-
JIRA_PROD_URL: "https://sonarsource.atlassian.net/"
77-
JIRA_SANDBOX_URL: "https://sonarsource-sandbox-608.atlassian.net/"
78+
PROJECT_NAME: ${{ inputs.project-name }}
79+
RELEASE_VERSION: ${{ inputs.version || env.RELEASE_VERSION }}
80+
SHORT_DESCRIPTION: ${{ inputs.short-description }}
81+
DUE_DATE: ${{ inputs.due-date }}
82+
JIRA_URL: ${{ ((inputs.use-jira-sandbox || env.USE_JIRA_SANDBOX) == 'true') && 'https://sonarsource-sandbox-608.atlassian.net/' || 'https://sonarsource.atlassian.net/' }}
83+
DOCUMENTATION_STATUS: ${{ inputs.documentation-status }}
84+
RULE_PROPS_CHANGED: ${{ inputs.rule-props-changed }}
85+
JIRA_RELEASE_URL: ${{ inputs.jira-release-url || env.JIRA_RELEASE_URL }}
86+
SONARLINT_CHANGELOG: ${{ inputs.sonarlint-changelog }}
7887
run: |
7988
PROJECT_KEY="${{ inputs.jira-project-key || env.JIRA_PROJECT_KEY }}"
8089
@@ -85,14 +94,15 @@ runs:
8594
8695
python ${{ github.action_path }}/create_release_ticket.py \
8796
--project-key="$PROJECT_KEY" \
88-
--project-name="${{ inputs.project-name }}" \
89-
--version="${{ inputs.version || env.RELEASE_VERSION }}" \
90-
--short-description="${{ inputs.short-description }}" \
91-
--jira-url="${{ ((inputs.use-jira-sandbox || env.USE_JIRA_SANDBOX) == 'true') && env.JIRA_SANDBOX_URL || env.JIRA_PROD_URL }}" \
92-
--documentation-status="${{ inputs.documentation-status }}" \
93-
--rule-props-changed="${{ inputs.rule-props-changed }}" \
94-
--jira-release-url="${{ inputs.jira-release-url || env.JIRA_RELEASE_URL }}" \
95-
--sonarlint-changelog="${{ inputs.sonarlint-changelog }}" >> $GITHUB_OUTPUT
97+
--project-name="$PROJECT_NAME" \
98+
--version="$RELEASE_VERSION" \
99+
--due-date="$DUE_DATE" \
100+
--short-description="$SHORT_DESCRIPTION" \
101+
--jira-url="$JIRA_URL" \
102+
--documentation-status="$DOCUMENTATION_STATUS" \
103+
--rule-props-changed="$RULE_PROPS_CHANGED" \
104+
--jira-release-url="$JIRA_RELEASE_URL" \
105+
--sonarlint-changelog="$SONARLINT_CHANGELOG" >> $GITHUB_OUTPUT
96106
97107
- name: Start Progress on Release Ticket
98108
if: ${{ inputs.start-progress == 'true' }}

create-jira-release-ticket/create_release_ticket.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ def create_release_ticket(jira_client, args, link_to_release_notes):
7272
'project': 'REL',
7373
'issuetype': 'Ask for release',
7474
'summary': f'{args.project_name} {args.version}',
75+
'duedate': args.due_date,
7576
CUSTOM_FIELDS['SHORT_DESCRIPTION']: args.short_description,
7677
CUSTOM_FIELDS['LINK_TO_RELEASE_NOTES']: link_to_release_notes,
7778
CUSTOM_FIELDS['DOCUMENTATION_STATUS']: args.documentation_status,
@@ -107,6 +108,7 @@ def main():
107108
help="Whether rule properties have changed.")
108109
parser.add_argument("--jira-release-url", default="", help="The URL to the Jira release notes page.")
109110
parser.add_argument("--sonarlint-changelog", default="", help="The SonarLint changelog content.")
111+
parser.add_argument("--due-date", default="", help="Due date of the release, for example '2029-12-24'.")
110112

111113
args = parser.parse_args()
112114

create-jira-release-ticket/test_create_release_ticket.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ def test_create_release_ticket_with_all_fields(self):
7272
args.documentation_status = 'Ready'
7373
args.rule_props_changed = 'Yes'
7474
args.sonarlint_changelog = 'Test changelog'
75+
args.due_date = '2029-12-24'
7576

7677
release_url = 'https://jira.com/release/notes'
7778

@@ -85,6 +86,7 @@ def test_create_release_ticket_with_all_fields(self):
8586
self.assertEqual(call_args['project'], 'REL')
8687
self.assertEqual(call_args['issuetype'], 'Ask for release')
8788
self.assertEqual(call_args['summary'], 'TestProject 1.2.3')
89+
self.assertEqual(call_args['duedate'], '2029-12-24')
8890
self.assertEqual(call_args['customfield_10146'], 'Test release') # SHORT_DESCRIPTION
8991
self.assertEqual(call_args['customfield_10145'], release_url) # LINK_TO_RELEASE_NOTES
9092
self.assertEqual(call_args['customfield_10147'], 'Ready') # DOCUMENTATION_STATUS
@@ -163,11 +165,12 @@ def test_main_successful_ticket_creation(self, mock_stderr, mock_stdout, mock_cr
163165
'--project-name', 'Test Project',
164166
'--version', '1.0.0',
165167
'--short-description', 'Test release',
168+
'--due-date', '2029-12-24',
166169
'--jira-url', 'https://sandbox.jira.com',
167170
'--jira-release-url', 'https://sandbox.jira.com/release/notes',
168171
'--documentation-status', 'Ready',
169172
'--rule-props-changed', 'Yes',
170-
'--sonarlint-changelog', 'Some changelog'
173+
'--sonarlint-changelog', 'Some changelog',
171174
])
172175
@patch('create_release_ticket.get_jira_instance')
173176
@patch('create_release_ticket.create_release_ticket')
@@ -201,6 +204,7 @@ def test_main_with_all_parameters(self, mock_stderr, mock_stdout, mock_create_ti
201204
self.assertEqual(args.documentation_status, 'Ready')
202205
self.assertEqual(args.rule_props_changed, 'Yes')
203206
self.assertEqual(args.sonarlint_changelog, 'Some changelog')
207+
self.assertEqual(args.due_date, '2029-12-24')
204208

205209
stderr_output = mock_stderr.getvalue()
206210
self.assertIn('Using release URL: https://sandbox.jira.com/release/notes', stderr_output)

0 commit comments

Comments
 (0)