# Cut a release whenever a new tag is pushed to the repo. # You should use an annotated tag, like `git tag -a v1.2.3` # and put the release notes into the commit message for the tag. name: Release on: push: tags: - "v*.*.*" jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Mount bazel caches uses: actions/cache@v3 with: path: | ~/.cache/bazel ~/.cache/bazel-repo key: bazel-cache-${{ hashFiles('**/BUILD.bazel', '**/*.bzl', 'WORKSPACE') }} restore-keys: bazel-cache- - name: bazel test //... (release) env: # Bazelisk will download bazel to here XDG_CACHE_HOME: ~/.cache/bazel-repo # Warning: DO NOT drop --config=release as it ensures that tools/integrity.bzl is up-to-date with release config. run: bazel --bazelrc=.github/workflows/ci.bazelrc --bazelrc=.bazelrc test //... --config=release - name: Build release artifacts run: | if [ -n "$(git status --porcelain)" ]; then >&2 echo "ERROR: the git state is not clean, aborting build..." exit 1 fi rm -rf /tmp/aspect/release bazel --bazelrc=.github/workflows/ci.bazelrc --bazelrc=.bazelrc run --config=release //tools:release -- /tmp/aspect/release if /tmp/aspect/release/copy_to_directory-linux_amd64 version | grep '(with local changes)'; then >&2 echo "ERROR: the release contained changes in the git state and the release will not be produced" exit 1 fi - name: Prepare workspace snippet run: .github/workflows/release_prep.sh ${{ env.GITHUB_REF_NAME }} > release_notes.txt - name: Release uses: softprops/action-gh-release@v1 with: # Use GH feature to populate the changelog automatically generate_release_notes: true files: | /tmp/aspect/release/* bazel-lib-*.tar.gz body_path: release_notes.txt fail_on_unmatched_files: true