Skip to content

Commit 3f2f113

Browse files
Add vsce pre-release step to CI
1 parent d48ee33 commit 3f2f113

File tree

4 files changed

+145
-7
lines changed

4 files changed

+145
-7
lines changed

.github/workflows/bump-version.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const fs = require("fs");
2+
const path = require("path");
3+
const semver = require("semver");
4+
5+
const latestPublish = process.argv[2];
6+
7+
const packageJson = fs.readFileSync(path.join("./", "package.json"), {
8+
encoding: "utf-8",
9+
});
10+
11+
let release = JSON.parse(packageJson).version;
12+
13+
let newVersion = latestPublish;
14+
15+
// A prepublished version must be one minor higher than a regular published version.
16+
// E.g. if package.json has version 1.3.0 and there is no prepublished version yet,
17+
// increment minor by one -> 1.4.0.
18+
if (semver.minor(latestPublish) === semver.minor(release)) {
19+
newVersion = semver.inc(newVersion, "minor", semver.rel);
20+
}
21+
// Increment the version patch. E.g. if we fetch version 1.4.0 as the latest pre-release,
22+
// increment patch by one -> 1.4.1.
23+
else if (semver.minor(latestPublish) > semver.minor(release)) {
24+
newVersion = semver.inc(newVersion, "patch", semver.rel);
25+
}
26+
// Otherwise throw an error, because the pre-release version should always be just one
27+
// minor higher than the release version.
28+
else {
29+
throw new Error(
30+
"Version number minors are more than off by one, check package.json and (pre-)published versions manually."
31+
);
32+
}
33+
34+
if (!semver.valid(newVersion)) {
35+
throw new Error("Invalid version string: ", newVersion);
36+
}
37+
38+
console.log(`::set-output name=new_version::${newVersion}`);

.github/workflows/ci.yml

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,18 @@ jobs:
8181
package:
8282
needs: test
8383
runs-on: ubuntu-18.04
84-
84+
8585
steps:
8686
- uses: actions/checkout@v2.3.4
87-
87+
8888
- name: Use Node.js
8989
uses: actions/setup-node@v2.1.5
9090
with:
9191
node-version: 14.4.0
9292

9393
- run: npm ci
9494
- run: npm run compile
95-
95+
9696
- name: Download MacOS binary
9797
uses: actions/download-artifact@v3.0.0
9898
with:
@@ -124,11 +124,52 @@ jobs:
124124
- name: Store short commit SHA for filename
125125
id: vars
126126
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
127-
127+
128+
- name: Get current pre-release version
129+
if: github.ref == 'refs/heads/master'
130+
id: get_pre_release
131+
run: |
132+
JSON=$(npx vsce show chenglou92.rescript-vscode --json)
133+
VERSION=$(echo $JSON | jq '.versions | .[0] | .["version"]')
134+
echo "::set-output name=current_version::${VERSION}"
135+
136+
- name: Increment pre-release version
137+
if: github.ref == 'refs/heads/master'
138+
id: increment_pre_release
139+
run: |
140+
NEW_VERSION=$(echo ${{ steps.get_pre_release.outputs.current_version }})
141+
node .github/workflows/bump-version.js ${NEW_VERSION}
142+
128143
- name: Package Extension
129-
run: npx vsce package -o rescript-vscode-${{ steps.vars.outputs.sha_short }}.vsix
130-
144+
if: github.ref != 'refs/heads/master'
145+
run: npx vsce package -o rescript-vscode-${{ steps.vars.outputs.sha_short }}.vsix
146+
147+
- name: Package Extension
148+
if: github.ref == 'refs/heads/master'
149+
run: npx vsce package -o rescript-vscode-${{ steps.increment_pre_release.outputs.new_version }}.vsix ${{ steps.increment_pre_release.outputs.new_version }} --no-git-tag-version
150+
131151
- uses: actions/upload-artifact@v2
152+
if: github.ref != 'refs/heads/master'
132153
with:
133154
name: rescript-vscode-${{ steps.vars.outputs.sha_short }}.vsix
134155
path: rescript-vscode-${{ steps.vars.outputs.sha_short }}.vsix
156+
157+
- uses: actions/upload-artifact@v2
158+
if: github.ref == 'refs/heads/master'
159+
with:
160+
name: rescript-vscode-${{ steps.increment_pre_release.outputs.new_version }}.vsix
161+
path: rescript-vscode-${{ steps.increment_pre_release.outputs.new_version }}.vsix
162+
163+
- name: Publish latest master to GitHub
164+
if: github.ref == 'refs/heads/master'
165+
uses: marvinpinto/action-automatic-releases@latest
166+
with:
167+
repo_token: "${{ secrets.GITHUB_TOKEN }}"
168+
automatic_release_tag: "latest-master"
169+
prerelease: true
170+
title: "Latest master"
171+
files: rescript-vscode-${{ steps.increment_pre_release.outputs.new_version }}.vsix
172+
173+
- name: Publish extension as pre-release
174+
if: github.ref == 'refs/heads/master'
175+
run: npx vsce publish --pat ${{ secrets.MARKETPLACE_TOKEN }} --pre-release ${{ steps.increment_pre_release.outputs.new_version }} --no-git-tag-version

package-lock.json

Lines changed: 58 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@
165165
"devDependencies": {
166166
"@types/node": "^14.14.41",
167167
"@types/vscode": "1.68.0",
168-
"typescript": "^4.7.3"
168+
"typescript": "^4.7.3",
169+
"semver": "^7.3.7"
169170
}
170171
}

0 commit comments

Comments
 (0)