IW-399 — Move installation and releases to code.iterative.works #408
No reviewers
Labels
No labels
bug
contract
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
iterative-works/iw-cli!408
Loading…
Reference in a new issue
No description provided.
Delete branch "IW-399"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Integration PR for IW-399 — Move installation and releases from GitHub to code.iterative.works.
All three phases are complete. Ready for final review.
Status
fjadded to the image, workflows repointed offghcr.iotocode.iterative.works/iterative-works/iw-cli-ci:latest, runner auto-token pull credentialsgh/GitHub Releases to Forgejo RESTPhase 3 summary
scripts/forgejo-release.sh(new): shared create-or-clobber Forgejo release publisher over REST (idempotent, fails loudly, never echoes the token).release.yml: versioned +vlatestpublish via the REST helper usingsecrets.FORGEJO_RELEASE_TOKEN; auto-token still does checkout + thevlatesttag force-move.release-prepare.sh(fj prinstead ofgh),release-publish.sh(break-glass; SHA-pinning preserved),RELEASE.md(tag-triggered workflow is now primary).Decision: the runner auto-token cannot publish releases on Forgejo 11.0.8 (403 — no
releasesscope; theforgejo-actionsid -2 user lacks release-unit write on the private org). Publishing uses theFORGEJO_RELEASE_TOKENActions secret (maintainer token,write:repository) via REST.Verification (Tier-2 authenticated E2E)
A throwaway
v0.0.0-testtag published a versioned release with the correct asset via the token — green in CI. The E2E surfaced three real release-blockers, all fixed here (each would have killed the first realv0.6.3release):rsyncmissing from the CI image → build exit 127.maven-nightliesrepo it resolves from) → bumped to 1.15.0.package-release.shtarball validationtar | grep -qSIGPIPE-under-pipefailfalse failure.Code review (3 reviewers): all acceptance criteria met; four findings addressed (delete all same-named assets on clobber; trigger scoped to
v[0-9]*;checkout fetch-depth: 0; RELEASE.md checklist fix).Gated / follow-up (not blocking this PR)
iterative-worksorg.vlateststep was isolated out of the Tier-2 run (to not touch the production rolling release); it is the same validated helper call + a git force-push and gets its first real run on the first genuine release.See
.github/ci-image.mdfor how the image is built and pushed.Move installation and releases from GitHub to code.iterative.works Artifacts: - analysis.md 🤖 Generated with Claude CodeProbed the live Forgejo instance, registry, and Forgejo/Gitea docs to resolve research-answerable CLARIFYs and surface one new blocker: - URL scheme: explicit-tag path is GitHub-identical (verified); the /releases/latest/download/ magic path is NOT implemented in Forgejo - fj release subcommand present locally (no --clobber; view-then-update) - vlatest tag + rolling "latest" release already exist on Forgejo - iw-cli-ci is NOT yet on the Forgejo registry (Group E confirmed blocked) - NEW BLOCKER: iterative-works org is private -> anonymous install one-liner 404s; private web download route needs basic auth, not tokens 🤖 Generated with Claude CodeResolved: - analysis.md: Public vs credentialed install → make iw-cli public (credential-free) - analysis.md: Runner release-publishing auth → use Forgejo auto-token, no PAT - analysis.md: Container-registry cutover scope → build+publish iw-cli-ci to Forgejo, in scope (adds fj to CI image) - analysis.md: Workflow location → keep under .github/workflows/ - analysis.md: One vs two release paths → tag-triggered workflow canonical, local scripts as break-glass fallback 🤖 Generated with Claude CodeDashboard review state written during triage (analysis_ready). 🤖 Generated with Claude CodeGroup E (CI image cutover) is now in scope and gates Group C, so it becomes its own phase between consumption and publishing: - Phase 1: docs + bootstrap (A+B) - Phase 2: CI image cutover (E) — add fj, build+push to Forgejo - Phase 3: release publishing + verify (C+D+F) Total re-estimated 9.5-17h; confidence raised to Medium-High now that the load-bearing unknowns are resolved. 🤖 Generated with Claude CodeMove installation and releases from GitHub to code.iterative.works Artifacts: - tasks.md (3 phases) - review-state.json (tasks_ready) 🤖 Generated with Claude CodeIssue: IW-399 Phase: 1 - Consumption side — docs + bootstrap repoint This commit marks the checkpoint for phase 1 context generation. Use wf-implement IW-399 to return to this point. 🤖 Generated with Claude CodeConsumption side — docs + bootstrap repoint Artifacts: - phase-01-tasks.md 🤖 Generated with Claude CodeIssue: IW-399 Phase: 2 - CI image cutover This commit marks the checkpoint for phase 2 context generation. Use wf-implement IW-399 to return to this point. 🤖 Generated with Claude CodeIssue: IW-399 Phase: 2 - CI image cutover Add fj (forgejo-cli) to .github/Dockerfile.ci (deps/ COPY convention), repoint the image source LABEL off github.com, and add fj to the tool verification RUN. Swap all 7 container.image + credentials blocks (release.yml x1, ci.yml x6) from ghcr.io + github.actor/GITHUB_TOKEN to the Forgejo registry image + FORGEJO_REGISTRY_USER/_TOKEN pull secrets. Code side only. Image build/push to the Forgejo registry and the green CI-run verification need registry access and are a documented human/infra handoff (see phase-02-tasks.md + implementation-log.md). The gh release publishing steps in release.yml are untouched (Phase 3). 🤖 Generated with Claude Code Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Issue: IW-399 Phase: 2 - CI image cutover Pull the Forgejo-registry CI image with the runner auto-token (github.actor / secrets.GITHUB_TOKEN, which resolves to the Forgejo auto-token) instead of dedicated registry secrets — lowest-setup path, tried first. Add packages: read to release.yml permissions so the auto-token can pull the private image (ci.yml already had it). Docs updated: iw-cli-ci is a container package under the org (no git repo needed); auto-token decision + scheduled-run caveat + dedicated-secret fallback recorded in phase-02-tasks.md and implementation-log.md. 🤖 Generated with Claude Code Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>Release publishing + verify Artifacts: - phase-03-tasks.md 🤖 Generated with Claude CodeRewrite the release production side off GitHub. New shared REST helper scripts/forgejo-release.sh does create-or-clobber Forgejo release publishing (idempotent, loud on non-2xx), reused by both the workflow and the local script. - release.yml: versioned + vlatest publish steps gh -> forgejo-release.sh (REST), using the FORGEJO_RELEASE_TOKEN secret. vlatest git tag force-move keeps the auto-token. Phase-2 container/credentials block untouched. - release-prepare.sh: gh pr -> fj pr; drop gh-auth gate; reword PR body. - release-publish.sh: break-glass fallback via REST; SHA-pin via explicit tag-at-MAIN_SHA; github.com URLs -> code.iterative.works. - RELEASE.md: tag-triggered workflow is the primary path; local publish demoted to break-glass; prereq gh -> fj + FORGEJO_RELEASE_TOKEN. Probe-driven pivot: the runner auto-token 403s on the Forgejo 11.0.8 releases API (no releases scope; forgejo-actions id -2 lacks release-unit write on the private org), so publishing requires a maintainer/bot token secret. The no-PAT plan is superseded; recorded in analysis DECISION + phase-03 context/tasks. Resolved CLARIFY C1/C2/C3/D1. 🤖 Generated with Claude CodeWIP: IW-399 — Move installation and releases to code.iterative.worksto IW-399 — Move installation and releases to code.iterative.works