fix: support concurrent documentation deploys to GitHub Pages When multiple release/snapshot builds publish documentation at the same time, their pushes to the documentation branch race. Previously a rejected push triggered a plain `git pull --rebase`, which stops on a merge conflict in the shared folders (latest, X.X.x, index.html, snapshot) and, under `set -e`, kills the whole job - so concurrent releases fail. Make the retry loop concurrency-safe: - Rebase the deploy commit onto the remote with `-X theirs` so shared-folder file conflicts auto-resolve in favour of this deploy, and add bounded backoff with jitter between attempts. - Reconcile owned paths after the rebase: purge-owned folders are restored wholesale from the deploy commit (clean last-writer-wins) while merge-mode folders and other deploys' independent version folders are preserved. - Keep `latest` as highest-version-wins: a lower release replayed after a concurrent higher release yields `latest` back to the remote instead of overwriting it with older docs. - Resolve modify/delete rebase conflicts that `-X theirs` cannot handle (a file this deploy purges but a concurrent deploy modified) by driving the rebase to completion deterministically instead of aborting. Add a Testcontainers regression test that lands a concurrent deploy modifying a purged file and asserts the retry recovers cleanly. Assisted-by: claude-code:claude-4.8-opus
This repository hosts GitHub Actions that power the release workflows for Apache Grails & related projects.
Actions include:
pre-release - handles setting the project version based on the Git tag & running various pre-release tasks.deploy-github-pages - handles publishing documentation to GitHub Pages for both snapshots & releases.post-release - assists in merging tagged changes back to the target branch & bumping to the next development version.export-gradle-properties - exposes selected Gradle properties as environment variables.cascade-merge - merges a branch forward through an explicit ordered list of downstream branches when there are no conflicts.These actions are meant to assist in using the GitHub Release feature to produce a published release. They were primarily designed for Gradle projects that need to set a version & automate parts of the release process such as the changing of the project version & publishing documentation.
To use these actions, please refer to the individual README files in each action's directory.
To bootstrap the test project so it can be run against the source distribution, execute:
cd tests/gradle-bootstrap gradle bootstrap
Then to run the tests, execute:
cd .. gradle check