-
Create a feature branch from
maingit checkout -b feature/your-feature
-
Make changes and test locally where possible
-
Submit a PR with clear description of changes
-
Review and merge - PRs require approval before merging
Current phase: 0.x development (pre-1.0.0)
- Breaking changes are allowed in minor versions (0.x.0)
- Patch releases for bug fixes (0.x.y)
- Version 1.0.0 will be released when all lecture repos are successfully migrated
After 1.0.0 release:
- We'll use floating major tags (
v1,v2, etc.) - Breaking changes require major version bumps
We use semantic versioning:
| Reference | Purpose |
|---|---|
@v0 |
Latest 0.x release — floating tag, force-moved to each new release (recommended) |
@v0.x.y |
A specific pinned release (maximum reproducibility) |
@main |
Latest development (testing only) |
During 0.x, @v0 is the floating reference. Because minor releases (0.x.0) may include
breaking changes, @v0 can move across a breaking change — consumers needing strict stability
should pin an exact v0.x.y tag. After the 1.0.0 release, we'll add floating major tags
(v1, v2) for stable references.
-
Update CHANGELOG.md
- Move
[Unreleased]items to new[X.Y.Z]section - Add release date
- For breaking changes in 0.x, mark with
⚠️ BREAKING
- Move
-
Create and push the version tag:
git tag -a v0.x.y -m "Release v0.x.y - Description" git push origin v0.x.y -
Move the floating
v0tag to this release so@v0consumers pick it up. The^{}peels the annotated tag sov0points at the release commit directly (a lightweight tag), not at thev0.x.ytag object:git tag -f v0 "v0.x.y^{}" git push origin v0 --force -
Create GitHub Release at https://github.com/QuantEcon/actions/releases/new
- Copy changelog entry as release notes
- Attach any relevant artifacts
-
Drop any
@v0workarounds the release makes obsolete.build-jupyter-cachecallssetup-environmentandbuild-lecturesat the pinned@v0ref (GitHub forbids expressions inuses:), so a fix to a sibling action only reaches that chain whenv0moves in step 3. The action harness carries explicit workarounds for that window; grep.github/workflows/test-actions.ymlfor@v0and remove any that this release resolves. Currently outstanding: none. Add an entry here whenever you introduce one — a workaround with no entry is one a future releaser will not find.
Do not add a paths: filter to .github/workflows/test-actions.yml. A path filter suppresses
creation of the workflow run, so no check run is published for that commit and a required
Action harness: all checks waits forever — GitHub's own guidance is to avoid requiring workflows
that can be skipped. Relevance is decided by the gate job instead, which skips the jobs (a
skipped job reports success to a required check). If the harness should ignore a new kind of path,
extend IGNORED in that job; it is an ignore list, so anything unrecognised runs the harness
rather than silently passing.
During 0.x phase (current):
- Breaking changes are allowed and increment minor version (0.x.0)
- Mark as
⚠️ BREAKING in CHANGELOG with migration notes
After 1.0.0 release:
- Removing inputs/outputs
- Changing default behavior
- Renaming actions
- Use descriptive names with clear defaults
- Document all inputs in action's README.md
- Prefer
'false'as default for optional features
- Provide useful outputs for downstream steps
- Document output values and when they're available
- Use
::warning::and::error::annotations - Provide actionable error messages
- Consider
upload-failure-reportspattern for debugging
Test changes in a lecture repository before merging:
- Reference your branch:
quantecon/actions/action-name@feature/your-branch - Run workflow and verify behavior
- Check outputs and error handling
Update these docs when adding features:
| Doc | Update When |
|---|---|
Action's README.md |
Any input/output changes |
docs/QUICK-REFERENCE.md |
New inputs added |
docs/MIGRATION-GUIDE.md |
Workflow patterns change |
docs/FUTURE-DEVELOPMENT.md |
Features completed/planned |
Open an issue or discussion at https://github.com/QuantEcon/actions