diff --git a/.mise/tasks/dev/install b/.mise/tasks/dev/install new file mode 100755 index 00000000..2543fc26 --- /dev/null +++ b/.mise/tasks/dev/install @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -euo pipefail + +#MISE description="Build and install uncloud binaries on dev machines, restart daemon if running" +#MISE depends=["build:uncloudd-amd64", "build:uncloudd-arm64"] +#MISE raw=true +#USAGE arg "" var=#true var_min=1 help="Hosts in [user@]host[/arch] format, arch defaults to amd64" + +for arg in ${usage_hosts}; do + if [[ "$arg" == */* ]]; then + host="${arg%/*}" + arch="${arg##*/}" + else + host="$arg" + arch="amd64" + fi + + binary="uncloudd-linux-${arch}" + echo "==> Installing uncloudd on ${host} (${arch})..." + scp "$binary" "${host}:/tmp/" + ssh "$host" "sudo install /tmp/${binary} /usr/local/bin/uncloudd && rm /tmp/${binary} && sudo systemctl try-restart uncloud" +done + +rm -f uncloudd-linux-amd64 uncloudd-linux-arm64 diff --git a/.mise/tasks/dev/reset b/.mise/tasks/dev/reset new file mode 100755 index 00000000..bf6b90e2 --- /dev/null +++ b/.mise/tasks/dev/reset @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -euo pipefail + +#MISE description="Stop uncloud daemon and wipe state on dev machines" +#USAGE arg "" var=#true var_min=1 help="Hosts in [user@]host format" + +for host in ${usage_hosts}; do + # Strip optional /arch suffix since reset doesn't need it. + host="${host%/*}" + echo "==> Resetting ${host}..." + ssh "$host" "sudo systemctl stop uncloud && sudo rm -rf /var/lib/uncloud" +done + +echo "==> Done" diff --git a/HACKING.md b/HACKING.md index 8c928f46..fdab9690 100644 --- a/HACKING.md +++ b/HACKING.md @@ -78,6 +78,24 @@ If tests leave leftover containers, clean them up with: make test-clean ``` +### Manual testing on dev machines + +After making changes to the daemon code, you may want to test them in your dev cluster. Build and install `uncloudd` on +one or multiple dev machines over SSH with: + +```shell +mise run dev:install user@host1 user@host2/arm64 +``` + +It will also restart the `uncloud.service` daemon on those machines to pick up the new version. The host format is +`[user@]host[/arch]`. The architecture of a machine defaults to `amd64` if not specified. + +To stop the daemon and wipe all Uncloud data on the dev machines, run: + +```shell +mise run dev:reset user@host1 user@host2 +``` + ## Linting and formatting Lint and format the code: diff --git a/Makefile b/Makefile index 106b3e6e..ad490b98 100644 --- a/Makefile +++ b/Makefile @@ -3,35 +3,6 @@ CORROSION_IMAGE ?= ghcr.io/psviderski/corrosion:latest UCIND_IMAGE ?= ghcr.io/psviderski/ucind:latest -update-dev: - GOOS=linux GOARCH=amd64 go build -o uncloudd-linux-amd64 ./cmd/uncloudd && \ - scp uncloudd-linux-amd64 spy@192.168.40.243:~/ && \ - ssh spy@192.168.40.243 sudo install ./uncloudd-linux-amd64 /usr/local/bin/uncloudd - scp uncloudd-linux-amd64 spy@192.168.40.176:~/ && \ - ssh spy@192.168.40.176 sudo install ./uncloudd-linux-amd64 /usr/local/bin/uncloudd && \ - rm uncloudd-linux-amd64 -# GOOS=linux GOARCH=arm64 go build -o uncloudd-linux-arm64 ./cmd/uncloudd && \ -# scp uncloudd-linux-arm64 ubuntu@152.67.101.197:~/ && \ -# ssh ubuntu@152.67.101.197 sudo install ./uncloudd-linux-arm64 /usr/local/bin/uncloudd && \ -# rm uncloudd-linux-arm64 - -update-restart-dev: - GOOS=linux GOARCH=amd64 go build -o uncloudd-linux-amd64 ./cmd/uncloudd && \ - scp uncloudd-linux-amd64 spy@192.168.40.243:~/ && \ - ssh spy@192.168.40.243 "sudo install ./uncloudd-linux-amd64 /usr/local/bin/uncloudd && sudo systemctl restart uncloud" && \ - scp uncloudd-linux-amd64 spy@192.168.40.176:~/ && \ - ssh spy@192.168.40.176 "sudo install ./uncloudd-linux-amd64 /usr/local/bin/uncloudd && sudo systemctl restart uncloud" && \ - rm uncloudd-linux-amd64 -# GOOS=linux GOARCH=arm64 go build -o uncloudd-linux-arm64 ./cmd/uncloudd && \ -# scp uncloudd-linux-arm64 ubuntu@152.67.101.197:~/ && \ -# ssh ubuntu@152.67.101.197 "sudo install ./uncloudd-linux-arm64 /usr/local/bin/uncloudd && sudo systemctl restart uncloud" && \ -# rm uncloudd-linux-arm64 - -reset-dev: - ssh spy@192.168.40.243 "sudo systemctl stop uncloud && sudo rm -rf /var/lib/uncloud" - ssh spy@192.168.40.176 "sudo systemctl stop uncloud && sudo rm -rf /var/lib/uncloud" - ssh ubuntu@152.67.101.197 "sudo systemctl stop uncloud && sudo rm -rf /var/lib/uncloud" - demo-reset: rm -fv ~/.config/uncloud/config.yaml ssh ubuntu@152.67.101.197 "AUTO_CONFIRM=true sudo -E uncloud-uninstall && docker rmi caddy:2.9.1" diff --git a/mise.toml b/mise.toml index 57f74ed9..54599367 100644 --- a/mise.toml +++ b/mise.toml @@ -13,13 +13,31 @@ protoc-gen-go-grpc = "1.5.1" [env] _.file = ".env" +[tasks."build:uncloudd-amd64"] +description = "Build uncloudd for linux/amd64" +run = """ +VERSION=$(git describe --tags --always --dirty) \ +GOOS=linux GOARCH=amd64 go build -ldflags "-X github.com/psviderski/uncloud/internal/version.version=$VERSION" \ + -o uncloudd-linux-amd64 ./cmd/uncloudd +""" +outputs = ["uncloudd-linux-amd64"] + +[tasks."build:uncloudd-arm64"] +description = "Build uncloudd for linux/arm64" +run = """ +VERSION=$(git describe --tags --always --dirty) \ +GOOS=linux GOARCH=arm64 go build -ldflags "-X github.com/psviderski/uncloud/internal/version.version=$VERSION" \ + -o uncloudd-linux-arm64 ./cmd/uncloudd +""" +outputs = ["uncloudd-linux-arm64"] + +[tasks."mise:lock"] +description = "Update mise.lock with hashes for all platforms" +run = "mise lock --platform linux-x64,macos-arm64" + [tasks.proto] description = "Regenerate gRPC API code from .proto files" run = """ protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative \ --proto_path=. --proto_path=internal/machine/api/vendor internal/machine/api/pb/*.proto """ - -[tasks.mise-lock] -description = "Update mise.lock with hashes for all platforms" -run = "mise lock --platform linux-x64,macos-arm64"