Skip to content

[ENH](faults): Add Tilt fault injection CLI #19299

[ENH](faults): Add Tilt fault injection CLI

[ENH](faults): Add Tilt fault injection CLI #19299

Workflow file for this run

name: PR checks
on:
pull_request:
branches:
- main
- "**"
# Cancel any in-progress workflows when a new commit is pushed to the PR.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
# This job detects what changed and determines which tests to run
change-detection:
name: Detect changes and determine tests
runs-on: blacksmith-4vcpu-ubuntu-2404
outputs:
helm-changes: ${{ steps.filter.outputs.helm-changes }}
# Test flags as a JSON array
tests-to-run: ${{ steps.determine-tests.outputs.tests-to-run }}
# Helm version check
helm-version-changed: ${{ steps.helm-version.outputs.version_changed }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Filter changes
id: filter
uses: dorny/paths-filter@v3
with:
predicate-quantifier: "some"
filters: |
# Helm chart changes
helm-changes:
- 'k8s/distributed-chroma/**'
# JavaScript client changes
js-client:
- 'clients/js/**'
# Rust paths: JS client runs integration tests against the Rust server
- 'rust/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'idl/**'
# Go paths: chorma backend is partially go
- 'go/**'
# Rust and related - run rust when any of these change
rust:
- 'rust/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'idl/**'
# Go paths: Go and Rust services talk to each other
- 'go/**'
# Python and related
python:
- 'chromadb/**'
- 'clients/python/**'
- 'requirements.txt'
- 'requirements_dev.txt'
- 'pyproject.toml'
- 'idl/**'
# Rust paths: Rust changes can affect Python bindings and client
- 'rust/**'
- 'Cargo.toml'
- 'Cargo.lock'
# Go paths: chorma backend is partially go
- 'go/**'
# Go
go:
- 'go/**'
# Rust paths: Rust and Go services talk to each other
- 'rust/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'idl/**'
# CI/CD and core infra - run all tests when these change
ci-infra:
- '.github/**'
- '**/Dockerfile*'
- 'bin/**'
- '**/docker-compose*.yml'
- 'Makefile'
- name: Determine tests to run
id: determine-tests
env:
FILTER_JS_CLIENT: ${{ steps.filter.outputs.js-client }}
FILTER_RUST: ${{ steps.filter.outputs.rust }}
FILTER_PYTHON: ${{ steps.filter.outputs.python }}
FILTER_GO: ${{ steps.filter.outputs.go }}
FILTER_CI_INFRA: ${{ steps.filter.outputs.ci-infra }}
run: bin/ci/determine-tests-to-run.sh
- name: Check Helm version change
id: helm-version
if: steps.filter.outputs.helm-changes == 'true'
shell: bash
run: |
current=$(git show HEAD:$file | yq ".version")
previous=$(git show HEAD^:$file | yq ".version")
echo "version=$current" >> $GITHUB_OUTPUT
if [ "$current" != "$previous" ]; then
echo "Version field in $file was changed from $previous to $current"
echo "version_changed=true" >> $GITHUB_OUTPUT
else
echo "Version field in $file was not changed"
echo "version_changed=false" >> $GITHUB_OUTPUT
fi
env:
file: k8s/distributed-chroma/Chart.yaml
check-helm-version-bump:
name: Warn if Helm chart was updated without version bump
needs: change-detection
if: needs.change-detection.outputs.helm-changes == 'true'
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
pull-requests: write
steps:
- uses: actions/checkout@v4
- name: Comment warning
if: needs.change-detection.outputs.helm-version-changed == 'false'
uses: marocchino/sticky-pull-request-comment@v2
with:
header: helm-chart-version-info
message: |
:warning: The Helm chart was updated without a version bump. Your changes will only be published if the version field in `k8s/distributed-chroma/Chart.yaml` is updated.
- name: Comment success
if: needs.change-detection.outputs.helm-version-changed == 'true'
uses: marocchino/sticky-pull-request-comment@v2
with:
header: helm-chart-version-info
message: |
:white_check_mark: The Helm chart's version was changed. Your changes to the chart will be published upon merge to `main`.
delete-helm-comment:
name: Delete Helm chart comment if not changed
needs: change-detection
if: needs.change-detection.outputs.helm-changes == 'false'
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
pull-requests: write
steps:
- name: Delete comment (Helm chart was not changed)
uses: marocchino/sticky-pull-request-comment@v2
with:
header: helm-chart-version-info
delete: true
# Build Docker images once and warm the Blacksmith sticky disk cache.
# Downstream jobs that need Docker images (test-integration,
# test-mcmr-integration, test-cluster-rust-frontend) will clone this
# snapshot and get all BuildKit layers cached — avoiding ~6 min of
# redundant cargo compilation per job (~20 jobs × 6 min → 1 × 6 min).
build-images:
name: Build Docker images (warm sticky disk)
needs: change-detection
if: |
contains(fromJson(needs.change-detection.outputs.tests-to-run), 'rust') ||
contains(fromJson(needs.change-detection.outputs.tests-to-run), 'python')
runs-on: blacksmith-16vcpu-ubuntu-2404
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Blacksmith builder
uses: useblacksmith/setup-docker-builder@v1
- name: Build all CI images (warms BuildKit cache on sticky disk)
run: docker buildx bake -f .github/actions/tilt-setup-prebuild/docker-bake.hcl
python-tests:
name: Python tests
needs: [change-detection, build-images]
if: |
always() &&
!failure() && !cancelled() &&
contains(fromJson(needs.change-detection.outputs.tests-to-run), 'python')
uses: ./.github/workflows/_python-tests.yml
secrets: inherit
with:
property_testing_preset: "normal"
python-vulnerability-scan:
name: Python vulnerability scan
needs: change-detection
if: contains(fromJson(needs.change-detection.outputs.tests-to-run), 'python')
uses: ./.github/workflows/_python-vulnerability-scan.yml
javascript-client-tests:
name: JavaScript client tests
needs: change-detection
if: contains(fromJson(needs.change-detection.outputs.tests-to-run), 'js-client')
uses: ./.github/workflows/_javascript-client-tests.yml
rust-tests:
name: Rust tests
needs: [change-detection, build-images]
if: |
always() &&
!failure() && !cancelled() &&
contains(fromJson(needs.change-detection.outputs.tests-to-run), 'rust')
uses: ./.github/workflows/_rust-tests.yml
secrets: inherit
with:
# Benches are off on PRs; see _rust-tests.yml for a note on running them on a schedule.
run_rust_benchmarks: false
rust-feature-tests:
name: Rust feature tests
needs: change-detection
if: contains(fromJson(needs.change-detection.outputs.tests-to-run), 'rust')
uses: ./.github/workflows/_check_rust_release.yml
secrets: inherit
go-tests:
name: Go tests
needs: change-detection
if: contains(fromJson(needs.change-detection.outputs.tests-to-run), 'go')
uses: ./.github/workflows/_go-tests.yml
secrets: inherit
check-spanner-migrations:
name: Check Spanner migrations
needs: change-detection
if: contains(fromJson(needs.change-detection.outputs.tests-to-run), 'rust')
uses: ./.github/workflows/_check_spanner_migrations.yml
secrets: inherit
lint:
name: Lint
runs-on: blacksmith-4vcpu-ubuntu-2404
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: ./.github/actions/python
with:
python-version: "3.11"
- name: Setup Rust
uses: ./.github/actions/rust
with:
github-token: ${{ github.token }}
- name: Run pre-commit
shell: bash
run: |
pre-commit run --all-files trailing-whitespace
pre-commit run --all-files mixed-line-ending
pre-commit run --all-files end-of-file-fixer
pre-commit run --all-files requirements-txt-fixer
pre-commit run --all-files check-xml
pre-commit run --all-files check-merge-conflict
pre-commit run --all-files check-case-conflict
pre-commit run --all-files check-docstring-first
pre-commit run --all-files black
pre-commit run --all-files flake8
pre-commit run --all-files prettier
pre-commit run --all-files check-yaml
continue-on-error: true
- name: Cargo fmt check
shell: bash
run: cargo fmt -- --check
- name: Clippy
run: cargo clippy --all-targets --all-features --keep-going -- -D warnings -D clippy::large_futures -D clippy::all
# This job exists for our branch protection rule.
# We want to require status checks to pass before merging, but the set of
# checks that run for any given PR is dynamic based on the files changed.
# When creating a branch protection rule, you have to specify a static list
# of checks.
# So since this job always runs, we can specify it in the branch protection rule.
all-required-pr-checks-passed:
if: always()
needs:
- build-images
- python-tests
- python-vulnerability-scan
- javascript-client-tests
- rust-tests
- rust-feature-tests
- go-tests
- check-spanner-migrations
- lint
- check-helm-version-bump
- delete-helm-comment
runs-on: blacksmith-4vcpu-ubuntu-2404
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}
allowed-skips: build-images,python-tests,python-vulnerability-scan,javascript-client-tests,rust-tests,rust-feature-tests,go-tests,check-spanner-migrations,check-helm-version-bump,delete-helm-comment
notify-slack-on-failure:
name: Notify Slack on Test Failure
if: github.ref == 'refs/heads/main' && failure()
needs:
- build-images
- python-tests
- python-vulnerability-scan
- javascript-client-tests
- rust-tests
- rust-feature-tests
- go-tests
- check-spanner-migrations
- lint
- check-helm-version-bump
- delete-helm-comment
runs-on: blacksmith-2vcpu-ubuntu-2404
steps:
- name: Notify Slack
uses: slackapi/slack-github-action@v2.0.0
with:
token: ${{ secrets.SLACK_BOT_TOKEN }}
method: chat.postMessage
payload: |
channel: ${{ secrets.SLACK_CHANNEL_ID }}
text: |
:x: *Test failure on main branch after PR merge!*
*Workflow:* ${{ github.workflow }}
*Run:* <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|View run>
*Ref:* <https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}|${{ github.ref_name }}>
*Author:* ${{ github.actor }}