Skip to content

Conveyor in CI

Give CI its own API key (Settings → API keys, or on a server node: bin/conveyor eval 'IO.puts(elem(Conveyor.Projects.create_api_key(Conveyor.Projects.ensure_default_project!(), %{name: "ci"}), 2))') and keep it in the CI secret store. Tags carry the context you will filter by later.

GitHub Actions

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: bazelbuild/setup-bazelisk@v3
      - name: bazel test
        env:
          CONVEYOR_API_KEY: ${{ secrets.CONVEYOR_API_KEY }}
        run: |
          bazel test //... \
            --bes_backend=grpcs://conveyor.example.com:1985 \
            --bes_results_url=https://conveyor.example.com/invocation/ \
            --bes_header=x-api-key=$CONVEYOR_API_KEY \
            --bes_upload_mode=wait_for_upload_complete --bes_timeout=120s \
            --build_event_upload_max_retries=10 \
            --build_metadata=CI=true \
            --build_metadata=BRANCH=${GITHUB_REF_NAME} \
            --build_metadata=COMMIT=${GITHUB_SHA} \
            --build_metadata=PR=${{ github.event.number }} \
            --build_metadata=JOB_URL=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}

Bazel prints the --bes_results_url link at the start of the build, so it appears in the job log. Never pass the key on the command line of a public log; --bes_header values are redacted from the stored command line by Conveyor, but the CI runner's own log is not.

Buildkite

steps:
  - label: ":bazel: test"
    env:
      CONVEYOR_API_KEY: "${CONVEYOR_API_KEY}"   # from the pipeline's secret store
    command: |
      bazel test //... \
        --bes_backend=grpcs://conveyor.example.com:1985 \
        --bes_results_url=https://conveyor.example.com/invocation/ \
        --bes_header=x-api-key=$$CONVEYOR_API_KEY \
        --bes_upload_mode=wait_for_upload_complete --bes_timeout=120s \
        --build_event_upload_max_retries=10 \
        --build_metadata=CI=true \
        --build_metadata=BRANCH=$$BUILDKITE_BRANCH \
        --build_metadata=COMMIT=$$BUILDKITE_COMMIT \
        --build_metadata=JOB_URL=$$BUILDKITE_BUILD_URL

What to look at

  • Dashboard → segment CI for success rate, p50/p90/p99 duration and cache hit rate over time; the query box accepts the same language as the builds list (branch:main ci:true status:failed started>-7d).
  • Tests → flaky and failing tests across CI builds, with the last build that ran them.
  • A failed build's Overview shows the failing targets and test output first.