The Publish wiki workflow now reads secrets.TOKEN_FOR_GITEA_WIKI || secrets.TOKEN_FOR_GITEA, so the existing token can publish the wiki when it has write:repository. Update the missing-token message, the credentials and troubleshooting guides, the README, the tests and the affected English wiki pages with their Danish and Bahasa Malaysia translations. Task: MIL-005#8
4.2 KiB
This page is generated from
guides/credentials.md. Changes made here are overwritten the next time the wiki is published.
English | Dansk | Bahasa Melayu
Workflow credentials
The sync workflow uses two secrets. Give each the least privilege that works, store it only as a Gitea secret, and rotate it when a person with access leaves.
| Secret | Content | Used for |
|---|---|---|
TOKEN_FOR_GITEA |
A bare token, a JSON string, or JSON with GITEA_TOKEN |
Reading the repository (description, topics) and its push mirrors |
CREDENTIALS_FOR_GITHUB |
JSON object with a non-empty GITHUB_PAT |
Changing the description and topics of the GitHub mirror |
Minimum permissions
These come from the Gitea and GitHub documentation and the API calls the workflow makes. They have not been confirmed with a minimal token on this instance yet; S05 should confirm them when the tokens are created.
Gitea token (a personal access token of a user, not a deploy key; deploy keys do not work for the REST API):
- scope
read:repository - the user must be allowed to read the repository's push mirrors, which Gitea limits to repository administrators
Calls made: GET /repos/{owner}/{repo} and GET /repos/{owner}/{repo}/push_mirrors.
GitHub token (fine-grained personal access token):
- Resource owner: the owner of the mirror repository
- Repository access: only the mirror repository
- Repository permission: Administration: Read and write (no other permission)
- Set an expiry date
Calls made: GET /repos/{owner}/{repo}, PATCH /repos/{owner}/{repo} (description)
and PUT /repos/{owner}/{repo}/topics.
Format of CREDENTIALS_FOR_GITHUB:
{"GITHUB_PAT": "<token>"}
What the workflow checks before it changes anything
The workflow runs a preflight and writes nothing to GitHub unless it passes:
- Both secrets exist and have the expected shape.
- Gitea accepts the token and the repository is visible with it.
- At most one GitHub push mirror is configured. With none, the run ends successfully without syncing and the GitHub secret is not read.
- GitHub accepts the token for the mirror repository and the token reports administration access to it.
On success the log says Preflight passed: Gitea and GitHub accepted the credentials. Failures start with a category such as [credentials] or
[permissions]; see troubleshooting.md. No secret value
is ever printed.
Wiki publishing secret
The workflow Publish wiki (this repository only) copies wiki/ to the Gitea
wiki when a change to wiki/ is merged to main. It uses TOKEN_FOR_GITEA_WIKI
when that secret exists and otherwise reuses TOKEN_FOR_GITEA.
| Secret | Content | Used for |
|---|---|---|
TOKEN_FOR_GITEA_WIKI (optional) |
A bare token, a JSON string, or JSON with GITEA_TOKEN |
Writing the wiki pages of this repository |
- The token that is used needs scope
write:repository, and its user needs write access to this repository. Gitea has no wiki-only scope. TOKEN_FOR_GITEAis documented above withread:repositoryonly. Reusing it for the wiki means raising its scope, which also gives the metadata sync write access. A separateTOKEN_FOR_GITEA_WIKIfor a dedicated user keeps the sync token read-only. S05 decides which, and S03 stores the secret.- Calls made:
GET /repos/{owner}/{repo},GET /repos/{owner}/{repo}/wiki/pages,GET,POSTandPATCH /repos/{owner}/{repo}/wiki/...and, for a page that no longer exists inwiki/,DELETE /repos/{owner}/{repo}/wiki/page/{name}. - The wiki must be enabled in the repository settings. The workflow refuses to run when it is not.
- The wiki always equals
wiki/: pages edited or added in the Gitea web UI are overwritten or removed on the next publish.
Rotating a token
- Create the new token with the permissions above.
- Replace the secret value in the repository or organization settings.
- Run the workflow manually and wait for
Preflight passed. - Revoke the old token.