From 90b266709bc6030df2c242895ec196596efd9002 Mon Sep 17 00:00:00 2001 From: Sam Schumacher <38103916+HerrSammyDE@users.noreply.github.com> Date: Sun, 6 Sep 2026 18:54:34 +0200 Subject: [PATCH] ci: fork-only releases via a fork_revision dispatch input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The pipeline derives the version strictly from the upstream tag contained in develop, so a release without an upstream bump was impossible: dispatching found "1.13.3, already published" and stopped. That was the deliberate design — but we now need exactly such a release. `fork_revision` (dispatch only, validated as a positive integer) appends a fourth component: 1 → v1.13.3.1. Upstream's number stays visible in front, the tag sorts after v1.13.3, and the automatic push path is untouched — it never sets the input, so a merge still only ever cuts the upstream version. CHANGELOG.md gains the v1.13.3.1 section the release gate requires; FORK_CHANGES.md records the versioning rule. --- .github/workflows/release.yaml | 26 +++++++++++++++++++++++--- CHANGELOG.md | 4 ++++ FORK_CHANGES.md | 2 +- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a651a2d6..8537430c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -35,6 +35,11 @@ name: Release # the current develop. Deleting a release by hand does NOT re-trigger anything — # that is deliberate, so an accidental deletion cannot resurrect itself with # whatever happens to be on develop at the time. +# +# FORK-ONLY RELEASES: when we need to ship without an upstream bump, dispatch +# with `fork_revision` (1, 2, ...). The version becomes ., +# e.g. v1.13.3.1 — upstream's number stays visible in front, and the release +# sorts after v1.13.3. The automatic push path never does this on its own. on: push: @@ -46,6 +51,10 @@ on: description: "Re-release the version even if it is already published (deletes the existing release and its tag)" type: boolean default: false + fork_revision: + description: "Fork-only release: append this revision to the upstream version (1 -> v1.13.3.1). Leave empty for a normal release." + type: string + default: "" permissions: contents: write @@ -73,6 +82,8 @@ jobs: - name: Resolve the upstream version contained in develop id: upstream + env: + FORK_REVISION: ${{ inputs.fork_revision }} run: | set -euo pipefail git remote add upstream https://github.com/pterodactyl/wings.git @@ -100,9 +111,18 @@ jobs: exit 1 fi - echo "develop contains upstream v${best}" - echo "version=${best}" >> "$GITHUB_OUTPUT" - echo "tag=v${best}" >> "$GITHUB_OUTPUT" + version="$best" + if [ -n "$FORK_REVISION" ]; then + case "$FORK_REVISION" in + ''|*[!0-9]*|0*) echo "::error::fork_revision must be a positive integer, got '${FORK_REVISION}'"; exit 1 ;; + esac + version="${best}.${FORK_REVISION}" + echo "develop contains upstream v${best}; cutting fork revision v${version}" + else + echo "develop contains upstream v${best}" + fi + echo "version=${version}" >> "$GITHUB_OUTPUT" + echo "tag=v${version}" >> "$GITHUB_OUTPUT" - name: Decide whether to release id: decide diff --git a/CHANGELOG.md b/CHANGELOG.md index b8fb2f45..f97b0e2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## v1.13.3.1 +### Changed +* Fork-only re-release of v1.13.3 under a new version number — no code changes; binaries and image are rebuilt from the same sources. First release cut through the new `fork_revision` dispatch path. + ## v1.13.3 ### Security * SFTP `setstat` requests carrying the extended-attribute flag are now rejected before parsing, preventing a small packet from requesting an effectively unbounded memory allocation. diff --git a/FORK_CHANGES.md b/FORK_CHANGES.md index f4c37f6a..644a93a5 100644 --- a/FORK_CHANGES.md +++ b/FORK_CHANGES.md @@ -102,7 +102,7 @@ our customizations are **not accidentally reverted** when pulling in upstream ch |------|------| | `.gitignore` | Fork-added `.claude-flow/`, `.hive-mind/`, `CLAUDE.md`. Upstream will never add these — keep on merge. | | `Makefile`, `Dockerfile` | Our build settings (with the renamed module path). | -| `.github/workflows/{release,binary,docker}.yaml` | **Fork-specific release pipeline — always keep ours.** Upstream releases by hand: a human pushes a `v*` tag, `release.yaml` cuts a draft, a human publishes it. We release automatically from `develop` instead, and the version is derived from the newest **upstream** tag that is an ancestor of `develop` — so our releases always carry the upstream version number. Upstream's `release.yaml` has diverged beyond recognition; do not merge it (v1.13.3's `c57c519` CDN-manifest notification was deliberately dropped — it notifies pterodactyl's own CDN repo). See the header comment in `release.yaml` for the full flow and recovery steps. | +| `.github/workflows/{release,binary,docker}.yaml` | **Fork-specific release pipeline — always keep ours.** Upstream releases by hand: a human pushes a `v*` tag, `release.yaml` cuts a draft, a human publishes it. We release automatically from `develop` instead, and the version is derived from the newest **upstream** tag that is an ancestor of `develop` — so our releases always carry the upstream version number. Fork-only releases between upstream versions append a fourth component (`v1.13.3.1`), cut by dispatching `release.yaml` with `fork_revision`; the automatic path never does this. Upstream's `release.yaml` has diverged beyond recognition; do not merge it (v1.13.3's `c57c519` CDN-manifest notification was deliberately dropped — it notifies pterodactyl's own CDN repo). See the header comment in `release.yaml` for the full flow and recovery steps. | ---