Skip to content

Versioned docs decay: artifact-based storage expires after 90 days #608

Description

@sini

Problem

The versioned-docs pipeline stores each tag's rendered docs as a workflow artifact (docs-<tag>, uploaded by versioned-docs.yml), and gh-pages.yml reassembles the version dropdown by downloading all non-expired docs-* artifacts on each Pages deploy.

GitHub artifacts have a hard 90-day maximum retention. As of today, every docs-* artifact in the repo is expired (checked via gh api /repos/denful/den/actions/artifacts — 58 artifacts, all expired: true, including docs-v0.9.0 through docs-v0.16.0 and docs-latest):

5 docs-latest      expired=true
3 docs-v0.16.0     expired=true
3 docs-v0.12.0     expired=true
3 docs-v0.11.0     expired=true
...

Consequence: any Pages deploy from current state publishes only the freshly built main docs — the version dropdown is empty and all historical versions are gone. Each tag's docs silently vanish 90 days after tagging.

(Separately, the artifact listing wasn't paginated and was capped at 30 results — fixed in #607 — but pagination doesn't help once artifacts expire.)

Possible fixes

  1. Commit versioned docs to a branch (e.g. docs-versions or directly into the Pages artifact source). versioned-docs.yml pushes versioned/<tag>/ to the branch on each tag; gh-pages.yml checks it out instead of downloading artifacts. Durable, diffable, no expiry.
  2. Build historical versions from tags at deploy timegh-pages.yml checks out each tag and runs just docs-build per version. No storage, but deploys get slower with each release and old tags must keep building with current tooling.
  3. Re-upload artifacts on a schedule — a cron workflow re-publishes unexpired artifacts before the 90-day cliff. Fragile; doesn't recover the already-expired versions.

Option 1 seems like the right shape. Note the already-expired versions (v0.9.0–v0.16.0) would need a one-time backfill by rebuilding docs from their tags.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions