CLI releases
This commit is contained in:
parent
effa388025
commit
75b7dac0d7
|
|
@ -60,16 +60,41 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: "1.25.7"
|
||||
|
||||
- name: Build Go binaries
|
||||
- name: Compute next version
|
||||
run: |
|
||||
CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o ./bin/cairn-server ./cmd/cairn-server
|
||||
CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o ./bin/cairn ./cmd/cairn
|
||||
LATEST_TAG=$(git tag --list 'v*' --sort=-v:refname | head -n1)
|
||||
if [ -z "${LATEST_TAG}" ]; then
|
||||
NEXT="v0.1.0"
|
||||
else
|
||||
# Bump patch: v0.1.2 -> v0.1.3
|
||||
PREFIX="${LATEST_TAG%.*}"
|
||||
PATCH="${LATEST_TAG##*.}"
|
||||
NEXT="${PREFIX}.$((PATCH + 1))"
|
||||
fi
|
||||
echo "VERSION=${NEXT}" >> "$GITHUB_ENV"
|
||||
echo "Next version: ${NEXT}"
|
||||
|
||||
- name: Build server binary
|
||||
run: CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o ./bin/cairn-server ./cmd/cairn-server
|
||||
|
||||
- name: Cross-compile CLI
|
||||
run: |
|
||||
LDFLAGS="-w -s -X main.version=${VERSION}"
|
||||
for pair in linux/amd64 linux/arm64 darwin/amd64 darwin/arm64; do
|
||||
GOOS="${pair%/*}"
|
||||
GOARCH="${pair#*/}"
|
||||
CGO_ENABLED=0 GOOS="${GOOS}" GOARCH="${GOARCH}" \
|
||||
go build -ldflags="${LDFLAGS}" -o "./bin/cairn-${GOOS}-${GOARCH}" ./cmd/cairn
|
||||
done
|
||||
cp ./bin/cairn-linux-amd64 ./bin/cairn
|
||||
|
||||
- name: Install Docker CLI
|
||||
run: |
|
||||
|
|
@ -98,6 +123,26 @@ jobs:
|
|||
docker push "${REGISTRY}/cairn:${GITHUB_SHA}"
|
||||
docker push "${REGISTRY}/cairn:latest"
|
||||
|
||||
- name: Create git tag
|
||||
run: |
|
||||
git tag "${VERSION}"
|
||||
git push origin "${VERSION}"
|
||||
|
||||
- name: Publish CLI to package registry
|
||||
run: |
|
||||
PKG="${GITHUB_SERVER_URL}/api/packages/${GITHUB_REPOSITORY_OWNER}/generic/cairn"
|
||||
AUTH="Authorization: token ${{ secrets.PACKAGES_TOKEN }}"
|
||||
for file in ./bin/cairn-*; do
|
||||
filename="$(basename "${file}")"
|
||||
curl -fsSL -X PUT -H "${AUTH}" --upload-file "${file}" "${PKG}/${VERSION}/${filename}"
|
||||
done
|
||||
# Overwrite "latest": delete old files then upload
|
||||
for file in ./bin/cairn-*; do
|
||||
filename="$(basename "${file}")"
|
||||
curl -sS -X DELETE -H "${AUTH}" "${PKG}/latest/${filename}" || true
|
||||
curl -fsSL -X PUT -H "${AUTH}" --upload-file "${file}" "${PKG}/latest/${filename}"
|
||||
done
|
||||
|
||||
- name: Update infra
|
||||
uses: https://git.ts.mattnite.net/mattnite/infra/actions/update-image@main
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ import (
|
|||
"path/filepath"
|
||||
)
|
||||
|
||||
var version = "dev"
|
||||
|
||||
func main() {
|
||||
if len(os.Args) < 2 {
|
||||
usage()
|
||||
|
|
@ -18,6 +20,9 @@ func main() {
|
|||
}
|
||||
|
||||
switch os.Args[1] {
|
||||
case "version":
|
||||
fmt.Println(version)
|
||||
return
|
||||
case "upload":
|
||||
if err := cmdUpload(os.Args[2:]); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "error: %v\n", err)
|
||||
|
|
@ -69,6 +74,7 @@ Upload flags:
|
|||
-crash-message MSG Crash message (optional)
|
||||
-stack-trace TRACE Stack trace text (optional)
|
||||
-seed VALUE Simulation seed for reproducibility (optional, stored in metadata)
|
||||
-target NAME Target name/platform (optional, stored in metadata)
|
||||
`)
|
||||
}
|
||||
|
||||
|
|
@ -83,6 +89,7 @@ func cmdUpload(args []string) error {
|
|||
crashMessage string
|
||||
stackTrace string
|
||||
seed string
|
||||
target string
|
||||
)
|
||||
|
||||
for i := 0; i < len(args); i++ {
|
||||
|
|
@ -114,6 +121,9 @@ func cmdUpload(args []string) error {
|
|||
case "-seed":
|
||||
i++
|
||||
seed = args[i]
|
||||
case "-target":
|
||||
i++
|
||||
target = args[i]
|
||||
default:
|
||||
return fmt.Errorf("unknown flag: %s", args[i])
|
||||
}
|
||||
|
|
@ -135,8 +145,15 @@ func cmdUpload(args []string) error {
|
|||
if stackTrace != "" {
|
||||
meta["stack_trace"] = stackTrace
|
||||
}
|
||||
md := map[string]any{}
|
||||
if seed != "" {
|
||||
meta["metadata"] = map[string]any{"seed": seed}
|
||||
md["seed"] = seed
|
||||
}
|
||||
if target != "" {
|
||||
md["target"] = target
|
||||
}
|
||||
if len(md) > 0 {
|
||||
meta["metadata"] = md
|
||||
}
|
||||
|
||||
metaJSON, err := json.Marshal(meta)
|
||||
|
|
|
|||
Loading…
Reference in New Issue