diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 618405f..2d3a669 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -95,6 +95,77 @@ jobs: echo "zip_name=${ZIP_NAME}" >> "$GITHUB_OUTPUT" echo "Building: ${ZIP_NAME} (${STABILITY})" + - name: Auto-bump patch version + id: bump + env: + GA_TOKEN: ${{ secrets.GA_TOKEN }} + INPUT_VERSION: ${{ steps.meta.outputs.version }} + INPUT_STABILITY: ${{ steps.meta.outputs.stability }} + INPUT_SUFFIX: ${{ steps.meta.outputs.suffix }} + run: | + # Read current version from README.md + CURRENT=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' README.md 2>/dev/null | head -1) + if [ -z "$CURRENT" ]; then + echo "No VERSION in README.md — using input version" + echo "version=${INPUT_VERSION}" >> "$GITHUB_OUTPUT" + echo "zip_name=${EXT_ELEMENT}-${INPUT_VERSION}${INPUT_SUFFIX}.zip" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # Bump patch: XX.YY.ZZ → XX.YY.(ZZ+1) + MAJOR=$(echo "$CURRENT" | cut -d. -f1) + MINOR=$(echo "$CURRENT" | cut -d. -f2) + PATCH=$(echo "$CURRENT" | cut -d. -f3) + NEW_PATCH=$(printf "%02d" $((10#$PATCH + 1))) + NEW_VERSION="${MAJOR}.${MINOR}.${NEW_PATCH}" + + echo "Bumping: ${CURRENT} → ${NEW_VERSION}" + + # Update README.md + sed -i "s/VERSION:[[:space:]]*${CURRENT}/VERSION: ${NEW_VERSION}/" README.md + + # Update templateDetails.xml / manifest + MANIFEST=$(find . -maxdepth 2 -name "*.xml" -exec grep -l '/dev/null | head -1) + if [ -n "$MANIFEST" ]; then + sed -i "s|${CURRENT}|${NEW_VERSION}|" "$MANIFEST" + fi + + # Update only the matching stability channel in updates.xml + if [ -f "updates.xml" ]; then + export PY_OLD="$CURRENT" PY_NEW="$NEW_VERSION" PY_STABILITY="$INPUT_STABILITY" + python3 << 'PYEOF' + import re, os + old = os.environ["PY_OLD"] + new = os.environ["PY_NEW"] + stability = os.environ["PY_STABILITY"] + with open("updates.xml") as f: + content = f.read() + pattern = r"((?:(?!).)*?" + re.escape(stability) + r".*?)" + match = re.search(pattern, content, re.DOTALL) + if match: + block = match.group(1) + updated = block.replace(old, new) + content = content.replace(block, updated) + with open("updates.xml", "w") as f: + f.write(content) + print(f"Updated {stability} channel: {old} -> {new}") + PYEOF + fi + + # Commit bump + git config --local user.email "gitea-actions[bot]@mokoconsulting.tech" + git config --local user.name "gitea-actions[bot]" + git remote set-url origin "https://jmiller:${GA_TOKEN}@git.mokoconsulting.tech/${{ github.repository }}.git" + git add -A + git diff --cached --quiet || { + git commit -m "chore(version): bump ${CURRENT} → ${NEW_VERSION} [skip ci]" \ + --author="gitea-actions[bot] " + git push + } + + echo "version=${NEW_VERSION}" >> "$GITHUB_OUTPUT" + echo "zip_name=${EXT_ELEMENT}-${NEW_VERSION}${INPUT_SUFFIX}.zip" >> "$GITHUB_OUTPUT" + - name: Install dependencies env: COMPOSER_AUTH: '{"http-basic":{"git.mokoconsulting.tech":{"username":"token","password":"${{ secrets.GA_TOKEN }}"}}}' @@ -119,7 +190,7 @@ jobs: - name: Build ZIP id: zip run: | - ZIP_NAME="${{ steps.meta.outputs.zip_name }}" + ZIP_NAME="${{ steps.bump.outputs.zip_name }}" cd build/package zip -r "../${ZIP_NAME}" . cd .. @@ -157,7 +228,7 @@ jobs: id: gitea_release run: | TAG="${{ steps.meta.outputs.tag_name }}" - VERSION="${{ steps.meta.outputs.version }}" + VERSION="${{ steps.bump.outputs.version }}" STABILITY="${{ steps.meta.outputs.stability }}" PRERELEASE="${{ steps.meta.outputs.prerelease }}" SHA256="${{ steps.zip.outputs.sha256 }}" @@ -207,7 +278,7 @@ jobs: - name: "Gitea: Upload ZIP" run: | RELEASE_ID="${{ steps.gitea_release.outputs.release_id }}" - ZIP_NAME="${{ steps.meta.outputs.zip_name }}" + ZIP_NAME="${{ steps.bump.outputs.zip_name }}" TOKEN="${{ secrets.GA_TOKEN }}" API="${GITEA_URL}/api/v1/repos/${GITEA_ORG}/${GITEA_REPO}" @@ -225,9 +296,9 @@ jobs: continue-on-error: true run: | TAG="${{ steps.meta.outputs.tag_name }}" - VERSION="${{ steps.meta.outputs.version }}" + VERSION="${{ steps.bump.outputs.version }}" STABILITY="${{ steps.meta.outputs.stability }}" - ZIP_NAME="${{ steps.meta.outputs.zip_name }}" + ZIP_NAME="${{ steps.bump.outputs.zip_name }}" SHA256="${{ steps.zip.outputs.sha256 }}" TOKEN="${{ secrets.GH_TOKEN }}" GH_REPO="mokoconsulting-tech/${GITEA_REPO}" @@ -275,9 +346,9 @@ jobs: - name: "Update updates.xml for this channel" run: | STABILITY="${{ steps.meta.outputs.stability }}" - VERSION="${{ steps.meta.outputs.version }}" + VERSION="${{ steps.bump.outputs.version }}" SHA256="${{ steps.zip.outputs.sha256 }}" - ZIP_NAME="${{ steps.meta.outputs.zip_name }}" + ZIP_NAME="${{ steps.bump.outputs.zip_name }}" TAG="${{ steps.meta.outputs.tag_name }}" DATE=$(date +%Y-%m-%d) @@ -375,7 +446,7 @@ jobs: fi STABILITY="${{ steps.meta.outputs.stability }}" - VERSION="${{ steps.meta.outputs.version }}" + VERSION="${{ steps.bump.outputs.version }}" CURRENT_BRANCH="${{ github.ref_name }}" TOKEN="${{ secrets.GA_TOKEN }}" @@ -428,9 +499,9 @@ jobs: - name: Summary run: | - VERSION="${{ steps.meta.outputs.version }}" + VERSION="${{ steps.bump.outputs.version }}" STABILITY="${{ steps.meta.outputs.stability }}" - ZIP_NAME="${{ steps.meta.outputs.zip_name }}" + ZIP_NAME="${{ steps.bump.outputs.zip_name }}" SHA256="${{ steps.zip.outputs.sha256 }}" TAG="${{ steps.meta.outputs.tag_name }}"