mirror of
https://github.com/wavetermdev/waveterm.git
synced 2024-12-21 16:38:23 +01:00
5b7535d08f
## New release flow 1. Run "Bump Version" workflow with the desired version bump and the prerelease flag set to `true`. This will push a new version bump to the target branch and create a new git tag. - See below for more info on how the version bumping works. 2. A new "Build Helper" workflow run will kick off automatically for the new tag. Once it is complete, test the new build locally by downloading with the [download script](https://github.com/wavetermdev/thenextwave/blob/main/scripts/artifacts/download-staged-artifact.sh). 3. Release the new build using the [publish script](https://github.com/wavetermdev/thenextwave/blob/main/scripts/artifacts/publish-from-staging.sh). This will trigger electron-updater to distribute the package to beta users. 4. Run "Bump Version" again with a release bump (either `major`, `minor`, or `patch`) and the prerelease flag set to `false`. 6. Release the new build to all channels using the [publish script](https://github.com/wavetermdev/thenextwave/blob/main/scripts/artifacts/publish-from-staging.sh). This will trigger electron-updater to distribute the package to all users. ## Change Summary Creates a new "Bump Version" workflow to manage versioning and tag creation. Build Helper is now automated. ### Version bumps Updates the `version.cjs` script so that an argument can be passed to trigger a version bump. Under the hood, this utilizes NPM's `semver` package. If arguments are present, the version will be bumped. If only a single argument is given, the following are valid inputs: - `none`: No-op. - `patch`: Bumps the patch version. - `minor`: Bumps the minor version. - `major`: Bumps the major version. - '1', 'true': Bumps the prerelease version. If two arguments are given, the first argument must be either `none`, `patch`, `minor`, or `major`. The second argument must be `1` or `true` to bump the prerelease version. ### electron-builder We are now using the release channels support in electron-builder. This will automatically detect the channel being built based on the package version to determine which channel update files need to be generated. See [here](https://www.electron.build/tutorials/release-using-channels.html) for more information. ### Github Actions #### Bump Version This adds a new "Bump Version" workflow for managing versioning and queuing new builds. When run, this workflow will bump the version, create a new tag, and push the changes to the target branch. There is a new dropdown when queuing the "Bump Version" workflow to select what kind of version bump to perform. A bump must always be performed when running a new build to ensure consistency. I had to create a GitHub App to grant write permissions to our main branch for the version bump commits. I've made a separate workflow file to manage the version bump commits, which should help prevent tampering. Thanks to using the GitHub API directly, I am able to make these commits signed! #### Build Helper Build Helper is now triggered when new tags are created, rather than being triggered automatically. This ensures we're always creating artifacts from known checkpoints. ### Settings Adds a new `autoupdate:channel` configuration to the settings file. If unset, the default from the artifact will be used (should correspond to the channel of the artifact when downloaded). ## Future Work I want to add a release workflow that will automatically copy over the corresponding version artifacts to the release bucket when a new GitHub Release is created. I also want to separate versions into separate subdirectories in the release bucket so we can clean them up more-easily. --------- Co-authored-by: wave-builder <builds@commandline.dev> Co-authored-by: wave-builder[bot] <181805596+wave-builder[bot]@users.noreply.github.com>
58 lines
2.1 KiB
JavaScript
58 lines
2.1 KiB
JavaScript
/**
|
|
* Script to get the current package version and bump the version, if specified.
|
|
*
|
|
* If no arguments are present, the current version will returned.
|
|
* If only a single argument is given, the following are valid inputs:
|
|
* - `none`: No-op.
|
|
* - `patch`: Bumps the patch version.
|
|
* - `minor`: Bumps the minor version.
|
|
* - `major`: Bumps the major version.
|
|
* - '1', 'true': Bumps the prerelease version.
|
|
* If two arguments are given, the first argument must be either `none`, `patch`, `minor`, or `major`. The second argument must be `1` or `true` to bump the prerelease version.
|
|
*/
|
|
|
|
const path = require("path");
|
|
const packageJsonPath = path.resolve(__dirname, "package.json");
|
|
const packageJson = require(packageJsonPath);
|
|
|
|
const VERSION = `${packageJson.version}`;
|
|
module.exports = VERSION;
|
|
|
|
if (typeof require !== "undefined" && require.main === module) {
|
|
if (process.argv.length > 2) {
|
|
const fs = require("fs");
|
|
const semver = require("semver");
|
|
|
|
const action = process.argv[2];
|
|
const isPrerelease =
|
|
process.argv.length > 3
|
|
? process.argv[3] === "true" || process.argv[3] === "1"
|
|
: action === "true" || action === "1";
|
|
let newVersion = packageJson.version;
|
|
switch (action) {
|
|
case "major":
|
|
case "minor":
|
|
case "patch":
|
|
newVersion = semver.inc(
|
|
VERSION,
|
|
`${isPrerelease ? "pre" : ""}${action}`,
|
|
null,
|
|
isPrerelease ? "beta" : null
|
|
);
|
|
break;
|
|
case "none":
|
|
case "true":
|
|
case "1":
|
|
if (isPrerelease) newVersion = semver.inc(VERSION, "prerelease", null, "beta");
|
|
break;
|
|
default:
|
|
throw new Error(`Unknown action ${action}`);
|
|
}
|
|
packageJson.version = newVersion;
|
|
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 4) + "\n");
|
|
console.log(newVersion);
|
|
} else {
|
|
console.log(VERSION);
|
|
}
|
|
}
|