2024-06-14 01:49:25 +02:00
# Copyright 2024, Command Line Inc.
# SPDX-License-Identifier: Apache-2.0
2024-05-10 05:24:24 +02:00
version : "3"
vars :
2024-09-19 23:04:47 +02:00
APP_NAME : "Wave"
2024-05-10 05:24:24 +02:00
BIN_DIR : "bin"
2024-06-14 03:11:21 +02:00
VERSION :
sh : node version.cjs
2024-08-16 06:32:08 +02:00
RM : '{{if eq OS "windows"}}cmd --% /c del /S{{else}}rm {{end}}'
2024-08-13 08:37:08 +02:00
RMRF : '{{if eq OS "windows"}}powershell Remove-Item -Force -Recurse{{else}}rm -rf{{end}}'
2024-08-30 19:13:40 +02:00
DATE : '{{if eq OS "windows"}}powershell Get-Date -UFormat{{else}}date{{end}}'
2024-09-18 21:29:47 +02:00
ARTIFACTS_BUCKET : waveterm-github-artifacts/staging-w2
RELEASES_BUCKET : dl.waveterm.dev/releases-w2
2024-05-10 05:24:24 +02:00
2024-06-12 02:42:10 +02:00
tasks :
2024-07-18 07:39:22 +02:00
electron:dev :
2024-07-19 23:27:31 +02:00
desc : Run the Electron application via the Vite dev server (enables hot reloading).
2024-09-20 22:39:06 +02:00
cmd : yarn dev
2024-07-18 03:42:49 +02:00
deps :
2024-08-26 22:17:35 +02:00
- yarn
2024-08-21 01:48:38 +02:00
- build:backend
2024-08-09 03:24:54 +02:00
env :
WCLOUD_ENDPOINT : "https://ot2e112zx5.execute-api.us-west-2.amazonaws.com/dev"
WCLOUD_WS_ENDPOINT : "wss://5lfzlg5crl.execute-api.us-west-2.amazonaws.com/dev/"
2024-05-10 05:24:24 +02:00
2024-07-18 07:39:22 +02:00
electron:start :
2024-07-19 23:27:31 +02:00
desc : Run the Electron application directly.
2024-09-20 22:39:06 +02:00
cmd : yarn start
2024-06-14 01:49:25 +02:00
deps :
2024-08-26 22:17:35 +02:00
- yarn
2024-08-21 01:48:38 +02:00
- build:backend
2024-05-10 05:24:24 +02:00
2024-09-20 22:39:06 +02:00
storybook :
desc : Start the Storybook server.
cmd : yarn storybook
2024-07-18 07:39:22 +02:00
package :
desc : Package the application for the current platform.
2024-05-10 05:24:24 +02:00
cmds :
2024-08-13 08:37:08 +02:00
- cmd : '{{.RMRF}} "make"'
2024-07-19 00:16:49 +02:00
ignore_error : true
2024-07-18 07:39:22 +02:00
- yarn build:prod && yarn electron-builder -c electron-builder.config.cjs -p never
2024-05-10 05:24:24 +02:00
deps :
2024-08-26 22:17:35 +02:00
- yarn
2024-08-21 01:48:38 +02:00
- build:backend
build:backend :
desc : Build the wavesrv and wsh components.
cmds :
- task : build:server
- task : build:wsh
2024-05-10 05:24:24 +02:00
2024-06-12 02:42:10 +02:00
build:server :
2024-07-18 07:39:22 +02:00
desc : Build the wavesrv component.
2024-07-18 03:42:49 +02:00
deps :
2024-08-21 01:48:38 +02:00
- generate
2024-08-30 19:13:40 +02:00
- build:server:linux
- build:server:macos
- build:server:windows
2024-07-18 07:39:22 +02:00
2024-08-30 19:13:40 +02:00
build:server:macos :
desc : Build the wavesrv component for macOS (Darwin) platforms (generates artifacts for both arm64 and amd64).
2024-07-18 07:39:22 +02:00
status :
2024-07-19 00:53:20 +02:00
- exit {{if eq OS "darwin"}}1{{else}}0{{end}}
2024-07-18 07:39:22 +02:00
cmds :
2024-08-16 06:32:08 +02:00
- cmd : "{{.RM}} dist/bin/wavesrv*"
2024-07-19 00:16:49 +02:00
ignore_error : true
2024-07-18 03:42:49 +02:00
- task : build:server:internal
vars :
2024-08-30 19:13:40 +02:00
ARCHS : arm64,amd64
build:server:windows :
desc : Build the wavesrv component for Windows platforms (only generates artifacts for the current architecture).
status :
- exit {{if eq OS "windows"}}1{{else}}0{{end}}
cmds :
- cmd : "{{.RM}} dist/bin/wavesrv*"
ignore_error : true
2024-07-18 03:42:49 +02:00
- task : build:server:internal
vars :
2024-08-30 19:13:40 +02:00
ARCHS :
sh : echo {{if eq "arm" ARCH}}arm64{{else}}{{ARCH}}{{end}}
2024-07-18 07:39:22 +02:00
2024-08-30 19:13:40 +02:00
build:server:linux :
desc : Build the wavesrv component for Linux platforms (only generates artifacts for the current architecture).
2024-07-18 07:39:22 +02:00
status :
2024-08-30 19:13:40 +02:00
- exit {{if eq OS "linux"}}1{{else}}0{{end}}
2024-07-18 07:39:22 +02:00
cmds :
2024-08-16 06:32:08 +02:00
- cmd : "{{.RM}} dist/bin/wavesrv*"
2024-07-19 00:16:49 +02:00
ignore_error : true
2024-07-18 07:39:22 +02:00
- task : build:server:internal
vars :
2024-08-30 19:13:40 +02:00
ARCHS :
2024-07-19 00:53:20 +02:00
sh : echo {{if eq "arm" ARCH}}arm64{{else}}{{ARCH}}{{end}}
2024-09-25 04:14:07 +02:00
GO_LDFLAGS : -linkmode 'external' -extldflags=-static
GO_ENV_VARS : CC=musl-gcc
2024-07-19 00:53:20 +02:00
2024-07-18 03:42:49 +02:00
build:server:internal :
requires :
vars :
2024-08-30 19:13:40 +02:00
- ARCHS
2024-09-20 22:39:06 +02:00
cmd :
2024-09-25 04:14:07 +02:00
cmd : CGO_ENABLED=1 GOARCH={{.GOARCH}} {{.GO_ENV_VARS}} go build -tags "osusergo,sqlite_omit_load_extension" -ldflags "{{.GO_LDFLAGS}} -X main.BuildTime=$({{.DATE}} +'%Y%m%d%H%M') -X main.WaveVersion={{.VERSION}}" -o dist/bin/wavesrv.{{if eq .GOARCH "amd64"}}x64{{else}}{{.GOARCH}}{{end}}{{exeExt}} cmd/server/main-server.go
2024-09-20 22:39:06 +02:00
for :
var : ARCHS
split : ","
as : GOARCH
2024-05-10 05:24:24 +02:00
sources :
2024-06-12 02:42:10 +02:00
- "cmd/server/*.go"
- "pkg/**/*.go"
2024-05-10 05:24:24 +02:00
generates :
2024-08-30 19:13:40 +02:00
- dist/bin/wavesrv.*{{exeExt}}
2024-05-10 05:24:24 +02:00
deps :
2024-06-12 02:42:10 +02:00
- go:mod:tidy
2024-07-18 03:42:49 +02:00
internal : true
2024-05-10 05:24:24 +02:00
2024-06-21 23:44:11 +02:00
build:wsh :
2024-07-18 07:39:22 +02:00
desc : Build the wsh component for all possible targets.
2024-07-19 00:16:49 +02:00
cmds :
2024-08-16 06:32:08 +02:00
- cmd : "{{.RM}} dist/bin/wsh*"
2024-07-19 00:16:49 +02:00
ignore_error : true
2024-07-18 03:42:49 +02:00
- task : build:wsh:internal
vars :
2024-07-19 00:53:20 +02:00
GOOS : darwin
GOARCH : arm64
2024-07-18 03:42:49 +02:00
- task : build:wsh:internal
vars :
2024-07-19 00:53:20 +02:00
GOOS : darwin
GOARCH : amd64
2024-07-18 03:42:49 +02:00
- task : build:wsh:internal
vars :
2024-07-19 00:53:20 +02:00
GOOS : linux
GOARCH : arm64
2024-07-18 03:42:49 +02:00
- task : build:wsh:internal
vars :
2024-07-19 00:53:20 +02:00
GOOS : linux
GOARCH : amd64
2024-07-18 03:42:49 +02:00
- task : build:wsh:internal
vars :
2024-07-19 00:53:20 +02:00
GOOS : windows
GOARCH : amd64
2024-07-18 03:42:49 +02:00
- task : build:wsh:internal
vars :
2024-07-19 00:53:20 +02:00
GOOS : windows
GOARCH : arm64
2024-08-21 01:48:38 +02:00
deps :
- generate
2024-07-18 03:42:49 +02:00
2024-08-12 19:58:39 +02:00
dev:installwsh :
desc : quick shortcut to rebuild wsh and install for macos arm64
requires :
vars :
- VERSION
cmds :
- task : build:wsh:internal
vars :
GOOS : darwin
GOARCH : arm64
2024-09-06 00:01:28 +02:00
- cp dist/bin/wsh-{{.VERSION}}-darwin.arm64 ~/.waveterm-dev/bin/wsh
2024-08-12 19:58:39 +02:00
2024-07-18 03:42:49 +02:00
build:wsh:internal :
vars :
2024-07-19 00:53:20 +02:00
EXT :
2024-07-18 03:42:49 +02:00
sh : echo {{if eq .GOOS "windows"}}.exe{{end}}
2024-09-04 20:23:39 +02:00
NORMALIZEDARCH :
sh : echo {{if eq .GOARCH "amd64"}}x64{{else}}{{.GOARCH}}{{end}}
2024-07-18 03:42:49 +02:00
requires :
vars :
- GOOS
- GOARCH
- VERSION
2024-06-21 23:44:11 +02:00
sources :
- "cmd/wsh/**/*.go"
- "pkg/**/*.go"
generates :
2024-09-04 20:23:39 +02:00
- dist/bin/wsh-{{.VERSION}}-{{.GOOS}}.{{.NORMALIZEDARCH}}{{.EXT}}
2024-09-20 22:39:06 +02:00
cmd : (CGO_ENABLED=0 GOOS={{.GOOS}} GOARCH={{.GOARCH}} go build -ldflags="-s -w -X main.BuildTime=$({{.DATE}} +'%Y%m%d%H%M') -X main.WaveVersion={{.VERSION}}" -o dist/bin/wsh-{{.VERSION}}-{{.GOOS}}.{{.NORMALIZEDARCH}}{{.EXT}} cmd/wsh/main-wsh.go)
2024-06-21 23:44:11 +02:00
deps :
- go:mod:tidy
2024-07-18 03:42:49 +02:00
internal : true
2024-06-21 23:44:11 +02:00
2024-07-20 01:11:08 +02:00
generate :
desc : Generate Typescript bindings for the Go backend.
cmds :
2024-08-28 03:49:49 +02:00
- go run cmd/generatets/main-generatets.go
- go run cmd/generatego/main-generatego.go
2024-07-20 01:11:08 +02:00
sources :
2024-08-28 03:49:49 +02:00
- "cmd/generatego/*.go"
- "cmd/generatets/*.go"
2024-07-20 01:11:08 +02:00
- "pkg/service/**/*.go"
2024-08-30 20:33:04 +02:00
- "pkg/waveobj/*.go"
2024-07-30 07:35:21 +02:00
- "pkg/wconfig/**/*.go"
2024-07-20 01:11:08 +02:00
- "pkg/wstore/*.go"
- "pkg/wshrpc/**/*.go"
- "pkg/tsgen/**/*.go"
2024-08-28 03:49:49 +02:00
- "pkg/gogen/**/*.go"
- "pkg/wconfig/**/*.go"
2024-08-01 06:27:46 +02:00
- "pkg/eventbus/eventbus.go"
2024-07-20 01:11:08 +02:00
generates :
- frontend/types/gotypes.d.ts
- pkg/wshrpc/wshclient/wshclient.go
- frontend/app/store/services.ts
- frontend/app/store/wshserver.ts
Add release channels (#385)
## 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>
2024-09-17 22:10:35 +02:00
version :
2024-09-18 22:12:34 +02:00
desc : Get the current package version, or bump version if args are present. To pass args to `version.cjs`, add them after `--`. See `version.cjs` for usage definitions for the arguments.
Add release channels (#385)
## 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>
2024-09-17 22:10:35 +02:00
cmd : node version.cjs {{.CLI_ARGS}}
2024-09-18 21:29:47 +02:00
artifacts:upload :
desc : Uploads build artifacts to the staging bucket in S3. To add additional AWS CLI arguments, add them after `--`.
vars :
ORIGIN : "make/"
DESTINATION : "{{.ARTIFACTS_BUCKET}}/{{.VERSION}}"
cmd : aws s3 cp {{.ORIGIN}}/ s3://{{.DESTINATION}}/ --recursive --exclude "*/*" --exclude "builder-*.yml" {{.CLI_ARGS}}
artifacts:download:* :
desc : Downloads the specified artifacts version from the staging bucket. To add additional AWS CLI arguments, add them after `--`.
vars :
DL_VERSION : '{{ replace "v" "" (index .MATCH 0)}}'
ORIGIN : "{{.ARTIFACTS_BUCKET}}/{{.DL_VERSION}}"
DESTINATION : "artifacts/{{.DL_VERSION}}"
cmds :
- '{{.RMRF}} "{{.DESTINATION}}"'
- aws s3 cp s3://{{.ORIGIN}}/ {{.DESTINATION}}/ --recursive {{.CLI_ARGS}}
artifacts:publish:* :
desc : Publishes the specified artifacts version from the staging bucket to the releases bucket. To add additional AWS CLI arguments, add them after `--`.
vars :
UP_VERSION : '{{ replace "v" "" (index .MATCH 0)}}'
ORIGIN : "{{.ARTIFACTS_BUCKET}}/{{.UP_VERSION}}"
DESTINATION : "{{.RELEASES_BUCKET}}"
cmd : |
OUTPUT=$(aws s3 cp s3://{{.ORIGIN}}/ s3://{{.DESTINATION}}/ --recursive {{.CLI_ARGS}})
for line in $OUTPUT; do
PREFIX=${line%%{{.DESTINATION}}*}
SUFFIX=${line:${#PREFIX}}
if [[ -n "$SUFFIX" ]]; then
echo "https://$SUFFIX"
fi
done
2024-08-26 22:17:35 +02:00
yarn :
desc : Runs `yarn`
internal : true
generates :
- node_modules/**/*
- yarn.lock
- .yarn/*
sources :
- yarn.lock
- package.json
2024-08-26 22:35:10 +02:00
- .yarnrc.yml
2024-09-20 22:39:06 +02:00
cmd : yarn
2024-08-26 22:17:35 +02:00
2024-05-10 05:24:24 +02:00
go:mod:tidy :
2024-07-18 07:39:22 +02:00
desc : Runs `go mod tidy`
2024-05-10 05:24:24 +02:00
internal : true
generates :
- go.sum
sources :
- go.mod
2024-09-20 22:39:06 +02:00
cmd : go mod tidy