Skip to content

THRIFT-6327: Document the credentials the release workflows need in one place - #3912

Merged
Jens-G merged 1 commit into
apache:masterfrom
Jens-G:THRIFT-6327
Sep 20, 2026
Merged

Jens-G merged 1 commit into
apache:masterfrom
Jens-G:THRIFT-6327

Conversation

@Jens-G

@Jens-G Jens-G commented Sep 20, 2026

Copy link
Copy Markdown
Member

Doc-only. Follow-up to the Windows packaging series (#3901, #3893, #3895, #3896, #3898, #3897), all merged.

Six workflows publish something when a GitHub release is published — pypi.yml, release_ruby.yml, release_rust.yml, dotnet-tool.yml, winget.yml, chocolatey.yml. Between them they need one repository variable, two repository secrets and four trusted-publishing policies on the receiving side.

Every one of those was already documented, and no two of them in the same place:

was documented in
CHOCO_API_KEY the Chocolatey prose
WINGET_TOKEN the WinGet prose
NuGet policy + NUGET_USER a bullet under Third Party Package Managers
PyPI policy a different bullet in the same list
crates.io, RubyGems policies nowhere

So a release manager preparing their first release could only find out what needs setting up by reading the whole document, and couldn't tell "not configured yet" from a real failure.

This adds one ### Release Automation Credentials section: what each item is, secret vs. variable, which workflow consumes it, and what happens when it's missing. The per-package prose stays where it is — the new section is the lookup and links into it rather than duplicating it.

Three things worth writing down

  • Four of the six hold no stored credential at all. PyPI, RubyGems, crates.io and NuGet publish over trusted publishing, exchanging the run's OIDC token for a short-lived key. What has to exist is a policy naming this repo, the workflow file and the release environment. Only WinGet and Chocolatey use a stored secret, because neither has an OIDC path.
  • WINGET_TOKEN must be a classic PAT with public_repo. Fine-grained tokens are not supported by wingetcreate.
  • A green run does not prove anything was published. The WinGet and Chocolatey steps deliberately do not fail when their secret is absent — they build and upload the artifact, emit a ::warning:: and print how to publish by hand in the run summary. That keeps a missing secret from failing a release, but it means the summary is what to read, not the tick.

Verified, not transcribed

Every row was checked against the merged workflows rather than written from memory:

  • NUGET_USER is referenced as vars. (a variable); WINGET_TOKEN and CHOCO_API_KEY as secrets.
  • all six publish jobs carry environment: release
  • exactly the four trusted-publishing ones carry id-token: write
  • both degrading steps really do exit 0 after their guard, with a ::warning:: and a step-summary block

The table is 7 rows × 4 columns, well-formed, and the #chocolatey anchor resolves.

JIRA: THRIFT-6327

🤖 Generated with Claude Code

…ne place

Client: build

Six workflows publish something when a GitHub release is published:
pypi.yml, release_ruby.yml, release_rust.yml, dotnet-tool.yml, winget.yml
and chocolatey.yml. Between them they need one repository variable, two
repository secrets and four trusted publishing policies on the receiving
side.

Every one of those was documented, and no two of them in the same place:
CHOCO_API_KEY inside the Chocolatey prose, WINGET_TOKEN inside the WinGet
prose, the NuGet policy and NUGET_USER inside a bullet under Third Party
Package Managers, the PyPI policy inside another bullet, and the
crates.io and RubyGems ones nowhere at all. A release manager preparing
their first release had no way to find out what has to be set up other
than reading the whole document.

ReleaseManagement.md gains a Release Automation Credentials section
listing each one: what it is, whether it is a secret or a variable,
which workflow consumes it, and what happens when it is missing. The per
package prose stays where it is; the new section links into it rather
than repeating it.

Three things worth having written down, because none of them is visible
from the outside:

Four of the six hold no stored credential at all. PyPI, RubyGems,
crates.io and NuGet publish over trusted publishing, exchanging the
run's OIDC token for a short lived key, so what has to exist is a policy
naming this repository, the workflow file and the release environment.
Only WinGet and Chocolatey use a stored secret, because neither has an
OIDC path.

WINGET_TOKEN has to be a classic personal access token. Fine grained
tokens are not supported by wingetcreate.

A green run does not prove anything was published. The WinGet and
Chocolatey steps deliberately do not fail when their secret is absent:
they build and upload the artifact, emit a warning and print how to
publish by hand in the run summary. That keeps a missing secret from
failing a release, but it means the summary is what to read, not the
tick.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Jens-G
Jens-G merged commit 508006a into apache:master Sep 20, 2026
22 of 23 checks passed
@Jens-G
Jens-G deleted the THRIFT-6327 branch September 20, 2026 21:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant