-
-
Notifications
You must be signed in to change notification settings - Fork 1
Development
Contributor-facing detail. CONTRIBUTING.md is the summary; this is where the depth lives.
git clone https://github.com/slidict/wip.git
cd wip
bundle install
bundle exec exe/wip versionRequires Ruby 3.2+. Runtime dependencies are just thor; development adds rake, rspec, and
rubocop.
The test suite doesn't require it. The resolution, build, and execution layers are all swappable —
CommandResolver takes an injectable executable check, CommandBuilder produces argument arrays
without running them, and CommandRunner takes injectable IO. So specs assert on the arrays wip
would run, not on real containers, and you can develop on any platform.
That design constraint is worth preserving: a change that makes a layer un-injectable makes it untestable. See Architecture.
bundle exec rspec # unit tests
bundle exec rubocop # style/lint
bundle exec rake # both (the default task)Both must pass before a PR merges. Details, including how to write specs that match the existing style: Testing and Linting.
.github/workflows/test.yml runs on every pull request and every push to main:
-
Ruby matrix: 3.2, 3.3, 3.4, 4.0 (
fail-fast: false, so you see every failing version) bundle exec rake specbundle exec rake rubocop- a CLI smoke test:
bundle exec exe/wip help | grep -q '^Commands:'
<type>[optional scope]: <description>
Types in use: feat, fix, docs, style, refactor, test, chore, ci, build, perf.
feat(cli): add doctor command
fix(config): accept positional path argument
ci: add push trigger for main
The type matters beyond tidiness: PR labels drive the generated release notes —
feat → 🚀 Features, fix → 🐛 Fixes, and chore/ci/docs/build/perf/test →
🧰 Maintenance. See Release Process.
| Bump | For |
|---|---|
| patch | bug fixes (fix) |
| minor | new commands or features (feat) |
| major | breaking changes |
Maintainers bump the version, via the "Bump Version" GitHub Actions workflow — you don't touch
lib/wip/version.rb in a PR.
- Fork and branch from
main. - Make the change, with tests for new behavior.
-
bundle exec rake— clean. - Open a PR describing what changed, why, and how you verified it.
Small, focused PRs are much easier to review. If a change grows a second unrelated concern, split it.
-
Tests for new behavior, at the layer that owns it — a config rule belongs in
spec/wip/config_spec.rb, not an end-to-end CLI test. -
Errors that name the offending key. Every
ConfigErrorin this codebase says which key is wrong; keep that up. See Configuration Errors. - Load-time validation over runtime surprises — fail before creating containers.
-
Comments that explain why. This codebase leans on them heavily for non-obvious constraints
(why an absolute build context crashes
wslc, whyrestart: noneeds normalizing, why the shadow root can't live inside the context). Preserve that reasoning when you touch the code. - Documentation. A user-visible change means updating the README and the relevant wiki page.
exe/wip # the executable
lib/wip.rb # requires everything
lib/wip/ # one class per concern
spec/wip/ # one spec file per class
docs/ # README assets (logo, demo gif/tape)
Per-module detail: Architecture.
Introduction
Modes
Configuration
- Configuration Reference
- Config File Discovery
- Dependencies
- Networking
- Interactions
- Restart Policies
- Env Files
- Secret Masking
- Dockerignore
- Shadow Build Context
- Source Sync
- Sync Modes
compose.yml support
- Compose File Support
- Compose Build
- Compose Depends On
- Compose Profiles
- Compose Variable Interpolation
Commands
- CLI Command Reference
- wip init
- wip version
- wip doctor
- wip config
- wip build
- wip up
- wip stop
- wip down
- wip exec
- wip run
- wip shell
- wip logs
- wip sync
- wip dispatch
- Global Options
- Debug Output
- TTY Allocation
Guides
- Guides
- Migrating from dip
- Reusing an Existing compose.yml
- Fixing a Slow Boot
- Continuous Sync
- Auto Restarting Containers
- Multi Arch Images
- Using wip in CI
Troubleshooting
- Troubleshooting & FAQ
- FAQ
- Configuration Errors
- WSLC Not Found
- Registry Authentication
- Architecture Mismatch
- Volume Limit Reached
- rsync Not Found
- Reporting Issues
Comparison
Project