Skip to content

Commit a4ed2b4

Browse files
committed
update push-release action to publish spfx solution to release notes
1 parent 8d13dd1 commit a4ed2b4

File tree

4 files changed

+102
-34
lines changed

4 files changed

+102
-34
lines changed

.github/ISSUE_TEMPLATE/new-release--internal-use-only-.md

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,26 @@ assignees: ''
99

1010
This issue tracks the publishing progress for a release. It will get updated as tasks are completed
1111

12-
- [ ] Write blog post
13-
- [ ] Prep the release branch
14-
- [ ] Merge main into 'release/latest'
15-
- [ ] Update the package versions to new version
16-
- [ ] Publish release to GitHub
17-
- [ ] Write release notes
18-
- [ ] Write summary for top of release notes
19-
- [ ] Publish release notes
20-
- [ ] Publish docs
12+
#### Blog Post
13+
- [ ] Author and stage
14+
- [ ] Publish
15+
16+
#### GitHub Release Notes
17+
- [ ] Author draft release notes
18+
- [ ] Author release notes summary
19+
- [ ] Publish
20+
21+
#### Docs
2122
- [ ] Create docs PR
23+
- [ ] Get docs PR reviewed and approved
2224
- [ ] Merge docs PR
23-
- [ ] Publish storybook from release branch
24-
- [ ] Publish NPM package from release branch
25-
- [ ] Merge release branch to main
26-
- [ ] Publish release blog post
25+
26+
#### Release
27+
- [ ] Ensure `main` is up to date with `release/latest`
28+
- [ ] Ensure `./package.json` version in `main` is correct
29+
- [ ] Merge `main` in `release/latest` - this will invoke the release workflow
30+
- [ ] Approve workflow to publish npm packages
31+
- [ ] Validate npm packages are published
32+
- [ ] Validate mgt.dev is updated
33+
- [ ] Validate GitHub release contains `mgt-spfx` asset
34+
- [ ] Increment `./package.json` version in main for building preview packages

.github/workflows/push-release.yml

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -56,34 +56,22 @@ jobs:
5656
node-version: ${{ matrix.node-version }}
5757
registry-url: 'https://registry.npmjs.org'
5858

59-
- name: Get latest version from npm
60-
id: latest-version
61-
run: echo ::set-output name=version::$(npm show @microsoft/mgt version)
62-
63-
- name: Get current package version
64-
id: package-version
65-
uses: martinbeentjes/npm-get-version-action@master
66-
6759
- name: Build 🛠
6860
run: |
6961
npm install -g yarn lerna
7062
yarn
7163
yarn build
7264
73-
# commenting out for now until we can properly test this during a release
74-
# - name: Update package version
75-
# run: node scripts/setVersion.js
65+
- name: Update package version
66+
run: node scripts/setVersion.js
7667

77-
# - name: Publish npm packages
78-
# run: lerna exec --scope @microsoft/* -- "npm publish --access=public"
79-
# env:
80-
# NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
68+
- name: Publish npm packages
69+
run: lerna exec --scope @microsoft/* -- "npm publish --access=public"
70+
env:
71+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
8172

82-
# - name: Upload a Build Artifact - mgt-spfx Solution
83-
# uses: actions/upload-artifact@v2
84-
# with:
85-
# name: mgt-spfx solution
86-
# path: packages/mgt-spfx/sharepoint/*
73+
- name: Attach mgt-spfx solution to GitHub release
74+
run: node scripts/uploadSpfxSolution.js ${{secrets.GITHUB_TOKEN}} ${{needs.version.outputs.package-version}}
8775

8876
storybook:
8977
runs-on: ubuntu-latest

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@
115115
"web-component-analyzer": "^1.1.6",
116116
"tslint": "^6.1.3",
117117
"tslint-config-prettier": "^1.18.0",
118-
"tslint-microsoft-contrib": "^6.2.0"
118+
"tslint-microsoft-contrib": "^6.2.0",
119+
"@octokit/rest": "^18.5.3"
119120
},
120121
"husky": {
121122
"hooks": {

scripts/uploadSpfxSolution.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// uploads the mgt-spfx solution to a GitHub release
2+
// this script is called by a github workflow to automate
3+
// uploading the solution during a release of mgt
4+
5+
const { Octokit } = require("@octokit/rest");
6+
const fs = require('fs');
7+
8+
if (process.argv.length < 4) {
9+
console.log('usage: uploadSpfxSolution.js <github_token> <package_version>');
10+
11+
return;
12+
}
13+
14+
const auth = process.argv[2];
15+
const version = process.argv[3];
16+
const repo = 'microsoft-graph-toolkit';
17+
const owner = 'microsoftgraph';
18+
const assetPath = 'packages/mgt-spfx/sharepoint/solution/mgt-spfx.sppkg';
19+
20+
const octokit = new Octokit({ auth });
21+
22+
(async () => {
23+
24+
const releases = await octokit.rest.repos.listReleases({
25+
owner,
26+
repo
27+
})
28+
29+
const filteredReleases = releases.data.filter(r => r.name.includes(version));
30+
let release;
31+
32+
if (!filteredReleases.length) {
33+
console.log(`No release found for ${version} - creating a new draft release`);
34+
release = (await octokit.rest.repos.createRelease({
35+
owner,
36+
repo,
37+
tag_name: 'v' + version,
38+
name: 'v' + version,
39+
draft: true
40+
})).data;
41+
} else {
42+
console.log(`found existing release for ${version}`);
43+
release = filteredReleases[0];
44+
}
45+
46+
const file = fs.readFileSync(assetPath);
47+
const name = `mgt-spfx-${version}.sppkg`;
48+
49+
if (release.assets && release.assets.length) {
50+
const asset = release.assets.filter(a => a.name === name)[0];
51+
if (asset) {
52+
console.log(`found existing asset for release ${version} - deleting`)
53+
await octokit.rest.repos.deleteReleaseAsset({
54+
owner,
55+
repo,
56+
asset_id: asset.id
57+
});
58+
}
59+
}
60+
61+
console.log(`attaching ${assetPath} as ${name} to release`)
62+
await octokit.rest.repos.uploadReleaseAsset({
63+
owner,
64+
repo,
65+
release_id: release.id,
66+
data: file,
67+
name: `mgt-spfx-${version}.sppkg`
68+
});
69+
70+
console.log('done')
71+
})();

0 commit comments

Comments
 (0)