Skip to content

Commit 70c0d1d

Browse files
committed
chore(repo): Notify slack on stable release
1 parent 5b908f2 commit 70c0d1d

File tree

3 files changed

+91
-13
lines changed

3 files changed

+91
-13
lines changed

.github/workflows/release-prod.yml

+35-12
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@ jobs:
3434
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
3535
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
3636

37-
- name: Notify on success
38-
if: steps.changesets.outputs.published == 'true'
39-
run: echo "Published! ${{ steps.changesets.outputs.publishedPackages }}"
40-
4137
- name: Trigger workflows on related repos
4238
if: steps.changesets.outputs.published == 'true'
4339
uses: actions/github-script@v6
@@ -47,11 +43,38 @@ jobs:
4743
retry-exempt-status-codes: 400,401
4844
github-token: ${{ secrets.CLERK_COOKIE_PAT }}
4945
script: |
50-
const clerkjsVersion = require('./packages/clerk-js/package.json').version;
51-
github.rest.actions.createWorkflowDispatch({
52-
owner: 'clerkinc',
53-
repo: 'cloudflare-workers',
54-
workflow_id: 'release-prod-clerkjs-proxy.yml',
55-
ref: 'main',
56-
inputs: { version: clerkjsVersion }
57-
})
46+
const clerkjsVersion = require('./packages/clerk-js/package.json').version;
47+
github.rest.actions.createWorkflowDispatch({
48+
owner: 'clerkinc',
49+
repo: 'cloudflare-workers',
50+
workflow_id: 'release-prod-clerkjs-proxy.yml',
51+
ref: 'main',
52+
inputs: { version: clerkjsVersion }
53+
})
54+
55+
- name: Generate notification
56+
id: notification
57+
if: steps.changesets.outputs.published == 'true'
58+
run: message=$(node scripts/notify.mjs '${{ steps.changesets.outputs.publishedPackages }}' '${{ github.event.number }}') && echo ::set-output name=message::${message//$'\n'/'%0A'}
59+
60+
- name: Send commit log to Slack
61+
id: slack
62+
uses: slackapi/slack-github-action@v1.18.0
63+
with:
64+
payload: |
65+
{
66+
"blocks": [
67+
{
68+
"type": "section",
69+
"text": {
70+
"type": "mrkdwn",
71+
"text": "${{ steps.notification.outputs.message }}"
72+
}
73+
}
74+
]
75+
}
76+
env:
77+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CHANGELOG_WEBHOOK_URL }}
78+
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
79+
80+

scripts/notify.mjs

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { fileURLToPath } from 'node:url';
2+
import fs from 'fs-extra';
3+
import { globby as glob } from 'globby';
4+
5+
const { GITHUB_REF = 'main' } = process.env;
6+
const baseUrl = new URL(`https://github.com/clerkinc/javascript/blob/${GITHUB_REF}/`);
7+
8+
/**
9+
* @returns {Promise<Map<string,{ version: string, path: string }>>}
10+
*/
11+
async function createPackageMap() {
12+
const map = new Map();
13+
const packagesRoot = new URL('../packages/', import.meta.url);
14+
const packages = await glob(['*/package.json', '*/*/package.json'], { cwd: fileURLToPath(packagesRoot) });
15+
await Promise.all(
16+
packages.map(async pkg => {
17+
const packageJsonPath = fileURLToPath(new URL(pkg, packagesRoot));
18+
const packageJson = fs.readJSONSync(packageJsonPath);
19+
if (!packageJson.private && packageJson.version) {
20+
const version = packageJson.version;
21+
const path = `./packages/${pkg.replace('/package.json', '')}`;
22+
map.set(packageJson.name, { version, path });
23+
}
24+
}),
25+
);
26+
return map;
27+
}
28+
29+
const releasedPackages = JSON.parse(process.argv[2]);
30+
const prNumber = process.argv[3];
31+
32+
// console.debug({ releasedPackages, prNumber });
33+
34+
const packageMap = await createPackageMap();
35+
const packages = releasedPackages.map(({ name, version }) => {
36+
const pkg = packageMap.get(name);
37+
if (!pkg) {
38+
throw new Error(`Unable to find entrypoint for "${name}"!`);
39+
}
40+
const url = new URL(`${pkg.path}/CHANGELOG.md#${version.replace(/\./g, '')}`, baseUrl).toString();
41+
return { name, version, url };
42+
});
43+
44+
let message = '';
45+
message += `Javascript SDKs - Stable Release - ${new Date().toLocaleDateString('en-US')}\n\n`;
46+
for (const { name, version, url } of packages) {
47+
message += `- \`${name}@${version}\` ([release notes ↗](<${url}>))\n`;
48+
}
49+
50+
// TODO: Get PR number using the GitHub API
51+
// if (prNumber) {
52+
// message += `\nView the [release PR ↗](<https://github.com/clerkinc/javascript/pull/${prNumber}>)`;
53+
// }
54+
55+
console.log(message);

tsconfig.eslint.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
"compilerOptions": {
44
"noEmit": true
55
},
6-
"include": ["packages/*/src", "packages/*/*.js", "packages/*/*.config.ts"]
6+
"include": ["packages/*/src", "packages/*/*.js", "packages/*/*.config.ts", "scripts/*.mjs"]
77
}

0 commit comments

Comments
 (0)