# DISABLED: This workflow is redundant with create-release.yml # Both workflows were trying to create releases from the same Release PRs # causing conflicts. Using create-release.yml as the canonical release creator. name: Auto Release (DISABLED) on: # Disabled to avoid conflicts with create-release.yml # pull_request: # branches: [main] # types: [closed] workflow_dispatch: # Keep for manual testing only jobs: check-release: runs-on: ubuntu-24.04 if: | github.event.pull_request.merged == true && startsWith(github.event.pull_request.title, 'Release v') && github.repository_owner == 'wizarrrr' permissions: contents: write steps: - name: Checkout uses: actions/checkout@v7 with: fetch-depth: 2 # Need to compare with previous commit - name: Get version info id: version-check run: | # Extract version from Release PR title (e.g., "Release v2025.9.1" -> "2025.9.1") PR_TITLE="${{ github.event.pull_request.title }}" RELEASE_VERSION=$(echo "$PR_TITLE" | sed 's/Release v//') # Get current version from pyproject.toml CURRENT_VERSION=$(grep '^version = ' pyproject.toml | head -1 | sed 's/version = "\(.*\)"/\1/') echo "Release PR version: $RELEASE_VERSION" echo "Current code version: $CURRENT_VERSION" # Verify versions match and it's not a pre-release if [[ "$CURRENT_VERSION" == "$RELEASE_VERSION" ]] && [[ ! "$CURRENT_VERSION" =~ -rc\.|-(alpha|beta|dev) ]]; then echo "version-changed=true" >> $GITHUB_OUTPUT echo "new-version=$CURRENT_VERSION" >> $GITHUB_OUTPUT else echo "version-changed=false" >> $GITHUB_OUTPUT echo "Version mismatch or pre-release detected, skipping release creation" fi - name: Generate changelog if: steps.version-check.outputs.version-changed == 'true' id: changelog run: | NEW_VERSION="${{ steps.version-check.outputs.new-version }}" PREVIOUS_VERSION="${{ steps.version-check.outputs.previous-version }}" # Find the tag for the previous version PREV_TAG="v$PREVIOUS_VERSION" if ! git tag -l | grep -q "^$PREV_TAG$"; then PREV_TAG="$PREVIOUS_VERSION" fi if ! git tag -l | grep -q "^$PREV_TAG$"; then # Fallback to latest tag PREV_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") fi # Generate changelog if [[ -n "$PREV_TAG" ]]; then COMMITS=$(git log "${PREV_TAG}..HEAD" --oneline --no-merges) else COMMITS=$(git log --oneline --no-merges | head -20) # Last 20 commits if no tag fi if [[ -z "$COMMITS" ]]; then CHANGELOG="No changes since last release." else CHANGELOG="## What's Changed\n\n" # Group commits by type with comprehensive detection FEATURES="" FIXES="" DOCS="" PERF="" REFACTOR="" TEST="" BUILD="" CI="" STYLE="" CHORE="" BREAKING="" OTHER="" while IFS= read -r line; do COMMIT_FULL_MSG=$(echo "$line" | sed 's/^[a-fA-F0-9]* //') # Check for breaking changes first (can be any type) if echo "$COMMIT_FULL_MSG" | grep -qE "(BREAKING CHANGE|!):?"; then BREAKING+="- $COMMIT_FULL_MSG\n" # Features elif echo "$line" | grep -qE "^[a-fA-F0-9]+ feat(\([^)]+\))?(!)?:"; then COMMIT_MSG=$(echo "$line" | sed 's/^[a-fA-F0-9]* feat[^:]*: *//') FEATURES+="- $COMMIT_MSG\n" # Bug fixes elif echo "$line" | grep -qE "^[a-fA-F0-9]+ fix(\([^)]+\))?(!)?:"; then COMMIT_MSG=$(echo "$line" | sed 's/^[a-fA-F0-9]* fix[^:]*: *//') FIXES+="- $COMMIT_MSG\n" # Documentation elif echo "$line" | grep -qE "^[a-f0-9]+ docs(\([^)]+\))?(!)?:"; then COMMIT_MSG=$(echo "$line" | sed 's/^[a-f0-9]* docs[^:]*: *//') DOCS+="- $COMMIT_MSG\n" # Performance improvements elif echo "$line" | grep -qE "^[a-fA-F0-9]+ perf(\([^)]+\))?(!)?:"; then COMMIT_MSG=$(echo "$line" | sed 's/^[a-fA-F0-9]* perf[^:]*: *//') PERF+="- $COMMIT_MSG\n" # Code refactoring elif echo "$line" | grep -qE "^[a-fA-F0-9]+ refactor(\([^)]+\))?(!)?:"; then COMMIT_MSG=$(echo "$line" | sed 's/^[a-fA-F0-9]* refactor[^:]*: *//') REFACTOR+="- $COMMIT_MSG\n" # Testing elif echo "$line" | grep -qE "^[a-fA-F0-9]+ test(\([^)]+\))?(!)?:"; then COMMIT_MSG=$(echo "$line" | sed 's/^[a-fA-F0-9]* test[^:]*: *//') TEST+="- $COMMIT_MSG\n" # Build system / dependencies elif echo "$line" | grep -qE "^[a-fA-F0-9]+ (build|deps?)(\([^)]+\))?(!)?:"; then COMMIT_MSG=$(echo "$line" | sed 's/^[a-fA-F0-9]* \(build\|deps\?\)[^:]*: *//') BUILD+="- $COMMIT_MSG\n" # CI/CD changes elif echo "$line" | grep -qE "^[a-fA-F0-9]+ ci(\([^)]+\))?(!)?:"; then COMMIT_MSG=$(echo "$line" | sed 's/^[a-fA-F0-9]* ci[^:]*: *//') CI+="- $COMMIT_MSG\n" # Code style changes elif echo "$line" | grep -qE "^[a-fA-F0-9]+ style(\([^)]+\))?(!)?:"; then COMMIT_MSG=$(echo "$line" | sed 's/^[a-fA-F0-9]* style[^:]*: *//') STYLE+="- $COMMIT_MSG\n" # Chores and maintenance elif echo "$line" | grep -qE "^[a-fA-F0-9]+ chore(\([^)]+\))?(!)?:"; then COMMIT_MSG=$(echo "$line" | sed 's/^[a-fA-F0-9]* chore[^:]*: */') CHORE+="- $COMMIT_MSG\n" # Non-conventional commits else OTHER+="- $COMMIT_FULL_MSG\n" fi done <<< "$COMMITS" # Output sections in priority order if [[ -n "$BREAKING" ]]; then CHANGELOG+="### ๐Ÿ’ฅ Breaking Changes\n$BREAKING\n" fi if [[ -n "$FEATURES" ]]; then CHANGELOG+="### ๐Ÿš€ Features\n$FEATURES\n" fi if [[ -n "$FIXES" ]]; then CHANGELOG+="### ๐Ÿ› Bug Fixes\n$FIXES\n" fi if [[ -n "$PERF" ]]; then CHANGELOG+="### โšก Performance Improvements\n$PERF\n" fi if [[ -n "$REFACTOR" ]]; then CHANGELOG+="### โ™ป๏ธ Code Refactoring\n$REFACTOR\n" fi if [[ -n "$DOCS" ]]; then CHANGELOG+="### ๐Ÿ“š Documentation\n$DOCS\n" fi if [[ -n "$TEST" ]]; then CHANGELOG+="### ๐Ÿงช Tests\n$TEST\n" fi if [[ -n "$BUILD" ]]; then CHANGELOG+="### ๐Ÿ”ง Build System / Dependencies\n$BUILD\n" fi if [[ -n "$CI" ]]; then CHANGELOG+="### ๐Ÿ‘ท CI/CD\n$CI\n" fi if [[ -n "$STYLE" ]]; then CHANGELOG+="### ๐Ÿ’„ Styling\n$STYLE\n" fi if [[ -n "$CHORE" ]]; then CHANGELOG+="### ๐Ÿงน Chores\n$CHORE\n" fi if [[ -n "$OTHER" ]]; then CHANGELOG+="### ๐Ÿ“ Other Changes\n$OTHER\n" fi CHANGELOG+="\n**Full Changelog**: https://github.com/$GITHUB_REPOSITORY/compare/${PREV_TAG}...v${NEW_VERSION}" fi # Save changelog to file for GitHub release echo -e "$CHANGELOG" > changelog.md - name: Create GitHub Release if: steps.version-check.outputs.version-changed == 'true' id: create-release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | NEW_VERSION="${{ steps.version-check.outputs.new-version }}" # Check if release already exists if gh release view "v$NEW_VERSION" >/dev/null 2>&1; then echo "Release v$NEW_VERSION already exists, skipping creation" echo "release-created=false" >> $GITHUB_OUTPUT else gh release create "v$NEW_VERSION" \ --title "v$NEW_VERSION" \ --notes-file changelog.md echo "release-created=true" >> $GITHUB_OUTPUT fi - name: Summary if: steps.version-check.outputs.version-changed == 'true' run: | NEW_VERSION="${{ steps.version-check.outputs.new-version }}" if [[ "${{ steps.create-release.outputs.release-created }}" == "true" ]]; then echo "๐Ÿš€ **Auto-Release Created!**" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "- **Version**: v$NEW_VERSION" >> $GITHUB_STEP_SUMMARY echo "- **Release URL**: https://github.com/$GITHUB_REPOSITORY/releases/tag/v$NEW_VERSION" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "This will trigger Docker builds and deployment!" >> $GITHUB_STEP_SUMMARY else echo "โ„น๏ธ **Release Already Exists**" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "- **Version**: v$NEW_VERSION" >> $GITHUB_STEP_SUMMARY echo "- **Release URL**: https://github.com/$GITHUB_REPOSITORY/releases/tag/v$NEW_VERSION" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "Release v$NEW_VERSION already exists, skipped creation." >> $GITHUB_STEP_SUMMARY fi