provisioning/justfiles/release.just

192 lines
6.5 KiB
Plaintext
Raw Normal View History

2025-10-07 11:12:02 +01:00
# Release Module - Release management
# ===================================
# Show detailed release help
@release-help:
echo "🚀 RELEASE MODULE HELP"
echo "======================"
echo ""
echo "This module handles release management including:"
echo "• Complete release creation with version tagging"
echo "• Draft releases for testing"
echo "• Artifact upload to GitHub and registries"
echo "• Release notifications"
echo "• Package registry updates"
echo ""
echo "RECIPES:"
echo " release Create complete release (VERSION required)"
echo " release-draft Create draft release for testing"
echo " upload-artifacts Upload release artifacts"
echo " notify-release Send release notifications"
echo " update-registry Update package manager registries"
echo " release-notes Generate release notes"
echo ""
echo "REQUIREMENTS:"
echo " VERSION must be specified for releases"
echo " GitHub CLI (gh) must be configured"
echo " Registry credentials must be available"
echo ""
echo "EXAMPLES:"
echo " just release VERSION=2.1.0 # Complete release"
echo " just release-draft VERSION=2.1.0 # Draft release"
echo " just upload-artifacts # Upload only"
echo " just release-notes VERSION=2.1.0 # Generate notes"
# Create a complete release (requires VERSION)
@release VERSION="":
#!/usr/bin/env bash
if [ -z "{{VERSION}}" ]; then
echo "❌ Error: VERSION must be specified for release"
echo "Usage: just release VERSION=2.1.0"
exit 1
fi
echo "🚀 Creating release {{VERSION}}..."
{{nu}} {{tools_dir}}/release/create-release.nu \
--version {{VERSION}} \
--asset-dir {{packages_dir}} \
--generate-changelog \
--push-tag \
--auto-upload \
--verbose={{verbose}}
echo "✅ Release {{VERSION}} created successfully"
# Create a draft release
@release-draft VERSION="":
#!/usr/bin/env bash
if [ -z "{{VERSION}}" ]; then
echo "❌ Error: VERSION must be specified for draft release"
echo "Usage: just release-draft VERSION=2.1.0-rc1"
exit 1
fi
echo "📝 Creating draft release {{VERSION}}..."
{{nu}} {{tools_dir}}/release/create-release.nu \
--version {{VERSION}} \
--draft \
--asset-dir {{packages_dir}} \
--generate-changelog \
--push-tag \
--verbose={{verbose}}
echo "✅ Draft release {{VERSION}} created successfully"
# Upload release artifacts
@upload-artifacts VERSION="":
#!/usr/bin/env bash
RELEASE_VERSION="{{VERSION}}"
if [ -z "$RELEASE_VERSION" ]; then
RELEASE_VERSION="{{version}}"
fi
echo "⬆️ Uploading release artifacts for v$RELEASE_VERSION..."
{{nu}} {{tools_dir}}/release/upload-artifacts.nu \
--artifacts-dir {{packages_dir}} \
--release-tag "v$RELEASE_VERSION" \
--targets github,docker \
--verify-uploads \
--verbose={{verbose}}
echo "✅ Artifacts uploaded successfully"
# Send release notifications
@notify-release VERSION="":
#!/usr/bin/env bash
RELEASE_VERSION="{{VERSION}}"
if [ -z "$RELEASE_VERSION" ]; then
RELEASE_VERSION="{{version}}"
fi
echo "📢 Sending release notifications for v$RELEASE_VERSION..."
{{nu}} {{tools_dir}}/release/notify-users.nu \
--channels slack,discord \
--release-version "$RELEASE_VERSION" \
--urgent=false \
--verbose={{verbose}}
echo "✅ Release notifications sent"
# Update package manager registries
@update-registry VERSION="":
#!/usr/bin/env bash
RELEASE_VERSION="{{VERSION}}"
if [ -z "$RELEASE_VERSION" ]; then
RELEASE_VERSION="{{version}}"
fi
echo "📦 Updating package registries for v$RELEASE_VERSION..."
{{nu}} {{tools_dir}}/release/update-registry.nu \
--registries homebrew \
--version "$RELEASE_VERSION" \
--auto-commit \
--verbose={{verbose}}
echo "✅ Package registries updated"
# Generate release notes
@release-notes VERSION="":
#!/usr/bin/env bash
if [ -z "{{VERSION}}" ]; then
echo "❌ Error: VERSION must be specified for release notes"
echo "Usage: just release-notes VERSION=2.1.0"
exit 1
fi
echo "📋 Generating release notes for {{VERSION}}..."
{{nu}} {{tools_dir}}/release/generate-notes.nu \
--version {{VERSION}} \
--format markdown \
--include-contributors \
--include-commits \
--output {{packages_dir}}/release-notes-{{VERSION}}.md \
--verbose={{verbose}}
echo "✅ Release notes generated: {{packages_dir}}/release-notes-{{VERSION}}.md"
# Pre-release checks
@release-check VERSION="":
#!/usr/bin/env bash
if [ -z "{{VERSION}}" ]; then
echo "❌ Error: VERSION must be specified for release check"
echo "Usage: just release-check VERSION=2.1.0"
exit 1
fi
echo "🔍 Running pre-release checks for {{VERSION}}..."
# Check if version tag already exists
if git rev-parse "v{{VERSION}}" >/dev/null 2>&1; then
echo "❌ Error: Tag v{{VERSION}} already exists"
exit 1
fi
# Check if working directory is clean
if ! git diff-index --quiet HEAD --; then
echo "❌ Error: Working directory is not clean"
git status --porcelain
exit 1
fi
# Check if on main branch
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$CURRENT_BRANCH" != "main" ] && [ "$CURRENT_BRANCH" != "master" ]; then
echo "⚠️ Warning: Not on main/master branch (currently on: $CURRENT_BRANCH)"
fi
echo "✅ Pre-release checks passed for {{VERSION}}"
# Complete release workflow
@release-workflow VERSION="":
#!/usr/bin/env bash
if [ -z "{{VERSION}}" ]; then
echo "❌ Error: VERSION must be specified for release workflow"
echo "Usage: just release-workflow VERSION=2.1.0"
exit 1
fi
echo "🚀 Starting complete release workflow for {{VERSION}}..."
just release-check {{VERSION}}
just clean
just build-all
just package-all
just release {{VERSION}}
just upload-artifacts {{VERSION}}
just update-registry {{VERSION}}
just notify-release {{VERSION}}
echo "✅ Complete release workflow finished for {{VERSION}}"
# List recent releases
@release-list:
echo "📋 Recent Releases"
echo "=================="
git tag --sort=-version:refname | head -10