blob: 39a5dd9a17a1c062d889920f478280ae737c9934 [file] [log] [blame] [edit]
name: Bazel
on:
workflow_call:
inputs:
name:
description: Name of workflow
required: false
type: string
ref:
description: Git ref to checkout (branch, tag, or SHA)
required: false
type: string
default: ''
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: ''
caching:
description: Toggle caching of Bazel
required: false
type: boolean
default: true
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: ''
artifact-name:
description: Name of artifact to upload
required: false
type: string
default: ''
artifact-path:
description: Path/glob of files to upload (if empty, uploads git diff as changes.patch)
required: false
type: string
default: ''
rerun-with-debug:
description: Rerun failing tests with debugging enabled
required: false
type: boolean
default: false
gpg-sign:
description: Import GPG key for signing (Java releases)
required: false
type: boolean
default: false
fetch-depth:
description: Number of commits to fetch (0 for full history)
required: false
type: number
default: 1
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 }}
GEM_HOST_API_KEY: ${{ secrets.GEM_HOST_API_KEY }}
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
steps:
- name: Checkout source tree
uses: actions/checkout@v4
with:
ref: ${{ inputs.ref || github.ref }}
fetch-depth: ${{ inputs.fetch-depth }}
- name: Pull latest changes from head ref for PRs
if: contains(github.head_ref, 'renovate/')
run: git pull origin "$HEAD_REF"
env:
HEAD_REF: ${{ github.head_ref }}
- name: Pull latest changes from ref for branch pushes
if: contains(github.ref, 'renovate/')
run: git pull origin "$GIT_REF"
env:
GIT_REF: ${{ 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: Disable prebuilt Ruby
if: inputs.ruby-version != '' && inputs.os != 'windows'
run: sed '/^[[:space:]]*rv_version/d' MODULE.bazel > MODULE.bazel.tmp && mv MODULE.bazel.tmp MODULE.bazel
- 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.18.0
with:
cache-save: ${{ github.ref_name == 'trunk' }}
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: ${{ inputs.os == 'windows' && 'false' || '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: true
- name: Setup Bazel without caching
if: inputs.caching == false
uses: bazel-contrib/setup-bazel@0.18.0
with:
cache-save: false
bazelisk-cache: true
external-cache: |
manifest:
crates: rust/Cargo.Bazel.lock
rules_ruby++ruby+ruby: rb/.ruby-version
repository-cache: true
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: Import GPG key
if: inputs.gpg-sign
uses: crazy-max/ghaction-import-gpg@v6
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- 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: Rerun failures with debug
if: failure()
shell: bash
run: ./scripts/github-actions/rerun-failures.sh '${{ inputs.run }}' '${{ inputs.rerun-with-debug }}'
- name: Collect failed test logs
if: failure()
shell: bash
run: ./scripts/github-actions/collect-test-logs.sh
- name: Upload failed test logs
if: failure()
uses: actions/upload-artifact@v5
with:
name: test-logs-${{ inputs.os }}-${{ inputs.name }}-${{ inputs.browser }}
retention-days: 7
path: build/failures/**
- name: Start SSH session
if: failure() && runner.debug == '1'
uses: mxschmitt/action-tmate@v3
with:
limit-access-to-actor: false
- name: Save git diff
if: always() && inputs.artifact-name != '' && inputs.artifact-path == ''
run: git diff --binary > changes.patch
- name: Upload artifact
if: always() && inputs.artifact-name != ''
uses: actions/upload-artifact@v5
with:
name: ${{ inputs.artifact-name }}
path: ${{ inputs.artifact-path || 'changes.patch' }}
retention-days: 6
if-no-files-found: ${{ inputs.artifact-path != '' && 'error' || 'warn' }}