Skip to content

Commit 699e452

Browse files
authored
SLCORE-1785 Create a common release automation workflow for IDE Experience (#53)
1 parent d5df540 commit 699e452

File tree

1 file changed

+219
-0
lines changed

1 file changed

+219
-0
lines changed
Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
name: IDE Experience Reusable Automated Release
2+
3+
env:
4+
JIRA_PROJECT_KEY: ${{ inputs.jira-project-key }}
5+
USE_JIRA_SANDBOX: ${{ inputs.is-test-run }}
6+
7+
on:
8+
workflow_call:
9+
inputs:
10+
jira-project-key:
11+
description: "Jira project key"
12+
required: true
13+
type: string
14+
project-name:
15+
description: "Project name to describe it in REL ticket, like 'SonarLint Core'"
16+
required: true
17+
type: string
18+
pm-email:
19+
description: "Product manager email to assign the REL ticket after release is done"
20+
required: true
21+
type: string
22+
short-description:
23+
description: "A brief summary of what the release contains"
24+
required: true
25+
type: string
26+
is-test-run:
27+
description: "For testing: use Jira sandbox and create draft releases in GitHub"
28+
required: false
29+
type: boolean
30+
default: true
31+
branch:
32+
description: "Branch from which to do the release"
33+
required: true
34+
type: string
35+
default: "master"
36+
documentation-status:
37+
description: "Status of the documentation field for Jira Release"
38+
required: false
39+
type: string
40+
default: 'N/A'
41+
with-optional-checks:
42+
description: "True if you want the workflow to fail on releasability optional checks, false to ignore optional checks"
43+
required: false
44+
type: boolean
45+
default: true
46+
47+
outputs:
48+
new-version:
49+
description: "New version to release"
50+
value: ${{ jobs.release-in-jira.outputs.new-version }}
51+
52+
jobs:
53+
pre-release-checks:
54+
name: Pre-release checks
55+
runs-on: github-ubuntu-latest-s
56+
permissions:
57+
statuses: read
58+
contents: write
59+
pull-requests: write
60+
id-token: write
61+
steps:
62+
- name: Check Releasability Status
63+
uses: SonarSource/release-github-actions/check-releasability-status@v1
64+
with:
65+
branch: ${{ inputs.branch }}
66+
with-optional-checks: ${{ inputs.with-optional-checks }}
67+
68+
prepare-release:
69+
name: Prepare release
70+
runs-on: github-ubuntu-latest-s
71+
needs: pre-release-checks
72+
permissions:
73+
statuses: read
74+
contents: read
75+
id-token: write
76+
outputs:
77+
release-version: ${{ steps.get-release-version.outputs.release-version }}
78+
jira-version-name: ${{ steps.get-jira-version.outputs.jira-version-name }}
79+
jira-release-url: ${{ steps.get-jira-release-notes.outputs.jira-release-url }}
80+
due-date: ${{ steps.calculate-due-date.outputs.due-date }}
81+
steps:
82+
# Full version (with build number)
83+
- name: Get Release Version
84+
id: get-release-version
85+
uses: SonarSource/release-github-actions/get-release-version@v1
86+
with:
87+
branch: ${{ inputs.branch }}
88+
89+
# Short version
90+
- name: Get Jira Version
91+
id: get-jira-version
92+
uses: SonarSource/release-github-actions/get-jira-version@v1
93+
94+
# We need only link from here
95+
- name: Get Jira Release Notes
96+
id: get-jira-release-notes
97+
uses: SonarSource/release-github-actions/get-jira-release-notes@v1
98+
99+
# Due date value
100+
- name: Calculate due date
101+
id: calculate-due-date
102+
run: |
103+
DUE_DATE=$(date -d "+ 2 days" +"%Y-%m-%d")
104+
echo "Setting due date to 2 days from now: $DUE_DATE"
105+
echo "due-date=$DUE_DATE" >> $GITHUB_OUTPUT
106+
107+
create-release-ticket:
108+
name: Create release ticket
109+
runs-on: github-ubuntu-latest-s
110+
needs: prepare-release
111+
permissions:
112+
statuses: read
113+
contents: read
114+
id-token: write
115+
outputs:
116+
release-ticket-key: ${{ steps.create-ticket.outputs.release-ticket-key }}
117+
release-ticket-url: ${{ steps.create-ticket.outputs.release-ticket-url }}
118+
steps:
119+
- name: Create Jira Release Ticket
120+
id: create-ticket
121+
uses: SonarSource/release-github-actions/create-jira-release-ticket@v1
122+
with:
123+
project-name: ${{ inputs.project-name }}
124+
short-description: ${{ inputs.short-description }}
125+
documentation-status: ${{ inputs.documentation-status }}
126+
due-date: ${{ needs.prepare-release.outputs.due-date }}
127+
jira-release-url: ${{ needs.prepare-release.outputs.jira-release-url }}
128+
start-progress: true
129+
version: ${{ needs.prepare-release.outputs.release-version }}
130+
131+
publish-github-release:
132+
name: Publish github release
133+
runs-on: github-ubuntu-latest-s
134+
needs: [ prepare-release, create-release-ticket ]
135+
permissions:
136+
id-token: write
137+
contents: write
138+
actions: write
139+
outputs:
140+
github-release-url: ${{ steps.publish-github-release.outputs.release-url }}
141+
steps:
142+
- name: Publish GitHub Release
143+
id: publish-github-release
144+
uses: SonarSource/release-github-actions/publish-github-release@v1
145+
with:
146+
release-version: ${{ needs.prepare-release.outputs.release-version }}
147+
release-notes: ${{ format('For full release notes, see [JIRA]({0})', needs.prepare-release.outputs.jira-release-url) }}
148+
draft: ${{ inputs.is-test-run }}
149+
branch: ${{ inputs.branch }}
150+
151+
release-in-jira:
152+
name: Release in Jira
153+
runs-on: github-ubuntu-latest-s
154+
needs: [ prepare-release, publish-github-release, create-release-ticket ]
155+
permissions:
156+
statuses: read
157+
contents: read
158+
id-token: write
159+
outputs:
160+
new-version: ${{ steps.create-jira-version.outputs.jira-new-version-name }}
161+
steps:
162+
- name: Release in Jira
163+
uses: SonarSource/release-github-actions/release-jira-version@v1
164+
with:
165+
jira-version-name: ${{ needs.prepare-release.outputs.jira-version-name }}
166+
167+
- name: Create new release in jira
168+
id: create-jira-version
169+
uses: SonarSource/release-github-actions/create-jira-version@v1
170+
with:
171+
jira-version-name: ${{ needs.prepare-release.outputs.jira-version-name }}
172+
173+
- name: Move release ticket to Technical release Done
174+
uses: SonarSource/release-github-actions/update-release-ticket-status@v1
175+
with:
176+
release-ticket-key: ${{ needs.create-release-ticket.outputs.release-ticket-key }}
177+
status: "Technical Release Done"
178+
assignee: ${{ inputs.pm-email }} # TODO take it from vault
179+
180+
summarize_release:
181+
name: Release
182+
runs-on: github-ubuntu-latest-s
183+
if: always()
184+
needs: [ pre-release-checks, prepare-release, publish-github-release, create-release-ticket, release-in-jira ]
185+
steps:
186+
- name: Post Summary to Workflow
187+
run: |
188+
ALL_SUCCESS=$([[ "${{ needs.pre-release-checks.result }}" == "success" && \
189+
"${{ needs.prepare-release.result }}" == "success" && \
190+
"${{ needs.publish-github-release.result }}" == "success" && \
191+
"${{ needs.create-release-ticket.result }}" == "success" && \
192+
"${{ needs.release-in-jira.result }}" == "success" ]] && echo "true" || echo "false")
193+
194+
if [[ "$ALL_SUCCESS" == "true" ]]; then
195+
echo "### 🎉🚀 Congratulations! Release Successful! 🚀🎉" >> $GITHUB_STEP_SUMMARY
196+
echo "" >> $GITHUB_STEP_SUMMARY
197+
echo "**Summary of the release:**" >> $GITHUB_STEP_SUMMARY
198+
else
199+
echo "### ❌💥 Release Failed! 💥❌" >> $GITHUB_STEP_SUMMARY
200+
echo "" >> $GITHUB_STEP_SUMMARY
201+
echo "**Summary of the failed release:**" >> $GITHUB_STEP_SUMMARY
202+
fi
203+
204+
echo "- **Released Version:** ${{ needs.prepare-release.outputs.release-version }}" >> $GITHUB_STEP_SUMMARY
205+
echo "- **New Version:** ${{ needs.release-in-jira.outputs.new-version }}" >> $GITHUB_STEP_SUMMARY
206+
echo "- **Jira Release URL:** ${{ needs.prepare-release.outputs.jira-release-url }}" >> $GITHUB_STEP_SUMMARY
207+
echo "- **Release Ticket URL:** ${{ needs.create-release-ticket.outputs.release-ticket-url }}" >> $GITHUB_STEP_SUMMARY
208+
echo "- **GitHub Release URL:** ${{ needs.publish-github-release.outputs.github-release-url }}" >> $GITHUB_STEP_SUMMARY
209+
210+
if [[ "$ALL_SUCCESS" == "true" ]]; then
211+
echo "" >> $GITHUB_STEP_SUMMARY
212+
echo "PS: Don't forget to review and merge the bump version!" >> $GITHUB_STEP_SUMMARY
213+
echo "For more information please check the release instructions at:" >> $GITHUB_STEP_SUMMARY
214+
echo "https://xtranet-sonarsource.atlassian.net/wiki/spaces/CodeRemedi/pages/3464134704/Release+processes" >> $GITHUB_STEP_SUMMARY
215+
else
216+
echo "" >> $GITHUB_STEP_SUMMARY
217+
echo "For fixes to common issues and other useful information please check the release instructions at:" >> $GITHUB_STEP_SUMMARY
218+
echo "https://xtranet-sonarsource.atlassian.net/wiki/spaces/CodeRemedi/pages/3464134704/Release+processes" >> $GITHUB_STEP_SUMMARY
219+
fi

0 commit comments

Comments
 (0)