Skip to content

Continuous Integration

Local development is driven by the root Makefile, and pull request checks are handled by GitHub Actions workflows that mirror the same targets.

Makefile

The root Makefile contains relevant common operations. Run make with no arguments to execute the default all target (lint + test).

Configuration

CI configuration is in the cfg/ directory:

txt
cfg/
├── cspell.yml            # Spell-checker config
├── dictionary.txt        # Custom dictionary
├── lychee.toml           # Link-checker config
├── markdownlint.yml      # Markdown linting rules
├── pre-commit-lint.yml   # Pre-commit hook definitions
└── yamllint.yml          # YAML linting rules

Linting

make lint runs two steps: pre-commit followed by Prettier.

Pre-commit

The pre-commit harness at cfg/pre-commit-lint.yml orchestrates most of the individual linters. Each hook references its own config file from the cfg/ directory (e.g. --config-file cfg/yamllint.yml, --config cfg/cspell.yml). Adding a new linter or updating a rule only requires touching files in cfg/.

Prettier

Prettier runs separately via make docs-prettier because it is easier to invoke directly with npx than through a pre-commit hook.

GitHub Actions

Several workflows run on pull requests or pushes to main:

Bindings

Regenerates CPI FFI bindings from Agave C headers using bindgen and checks that the committed interface/src/cpi_bindings.rs is up to date. The Agave repository URL and revision are configured as environment variables in the workflow file. Runs on every pull request.

Build docs

Builds the VitePress site and checks for broken links with lychee. Runs on every pull request.

Deploy docs

Builds and deploys the documentation to GitHub Pages on pushes to main.

Lint

Runs the same pre-commit harness as make lint plus Prettier on every pull request.

Semantic PR

Enforces Conventional Commits title format with a required ENG-* scope on every pull request.

Test

Assembles the program and runs the Mollusk test suite on every pull request.