Files
ipcr-forge/README.md
T
Worph ca8f87050b
image / vet (push) Successful in 1m51s
image / image (push) Failing after 29s
Split listing support: Gitea and Radicle as separate apps
- setup: with RUNNER_DIR, fetch the runner registration token from Gitea's
  admin API (POST /admin/actions/runners/registration-token) instead of the
  gitea CLI on Gitea's volume; record secrets/setup-status (ok, unreachable,
  bad-credentials) and exit cleanly when Gitea cannot be used.
- mirror: Radicle is optional. Repositories wait until a node is there (key and
  control socket in RAD_HOME), re-checked every reconcile; RADICLE=off.
- page: /status.json; hide the Radicle parts without a node, banner when Gitea
  is unreachable or refuses the login.
- example workflow: runs-on: ipcr, the forge's own runner label.
- docs: two listings, split (IPCR-Forge) and all in one (IPCR-Forge-AIO).
2026-10-05 16:11:24 +00:00

41 lines
2.2 KiB
Markdown

# IPCR Forge
A self-hosted forge whose releases live on IPFS: work in **Gitea** as usual, its Actions build your
images, the [IPCR](https://github.com/Yundera/ipcr) engine publishes them under one IPNS name (and
your ENS or DNS name), and every public repository is mirrored to **Radicle**.
```
git push origin v1.0.0
docker pull ipcr.localhost:4767/ipns/metadec.eth/ipcr-hello:1.0.0 # any host running IPCR
docker pull ipcr-<domain>/ipns/metadec.eth/ipcr-hello:1.0.0 # anywhere, through the forge
```
This repository is the add-on; [Yundera/ipcr](https://github.com/Yundera/ipcr) is the engine (the
registry gateway, IPFS import, IPNS naming and admin API), used here as the image
`ghcr.io/yundera/ipcr`.
- **[docs/forge.md](docs/forge.md)**: how it works, the trust model, findings, what was verified.
- **[Apps/IPCR-Forge](https://github.com/Yundera/ipcr/tree/main/Apps/IPCR-Forge)** and
**[Apps/IPCR-Forge-AIO](https://github.com/Yundera/ipcr/tree/main/Apps/IPCR-Forge-AIO)** (in the IPCR repository,
with the rest of the IPCR app store): the Yundera AppStore listings (compose, rationale, seed). The
first uses the store's Gitea app (and its Radicle app, if installed); the second bundles both.
Both pin this repository's image and the engine's. See
[docs/forge.md](docs/forge.md#two-listings-split-and-all-in-one).
- **[forge/](forge/)**: the forge service, `ghcr.io/yundera/ipcr-forge` (Go, standard library only):
the Gitea → Radicle mirror, the forge's page and admin pages (Gitea login), the staging registry's
gate and per-repository push credentials, and the install step.
- The standalone listings the forge is built from, [Gitea](https://github.com/Yundera/ipcr/tree/main/Apps/Gitea) and [Radicle](https://github.com/Yundera/ipcr/tree/main/Apps/Radicle), are in
the same store.
## Develop
```sh
cd forge && go vet ./... && go test ./...
docker build -t ghcr.io/yundera/ipcr-forge:dev forge
```
Releases: a `vX.Y.Z` tag publishes `ghcr.io/yundera/ipcr-forge:X.Y.Z`
([.github/workflows/image.yml](.github/workflows/image.yml)). Then bump the version in the
listings, `Apps/IPCR-Forge/docker-compose.yml` and `Apps/IPCR-Forge-AIO/docker-compose.yml` in
the IPCR repository (the service, `forge-gate` and the `forge-setup` step, in each).