Re-filed from reqstool/.github-private#33, which was lost when that repo was retired. The org no longer has a writable private repo, so this is public — see the note at the end on what that changes.
Public counterpart: reqstool/.github#98.
Why this has a deadline
Azure DevOps is retiring global personal access tokens:
| Date |
What happens |
| 2026-03-15 |
Creating or regenerating a global PAT blocked — already past |
| 2026-12-01 |
All existing global PATs stop working |
If VSCE_PAT is a global PAT, this repo becomes unpublishable on 1 December. The failure mode is the unpleasant one: it fails at the publish step, after tag, build, assets and approval have all already succeeded.
If it is already organization-scoped with Marketplace > Manage, the deadline does not apply and item 2 is ordinary hygiene rather than a countdown.
1. Determine whether VSCE_PAT is global or organization-scoped
This decides whether anything below is urgent, and it needs someone with Azure DevOps access.
Check under User settings → Personal access tokens. The scope is not visible from GitHub, so no repo — and no amount of poking at this one — can answer it.
If it is global, the cheap stopgap is reissuing it as an organization-scoped PAT with Marketplace > Manage and updating the secret. That buys time without touching any workflow: the publish path reads VSCE_PAT and does not care how it was issued.
2. Move to Entra ID and drop the stored token
The real fix, and consistent with the rest of the org — npm and PyPI both publish via OIDC with no stored credential.
reqstool/.github's typescript-publish-to-vscode.yml already accepts the switch:
azure-credential: true # defaults to false
which runs vsce publish --azure-credential --packagePath … instead of using VSCE_PAT. vsce@3.9.2 is already pinned here and carries the flag.
Deliberately not yet written, because it could not be verified without a tenant to test against:
- Entra app registration and federated credential for the marketplace publisher
- Almost certainly an
azure/login step before the publish step
- Almost certainly
id-token: write on the publish job, which currently declares only what the PAT path needs
Note on visibility
The original was filed privately because it concerns publishing credentials and Azure tenant configuration, and GitHub has no maintainer-only visibility on a public repo's issues. That original also recorded that nothing in it discloses more than the public reqstool/.github#98, which already states VSCE_PAT may be a global PAT.
So the text above is safe here. Tenant-specific detail — directory or application IDs, federated credential subjects — should not be added to this issue. If any is needed, it belongs somewhere non-public.
Re-filed from
reqstool/.github-private#33, which was lost when that repo was retired. The org no longer has a writable private repo, so this is public — see the note at the end on what that changes.Public counterpart: reqstool/.github#98.
Why this has a deadline
Azure DevOps is retiring global personal access tokens:
If
VSCE_PATis a global PAT, this repo becomes unpublishable on 1 December. The failure mode is the unpleasant one: it fails at the publish step, after tag, build, assets and approval have all already succeeded.If it is already organization-scoped with
Marketplace > Manage, the deadline does not apply and item 2 is ordinary hygiene rather than a countdown.1. Determine whether
VSCE_PATis global or organization-scopedThis decides whether anything below is urgent, and it needs someone with Azure DevOps access.
Check under User settings → Personal access tokens. The scope is not visible from GitHub, so no repo — and no amount of poking at this one — can answer it.
If it is global, the cheap stopgap is reissuing it as an organization-scoped PAT with
Marketplace > Manageand updating the secret. That buys time without touching any workflow: the publish path readsVSCE_PATand does not care how it was issued.2. Move to Entra ID and drop the stored token
The real fix, and consistent with the rest of the org — npm and PyPI both publish via OIDC with no stored credential.
reqstool/.github'stypescript-publish-to-vscode.ymlalready accepts the switch:which runs
vsce publish --azure-credential --packagePath …instead of usingVSCE_PAT.vsce@3.9.2is already pinned here and carries the flag.Deliberately not yet written, because it could not be verified without a tenant to test against:
azure/loginstep before the publish stepid-token: writeon the publish job, which currently declares only what the PAT path needsNote on visibility
The original was filed privately because it concerns publishing credentials and Azure tenant configuration, and GitHub has no maintainer-only visibility on a public repo's issues. That original also recorded that nothing in it discloses more than the public reqstool/.github#98, which already states
VSCE_PATmay be a global PAT.So the text above is safe here. Tenant-specific detail — directory or application IDs, federated credential subjects — should not be added to this issue. If any is needed, it belongs somewhere non-public.