Thanks for your interest in contributing! Asimov is a small, focused project and contributions of all sizes are welcome.
Prerequisites: macOS with Homebrew installed.
git clone https://github.com/stevegrunwell/asimov.git
cd asimov
brew install bats-core shellcheckVerify everything works:
make check| Command | What it does |
|---|---|
make help |
List available make targets with descriptions |
make test |
Run the Bats test suite |
make lint |
Run ShellCheck on all shell scripts |
make check |
Run both tests and linting |
make version |
Print asimov version |
make exclusions |
List all paths excluded from Time Machine (requires sudo) |
To run a single test by name: bats tests/behavior.bats --filter "substring of test name" or bats tests/sentinels.bats --filter "npm".
The main script supports --help, --version, and --dry-run; unknown options exit with an error.
This is the most common type of contribution. To add a new ecosystem or dependency directory:
- Add the sentinel pair to the
ASIMOV_VENDOR_DIR_SENTINELSarray inasimov— one'directory sentinel'entry per pattern. - Add a test in
tests/sentinels.batsusingcreate_projectto build the fixture. Keep this file in sync withASIMOV_VENDOR_DIR_SENTINELS(one test per sentinel pair). - Run
make checkto verify your changes pass tests and linting. - Add a changelog entry under the
[Unreleased]section inCHANGELOG.md.
Example sentinel entry:
'.zig-cache build.zig' # Zig build cacheThis means: exclude .zig-cache/ only when build.zig exists in the same directory.
This project uses Conventional Commits. Format your commits as:
type(scope): short description
Types: feat, fix, docs, test, refactor, chore, build, ci
Examples:
feat(sentinels): add Zig build cache exclusionfix: prevent duplicate exclusions on re-runtest: add coverage for Go modulesdocs: update installation instructions
- Branch from
develop(the default branch). - Keep PRs focused — one feature or fix per PR.
- Ensure
make checkpasses before submitting. - Update
CHANGELOG.mdfor user-facing changes.
- Bash/shell: 2-space indentation, LF line endings, UTF-8.
- Enforced via EditorConfig — most editors pick this up automatically.
asimov # Main bash script
tests/
sentinels.bats # Tests for each dependency pattern
behavior.bats # Tests for edge cases and general behavior
test_helper.bash # Shared setup/teardown and assertions
bin/tmutil # Mock tmutil for testing
scripts/
install.sh # Installation script
uninstall.sh # Uninstallation script
Makefile # Build targets (test, lint, check, install, uninstall)
Open an issue — happy to help.