Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
ci(release): rc runs publish a github prerelease with standalone assets
  • Loading branch information
codejunction committed Oct 10, 2026
commit 82004b952ab9f3ad307c7bb3f90b3d4b3f02db0e
14 changes: 10 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
workflow_dispatch:
inputs:
version:
description: "Release candidate version for PyPI, e.g. 0.0.5rc1 (not committed; pyproject is patched in the build)"
description: "Release candidate, e.g. 0.0.5rc1: PyPI + a GitHub prerelease (not committed; pyproject is patched in the build)"
required: true

permissions:
Expand Down Expand Up @@ -115,8 +115,8 @@ jobs:
path: standalone/

github-release:
# tagged releases only; release candidates live on PyPI (their standalone builds stay workflow artifacts)
if: github.event_name == 'push'
# a tag makes the release; a release candidate makes a prerelease v<rc> on the branch's commit, so the
# installers can fetch its standalone build (prereleases never show as releases/latest, so no OTA offer)
needs: [pypi, standalone]
runs-on: ubuntu-latest
permissions:
Expand All @@ -132,6 +132,12 @@ jobs:
pattern: standalone-*
path: standalone/
merge-multiple: true
- env:
- if: github.event_name == 'push'
env:
GH_TOKEN: ${{ github.token }}
run: gh release create "$GITHUB_REF_NAME" dist/* standalone/* --title "shelldeck $GITHUB_REF_NAME" --generate-notes
- if: github.event_name == 'workflow_dispatch'
env:
GH_TOKEN: ${{ github.token }}
TAG: v${{ inputs.version }}
run: gh release create "$TAG" dist/* standalone/* --prerelease --target "$GITHUB_SHA" --title "shelldeck $TAG (release candidate)" --notes "Release candidate from $GITHUB_REF_NAME. Install: SHELLDECK_VERSION=${{ inputs.version }} with install.ps1 / install.sh, or uv tool install shelldeck==${{ inputs.version }}."
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ uv tool install --force -e . # global sd/shelldeck from this checkout (th
- `install.ps1` / `install.sh`: one-line installers (uv, then `uv tool install shelldeck`; `SHELLDECK_SOURCE` overrides the source and CI feeds it the built wheel; `UV_NO_MODIFY_PATH` skips PATH edits).
- `.github/workflows/ci.yml`: lint, a Windows+Ubuntu × py3.12–3.14 test matrix, and an installer smoke test.
- `release.yml`: on a `v*` tag, reuses CI, checks the tag matches the pyproject version, then builds, publishes to PyPI (trusted publishing, environment `pypi`) and creates the GitHub release.
- Manual run (`workflow_dispatch`, input `version`) publishes a release candidate from a `feature/` or `fix/` branch: `x.y.zrcN` only, newer than pyproject, patched into pyproject in the build (never committed), no tag or GitHub release. It lives in `release.yml` because the PyPI trusted publisher is bound to that file.
- Manual run (`workflow_dispatch`, input `version`) publishes a release candidate from a `feature/` or `fix/` branch: `x.y.zrcN` only, newer than pyproject, patched into pyproject in the build (never committed), no git tag pushed, but a GitHub prerelease `v<rc>` on the branch's commit with the wheel and standalone assets (`releases/latest` skips prereleases, so OTA never offers an rc). It lives in `release.yml` because the PyPI trusted publisher is bound to that file.
- README screenshots live in `docs/assets/`. `docs/superpowers/` and `plans/` are local-only (gitignored).
- `chapters/`: spec corpus for a future agent platform, not implemented. `_ref_code/`: reference only.

Expand Down