name: CI on: push: pull_request: permissions: contents: read jobs: agent: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - run: cargo fmt --manifest-path agent/Cargo.toml --check - run: cargo clippy --manifest-path agent/Cargo.toml --all-targets -- -D warnings - run: cargo test --manifest-path agent/Cargo.toml --locked - run: cargo build --manifest-path agent/Cargo.toml --release --locked backend: runs-on: ubuntu-latest defaults: run: working-directory: control-plane/backend steps: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version: '1.24.x' cache-dependency-path: control-plane/backend/go.sum - run: test -z "$(gofmt -l .)" - run: go vet ./... - run: go test -race ./... frontend: runs-on: ubuntu-latest defaults: run: working-directory: control-plane/frontend steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22.14' cache: npm cache-dependency-path: control-plane/frontend/package-lock.json - run: npm ci - run: npm run lint - run: npm run typecheck - run: npm test -- --run - run: npm run build - run: npm audit --omit=dev containers: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: mkdir -p control-plane/secrets - run: printf 'ci-only-not-a-secret-32-characters\n' | tee control-plane/secrets/db_password control-plane/secrets/admin_password control-plane/secrets/agent_token control-plane/secrets/integration_token control-plane/secrets/grafana_admin_password control-plane/secrets/grafana_secret_key >/dev/null - run: docker compose -f control-plane/docker-compose.yml config --quiet - run: docker compose -f control-plane/docker-compose.yml --profile observability build backend frontend grafana