#!/usr/bin/env bash # Lokalt släppbygge för waydock (körs på brasse-linux01, x64). # ./release.sh v0.2.0 # Taggar, bygger release-binären, skapar Gitea-release med binären som # asset och uppdaterar den rullande "latest"-releasen. set -euo pipefail TAG="${1:?användning: ./release.sh vX.Y.Z}" [[ "$TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "taggen ska vara vX.Y.Z"; exit 1; } OWNER=brasse REPO=waydock API=https://gitea.brasse-pc.eu/api/v1 TOKEN="${GITEA_TOKEN:-$(jq -r .token ~/.config/giteactl/config.json)}" BIN=target/release/waydock ASSET="waydock-${TAG}-linux-x64" # versionen i Cargo.toml ska matcha taggen CARGO_VER=$(grep -m1 '^version' Cargo.toml | cut -d'"' -f2) [[ "v$CARGO_VER" == "$TAG" ]] || { echo "Cargo.toml har $CARGO_VER, taggen är $TAG — uppdatera först"; exit 1; } echo "==> bygger $TAG" cargo build --release --locked cargo test --locked echo "==> taggar + pushar" git tag -a "$TAG" -m "waydock $TAG" git push origin master "$TAG" api() { # method path [json|@fil] local m=$1 p=$2; shift 2 curl -fsS -X "$m" -H "Authorization: token $TOKEN" "$@" "$API$p" } make_release() { # tag namn prerelease api POST "/repos/$OWNER/$REPO/releases" \ -H 'Content-Type: application/json' \ -d "{\"tag_name\":\"$1\",\"name\":\"$2\",\"body\":\"waydock $TAG — linux-x64.\\n\\nInstallera:\\n\`\`\`\\ncurl -fsSL https://gitea.brasse-pc.eu/brasse/waydock/raw/branch/master/install.sh | sh\\n\`\`\`\"}" } upload() { # release-id filnamn api POST "/repos/$OWNER/$REPO/releases/$1/assets?name=$2" \ -F "attachment=@$BIN;filename=$2" > /dev/null } echo "==> skapar release $TAG" REL_ID=$(make_release "$TAG" "waydock $TAG" | jq .id) upload "$REL_ID" "$ASSET" echo "==> uppdaterar rullande latest" OLD=$(api GET "/repos/$OWNER/$REPO/releases/tags/latest" 2>/dev/null | jq -r .id) || OLD="" [[ -n "$OLD" && "$OLD" != null ]] && api DELETE "/repos/$OWNER/$REPO/releases/$OLD" || true git tag -f latest && git push -f origin latest LATEST_ID=$(make_release "latest" "waydock latest ($TAG)" | jq .id) upload "$LATEST_ID" "waydock-latest-linux-x64" echo "==> klart: https://gitea.brasse-pc.eu/$OWNER/$REPO/releases"