Skip to content

feat(admin): fire GitHub dispatch on model PATCH (infra#153) #2111

feat(admin): fire GitHub dispatch on model PATCH (infra#153)

feat(admin): fire GitHub dispatch on model PATCH (infra#153) #2111

Workflow file for this run

name: Tests
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
CARGO_INCREMENTAL: 0 # Faster CI builds
jobs:
lint:
name: Lint
runs-on: ubuntu_large_x64
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: rustfmt, clippy
- name: Cache Rust dependencies
uses: swatinem/rust-cache@v2
with:
cache-on-failure: true
- name: Run cargo fmt
run: cargo fmt --all -- --check
- name: Run cargo clippy
run: cargo clippy --all-targets --all-features -- -D warnings
test:
name: Test Suite
runs-on: ubuntu_large_x64
environment: Cloud API test env
services:
postgres:
image: postgres:15
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: platform_api
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
--shm-size=256mb
ports:
- 5432:5432
steps:
- uses: actions/checkout@v6
- name: Increase PostgreSQL max connections
run: |
# 16 parallel tests * 4 pool connections = 64, but allow headroom for spikes.
docker exec ${{ job.services.postgres.id }} \
psql -U postgres -c "ALTER SYSTEM SET max_connections = 150;"
docker restart ${{ job.services.postgres.id }}
for i in $(seq 1 30); do
docker exec ${{ job.services.postgres.id }} pg_isready -U postgres && break
sleep 1
done
if ! docker exec ${{ job.services.postgres.id }} pg_isready -U postgres; then
echo "PostgreSQL did not become ready after restart within 30 seconds" >&2
exit 1
fi
- name: Install Rust
uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Cache Rust dependencies
uses: swatinem/rust-cache@v2
with:
cache-on-failure: true
- name: Install cargo-nextest
uses: taiki-e/install-action@nextest
- name: Run unit tests
run: cargo nextest run --lib --bins
env:
POSTGRES_PRIMARY_APP_ID: ${{ secrets.POSTGRES_PRIMARY_APP_ID }}
DATABASE_HOST: localhost
DATABASE_PORT: 5432
DATABASE_NAME: platform_api
DATABASE_USERNAME: postgres
DATABASE_PASSWORD: postgres
DATABASE_MAX_CONNECTIONS: 5
DATABASE_TLS_ENABLED: "false"
MODEL_DISCOVERY_SERVER_URL: ${{ secrets.MODEL_DISCOVERY_SERVER_URL }}
MODEL_DISCOVERY_API_KEY: ${{ secrets.MODEL_DISCOVERY_API_KEY }}
AUTH_ADMIN_DOMAINS: ${{ secrets.AUTH_ADMIN_DOMAINS }}
AUTH_ENCODING_KEY: ${{ secrets.AUTH_ENCODING_KEY }}
BRAVE_SEARCH_PRO_API_KEY: ${{ secrets.BRAVE_SEARCH_PRO_API_KEY }}
DEV: "true"
# All e2e tests are compiled into a single binary (tests/e2e_all/) for faster linking.
# Isolation comes from UUID-scoped orgs/workspaces/keys, not separate databases.
- name: Run integration tests
run: cargo nextest run --test e2e_all
env:
POSTGRES_PRIMARY_APP_ID: ${{ secrets.POSTGRES_PRIMARY_APP_ID }}
DATABASE_HOST: localhost
DATABASE_PORT: 5432
DATABASE_NAME: platform_api
DATABASE_USERNAME: postgres
DATABASE_PASSWORD: postgres
DATABASE_MAX_CONNECTIONS: 5
DATABASE_TLS_ENABLED: "false"
MODEL_DISCOVERY_SERVER_URL: ${{ secrets.MODEL_DISCOVERY_SERVER_URL }}
MODEL_DISCOVERY_API_KEY: ${{ secrets.MODEL_DISCOVERY_API_KEY }}
AUTH_ENCODING_KEY: ${{ secrets.AUTH_ENCODING_KEY }}
AUTH_ADMIN_DOMAINS: ${{ secrets.AUTH_ADMIN_DOMAINS }}
BRAVE_SEARCH_PRO_API_KEY: ${{ secrets.BRAVE_SEARCH_PRO_API_KEY }}
TEST_DATABASE_NAME: platform_api_e2e
RUST_LOG: debug
DEV: "true"
- name: Run vLLM integration tests
run: cargo test --test integration_tests -- --nocapture
env:
VLLM_BASE_URL: ${{ secrets.VLLM_BASE_URL }}
VLLM_API_KEY: ${{ secrets.VLLM_API_KEY }}
# Only build release on main branch, not on PRs
- name: Build release
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: cargo build --release
env:
POSTGRES_PRIMARY_APP_ID: ${{ secrets.POSTGRES_PRIMARY_APP_ID }}
DATABASE_HOST: localhost
DATABASE_PORT: 5432
DATABASE_NAME: platform_api
DATABASE_USERNAME: postgres
DATABASE_PASSWORD: postgres
MODEL_DISCOVERY_SERVER_URL: ${{ secrets.MODEL_DISCOVERY_SERVER_URL }}
AUTH_ENCODING_KEY: ${{ secrets.AUTH_ENCODING_KEY }}