Appearance
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 rulesLinting
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.