Thank you for your interest in contributing to SigilGuard!
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/sigil_guard.git - Install dependencies:
mix setup - Create a feature branch:
git checkout -b feature/amazing-feature
mix setup # Install dependencies
mix test # Run tests
mix lint # Run linters (format, credo, dialyzer)
./bin/check # Run the clean-clone-safe complete gate
mix docs # Generate documentation
mix bench # Run benchmarksBefore submitting a PR, run ./bin/check. It bootstraps the locked dependency
graph and enforces every required check, including the production package build.
The focused commands below remain useful while iterating:
- All tests pass:
mix test - Code is formatted:
mix format - Credo passes:
mix credo --strict - Dialyzer passes:
mix dialyzer - Documentation is updated
Follow Conventional Commits:
feat:new featuresfix:bug fixesdocs:documentation changesrefactor:code refactoringtest:test additions or changeschore:maintenance tasks
Releases are managed by maintainers using git_ops:
- Ensure the complete gate passes:
./bin/check - Run
mix release(alias formix git_ops.release) — updates changelog, bumps version, commits, and tags - Push with tags:
git push --follow-tags - CI verifies the exact version tag and commit, then validates, attests, and publishes through isolated jobs
The publish workflow builds a Hex tarball and SPDX SBOM after the complete gate,
signs a release predicate that names both artifacts and their SHA-256 digests,
and verifies both provenance forms. The environment-scoped publish job has no
OIDC or attestation-write permission; it receives the Hex key only for the
publish step, requires a fresh build to equal the attested tar, then compares
the Hex registry download byte for byte. Before any release, administrators
must complete the tag-ruleset, hex-publish protection, environment-secret,
and main protection checklist in guides/release-and-anchoring.md; release
verification rejects an unprotected tag.
- Ensure your code follows the project style
- Update documentation as needed
- Add tests for new functionality
- Submit a PR with a clear description
Open an issue for questions or discussions.