95 lines
5.6 KiB
Markdown
95 lines
5.6 KiB
Markdown
# Gitea publication path — 2026-09-11
|
|
|
|
Codex-ytr83r /root/integration_audit. Root assigned credential-safe read-only
|
|
authentication/access probes and a task-local publication helper. Owner authorization
|
|
is [issue #1 comment 178](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/1#issuecomment-178):
|
|
reuse existing MCP credentials programmatically for Git HTTP and Gitea REST,
|
|
without printing or committing them. No Git push, tag creation, release creation,
|
|
artifact upload, credential/configuration change or global Git change occurred.
|
|
|
|
## Verified access
|
|
|
|
- Existing configuration: `C:/Users/User/.codex/config.toml`,
|
|
`mcp_servers.gitea.env.GITEA_ACCESS_TOKEN`. It contains a quoted token value;
|
|
the token was read in-process, not printed, copied to a file or included in
|
|
command arguments. The helper also supports the same process environment
|
|
variable if the configured value is absent.
|
|
- Authenticated `GET /api/v1/user`: **HTTP 200**, login **Codex-ytr83r**.
|
|
- Authenticated repository GET returns exact repository
|
|
`sorokin.oleg.edu/ARCADIA-Studio`, with server-reported permissions
|
|
`admin=false`, `push=true`, `pull=true`.
|
|
- `git ls-remote --heads --tags` against the exact configured Gitea repository
|
|
succeeded with 22 refs. This is a successful Git read probe; it does not by
|
|
itself prove write permission because this repository is publicly readable.
|
|
- Helper `probe` completed with exit 0. Actual push and release attachment
|
|
permissions remain **unexercised**; the server-reported push flag is evidence
|
|
of intended authorization, not a performed write.
|
|
- Instance OpenAPI readback identifies Gitea **1.27.3** and confirms
|
|
`/repos/{owner}/{repo}/releases/{id}/assets` GET/POST, optional `name` query,
|
|
`attachment` file form field, multipart/octet-stream request support and 201
|
|
success (400/404/413 documented). This verifies the advertised route contract,
|
|
not upload permission or the actual artifact-size limit. The first PowerShell
|
|
Swagger reader stalled; a bounded Python read succeeded and the task-owned
|
|
stalled reader was stopped without affecting other processes.
|
|
|
|
## Prepared local helper
|
|
|
|
File: `.local/publication-ytr83r/gitea_publication.py` (Git-ignored, contains no
|
|
credential value). Python 3.14 runtime already available at
|
|
`.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/python/bin/python.exe`.
|
|
Python syntax check passes. Frozen helper SHA256:
|
|
`0917FFF100981071D94380847E209874DD87F08744CF02170E0C7E54ACA98FFA`.
|
|
|
|
The helper is restricted to `http://217.177.34.108:3000` and this repository.
|
|
REST credentials use request headers held in memory; redirects are refused.
|
|
Git receives its repository-scoped Basic authorization header through only the
|
|
child process's `GIT_CONFIG_*` environment. The token and encoded credentials
|
|
never enter command arguments. Child Git tracing, prompts, credential helpers
|
|
and redirects are disabled; global/system Git configuration is bypassed for that
|
|
child without modifying either. Captured errors are sanitized before output.
|
|
|
|
Supported commands, run from repository root:
|
|
|
|
```powershell
|
|
$publicationPython = '.local/toolchain/llvm-mingw-20260908-ucrt-x86_64/python/bin/python.exe'
|
|
$publicationHelper = '.local/publication-ytr83r/gitea_publication.py'
|
|
& $publicationPython -I $publicationHelper probe
|
|
# Later, release owner supplies explicit already-created local refs:
|
|
& $publicationPython -I $publicationHelper push <refs/heads/codex/BRANCH> <refs/tags/TAG>
|
|
# After a distinct draft/prerelease exists, owner supplies its ID and frozen file:
|
|
& $publicationPython -I $publicationHelper upload --release-id <ID> --file <ABSOLUTE_ARTIFACT_PATH>
|
|
```
|
|
|
|
The push command accepts explicit existing `refs/heads/codex/...` and tag refs;
|
|
it neither creates local refs nor force-pushes or deletes remote refs. Destination
|
|
ref equals source ref. Before invoking it, root selects the intended coherent
|
|
commit and coordinates release ownership. Relevant GitLab publication is separate;
|
|
this Gitea token is never sent to GitLab.
|
|
|
|
Upload uses streamed multipart `attachment` content at
|
|
`POST /api/v1/repos/{owner}/{repo}/releases/{id}/assets?name=...`, and accepts only
|
|
an existing draft or prerelease. It checks for an existing same-name attachment
|
|
and refuses replacement. Release creation remains available through the Gitea
|
|
MCP tool; no raw credential export is required. Returned output records asset
|
|
identity, byte count, local streamed SHA256 and server download URL. It explicitly
|
|
does **not** claim remote byte-hash verification; root must independently download
|
|
and hash the published artifact before treating publication as verified.
|
|
|
|
If an upload fails after transfer begins, inspect the release before retrying:
|
|
failure does not prove that the remote server adopted no attachment. Artifact
|
|
files must be frozen before upload; the helper reports the exact streamed hash.
|
|
|
|
## Ownership and next steps
|
|
|
|
Codex-9e8r6t retains the named-creation milestone prerelease. This host's eventual
|
|
B4 milestone must be distinct and coordinated through Gitea. Root retains actual
|
|
push/tag/release/upload decisions, runnable artifacts, concise notes, launch
|
|
instructions, known limitations and exact verification scope under the updated
|
|
AGENTS.md milestone-release requirement. This probe is preparation, not a published
|
|
milestone or acceptance of the current application.
|
|
|
|
Next: finish the working B4 gate, coordinate its version, push the selected branch
|
|
and tag, create the scoped prerelease, upload frozen artifacts, verify remote ref
|
|
identities and artifact hashes, and record the resulting release URL. No fresh
|
|
credential request is indicated by the successful existing-credential probe.
|