name: CI on: pull_request: push: branches: - trunk schedule: - cron: "0 */12 * * *" workflow_dispatch: workflow_call: concurrency: group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true permissions: contents: read jobs: build-index: name: Build Index if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' uses: ./.github/workflows/ci-build-index.yml check: name: Check Targets if: > github.event.repository.fork == false && (startsWith(github.head_ref, 'renovate/') != true || github.event_name == 'workflow_call') uses: ./.github/workflows/bazel.yml with: name: Check Targets cache-name: bazel-test-file-index run: | if [ "${{ github.event_name }}" == "schedule" ] || \ [ "${{ github.event_name }}" == "workflow_call" ] || \ [ "${{ github.event_name }}" == "workflow_dispatch" ]; then echo "Running all targets for ${{ github.event_name }} event" echo "//java/... //py:all //rb/... //dotnet/... //rust/..." > bazel-targets.txt else BASE_SHA="${{ github.event.pull_request.base.sha || github.event.before }}" HEAD_SHA="${{ github.event.pull_request.head.sha || 'HEAD' }}" if [ -n "$BASE_SHA" ]; then ./go bazel:affected_targets "${BASE_SHA}..${HEAD_SHA}" bazel-test-file-index else ./go bazel:affected_targets bazel-test-file-index fi fi artifact-name: check-targets artifact-path: bazel-targets.txt read-targets: name: Read Targets needs: check runs-on: ubuntu-latest outputs: java: ${{ steps.read.outputs.java }} py: ${{ steps.read.outputs.py }} rb: ${{ steps.read.outputs.rb }} dotnet: ${{ steps.read.outputs.dotnet }} rust: ${{ steps.read.outputs.rust }} steps: - name: Download targets uses: actions/download-artifact@v4 with: name: check-targets - name: Read targets id: read env: COMMIT_MESSAGES: ${{ join(github.event.commits.*.message, ' ') }} PR_TITLE: ${{ github.event.pull_request.title }} run: | targets=$(cat bazel-targets.txt 2>/dev/null || echo "") check_binding() { local pattern=$1 tag=$2 if [[ "$targets" == *"$pattern"* ]] || [[ "$COMMIT_MESSAGES" == *"[$tag]"* ]] || [[ "$PR_TITLE" == *"[$tag]"* ]]; then echo "$tag=true" >> "$GITHUB_OUTPUT" fi } check_binding "//java/" "java" check_binding "//py" "py" check_binding "//rb/" "rb" check_binding "//dotnet/" "dotnet" check_binding "//rust/" "rust" dotnet: name: .NET needs: read-targets uses: ./.github/workflows/ci-dotnet.yml if: needs.read-targets.outputs.dotnet != '' java: name: Java needs: read-targets uses: ./.github/workflows/ci-java.yml if: needs.read-targets.outputs.java != '' python: name: Python needs: read-targets uses: ./.github/workflows/ci-python.yml if: needs.read-targets.outputs.py != '' ruby: name: Ruby needs: read-targets uses: ./.github/workflows/ci-ruby.yml if: needs.read-targets.outputs.rb != '' rust: name: Rust needs: read-targets uses: ./.github/workflows/ci-rust.yml secrets: SELENIUM_CI_TOKEN: ${{ secrets.SELENIUM_CI_TOKEN }} if: needs.read-targets.outputs.rust != ''