Contributing
Thank you for your interest in contributing to Abysslink.
Before you start
- Read docs/DESIGN.md — the full design document and the non-negotiable architectural decisions.
- Check existing issues and pull requests.
Development setup
git clone https://github.com/abysslink/abysslink.git
cd abysslink
go mod download
make build
make test
make lint
Requirements:
- Go 1.26+ (go.mod targets go 1.26.4)
- golangci-lint v2 (install via go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest)
- shellcheck (for scripts/install.sh changes)
Coding conventions
Hard rules
- No
fmt.Printlnin library code — uselog/slog - Every external command call goes through
internal/shell.Runner - Every file mutation goes through
internal/audit --dry-runis the default for any command that mutates the system- No
sh -cshellouts — alwaysexecthe binary directly with argv - No panics in normal control flow — return errors
context.Contexteverywhere — cancellation must propagate- License header (Apache-2.0 short form) in every Go source file
- No secrets on argv
- No secrets in the audit log
Style
gofmtandgoimports— enforced by lint- Conventional commit messages:
feat:,fix:,chore:,docs:,test:,refactor: - DCO sign-off required:
git commit -s - Tests required for every non-trivial function
Submitting changes
- Fork the repository
- Create a branch:
git checkout -b feat/my-feature - Make your changes, ensuring
make lint testpasses - Commit with DCO sign-off:
git commit -s -m "feat: add my feature" - Push and open a pull request
Pull request checklist
- [ ]
make lint testpasses locally - [ ] Tests added for new functionality
- [ ] Docs updated if user-facing behaviour changed
- [ ] Commit messages follow conventional commit format
- [ ] DCO sign-off on all commits (
git commit -s) - [ ] No secrets or credentials in the diff
Security issues
Do not open a public issue for security vulnerabilities. Follow the process in SECURITY.md.
Code of Conduct
See CODE_OF_CONDUCT.md.
License
By contributing, you agree that your contributions will be licensed under the Apache-2.0 license and that you have the right to make the contribution.