Skip to content

Commit f97eea8

Browse files
committed
Added Discord notification for new release only
Signed-off-by: Andre Wanlin <[email protected]>
1 parent 493e514 commit f97eea8

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

.github/workflows/master.yml

+14
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,17 @@ jobs:
6767
env:
6868
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
6969
run: heroku container:release -a ${{ secrets.HEROKU_APP_NAME }} web
70+
71+
# Post notification to Discord Announcements channel
72+
- name: 'Check if last commit is a release'
73+
id: check_if_release
74+
run: node scripts/check-if-release.js ${{ github.sha }}
75+
76+
- name: Discord notification
77+
uses: Ilshidur/[email protected]
78+
if: steps.check_if_release.outputs.is_release === 'true'
79+
env:
80+
DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }}
81+
CURRENT_VERSION: ${{ steps.check_if_release.outputs.current_version }}
82+
with:
83+
args: 'The Backstage Demo site has been upgraded to release {{CURRENT_VERSION}} go check it out: https://demo.backstage.io'

scripts/check-if-release.js

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/usr/bin/env node
2+
/* eslint-disable import/no-extraneous-dependencies */
3+
const path = require('path');
4+
const fs = require('fs-extra');
5+
const fetch = require('node-fetch');
6+
const { EOL } = require('os');
7+
8+
async function getBackstageVersion() {
9+
const rootPath = path.resolve(__dirname, '../backstage.json');
10+
return fs.readJson(rootPath).then(_ => _.version);
11+
}
12+
13+
async function main() {
14+
const [script, commitSha] = process.argv.slice(1);
15+
if (!commitSha) {
16+
throw new Error(`Argument must be ${script} <commit-sha>`);
17+
}
18+
19+
// Check to see if commit has changes to the backstage.json file
20+
const response = await fetch(
21+
`https://api.github.com/repos/backstage/demo/commits/${commitSha}`,
22+
);
23+
24+
if (!response.ok) {
25+
console.log(
26+
`Response from GitHub API for commit ${commitSha} failed with status ${response.status}`,
27+
);
28+
await fs.appendFile(process.env.GITHUB_OUTPUT, `is_release='false'${EOL}`);
29+
return;
30+
}
31+
32+
const json = await response.json();
33+
const files = json.files;
34+
35+
if (!files) {
36+
await fs.appendFile(process.env.GITHUB_OUTPUT, `is_release='false'${EOL}`);
37+
return;
38+
}
39+
40+
const isRelease = files.some(file => file.filename === 'backstage.json');
41+
console.log(isRelease);
42+
await fs.appendFile(
43+
process.env.GITHUB_OUTPUT,
44+
`is_release=${isRelease}${EOL}`,
45+
);
46+
47+
// Get the current Backstage version from the backstage.json file
48+
if (isRelease) {
49+
const backstageVersion = await getBackstageVersion();
50+
await fs.appendFile(
51+
process.env.GITHUB_OUTPUT,
52+
`current_version=${backstageVersion}${EOL}`,
53+
);
54+
}
55+
}
56+
57+
main().catch(error => {
58+
console.error(error.stack);
59+
process.exit(1);
60+
});

0 commit comments

Comments
 (0)