Skip to content

Finalize Ultimate Release System with safeguards and idempotency #59

Finalize Ultimate Release System with safeguards and idempotency

Finalize Ultimate Release System with safeguards and idempotency #59

Workflow file for this run

name: Ultimate Release System
on:
push:
branches: [ main ]
concurrency:
group: release-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: write
env:
MODULE_ID: ColorOS-Themes-Rock
jobs:
build:
name: Ultimate PRO Release System
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Skip conditions
run: |
MSG="${{ github.event.head_commit.message }}"
if echo "$MSG" | grep -qi "\[skip release\]"; then
echo "Skipping release"
exit 0
fi
- name: Cache dependencies
uses: actions/cache@v4
with:
path: |
~/.cache
~/.gradle
key: ${{ runner.os }}-cache
- name: Install tools
run: |
sudo apt-get update
sudo apt-get install -y zip coreutils
- name: Detect channel
id: channel
run: |
if echo "${{ github.event.head_commit.message }}" | grep -qi "beta"; then
echo "channel=beta" >> $GITHUB_OUTPUT
else
echo "channel=stable" >> $GITHUB_OUTPUT
fi
- name: Get latest tag
id: tag
run: |
git fetch --tags
LATEST=$(git tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+' | head -n 1 || true)
[ -z "$LATEST" ] && LATEST="v0.0.0"
echo "latest=$LATEST" >> $GITHUB_OUTPUT
- name: Compute version
id: version
run: |
LATEST="${{ steps.tag.outputs.latest }}"
VERSION_NUM=${LATEST#v}
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION_NUM"
PATCH=$((PATCH+1))
CHANNEL="${{ steps.channel.outputs.channel }}"
if [ "$CHANNEL" = "beta" ]; then
NEW_VERSION="v${MAJOR}.${MINOR}.${PATCH}-beta"
else
NEW_VERSION="v${MAJOR}.${MINOR}.${PATCH}"
fi
# prevent duplicate tag
if git rev-parse "$NEW_VERSION" >/dev/null 2>&1; then
echo "Tag exists, skipping"
exit 0
fi
echo "MODULE_VERSION=$NEW_VERSION" >> $GITHUB_ENV
- name: Generate changelog
run: |
echo "# ColorOS Themes Rock ${MODULE_VERSION}" > RELEASE_NOTES.md
echo "" >> RELEASE_NOTES.md
git log $(git describe --tags --abbrev=0 2>/dev/null || echo '')..HEAD --pretty=format:'- %s' >> RELEASE_NOTES.md || true
echo "" >> RELEASE_NOTES.md
echo "## Channel: ${{ steps.channel.outputs.channel }}" >> RELEASE_NOTES.md
- name: Package module
run: bash scripts/package.sh
- name: Generate checksum
run: |
cd dist
for f in *.zip; do
sha256sum "$f" > "$f.sha256"
done
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: Ultimate-Release-${{ env.MODULE_VERSION }}
path: dist/*
- name: Publish Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ env.MODULE_VERSION }}
name: ColorOS Themes Rock ${{ env.MODULE_VERSION }}
body_path: RELEASE_NOTES.md
files: dist/*
draft: false
prerelease: ${{ contains(env.MODULE_VERSION, 'beta') }}