cog
596f1a47 - Overhaul development tooling to use mise as the single source of truth for tasks, with consistent naming conventions and intelligent caching. (#2685)

Commit
2 days ago
Overhaul development tooling to use mise as the single source of truth for tasks, with consistent naming conventions and intelligent caching. (#2685) * chore: parallel integration tests Integration tests were essentially serial resulting in slow runs both locally and in CI. This commit resolves this particular pain point by spinning each IT up as it's own invocation of go's `t.Run()`. Additionally, in support of future tests to ensure/enforce isolation any IT with the suffix `_serial` in the file name (e.g. test_serial.txtar) will be run without invoking `t.Parallel()`. * chore: Add RUSTUP_HOME and CARGO_HOME env To eliminate the `undefined` directory due to toolchain use, we now define CARGO_HOME and RUSTUP_HOME if they are not already set. Add ignores to .gitignore * chore: Add rust targets We support non-musl x86_64, aarch64, and darwin aarch64 * chore: restructure mise tasks with consistent naming - Language-based tasks for fmt/lint/test/typecheck: task:go, task:rust, task:python - Component-based tasks for build: build:cog, build:coglet, build:sdk - Aliases: fmt = fmt:check, lint = lint:check (non-destructive defaults) - Separate lint:rust:deny for cargo-deny checks - Remove cog-dataclass references (now merged into cog) * chore: restructure CI with path-based filtering and single gate job - Add changes detection job with native git diff (no external actions) - Add ci-complete gate job for branch protection (single required check) - Consolidate rust.yaml into ci.yaml - Add SUPPORTED_PYTHONS env at workflow level - Split into parallel fmt/lint/test jobs per language - Add Rust cache with save-on-main strategy - Add rust to CodeQL language matrix - Document CI architecture in .github/README.md * chore: simplify Makefile and remove redundant scripts - Rewrite Makefile as shim delegating to mise tasks - Remove redundant script/* files (format, lint, test-*, setup, build-wheels) - Keep script/generate-compat for standalone compatibility matrix generation - Add mise task generate:compat for same functionality - Update AGENTS.md with new mise task documentation * docs: update CONTRIBUTING.md for mise workflow, add Makefile warning - Add deprecation warning to Makefile recommending mise (suppressible with MAKE_NO_WARN=1) - Update CONTRIBUTING.md to use mise commands instead of script/* - Add mise trust to setup instructions - Update test, lint, format, and docs commands to use mise * chore: add source/output caching to mise build tasks Add sources/outputs for cache-eligible tasks: - build:sdk - rebuilds only when python/**/*.py changes - build:coglet:wheel* - rebuilds only when crates/**/*.rs changes - generate:go - rebuilds only when dist/cog-*.whl changes - generate:stubs - rebuilds only when coglet-python source changes - generate:compat - rebuilds only when tools/compatgen changes - docs - rebuilds only when docs/**/*.md changes Use 'mise run <task> --force' to bypass cache. * ci: replace llm-docs cron with CI check - Add docs:llm task to regenerate docs/llms.txt - Add docs:llm:check task to verify llms.txt is up to date (uses temp file diff) - Add check-llm-docs job to CI (runs when docs/ or README.md changes) - Delete llm-docs.yml cron workflow (no more auto-PRs) Developers now run 'mise run docs:llm' when updating docs. * ci: use gotestsum with github-actions format for integration tests - Add ci:test:integration task with --format github-actions for collapsed output - Fix docs:llm task to be portable (macOS compatible) - Regenerate docs/llms.txt * ci: use rust-toolchain and cargo-binstall actions in CI - Add MISE_DISABLE_TOOLS=rust,cargo-binstall to use CI actions instead - Use dtolnay/rust-toolchain for Rust jobs - Use taiki-e/install-action@cargo-binstall for jobs needing cargo tools - Skip mise for fmt:rust and lint:rust (only need rustfmt/clippy from toolchain) - Keep mise for jobs needing cargo:* tools (deny, nextest, maturin, zigbuild) This ensures toolchain is ready before mise installs cargo:* tools, avoiding race conditions when cargo-binstall compiles from source. * ci: run all jobs when workflow files change Changes to .github/workflows/ now trigger all jobs to ensure CI changes are fully tested. * ci: add rust toolchain setup to all jobs using mise All jobs that use mise need rust toolchain and cargo-binstall set up first, otherwise mise fails to install cargo:* tools. * fix: remove RUSTUP_HOME override from mise.toml RUSTUP_HOME being empty in CI caused mise to set it to a project-local path, which broke cargo-binstall since the toolchain was installed at the default ~/.rustup location. Keep CARGO_HOME override for local dev (avoids 'undefined' dir issue). * ci: lint-go needs build-sdk for wheel embedding lint:go depends on generate:go which copies dist/cog-*.whl into the binary. * feat: replace Python stub generator with pyo3-stub-gen - Replace custom scripts/generate_stubs.py with pyo3-stub-gen Rust crate - Add #[gen_stub_pyfunction], #[gen_stub_pyclass], #[gen_stub_pymethods] attributes - Create src/bin/stub_gen.rs for stub generation - Update mise tasks (generate:stubs, stub:check) to use cargo run --bin stub_gen - Replace make commands with mise run in CI (lint-python, test-go, integration) - Update bytes crate to 1.11.1 to fix RUSTSEC-2026-0007 - Add lint ignores for test files (S105, S106, S108, S110, B011, S603, B904, ANN) - Remove unused imports from test files (auto-fix) * feat: add mise.toml to CI triggers, build:all alias, install task, pin Python 3.12 - mise.toml changes now trigger all CI jobs (like workflow changes) - Add build:all alias for build task - Add install task (equivalent to make install) - Pin Python 3.12 in tools - fixes pyo3 abi3-py310 builds on systems with older Python * fix: add missing task dependencies - generate:go depends on build:sdk (needs wheel to embed) - lint:go:fix depends on generate:go (consistency with lint:go) - typecheck:go depends on generate:go (go vet needs generated code) - test:integration depends on build:cog, build:sdk, build:coglet:wheel * update mise.lock * fix: use github.ref for concurrency group on main branch Previously used github.run_id which made each run unique (no queueing). Now push to main uses refs/heads/main as group, so runs queue instead of running in parallel. * fix: force exit integration tests on SIGTERM/SIGINT Without this, go test ignores SIGTERM and keeps running when CI cancels the workflow, wasting runner time. * fix: remove unnecessary dependencies from lint tasks - lint:go no longer depends on generate:go (golangci-lint doesn't need wheel) - lint:go:fix no longer depends on generate:go - Remove typecheck:go (golangci-lint includes govet) - Update typecheck to only run rust and python * fix: remove deprecated govet.check-shadowing config * feat: skip slow integration tests by default for local runs Local: mise run test:integration (skips slow tests with -short) Local full: SHORT=0 mise run test:integration CI: runs full suite (no -short flag) * fix: use pre-built wheel for coglet-python tests, restore lint:go deps - lint:go depends on generate:go (golangci-lint needs wheel to compile) - test:coglet:python uses pre-built wheel from dist/ if available - Replace experimental_monorepo_root with [monorepo].config_roots * refactor: replace tox with nox for Python testing - Add noxfile.py with tests and typecheck sessions - Update mise tasks to use nox instead of tox - Remove tox.ini and tox/tox-uv from dev dependencies - CI uses astral-sh/setup-uv for Python version management - Local dev uses uv backend with auto-download Python versions * perf: use aqua backend for cargo-deny, cargo-insta, cargo-zigbuild Switch from cargo: to aqua: backend for tools that have aqua registry support. This provides: - Faster installs (pre-built binaries, no compilation) - Better security (cosign/SLSA verification enabled by default) - No dependency on Rust toolchain for these tools Tools switched: - cargo-deny -> aqua:EmbarkStudios/cargo-deny - cargo-insta -> aqua:mitsuhiko/insta - cargo-zigbuild -> aqua:rust-cross/cargo-zigbuild Tools remaining on cargo: backend (no aqua support): - cargo-nextest - maturin * fix: use uvx to run nox in CI mise's pipx:nox with uvx backend doesn't work when MISE_DISABLE_TOOLS includes python. Since uv is already available via astral-sh/setup-uv, run nox directly via uvx instead. * fix: use aqua gotestsum for CI integration tests - Add aqua:gotestyourself/gotestsum to tools (binary download, no compilation) - Use exec to run gotestsum directly so SIGTERM from CI cancellation propagates to the test process and terminates it cleanly - Removes go run overhead which didn't forward signals properly * fix: use aqua gotestsum for all test tasks Switch test:go and test:integration from 'go tool gotestsum' to use the aqua-installed gotestsum directly for consistency. * fix: always use venvs in nox sessions Remove CI-specific python=False logic that disabled venv creation. Nox's uv backend handles Python version management and venv creation consistently in both local dev and CI environments. * fix: run nox tests only for matrix python version Pass -p flag to nox so each matrix job only runs tests for its specific Python version instead of all 4 versions. * feat: add nox session for coglet-python tests - Add 'coglet' nox session for coglet-python binding tests - Update mise tasks: test:coglet:python (3.13), test:coglet:python:all - CI uses uvx nox with matrix python version for consistency
Author
Parents
Loading