192 lines
6.5 KiB
Plaintext
192 lines
6.5 KiB
Plaintext
# 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 |