| name: Bazel |
| |
| on: |
| workflow_call: |
| inputs: |
| name: |
| description: Name of workflow |
| required: false |
| type: string |
| run: |
| description: Bazel command to run |
| required: true |
| type: string |
| os: |
| description: One of ubuntu, windows or macos |
| required: false |
| type: string |
| default: ubuntu |
| browser: |
| description: One of chrome, firefox, or edge |
| required: false |
| type: string |
| default: '' |
| browser-version: |
| description: One of stable, latest, latest-beta or latest-devedition |
| required: false |
| type: string |
| default: '' |
| caching: |
| description: Toggle caching of Bazel |
| required: false |
| type: boolean |
| default: true |
| dotnet-version: |
| description: Custom DotNet version to install |
| required: false |
| type: string |
| default: '' |
| java-version: |
| description: Custom Java version to install |
| required: false |
| type: string |
| default: '' |
| node-version: |
| description: Custom Node version to install |
| required: false |
| type: string |
| default: '' |
| python-version: |
| description: Custom Python version to use |
| required: false |
| type: string |
| default: '' |
| ruby-version: |
| description: Custom Ruby version to use |
| required: false |
| type: string |
| default: '' |
| nightly-release-files: |
| description: Files to upload to the Nightly release tag |
| required: false |
| type: string |
| default: '' |
| artifact-name: |
| description: Name of artifact to upload |
| required: false |
| type: string |
| default: 'ignore-artifacts' |
| rerun-with-debug: |
| description: Rerun failing tests with debugging enabled |
| required: false |
| type: boolean |
| default: false |
| |
| jobs: |
| bazel: |
| name: ${{ inputs.name }} |
| runs-on: ${{ contains(inputs.os, '-') && inputs.os || format('{0}-latest', inputs.os) }} |
| env: |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| SEL_M2_USER: ${{ secrets.SEL_M2_USER }} |
| SEL_M2_PASS: ${{ secrets.SEL_M2_PASS }} |
| TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} |
| TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }} |
| NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| SE_AVOID_STATS: true |
| steps: |
| - name: Checkout source tree |
| uses: actions/checkout@v4 |
| - name: Pull latest changes from head ref for PRs |
| if: contains(github.head_ref, 'renovate/') |
| run: git pull origin ${{ github.head_ref }} |
| - name: Pull latest changes from ref for branch pushes |
| if: contains(github.ref, 'renovate/') |
| run: git pull origin ${{ github.ref }} |
| - name: Free space |
| if: inputs.os != 'windows' |
| run: ./scripts/github-actions/free-disk-space.sh |
| - name: Remove driver directories Windows |
| if: inputs.os == 'windows' |
| run: | |
| rm "$env:ChromeWebDriver" -r -v |
| rm "$env:EdgeWebDriver" -r -v |
| rm "$env:GeckoWebDriver" -r -v |
| - name: Remove driver directories Non-Windows |
| if: inputs.os != 'windows' |
| run: | |
| sudo rm -rf "$CHROMEWEBDRIVER" "$EDGEWEBDRIVER" "$GECKOWEBDRIVER" |
| - name: Set Python version |
| if: inputs.python-version != '' |
| run: echo '${{ inputs.python-version }}' > py/.python-version |
| - name: Set Ruby version |
| if: inputs.ruby-version != '' |
| run: echo '${{ inputs.ruby-version }}' > rb/.ruby-version |
| - name: Setup DotNet |
| if: inputs.dotnet-version != '' |
| uses: actions/setup-dotnet@v4 |
| with: |
| dotnet-version: ${{ inputs.dotnet-version }} |
| - name: Setup Java |
| if: inputs.java-version != '' |
| uses: actions/setup-java@v3 |
| with: |
| java-version: ${{ inputs.java-version }} |
| distribution: 'temurin' |
| - name: Setup Node |
| if: inputs.node-version != '' |
| uses: actions/setup-node@v4 |
| with: |
| node-version: ${{ inputs.node-version }} |
| - name: Setup Bazel with caching |
| if: inputs.caching |
| uses: bazel-contrib/setup-bazel@0.15.0 |
| with: |
| bazelisk-cache: true |
| bazelrc: common --color=yes |
| # Workaround for long path issues: https://github.com/bazelbuild/bazel/pull/22532 |
| output-base: ${{ inputs.os == 'windows' && 'D://b' || '' }} |
| cache-version: 2 |
| disk-cache: false |
| external-cache: | |
| manifest: |
| crates: rust/Cargo.Bazel.lock |
| rules_ruby++ruby+ruby: 'rb/.ruby-version' |
| "+pin_browsers_extension+linux_beta_chrome": false |
| "+pin_browsers_extension+linux_beta_chromedriver": true |
| "+pin_browsers_extension+linux_beta_firefox": false |
| "+pin_browsers_extension+linux_chrome": false |
| "+pin_browsers_extension+linux_chromedriver": true |
| "+pin_browsers_extension+linux_edge": false |
| "+pin_browsers_extension+linux_edgedriver": true |
| "+pin_browsers_extension+linux_firefox": false |
| "+pin_browsers_extension+linux_geckodriver": true |
| "+pin_browsers_extension+mac_beta_chrome": false |
| "+pin_browsers_extension+mac_beta_chromedriver": false |
| "+pin_browsers_extension+mac_beta_firefox": false |
| "+pin_browsers_extension+mac_chrome": false |
| "+pin_browsers_extension+mac_chromedriver": false |
| "+pin_browsers_extension+mac_edge": false |
| "+pin_browsers_extension+mac_edgedriver": false |
| "+pin_browsers_extension+mac_firefox": false |
| "+pin_browsers_extension+mac_geckodriver": false |
| repository-cache: false |
| - name: Setup Bazel without caching |
| if: inputs.caching == false |
| uses: bazel-contrib/setup-bazel@0.15.0 |
| with: |
| bazelrc: common --color=yes |
| - name: Setup curl for Ubuntu |
| if: inputs.os == 'ubuntu' |
| run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev |
| - name: Setup Fluxbox and Xvfb |
| if: inputs.os == 'ubuntu' && inputs.browser != '' |
| run: | |
| sudo apt-get -y install fluxbox |
| Xvfb :99 & |
| fluxbox -display :99 & |
| echo "DISPLAY=:99" >> "$GITHUB_ENV" |
| - name: Set resolution |
| if: inputs.os == 'windows' && inputs.browser != '' |
| run: Set-DisplayResolution -Width 1920 -Height 1080 -Force |
| - name: Disable 8dot3 short names |
| if: inputs.os == 'windows' |
| run: fsutil 8dot3name set 0 |
| - name: Setup Safari |
| if: inputs.browser == 'safari' |
| run: sudo safaridriver --enable |
| - name: Run Bazel |
| shell: bash |
| env: |
| MSYS_NO_PATHCONV: 1 |
| MSYS2_ARG_CONV_EXCL: "*" |
| run: | |
| mkdir -p build |
| ${{ inputs.run }} 2>&1 | tee build/bazel-console.log |
| - name: Parse Bazel log for failures |
| if: always() |
| shell: bash |
| run: | |
| awk ' |
| /PASSED in/ {n=0; delete a; next} |
| /FAILED in/ {a[++n]=$1} |
| END {for (i=1; i<=n; i++) print a[i]} |
| ' build/bazel-console.log > build/bazel-failures.txt |
| - name: Rerun failures with debug |
| if: failure() && inputs.rerun-with-debug |
| shell: bash |
| run: | |
| if [ -s build/bazel-failures.txt ]; then |
| base_cmd=$(echo "${{ inputs.run }}" | sed 's| //[^ ]*||g') |
| targets=$(cat build/bazel-failures.txt | tr '\n' ' ') |
| $base_cmd --test_env=SE_DEBUG=true --flaky_test_attempts=1 $targets |
| fi |
| - name: Start SSH session |
| if: failure() && runner.debug == '1' |
| uses: mxschmitt/action-tmate@v3 |
| with: |
| limit-access-to-actor: false |
| - name: Release Nightly |
| if: inputs.nightly-release-files != '' |
| uses: marvinpinto/action-automatic-releases@latest |
| with: |
| repo_token: "${{ secrets.GITHUB_TOKEN }}" |
| automatic_release_tag: "nightly" |
| title: "Nightly" |
| prerelease: true |
| files: ${{ inputs.nightly-release-files }} |
| - name: Save changes |
| if: ${{ always() && inputs.artifact-name != 'ignore-artifacts' }} |
| run: | |
| git diff > changes.patch |
| - name: "Upload test logs" |
| if: failure() |
| uses: actions/upload-artifact@v5 |
| with: |
| name: test-logs-${{ inputs.os }}-${{ inputs.name }}-${{ inputs.browser }} |
| retention-days: 7 |
| path: | |
| bazel-testlogs/**/*.log |
| build/bazel-failures.txt |
| - name: "Upload changes" |
| if: ${{ always() && inputs.artifact-name != 'ignore-artifacts' }} |
| uses: actions/upload-artifact@v4 |
| with: |
| name: ${{ inputs.artifact-name }} |
| path: changes.patch |
| retention-days: 6 |