Commit Graph
416 Commits
Author SHA1 Message Date
gitea-actions[bot] 1201ef63fb chore(data): refresh source snapshots
Automated fetch from Refresh sources run 117.
2026-09-27 05:28:41 +00:00
gitea-actions[bot] d98360a2e0 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 115.
2026-09-26 17:28:40 +00:00
gitea-actions[bot] 233943218c chore(data): refresh source snapshots
Automated fetch from Refresh sources run 91.
2026-09-26 05:28:19 +00:00
gitea-actions[bot] b4946343f0 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 89.
2026-09-25 17:28:20 +00:00
gitea-actions[bot] 5f4ae57d99 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 72.
2026-09-25 05:28:23 +00:00
gitea-actions[bot] 0e707561c7 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 70.
2026-09-24 17:28:23 +00:00
gitea-actions[bot] 6b5564a9e6 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 68.
2026-09-24 05:28:18 +00:00
gitea-actions[bot] dddaf2463d chore(data): refresh source snapshots
Automated fetch from Refresh sources run 66.
2026-09-23 17:28:23 +00:00
gitea-actions[bot] 8f83890063 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 64.
2026-09-23 05:28:21 +00:00
gitea-actions[bot] a059a60b32 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 62.
2026-09-22 17:28:24 +00:00
gitea-actions[bot] 770355bc48 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 60.
2026-09-22 05:28:23 +00:00
gitea-actions[bot] b072da5bcd chore(data): refresh source snapshots
Automated fetch from Refresh sources run 58.
2026-09-21 17:28:18 +00:00
gitea-actions[bot] 9c030ec174 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 56.
2026-09-21 05:28:20 +00:00
gitea-actions[bot] 621dc6329b chore(data): refresh source snapshots
Automated fetch from Refresh sources run 54.
2026-09-20 17:28:25 +00:00
gitea-actions[bot] 3c3af7031c chore(data): refresh source snapshots
Automated fetch from Refresh sources run 52.
2026-09-20 05:28:23 +00:00
gitea-actions[bot] b556a6ea5f chore(data): refresh source snapshots
Automated fetch from Refresh sources run 50.
2026-09-19 17:28:17 +00:00
gitea-actions[bot] 26f612c3be chore(data): refresh source snapshots
Automated fetch from Refresh sources run 48.
2026-09-19 05:28:19 +00:00
gitea-actions[bot] 85683aa2fc chore(data): refresh source snapshots
Automated fetch from Refresh sources run 46.
2026-09-18 17:28:19 +00:00
Lucas Winther 84441b6d6d fix(snapshots): persist lastConfirmedAt into snapshot metadata upon pull confirmation
CI / Typecheck, test, feed (push) Successful in 20s
CI / Build site (push) Successful in 11s
CI / Container image (push) Successful in 41s
Record lastConfirmedAt in snapshot metadata when a source is confirmed (200 or 304). This ensures git-committed snapshot metadata reflects when sources like wiki.gg were successfully pulled even when page HTML did not change, avoiding false pull overdue notices on downstream builds like GitHub Pages.
2026-09-18 10:37:37 +02:00
Lucas Winther f07607911b docs(workflows): clarify that GitHub only builds and serves while Gitea refreshes sources
CI / Typecheck, test, feed (push) Successful in 20s
CI / Build site (push) Successful in 11s
CI / Container image (push) Successful in 40s
Document the forge responsibilities across AGENTS.md, README.md, ARCHITECTURE.md, INGESTION.md, and the CI workflow headers: GitHub Actions only builds and serves (Pages deployment) without fetching data sources, while Gitea Actions exclusively runs the scheduled refresh and publishes the container image.
2026-09-18 10:14:37 +02:00
gitea-actions[bot] 6f5b9144fd chore(data): refresh source snapshots
Automated fetch from Refresh sources run 42.
2026-09-18 08:04:45 +00:00
Lucas Winther fa7f99559a fix(ci): dispatch ci to publish feed on refresh even when snapshots return 304
CI / Typecheck, test, feed (push) Successful in 18s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 39s
When sources return 304, no git commit is created, but the cache holds updated confirmation timestamps. Publish the refreshed feed unconditionally on non-dry runs so CI rebuilds events.v1.json with fresh confirmation dates.
2026-09-18 09:57:03 +02:00
Lucas Winther 941d8095ea fix(ui): use effective pull date in colophon to avoid false pull overdue diagnoses
CI / Typecheck, test, feed (push) Successful in 15s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 30s
Derive source pull date from confirmation and recent content updates, preventing recently updated sources from displaying as pulled never or pull overdue.
2026-09-18 09:33:56 +02:00
Lucas Winther 157b9fe20c fix(feed): reflect content updates in source health confirmation and freshness
Ensure lastConfirmedAt never precedes contentChangedAt for fetched snapshots and calculate game-level lastConfirmedAt using effective pull times.
2026-09-18 09:30:31 +02:00
gitea-actions[bot] d0f30c11b7 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 37.
2026-09-18 07:21:57 +00:00
Lucas Winther 8912aec84d fix(ci): restore missing steps key in image job of ci.yml
CI / Typecheck, test, feed (push) Successful in 18s
CI / Build site (push) Successful in 10s
CI / Container image (push) Successful in 39s
2026-09-18 08:56:48 +02:00
Lucas Winther 347d4ddad8 feat(ui): differentiate pull vs site update blame in colophon staleness notice
Show whether staleness is due to crawler checks or site updates in Colophon, and add an expandable per-source breakdown.
2026-09-18 08:55:10 +02:00
Lucas Winther 6c09accc20 feat(feed): record crawler check and content update timestamps in SourceHealth
Add lastConfirmedAt and contentChangedAt to SourceHealth and enrich freshness() to track per-source check and content update times.
2026-09-18 08:55:10 +02:00
Lucas Winther ea1a78a41d ci: restore refresh bookkeeping in container image job
Restore snapshots/*.state.json in the image job before docker build so lastConfirmedAt is preserved in container builds.
2026-09-18 08:55:10 +02:00
gitea-actions[bot] 6537754749 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 34.
2026-09-18 05:28:23 +00:00
gitea-actions[bot] 1f9f6cd803 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 32.
2026-09-17 17:28:21 +00:00
gitea-actions[bot] 52646533e0 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 30.
2026-09-17 08:56:05 +00:00
Lucas Winther 2bc61e7d12 fix(ingest): support redesigned Blue Archive wiki event table
CI / Typecheck, test, feed (push) Successful in 12s
CI / Build site (push) Successful in 7s
CI / Container image (push) Successful in 29s
The Blue Archive Wiki (bluearchive.wiki/wiki/Events) redesigned its
schedule, replacing the per-version MediaWiki tabber with a unified
#eventtable displaying JP and Global periods side-by-side.

- Parse #eventtable resolving GL Period, event titles, and article links
  from .event-region-gl, with fallback to .event-region-jp.
- Maintain backwards compatibility with legacy tabber schedule format.
- Add pinned fixture fixtures/ba/bawiki-events-2026-09-17 and tests.
- Update snapshot, AGENTS.md, ARCHITECTURE.md, and INGESTION.md.
2026-09-17 10:53:05 +02:00
Lucas Winther b73c253de2 feat(ui): add "Export all" and "Import all" buttons for moving hosts
CI / Typecheck, test, feed (push) Successful in 13s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 31s
2026-09-17 10:20:07 +02:00
Lucas Winther b36047d218 feat(state): support full export and preferences restoration 2026-09-17 10:19:59 +02:00
Lucas Winther 0d1ccff6b2 docs: record workflow split between Gitea Actions and GitHub Pages
CI / Typecheck, test, feed (push) Successful in 12s
CI / Build site (push) Successful in 8s
CI / Container image (push) Successful in 30s
Update README, AGENTS.md, ARCHITECTURE.md, and INGESTION.md to reflect
that the scheduled refresh and container image publishing run on Gitea
Actions under .gitea/workflows/, while GitHub Actions under .github/
builds with BASE_PATH and deploys to GitHub Pages when synced.
2026-09-17 09:59:41 +02:00
Lucas Winther 0826f24db9 ci: migrate Gitea workflows to .gitea and restore GitHub Pages in .github
Move the scheduled refresh and container-registry CI workflows into
.gitea/workflows/ so Gitea Actions runs them natively. Update
.github/workflows/ci.yml to build with BASE_PATH and deploy to GitHub
Pages upon push from the mirror sync, removing the Gitea-specific
container registry step. Update Dockerfile, .dockerignore, and test
harness to test and copy workflows from .gitea/.
2026-09-17 09:59:32 +02:00
gitea-actions[bot] 93a6513149 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 21.
2026-09-17 05:28:42 +00:00
gitea-actions[bot] 1f657bea81 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 18.
2026-09-16 17:28:20 +00:00
Lucas WintherandClaude Opus 5 76bd7d0b70 fix(ci): authenticate to Gitea's registry with a package-scoped token
CI / Typecheck, test, feed (push) Successful in 13s
CI / Build site (push) Successful in 9s
CI / Container image (push) Successful in 34s
`docker login` was refused with a bare `unauthorized`. The root cause is
not a typo in the credentials but a difference in what a Gitea package
is: it belongs to a user or org **owner**, not to a repository, so the
ephemeral repo-scoped Actions token carries no authority over it and the
registry rejects it outright. GHCR accepted GITHUB_TOKEN and GitLab
issues working per-job credentials in $CI_REGISTRY_PASSWORD; Gitea
deliberately does neither, so this needs a real access token with the
package scope, supplied as REGISTRY_TOKEN.

The username moves from github.actor to github.repository_owner for the
same reason. The image is pushed into the owner's namespace and the
token belongs to that owner, while actor is merely whoever triggered the
run — a different person on a dispatch, the wrong account on a fork.

Added a preflight check on the secret, because the failure it replaces
said nothing about what to do. It also settles a question the evidence
left open: the reports of this problem describe login succeeding and the
*push* failing, while ours failed at login, which is consistent with the
token being rejected but equally with its never having been set. The
check distinguishes the two the next time it happens.

No test pins this. The three workflow assertions in test/refresh.test.ts
exist because those defects are silent; this one turns CI red on the
spot, which is the condition that made them worth writing.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-16 04:38:53 +02:00
Lucas WintherandClaude Opus 5 f32eb93289 docs: record that CI, the registry and the deploy moved to Gitea
CI / Typecheck, test, feed (push) Successful in 17s
CI / Build site (push) Successful in 9s
CI / Container image (push) Failing after 18s
The pipeline change made a set of sentences false, and they are the only
record of why things are the way they are, so they move with it: the CI
section and deploy target in README, the cron and BASE_PATH notes in
ARCHITECTURE, the documented User-Agent in INGESTION, and the contact
URL in SOURCES.

Two comments in source were false in the same way and are fixed here
rather than left for the next reader. `serve.ts` said compression was
"the whole difference between the Docker image and the deployed site" —
the image *is* the deployed site now, so that negotiation is the only
compression any reader gets. `robots.ts` justified product-token
matching with "our contact URL contains the string StereotypicalCat",
which it no longer does; the hazard is the arbitrary substring, not that
one, so the comment now says so and the regression test keeps the URL
that actually caused it.

What is deliberately NOT rewritten: game8.co's refusal stays in the past
tense with the Gitea result marked unverified, in AGENTS.md, README,
SOURCES and FEEDBACK alike. A new runner address is the variable that
failure turns on, so it may well be served — but "may well be" is not
evidence, and the four places that would have to change are named
together so they change together once a cycle has actually run.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-16 04:32:51 +02:00
Lucas WintherandClaude Opus 5 5b8109b556 ci(refresh): drive the scheduled refresh from Gitea
Full `uses:` URLs as in ci.yml, the fork gate repointed at the Gitea
repo, and a commit identity that is not GitHub's bot.

`gh workflow run` becomes the REST dispatch the CLI would have made,
because there is no `gh` on a Gitea runner. Worth stating plainly: Gitea
does not suppress workflow triggers on a push made with the Actions
token, which is the whole reason this step existed on GitHub, so the
snapshot commit will usually have started ci.yml by itself. The step
stays anyway — it is the only guarantee of publication if that behaviour
is ever configured off, and a duplicate run costs nothing because
ci.yml's concurrency group is per-ref with cancel-in-progress.

The crawler's fallback contact URL follows the repo. It is what wiki
operators see in our User-Agent when REFRESH_CONTACT_URL is unset, so
leaving it pointing at a repo we no longer publish from would make the
contact half of AGENTS.md § Scraping conduct a dead end.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-16 04:29:49 +02:00
Lucas WintherandClaude Opus 5 ec80e76cdc ci: run the build pipeline on Gitea Actions
Point `uses:` at full GitHub URLs so step resolution does not depend on
the instance's DEFAULT_ACTIONS_URL, publish the image to Gitea's own
container registry, and drop the Pages deploy.

Pages has no Gitea equivalent and the container image is the deploy
artefact now, so the job is removed rather than replaced. `build` stays:
it is what produces the site bundle, and test/refresh.test.ts pins the
refresh-bookkeeping restore to the slice between `build:` and `image:`.
Its BASE_PATH goes, though — that existed only for the /<repo>/ subpath
Pages served from, and serve.ts serves the image at the root.

The registry host is derived from github.server_url rather than
hardcoded, so a fork on another instance pushes to its own registry.
Layer cache moves from type=gha to type=registry: Gitea does expose the
Actions cache API, but buildx's gha backend is the least reliable part
of that compatibility surface and we are already authenticated to a
registry that can hold the layers.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-09-16 04:28:53 +02:00
github-actions[bot] b2ec0951f4 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 1.
2026-09-16 01:02:00 +00:00
github-actions[bot] 13dca1196b chore(data): refresh source snapshots
Automated fetch from Refresh sources run 35018750152.
2026-09-15 20:18:44 +00:00
github-actions[bot] 389fa77c94 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 34956617647.
2026-09-15 10:12:08 +00:00
github-actions[bot] c06d440c83 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 34896101526.
2026-09-14 20:59:15 +00:00
github-actions[bot] cc86d3b643 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 34834979818.
2026-09-14 10:48:53 +00:00
github-actions[bot] 736441d9e3 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 34778039957.
2026-09-13 19:33:53 +00:00
github-actions[bot] 67c9526587 chore(data): refresh source snapshots
Automated fetch from Refresh sources run 34751710331.
2026-09-13 10:23:38 +00:00