Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
26 changes: 23 additions & 3 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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 <upstream>.<revision>,
# 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:
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
2 changes: 1 addition & 1 deletion FORK_CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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. |

---

Expand Down