rdev/scripts/release.sh
jordan c86516c53a feat: Add multi-domain support with auto-generated slugs for landing page cookbook
Landing page cookbook implementation (Weeks 1-4):

Domain Infrastructure:
- Add project_domains table with migration (013_project_domains.sql)
- Add ProjectDomain model with domain types (primary_auto, primary_custom, alias)
- Add SlugGenerator and ProjectDomainRepository interfaces
- Implement postgres adapters for domain and slug management

Service Layer:
- Add domain CRUD methods to ProjectInfraService
- Generate 8-char random slugs for auto-domains
- Support custom subdomains during project creation
- Add site_live health check to project status
- Trigger CI build after template seeding

Handler Updates:
- Add DomainService interface and adapter pattern
- Rewrite domain handlers to use database-backed service
- Add proper error handling for duplicate/missing domains

CI Integration:
- Add TriggerBuild to CIProvider interface
- Implement TriggerBuild in Woodpecker adapter
- Manually trigger initial build after template seed

Cookbook & Scripts:
- Add landing-test.sh script for E2E testing
- Add release.sh for version releases
- Add logs.sh for quick log access

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 12:55:59 -07:00

89 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# rdev release script
# Usage: ./scripts/release.sh <version> "<changelog message>"
# 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 <version> \"<changelog message>\""
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"