mirror of
https://github.com/ivuorinen/gh-action-readme.git
synced 2026-01-26 11:14:04 +00:00
* chore(lint): funcorder * chore(lint): yamlfmt, ignored broken test yaml files * chore(tests): tests do not output garbage, add coverage * chore(lint): fix editorconfig violations * chore(lint): move from eclint to editorconfig-checker * chore(lint): add pre-commit, run and fix * chore(ci): we use renovate to manage updates
138 lines
3.4 KiB
Bash
Executable File
138 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Release script for gh-action-readme
|
|
# Usage: ./scripts/release.sh [version]
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Functions
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Check if we're in the right directory
|
|
if [[ ! -f ".goreleaser.yaml" ]]; then
|
|
log_error "This script must be run from the project root directory"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if GoReleaser is installed
|
|
if ! command -v goreleaser &>/dev/null; then
|
|
log_error "GoReleaser is not installed. Install it first:"
|
|
echo " brew install goreleaser/tap/goreleaser"
|
|
echo " or visit: https://goreleaser.com/install/"
|
|
exit 1
|
|
fi
|
|
|
|
# Get version from command line or prompt
|
|
VERSION="$1"
|
|
if [[ -z $VERSION ]]; then
|
|
echo -n "Enter version (e.g., v1.0.0): "
|
|
read -r VERSION
|
|
fi
|
|
|
|
# Validate version format
|
|
if [[ ! $VERSION =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
log_error "Version must be in format vX.Y.Z (e.g., v1.0.0)"
|
|
exit 1
|
|
fi
|
|
|
|
log_info "Preparing release $VERSION"
|
|
|
|
# Check if we're on main branch
|
|
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
if [[ $CURRENT_BRANCH != "main" ]]; then
|
|
log_warning "You're not on the main branch (current: $CURRENT_BRANCH)"
|
|
echo -n "Continue anyway? (y/N): "
|
|
read -r CONTINUE
|
|
if [[ $CONTINUE != "y" && $CONTINUE != "Y" ]]; then
|
|
log_info "Aborted"
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# Check for uncommitted changes
|
|
if [[ -n $(git status --porcelain) ]]; then
|
|
log_error "You have uncommitted changes. Please commit or stash them first."
|
|
git status --short
|
|
exit 1
|
|
fi
|
|
|
|
# Update CHANGELOG.md
|
|
log_info "Please update CHANGELOG.md with changes for $VERSION"
|
|
echo -n "Press Enter when ready to continue..."
|
|
read -r
|
|
|
|
# Run tests and linting
|
|
log_info "Running tests and linting..."
|
|
if ! go test ./...; then
|
|
log_error "Tests failed. Please fix them before releasing."
|
|
exit 1
|
|
fi
|
|
|
|
if ! golangci-lint run; then
|
|
log_error "Linting failed. Please fix issues before releasing."
|
|
exit 1
|
|
fi
|
|
|
|
# Build and test GoReleaser config
|
|
log_info "Testing GoReleaser configuration..."
|
|
if ! goreleaser check; then
|
|
log_error "GoReleaser configuration is invalid"
|
|
exit 1
|
|
fi
|
|
|
|
# Test build without releasing
|
|
log_info "Testing release build..."
|
|
if ! goreleaser build --snapshot --clean; then
|
|
log_error "Release build failed"
|
|
exit 1
|
|
fi
|
|
|
|
log_success "Build test completed successfully"
|
|
|
|
# Commit any pending changes (like CHANGELOG updates)
|
|
if [[ -n $(git status --porcelain) ]]; then
|
|
log_info "Committing pending changes..."
|
|
git add .
|
|
git commit -m "chore: prepare release $VERSION"
|
|
fi
|
|
|
|
# Create and push tag
|
|
log_info "Creating and pushing tag $VERSION..."
|
|
git tag -a "$VERSION" -m "Release $VERSION"
|
|
git push origin "$VERSION"
|
|
|
|
log_success "Tag $VERSION created and pushed"
|
|
log_info "GitHub Actions will now build and publish the release automatically"
|
|
log_info "Check the progress at: https://github.com/ivuorinen/gh-action-readme/actions"
|
|
|
|
# Open release page
|
|
if command -v open &>/dev/null; then
|
|
log_info "Opening release page..."
|
|
open "https://github.com/ivuorinen/gh-action-readme/releases/tag/$VERSION"
|
|
elif command -v xdg-open &>/dev/null; then
|
|
log_info "Opening release page..."
|
|
xdg-open "https://github.com/ivuorinen/gh-action-readme/releases/tag/$VERSION"
|
|
fi
|
|
|
|
log_success "Release process initiated for $VERSION"
|