mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-06-15 05:32:04 +00:00
Add version-bump.yml: daily git-cliff semver bump on dev (version files, uv.lock, prepended CHANGELOG entry, tag). Switch release.yml gate to compare against latest GitHub release instead of latest tag, since every bump is now tagged. Allow .github/ through the hidden-dir gitignore rule.
94 lines
3.0 KiB
YAML
94 lines
3.0 KiB
YAML
name: Release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches: [main]
|
|
paths:
|
|
- "pyproject.toml"
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
check-version:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
should_release: ${{ steps.version_check.outputs.should_release }}
|
|
new_version: ${{ steps.version_check.outputs.new_version }}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Check for major/minor version bump
|
|
id: version_check
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
NEW_VERSION=$(grep -m1 '^version' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
|
|
echo "Detected version in pyproject.toml: $NEW_VERSION"
|
|
|
|
LATEST_TAG=$(gh release list --limit 1 --json tagName -q '.[0].tagName' || true)
|
|
echo "Latest GitHub release: $LATEST_TAG"
|
|
|
|
if [ -z "$LATEST_TAG" ]; then
|
|
echo "No previous release found, treating as new release"
|
|
echo "should_release=true" >> "$GITHUB_OUTPUT"
|
|
echo "new_version=$NEW_VERSION" >> "$GITHUB_OUTPUT"
|
|
exit 0
|
|
fi
|
|
|
|
OLD_MAJOR=$(echo "$LATEST_TAG" | cut -d. -f1)
|
|
OLD_MINOR=$(echo "$LATEST_TAG" | cut -d. -f2)
|
|
NEW_MAJOR=$(echo "$NEW_VERSION" | cut -d. -f1)
|
|
NEW_MINOR=$(echo "$NEW_VERSION" | cut -d. -f2)
|
|
|
|
if [ "$NEW_MAJOR" -gt "$OLD_MAJOR" ] || [ "$NEW_MINOR" -gt "$OLD_MINOR" ]; then
|
|
echo "Major or minor version bump detected: $LATEST_TAG -> $NEW_VERSION"
|
|
echo "should_release=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "Patch-only change ($LATEST_TAG -> $NEW_VERSION), skipping release"
|
|
echo "should_release=false" >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
echo "new_version=$NEW_VERSION" >> "$GITHUB_OUTPUT"
|
|
|
|
release:
|
|
needs: check-version
|
|
if: needs.check-version.outputs.should_release == 'true'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
|
|
- name: Install uv
|
|
uses: astral-sh/setup-uv@v4
|
|
|
|
- name: Set up Python
|
|
run: uv python install 3.12
|
|
|
|
- name: Install dependencies and build
|
|
run: |
|
|
uv sync
|
|
uv build
|
|
|
|
- name: Extract changelog for release
|
|
id: changelog
|
|
run: |
|
|
VERSION=${{ needs.check-version.outputs.new_version }}
|
|
# Extract the section for this version from CHANGELOG.md
|
|
awk "/^## \[$VERSION\]/{found=1; next} /^## \[/{if(found) exit} found{print}" CHANGELOG.md > release_notes.md
|
|
echo "Extracted release notes:"
|
|
cat release_notes.md
|
|
|
|
- name: Create GitHub Release
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
VERSION=${{ needs.check-version.outputs.new_version }}
|
|
gh release create "$VERSION" \
|
|
--title "$VERSION" \
|
|
--notes-file release_notes.md \
|
|
dist/unshackle-${VERSION}-py3-none-any.whl \
|
|
dist/unshackle-${VERSION}.tar.gz
|