tool: disinto backup create — export Forgejo issues + disinto-ops git bundle #1057

Closed
opened 2026-04-19 20:06:22 +00:00 by dev-bot · 0 comments
Collaborator

Goal: produce disinto backup create <outfile.tar.gz> command that snapshots factory state from the live disinto-dev-box for restore on a fresh Nomad cluster.

Scope (only what cutover needs — everything else is either regeneratable or discarded; see parent #1037):

Output tarball must contain:

metadata.json
  { "created_at": <iso8601>, "source_host": <hostname>,
    "schema_version": 1, "forgejo_url": <url> }

issues/
  disinto.json       # [{number, title, body, labels: ["bug-report", ...], state: "open"|"closed"}]
  disinto-ops.json   # same shape (ops-repo issues, typically 0)

repos/
  disinto-ops.bundle # git bundle --all, ~2MB

Explicitly NOT in scope (these are regenerated or not migrated):

  • disinto git history — migrated separately via existing Codeberg push mirror (done 2026-04-19)
  • Forgejo users, wiki, attachments, OAuth apps, releases
  • Woodpecker pipeline history
  • Agent-data and project-repos volumes
  • Caddy data (SSL terminates on DO box; no certs on dev-box)
  • Chat config, logs

File locations:

  • New command module: lib/disinto/backup.sh (or nearest matching module pattern — mirror lib/disinto/init.sh layout)
  • Wire into bin/disinto dispatcher: ./bin/disinto backup create <outfile>
  • Consumes env: FORGE_URL, FORGE_TOKEN (already in .env)

Acceptance:

  • ./bin/disinto backup create /tmp/out.tar.gz on disinto-dev-box exits 0
  • tar -tzf /tmp/out.tar.gz shows metadata.json, issues/disinto.json, issues/disinto-ops.json, repos/disinto-ops.bundle
  • jq '.[].number' issues/disinto.json | sort -n | tail -5 matches latest 5 issue numbers from Forgejo
  • git bundle verify repos/disinto-ops.bundle returns success
  • Idempotent: running twice produces two tarballs with same contents (modulo timestamp field)
  • Total size under 25MB

Blocks: #1037 (cutover runbook) and the companion import tool (sibling issue).

**Goal**: produce `disinto backup create <outfile.tar.gz>` command that snapshots factory state from the live disinto-dev-box for restore on a fresh Nomad cluster. **Scope** (only what cutover needs — everything else is either regeneratable or discarded; see parent #1037): Output tarball must contain: ``` metadata.json { "created_at": <iso8601>, "source_host": <hostname>, "schema_version": 1, "forgejo_url": <url> } issues/ disinto.json # [{number, title, body, labels: ["bug-report", ...], state: "open"|"closed"}] disinto-ops.json # same shape (ops-repo issues, typically 0) repos/ disinto-ops.bundle # git bundle --all, ~2MB ``` **Explicitly NOT in scope** (these are regenerated or not migrated): - `disinto` git history — migrated separately via existing Codeberg push mirror (done 2026-04-19) - Forgejo users, wiki, attachments, OAuth apps, releases - Woodpecker pipeline history - Agent-data and project-repos volumes - Caddy data (SSL terminates on DO box; no certs on dev-box) - Chat config, logs **File locations**: - New command module: `lib/disinto/backup.sh` (or nearest matching module pattern — mirror `lib/disinto/init.sh` layout) - Wire into `bin/disinto` dispatcher: `./bin/disinto backup create <outfile>` - Consumes env: `FORGE_URL`, `FORGE_TOKEN` (already in `.env`) **Acceptance**: - `./bin/disinto backup create /tmp/out.tar.gz` on disinto-dev-box exits 0 - `tar -tzf /tmp/out.tar.gz` shows `metadata.json`, `issues/disinto.json`, `issues/disinto-ops.json`, `repos/disinto-ops.bundle` - `jq '.[].number' issues/disinto.json | sort -n | tail -5` matches latest 5 issue numbers from Forgejo - `git bundle verify repos/disinto-ops.bundle` returns success - Idempotent: running twice produces two tarballs with same contents (modulo timestamp field) - Total size under 25MB **Blocks**: #1037 (cutover runbook) and the companion import tool (sibling issue).
dev-bot added the
backlog
bug-report
labels 2026-04-19 20:06:22 +00:00
dev-bot changed title from tool to tool: disinto backup create — export Forgejo issues + disinto-ops git bundle 2026-04-19 20:06:31 +00:00
dev-bot removed the
bug-report
label 2026-04-19 20:06:37 +00:00
dev-bot self-assigned this 2026-04-19 20:08:06 +00:00
dev-bot added
in-progress
and removed
backlog
labels 2026-04-19 20:08:06 +00:00
dev-bot removed their assignment 2026-04-19 20:43:55 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: disinto-admin/disinto#1057
No description provided.