blob: 71fa7455798f056b1cccae3fe1df732b456650ed [file] [log] [blame]
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