#!/bin/bash set -euo pipefail # rdev release script # Usage: ./scripts/release.sh "" # Example: ./scripts/release.sh v0.8.1 "Fix worker ID config bug" VERSION="${1:-}" MESSAGE="${2:-}" if [[ -z "$VERSION" || -z "$MESSAGE" ]]; then echo "Usage: $0 \"\"" echo "Example: $0 v0.8.1 \"Fix worker ID config bug\"" exit 1 fi # Ensure version starts with 'v' if [[ ! "$VERSION" =~ ^v ]]; then VERSION="v$VERSION" fi SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" cd "$REPO_ROOT" echo "=== rdev release $VERSION ===" echo "" # 1. Upsert changelog entry CHANGELOG_DIR="$REPO_ROOT/changelog" mkdir -p "$CHANGELOG_DIR" DATE=$(date +%Y-%m-%d) CHANGELOG_FILE="$CHANGELOG_DIR/$VERSION.md" echo "📝 Writing changelog: $CHANGELOG_FILE" cat > "$CHANGELOG_FILE" << EOF # $VERSION **Released:** $DATE ## Changes $MESSAGE --- **Image:** \`ghcr.io/orchard9/rdev-api:$VERSION\` EOF # 2. Update deployment YAML with new version echo "📦 Updating deployment to $VERSION" sed -i.bak "s|image: ghcr.io/orchard9/rdev-api:v[0-9.]*|image: ghcr.io/orchard9/rdev-api:$VERSION|g" \ "$REPO_ROOT/deployments/k8s/base/rdev-api.yaml" rm -f "$REPO_ROOT/deployments/k8s/base/rdev-api.yaml.bak" # 3. Commit and push echo "📤 Committing and pushing" git add changelog/ deployments/k8s/base/rdev-api.yaml git commit -m "release: $VERSION - $MESSAGE" git push origin main # 4. Build for linux/amd64 echo "🔨 Building binary for linux/amd64" GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w -X main.version=$VERSION" -o rdev-api ./cmd/rdev-api echo "🐳 Building container image" docker buildx build --platform linux/amd64 -f Dockerfile.api.prebuild -t "ghcr.io/orchard9/rdev-api:$VERSION" --load . # 5. Push to ghcr.io echo "🚀 Pushing to ghcr.io" docker push "ghcr.io/orchard9/rdev-api:$VERSION" # 6. Tag the commit echo "🏷️ Tagging commit as $VERSION" git tag -a "$VERSION" -m "$MESSAGE" git push origin "$VERSION" # Cleanup binary rm -f rdev-api echo "" echo "=== Release $VERSION complete ===" echo "" echo "To deploy to k3s:" echo " export KUBECONFIG=~/.kube/orchard9-k3sf.yaml" echo " kubectl apply -f deployments/k8s/base/rdev-api.yaml" echo " kubectl rollout restart -n rdev deployment/rdev-api"