name: Setup bazel description: Setup Bazel for CI builds and tests inputs: useCache: description: "Cache Bazel artifacts. Use 'true' to enable with rw, 'readonly' to download, 'log' to disable cache but upload logs, and 'false' to disable." default: "false" required: true buildBuddyApiKey: description: "BuildBuddy API key for caching Bazel artifacts" required: false runs: using: "composite" steps: - name: Check inputs shell: bash run: | echo "::group::Check inputs" if [[ "${{ inputs.useCache }}" != "true" && "${{ inputs.useCache }}" != "readonly" && "${{ inputs.useCache }}" != "logs" && "${{ inputs.useCache }}" != "false" ]]; then echo "Invalid value for 'useCache' input: '${{ inputs.useCache }}'. Must be 'true', 'readonly', or 'false'." exit 1 fi if [[ "${{ inputs.useCache }}" == "true" || "${{ inputs.useCache }}" == "readonly" || "${{ inputs.useCache }}" == "logs" ]] && [[ -z "${{ inputs.buildBuddyApiKey }}" ]]; then echo "BuildBuddy API key is required when cache is enabled." exit 1 fi echo "::endgroup::" - name: Configure Bazel (general) shell: bash env: WORKSPACE: ${{ github.workspace }} run: | echo "::group::Configure Bazel" cat <> "${WORKSPACE}/.bazeloverwriterc" build --color=yes build --terminal_columns=143 build --build_metadata=ROLE=CI build --show_progress_rate_limit=5 build --curses=yes build --verbose_failures build --announce_rc test --show_timestamps test --keep_going EOF echo "::endgroup::" - name: Configure Bazel (rw) shell: bash if: inputs.useCache == 'true' || inputs.useCache == 'readonly' env: BUILDBUDDY_ORG_API_KEY: ${{ inputs.buildBuddyApiKey }} WORKSPACE: ${{ github.workspace }} run: | echo "::group::Configure Bazel" cat <> "${WORKSPACE}/.bazeloverwriterc" build --bes_results_url=https://app.buildbuddy.io/invocation/ build --bes_backend=grpcs://remote.buildbuddy.io build --remote_cache=grpcs://remote.buildbuddy.io build --remote_timeout=3600 build --experimental_remote_build_event_upload=minimal build --experimental_remote_cache_compression build --noremote_upload_local_results build --nolegacy_important_outputs build --remote_header=x-buildbuddy-api-key=${BUILDBUDDY_ORG_API_KEY} EOF echo "::endgroup::" - name: Configure Bazel (readonly) shell: bash if: inputs.useCache == 'readonly' env: WORKSPACE: ${{ github.workspace }} run: | echo "::group::Configure Bazel (readonly)" echo "build --remote_upload_local_results=false" >> "${WORKSPACE}/.bazeloverwriterc" echo "::endgroup::" - name: Configure Bazel (logs) shell: bash if: inputs.useCache == 'logs' env: BUILDBUDDY_ORG_API_KEY: ${{ inputs.buildBuddyApiKey }} WORKSPACE: ${{ github.workspace }} run: | echo "::group::Configure Bazel" cat <> "${WORKSPACE}/.bazeloverwriterc" build --bes_results_url=https://app.buildbuddy.io/invocation/ build --bes_backend=grpcs://remote.buildbuddy.io build --remote_header=x-buildbuddy-api-key=${BUILDBUDDY_ORG_API_KEY} build --nolegacy_important_outputs EOF echo "::endgroup::" - name: Disable disk cache on GitHub Actions runners shell: bash env: WORKSPACE: ${{ github.workspace }} if: startsWith(runner.name , 'GitHub Actions') run: | echo "::group::Configure Bazel (disk cache)" echo "build --disk_cache=" >> "${WORKSPACE}/.bazeloverwriterc" echo "build --repository_cache=" >> "${WORKSPACE}/.bazeloverwriterc" echo "::endgroup::" - name: Check bazel version shell: bash run: bazel version