-
-
Notifications
You must be signed in to change notification settings - Fork 1
Release Process
How a change gets from a merged PR to a published gem. Maintainer-facing.
PR merged to main
│
├─► Changelog workflow ──► release-drafter updates the DRAFT release notes
│
└─► (when a version bump lands on main)
Ruby Gem workflow ──► publish to GitHub Packages
──► publish to RubyGems
──► publish the release notes (draft → released)
The Ruby Gem workflow is triggered by the Changelog workflow completing successfully on main, not
by a tag push.
Every PR's type drives its place in the release notes:
| Label | Section |
|---|---|
feat |
🚀 Features |
fix |
🐛 Fixes |
chore, ci, docs, build, perf, test
|
🧰 Maintenance |
Configured in .github/release-drafter.yml. Entries render as
- $TITLE @$AUTHOR (#$NUMBER), so PR titles are user-visible — write them for a reader, not for
yourself.
The Changelog workflow (.github/workflows/changelog.yml) runs release-drafter with
publish: false on every push to main, keeping a draft release continuously up to date. Nothing
is released at this stage.
Run the Bump Version workflow manually (workflow_dispatch), choosing patch, minor, or
major:
| Bump | For |
|---|---|
| patch | bug fixes (fix) |
| minor | new commands or features (feat) |
| major | breaking changes |
It:
- Reads the current version from
lib/wip/version.rb - Computes the next one per SemVer
- Rewrites
lib/wip/version.rb - Verifies the gemspec still builds (
gem build wslc-wip.gemspec) - Commits as
chore: bump version to vX.Y.Zon abump-version-vX.Y.Zbranch - Opens a PR
Contributors never bump the version in a feature PR.
Merging it to main triggers Changelog → Ruby Gem.
The Ruby Gem workflow (.github/workflows/gem-push.yml) runs only when the Changelog workflow
succeeded on main. It:
- Extracts the version from
lib/wip/version.rb→ tagvX.Y.Z -
Checks what already exists, so a re-run is safe:
- RubyGems, via the versions API
- GitHub Packages, via the packages API
- a published (non-draft) GitHub release for the tag
- Publishes to GitHub Packages, if absent
- Publishes to RubyGems via trusted publishing (OIDC — no long-lived API key), if absent
- Publishes the release notes for the tag, if no published release exists
Concurrency group gem-push, cancel-in-progress: false — publishes never overlap or get
cancelled halfway.
release-drafter keeps a draft release permanently updated, and gh release view matches drafts
too. Checking mere existence would see the draft and skip publishing forever. So the workflow
treats only isDraft == false as "already released" — the subject of a fix(ci) commit worth
knowing about before you touch that step.
Every publish step is guarded by an existence check, so re-running the workflow after a partial failure resumes rather than erroring on "version already exists". If RubyGems succeeded and GitHub Packages failed, a re-run pushes only the latter.
gem install wslc-wip
wip versionwslc-wip.gemspec:
spec.files = Dir['lib/**/*', 'exe/*', 'README.md', 'LICENSE']So spec/, docs/, .github/, and this wiki are not in the gem — only the library, the
executable, the README, and the licence. Adding a runtime file outside lib/ or exe/ means
updating that glob.
rubygems_mfa_required is set, and RubyGems publishing uses trusted publishing rather than a
stored API key.
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