--- name: Bump version and sync Changelog to Docker Repo on: push: paths: - "CHANGELOG.md" permissions: contents: write jobs: bump_and_sync: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Extract version from commit message id: ver shell: bash run: | set -euo pipefail MSG="${{ github.event.head_commit.message }}" if [[ "$MSG" =~ release\((v[0-9]+\.[0-9]+\.[0-9]+)\) ]]; then echo "version=${BASH_REMATCH[1]}" >> "$GITHUB_OUTPUT" echo "Found version: ${BASH_REMATCH[1]}" else echo "version=" >> "$GITHUB_OUTPUT" echo "No release(vX.Y.Z) tag in commit message; skipping bump." fi - name: Update public/js/version.js if: steps.ver.outputs.version != '' shell: bash run: | set -euo pipefail cat > public/js/version.js <<'EOF' // generated by CI window.APP_VERSION = '${{ steps.ver.outputs.version }}'; EOF - name: Stamp asset cache-busters (?v=...) in HTML/CSS and {{APP_VER}} everywhere if: steps.ver.outputs.version != '' shell: bash run: | set -euo pipefail VER="${{ steps.ver.outputs.version }}" # e.g. v1.6.9 QVER="${VER#v}" # e.g. 1.6.9 echo "Stamping ?v=${QVER} and {{APP_VER}}=${VER}" # 1) Only stamp ?v= in HTML/CSS (avoid JS concatenation issues) mapfile -t html_css < <(git ls-files -- 'public/*.html' 'public/**/*.html' 'public/*.php' 'public/**/*.css') for f in "${html_css[@]}"; do sed -E -i "s/(\?v=)[^\"'&<>\s]*/\1${QVER}/g" "$f" sed -E -i "s/\{\{APP_VER\}\}/${VER}/g" "$f" done # 2) For JS, only replace the {{APP_VER}} placeholder (do NOT touch ?v=) mapfile -t jsfiles < <(git ls-files -- 'public/*.js' 'public/**/*.js') for f in "${jsfiles[@]}"; do sed -E -i "s/\{\{APP_VER\}\}/${VER}/g" "$f" done echo "Changed files:" git status --porcelain | awk '{print $2}' | sed 's/^/ - /' - name: Commit version bump + stamped assets if: steps.ver.outputs.version != '' shell: bash run: | set -euo pipefail git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add public/js/version.js public if git diff --cached --quiet; then echo "No changes to commit" else git commit -m "chore(release): set APP_VERSION and stamp assets to ${{ steps.ver.outputs.version }} [skip ci]" git push fi - name: Checkout filerise-docker if: steps.ver.outputs.version != '' uses: actions/checkout@v4 with: repository: error311/filerise-docker token: ${{ secrets.PAT_TOKEN }} path: docker-repo - name: Copy CHANGELOG.md and write VERSION if: steps.ver.outputs.version != '' shell: bash run: | set -euo pipefail cp CHANGELOG.md docker-repo/CHANGELOG.md echo "${{ steps.ver.outputs.version }}" > docker-repo/VERSION - name: Commit & push to docker repo if: steps.ver.outputs.version != '' working-directory: docker-repo shell: bash run: | set -euo pipefail git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add CHANGELOG.md VERSION if git diff --cached --quiet; then echo "No changes to commit" else git commit -m "chore: sync CHANGELOG.md and VERSION (${{ steps.ver.outputs.version }}) from FileRise" git push origin main fi