mirror of
https://github.com/DeBrosOfficial/network.git
synced 2025-12-11 07:38:49 +00:00
chore: update GitHub Actions to use latest artifact actions and add release script
- Upgraded `actions/upload-artifact` and `actions/download-artifact` to version 4 in the release workflow for improved functionality. - Introduced a new `release.sh` script to manage the complete release workflow, including versioning, branch checks, and tagging for both stable and nightly releases.
This commit is contained in:
parent
795ab01dca
commit
d59b65e0b4
4
.github/workflows/release.yaml
vendored
4
.github/workflows/release.yaml
vendored
@ -36,7 +36,7 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: release-artifacts
|
||||
path: dist/
|
||||
@ -53,7 +53,7 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: release-artifacts
|
||||
path: dist/
|
||||
|
||||
289
scripts/release.sh
Executable file
289
scripts/release.sh
Executable file
@ -0,0 +1,289 @@
|
||||
#!/bin/bash
|
||||
|
||||
# DeBros Network Interactive Release Script
|
||||
# Handles the complete release workflow for both stable and nightly releases
|
||||
|
||||
set -e
|
||||
|
||||
# Color codes
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
CYAN='\033[0;36m'
|
||||
BLUE='\033[38;2;2;128;175m'
|
||||
YELLOW='\033[1;33m'
|
||||
NOCOLOR='\033[0m'
|
||||
|
||||
log() { echo -e "${CYAN}[$(date '+%Y-%m-%d %H:%M:%S')]${NOCOLOR} $1"; }
|
||||
error() { echo -e "${RED}[ERROR]${NOCOLOR} $1"; }
|
||||
success() { echo -e "${GREEN}[SUCCESS]${NOCOLOR} $1"; }
|
||||
warning() { echo -e "${YELLOW}[WARNING]${NOCOLOR} $1"; }
|
||||
info() { echo -e "${BLUE}ℹ${NOCOLOR} $1"; }
|
||||
|
||||
display_banner() {
|
||||
echo -e "${BLUE}========================================================================${NOCOLOR}"
|
||||
echo -e "${CYAN}
|
||||
____ ____ _ _ _ _
|
||||
| _ \\ ___| __ ) _ __ ___ ___ | \\ | | ___| |___ _____ _ __| | __
|
||||
| | | |/ _ \\ _ \\| __/ _ \\/ __| | \\| |/ _ \\ __\\ \\ /\\ / / _ \\| __| |/ /
|
||||
| |_| | __/ |_) | | | (_) \\__ \\ | |\\ | __/ |_ \\ V V / (_) | | | <
|
||||
|____/ \\___|____/|_| \\___/|___/ |_| \\_|\\___|\\__| \\_/\\_/ \\___/|_| |_|\\_\\
|
||||
${NOCOLOR}"
|
||||
echo -e "${BLUE}========================================================================${NOCOLOR}"
|
||||
echo -e "${GREEN} Release Management Tool${NOCOLOR}"
|
||||
echo -e "${BLUE}========================================================================${NOCOLOR}"
|
||||
}
|
||||
|
||||
check_git_clean() {
|
||||
if ! git diff-index --quiet HEAD --; then
|
||||
error "Working directory has uncommitted changes. Please commit or stash them first."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_current_branch() {
|
||||
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||
echo "$CURRENT_BRANCH"
|
||||
}
|
||||
|
||||
get_latest_version() {
|
||||
git tag --list 'v*' --sort=-version:refname | head -1 | sed 's/^v//' || echo "0.0.0"
|
||||
}
|
||||
|
||||
increment_version() {
|
||||
local version=$1
|
||||
local bump=$2
|
||||
|
||||
IFS='.' read -r major minor patch <<< "$version"
|
||||
|
||||
case $bump in
|
||||
major)
|
||||
major=$((major + 1))
|
||||
minor=0
|
||||
patch=0
|
||||
;;
|
||||
minor)
|
||||
minor=$((minor + 1))
|
||||
patch=0
|
||||
;;
|
||||
patch)
|
||||
patch=$((patch + 1))
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "$major.$minor.$patch"
|
||||
}
|
||||
|
||||
prompt_release_type() {
|
||||
echo "" >&2
|
||||
echo -e "${CYAN}=== Release Type ===${NOCOLOR}" >&2
|
||||
echo "1) Stable Release (merge nightly → main, tag on main)" >&2
|
||||
echo "2) Nightly Release (tag directly on nightly)" >&2
|
||||
echo "3) Exit" >&2
|
||||
echo "" >&2
|
||||
read -p "Choose release type (1-3): " release_type >&2
|
||||
echo "$release_type"
|
||||
}
|
||||
|
||||
prompt_version_strategy() {
|
||||
echo "" >&2
|
||||
echo -e "${CYAN}=== Version Strategy ===${NOCOLOR}" >&2
|
||||
local latest=$(get_latest_version)
|
||||
echo "Latest version: $latest" >&2
|
||||
echo "" >&2
|
||||
echo "1) Major bump ($latest → $(increment_version $latest major))" >&2
|
||||
echo "2) Minor bump ($latest → $(increment_version $latest minor))" >&2
|
||||
echo "3) Patch bump ($latest → $(increment_version $latest patch))" >&2
|
||||
echo "4) Custom version" >&2
|
||||
echo "" >&2
|
||||
read -p "Choose version strategy (1-4): " version_strategy >&2
|
||||
echo "$version_strategy"
|
||||
}
|
||||
|
||||
prompt_custom_version() {
|
||||
read -p "Enter custom version (e.g., 0.52.1): " custom_version >&2
|
||||
if [[ ! $custom_version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
error "Invalid version format. Must be X.Y.Z"
|
||||
exit 1
|
||||
fi
|
||||
echo "$custom_version"
|
||||
}
|
||||
|
||||
confirm_release() {
|
||||
local version=$1
|
||||
local target=$2
|
||||
local msg=$3
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}=== Release Summary ===${NOCOLOR}"
|
||||
echo "Version: $version"
|
||||
echo "Target: $target"
|
||||
echo "Message: $msg"
|
||||
echo ""
|
||||
read -p "Is this correct? (yes/no): " confirm
|
||||
|
||||
if [[ "$confirm" != "yes" ]]; then
|
||||
error "Release cancelled."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
handle_stable_release() {
|
||||
local version=$1
|
||||
|
||||
log "Stable Release: v$version"
|
||||
echo ""
|
||||
|
||||
# Check if on nightly
|
||||
if [[ "$CURRENT_BRANCH" != "nightly" ]]; then
|
||||
warning "Not on nightly branch. Checking out nightly..."
|
||||
git checkout nightly
|
||||
git pull origin nightly
|
||||
else
|
||||
git pull origin nightly
|
||||
fi
|
||||
|
||||
log "Current branch: nightly"
|
||||
info "Next step: Create PR from nightly → main in GitHub"
|
||||
info "Once PR is merged, this script will create the release tag"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Have you already merged the PR to main? (yes/no)${NOCOLOR}"
|
||||
read -p "> " pr_merged
|
||||
|
||||
if [[ "$pr_merged" != "yes" ]]; then
|
||||
warning "Please create and merge the PR first, then run this script again."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Verify main is updated
|
||||
log "Switching to main and pulling latest..."
|
||||
git checkout main
|
||||
git pull origin main
|
||||
|
||||
# Create tag
|
||||
log "Creating tag v$version on main..."
|
||||
git tag -a "v$version" -m "Release v$version"
|
||||
|
||||
success "Tag created: v$version"
|
||||
}
|
||||
|
||||
handle_nightly_release() {
|
||||
local version=$1
|
||||
|
||||
log "Nightly Release: v$version-nightly"
|
||||
echo ""
|
||||
|
||||
# Check if on nightly
|
||||
if [[ "$CURRENT_BRANCH" != "nightly" ]]; then
|
||||
warning "Not on nightly branch. Checking out nightly..."
|
||||
git checkout nightly
|
||||
git pull origin nightly
|
||||
else
|
||||
git pull origin nightly
|
||||
fi
|
||||
|
||||
log "Current branch: nightly"
|
||||
|
||||
# Create tag
|
||||
log "Creating tag v$version-nightly on nightly..."
|
||||
git tag -a "v$version-nightly" -m "Nightly Release v$version"
|
||||
|
||||
success "Tag created: v$version-nightly"
|
||||
}
|
||||
|
||||
push_release() {
|
||||
local tag=$1
|
||||
|
||||
echo ""
|
||||
echo -e "${CYAN}=== Pushing Release ===${NOCOLOR}"
|
||||
log "Pushing tag $tag to origin..."
|
||||
echo ""
|
||||
echo -e "${YELLOW}This will trigger GitHub Actions to build and publish the release.${NOCOLOR}"
|
||||
read -p "Continue? (yes/no): " confirm_push
|
||||
|
||||
if [[ "$confirm_push" != "yes" ]]; then
|
||||
error "Push cancelled. Tag created but not pushed."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
git push origin "$tag"
|
||||
success "Tag pushed successfully!"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}========================================================================${NOCOLOR}"
|
||||
echo -e "${GREEN}✅ Release Started!${NOCOLOR}"
|
||||
echo -e "${GREEN}========================================================================${NOCOLOR}"
|
||||
echo ""
|
||||
echo -e "📊 Monitor your release:"
|
||||
echo -e " • GitHub Actions: https://github.com/DeBrosOfficial/network/actions"
|
||||
echo -e " • Releases: https://github.com/DeBrosOfficial/network/releases"
|
||||
echo ""
|
||||
echo -e "⏱️ The build usually takes 2-5 minutes."
|
||||
echo -e "📦 Your release will appear on the Releases page once complete."
|
||||
echo ""
|
||||
}
|
||||
|
||||
main() {
|
||||
display_banner
|
||||
|
||||
# Check git status
|
||||
log "Checking git status..."
|
||||
check_git_clean
|
||||
|
||||
CURRENT_BRANCH=$(check_current_branch)
|
||||
log "Current branch: $CURRENT_BRANCH"
|
||||
|
||||
# Get release type
|
||||
release_type=$(prompt_release_type)
|
||||
|
||||
if [[ "$release_type" == "3" ]]; then
|
||||
info "Release cancelled."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Get version strategy
|
||||
version_strategy=$(prompt_version_strategy)
|
||||
latest_version=$(get_latest_version)
|
||||
|
||||
case $version_strategy in
|
||||
1)
|
||||
new_version=$(increment_version "$latest_version" major)
|
||||
;;
|
||||
2)
|
||||
new_version=$(increment_version "$latest_version" minor)
|
||||
;;
|
||||
3)
|
||||
new_version=$(increment_version "$latest_version" patch)
|
||||
;;
|
||||
4)
|
||||
new_version=$(prompt_custom_version)
|
||||
;;
|
||||
*)
|
||||
error "Invalid choice"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Handle release based on type
|
||||
case $release_type in
|
||||
1)
|
||||
# Stable release
|
||||
confirm_release "$new_version" "main (stable)" "Release v$new_version to stable main branch"
|
||||
handle_stable_release "$new_version"
|
||||
push_release "v$new_version"
|
||||
;;
|
||||
2)
|
||||
# Nightly release
|
||||
confirm_release "$new_version" "nightly (development)" "Release v$new_version-nightly to nightly branch"
|
||||
handle_nightly_release "$new_version"
|
||||
push_release "v$new_version-nightly"
|
||||
;;
|
||||
*)
|
||||
error "Invalid choice"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo -e "${GREEN}Done! 🎉${NOCOLOR}"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Loading…
x
Reference in New Issue
Block a user