Skip to content

Commit 0a8ee9b

Browse files
committed
SLCORE-1785 Create a common release automation workflow for IDE Experience
1 parent 9a92a49 commit 0a8ee9b

File tree

1 file changed

+211
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)