Files
novoyuuparosk-auto-wiki/.gitea/workflows/publish-songs.yml
T
wan e1810facd6
tests / pytest (push) Successful in 7s
Split the public banner URL from the runner-internal clone URL
Every auto-published page, in all three pipelines, carried a source link to
`localhost:3005`. The template was never at fault — it links `{{{source}}}`
verbatim; the bad URL was baked into each page's wikitext by the publisher.

Root cause was one variable serving two incompatible purposes. `URL_TO_GITEA`
has to be an address the runner container can clone from, and since the runner
uses host networking that is `http://localhost:3005`. All three workflows then
composed `GITEA_REPO_URL` — the base of the public banner link, written into
the wiki for anyone to read — out of that same loopback value.

Adds a second org variable, `PUBLIC_URL_TO_GITEA`, for the public base
(`https://git.novoyuuparosk.org`), and points the banner at it. Cloning keeps
using `URL_TO_GITEA`. The two are now documented as deliberately separate,
because collapsing them looks like tidying up.

`lib/wiki.public_source_base()` validates the banner base rather than trusting
it: unset, relative, loopback, mDNS (`*.local`) or private-range values raise
with the variable to set. A misconfiguration that would publish an unreachable
link now stops the run instead. Note the failure mode this creates on purpose:
until `PUBLIC_URL_TO_GITEA` exists, publishing aborts rather than proceeding
with a wrong URL.

Also builds the source path with `rel.as_posix()`, so the separator in a URL
does not depend on the OS the publisher runs on — it produced backslashes when
the renderer was exercised on Windows.

Prerequisites before this can publish:

1. Add the org variable `PUBLIC_URL_TO_GITEA` = https://git.novoyuuparosk.org
2. Flush the act_runner callee cache — `docker compose up -d --force-recreate
   act_runner`. Per the cross-cutting decisions log, edits to `publish-*.yml`
   keep executing the stale cached copy, and this change is in those files.

Pages already published still carry the old URL in their stored wikitext. They
are only corrected by re-publishing each pipeline in full.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 16:37:06 +09:00

77 lines
3.1 KiB
YAML

on:
workflow_call:
inputs:
SOURCE_REF:
description: "Commit SHA that was pushed to ncmr-songs"
required: true
type: string
SOURCE_BASE_REF:
description: "Commit SHA before the push (empty or all-zeros = first push)"
required: true
type: string
jobs:
publish:
runs-on: ubuntu-latest
container:
image: pi5-16.local:3005/novoyuuparosk-wiki/novoyuuparosk-wiki-runner:4f134af
steps:
- name: Checkout ncmr-songs
env:
FAPAT: ${{ secrets.FAPAT }}
URL_TO_GITEA: ${{ vars.URL_TO_GITEA }}
SOURCE_REF: ${{ inputs.SOURCE_REF }}
run: |
git clone "http://mikkeli:${FAPAT}@${URL_TO_GITEA#http://}/novoyuuparosk-wiki/ncmr-songs" ncmr-songs
git -C ncmr-songs checkout "$SOURCE_REF"
- name: Checkout auto-wiki
env:
FAPAT: ${{ secrets.FAPAT }}
URL_TO_GITEA: ${{ vars.URL_TO_GITEA }}
run: git clone "http://mikkeli:${FAPAT}@${URL_TO_GITEA#http://}/novoyuuparosk-wiki/novoyuuparosk-auto-wiki" auto-wiki
# The diff bounds what gets *written*, not what gets *read*. The publisher
# always scans the whole repository to resolve links and page titles, then
# writes only these files (plus, one hop out, any page they link to or that
# links to them). Passing a subset here is safe for that reason and only
# that reason — resolution no longer depends on the batch.
- name: Detect changed files
id: diff
env:
BASE: ${{ inputs.SOURCE_BASE_REF }}
HEAD: ${{ inputs.SOURCE_REF }}
run: |
# Empty or all-zeros base means first push or manual dispatch — publish everything
if [ -z "$BASE" ] || echo "$BASE" | grep -qE '^0+$'; then
echo "First push or manual dispatch — publishing everything."
echo "mode=all" >> "$GITHUB_OUTPUT"
exit 0
fi
CHANGED=$(git -C ncmr-songs diff --name-only "$BASE" "$HEAD" -- '*.md' | grep -v '^wip/' || true)
echo "Changed files:"
echo "$CHANGED"
echo "mode=incremental" >> "$GITHUB_OUTPUT"
echo "files=$(echo "$CHANGED" | tr '\n' ' ')" >> "$GITHUB_OUTPUT"
- name: Publish
env:
WIKI_API_URL: ${{ vars.WIKI_API_URL }}
WIKI_BASE_URL: ${{ vars.WIKI_BASE_URL }}
WIKI_BOT_USER: ${{ secrets.WIKI_BOT_USER }}
WIKI_BOT_PASSWORD: ${{ secrets.WIKI_BOT_PASSWORD }}
SOURCE_REF: ${{ inputs.SOURCE_REF }}
GITEA_REPO_URL: ${{ vars.PUBLIC_URL_TO_GITEA }}/novoyuuparosk-wiki/ncmr-songs
MODE: ${{ steps.diff.outputs.mode }}
FILES: ${{ steps.diff.outputs.files }}
run: |
if [ "$MODE" = "all" ]; then
python auto-wiki/pipelines/songs/publish.py --source-dir ncmr-songs --all
elif [ -n "$(echo "$FILES" | tr -d '[:space:]')" ]; then
# shellcheck disable=SC2086
python auto-wiki/pipelines/songs/publish.py --source-dir ncmr-songs --files $FILES
else
echo "No changed .md files outside wip/. Nothing to publish."
fi