Stop building images on the GitHub mirror #18
+1
-3
@@ -37,9 +37,7 @@ architecture notes are in `CLAUDE.md`; feature and deployment docs are in
|
||||
## GitHub mirror
|
||||
|
||||
`mirror/` publishes `main` to a read-only GitHub mirror from the operator's
|
||||
host, never from a session; see `docs/08-development/github-mirror.md`. GitHub
|
||||
runs `.github/workflows`, the forge `.gitea/workflows`; keep the two image
|
||||
workflows in step.
|
||||
host, never from a session; see `docs/08-development/github-mirror.md`.
|
||||
|
||||
## CI
|
||||
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ JWT_SECRET=replace-with-a-secure-random-string
|
||||
# Built from source by default. To pull published images instead, set the
|
||||
# registry path they live under (ending in /), then:
|
||||
# docker compose pull && docker compose up -d
|
||||
# IMAGE_PREFIX=ghcr.io/branderson/
|
||||
# IMAGE_PREFIX=registry.example.com/owner/
|
||||
# IMAGE_TAG=latest
|
||||
# "Latest release" API URL to check for updates (GitHub or Gitea); off when unset
|
||||
# APP_UPDATE_URL=https://git.example.com/api/v1/repos/owner/dotcom-arcade/releases/latest
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
# Builds the app, session manager and streamer images on the GitHub mirror and
|
||||
# pushes them to GitHub's container registry, under the repository's owner.
|
||||
# The forge runs .gitea/workflows/images.yml instead; Gitea ignores this
|
||||
# directory while .gitea/workflows exists.
|
||||
name: Images
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: ${{ matrix.name }}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: app
|
||||
image: dotcom-arcade
|
||||
context: .
|
||||
- name: session-manager
|
||||
image: dotcom-arcade-session-manager
|
||||
context: streaming/session-manager
|
||||
- name: streamer
|
||||
image: dotcom-arcade-streamer
|
||||
context: streaming/streamer
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Lowercase the owner
|
||||
id: owner
|
||||
shell: bash
|
||||
run: echo "name=${GITHUB_REPOSITORY_OWNER,,}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
# Shown in Settings, since images carry no version number
|
||||
- name: Name the version
|
||||
id: version
|
||||
shell: bash
|
||||
run: echo "sha=${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
|
||||
- uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ghcr.io/${{ steps.owner.outputs.name }}/${{ matrix.image }}
|
||||
tags: type=raw,value=latest
|
||||
|
||||
# GHCR sometimes answers the streamer's base image pull with 429 Too Many
|
||||
# Requests; it clears within minutes, so retry once.
|
||||
- id: build
|
||||
uses: docker/build-push-action@v6
|
||||
continue-on-error: true
|
||||
with:
|
||||
context: ${{ matrix.context }}
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
platforms: linux/amd64
|
||||
build-args: |
|
||||
VERSION=${{ steps.version.outputs.sha }}
|
||||
provenance: false
|
||||
|
||||
- name: Wait before retrying
|
||||
if: steps.build.outcome == 'failure'
|
||||
run: sleep 120
|
||||
|
||||
- name: Retry the build
|
||||
if: steps.build.outcome == 'failure'
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: ${{ matrix.context }}
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
platforms: linux/amd64
|
||||
build-args: |
|
||||
VERSION=${{ steps.version.outputs.sha }}
|
||||
provenance: false
|
||||
@@ -135,9 +135,6 @@ PGID=1000
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
To pull prebuilt images instead of building them, see
|
||||
[prebuilt images](docs/09-deployment/docker-deployment.md#prebuilt-images).
|
||||
|
||||
Open `http://<server>/` and create the admin account. On first start the app
|
||||
indexes the collection, which takes a few minutes on a full Ultimate install.
|
||||
Under **Settings → App** you can set the site name and tagline.
|
||||
|
||||
@@ -16,7 +16,7 @@ the Dotcom Arcade application.
|
||||
6. **[Debugging Guide](./debugging.md)** - Debugging tips and troubleshooting
|
||||
7. **[Common Pitfalls](./common-pitfalls.md)** - Known issues and solutions
|
||||
8. **[Upstream Sync](./upstream-sync.md)** - Merging changes from flashpoint-web
|
||||
9. **[GitHub Mirror](./github-mirror.md)** - Publishing to GitHub and GHCR
|
||||
9. **[GitHub Mirror](./github-mirror.md)** - Publishing to GitHub
|
||||
10. **[Demo Data](./demo-data.md)** - Made-up games for development and screenshots
|
||||
|
||||
## Quick Start
|
||||
|
||||
@@ -4,8 +4,7 @@ Dotcom Arcade is developed on a private forge. `mirror/github-mirror.sh`
|
||||
publishes its `main` and the tags on `main` to
|
||||
[github.com/branderson/dotcom-arcade](https://github.com/branderson/dotcom-arcade),
|
||||
hourly, from a host that can push to GitHub. Issues and pull requests are off
|
||||
there. Actions stays on, since it builds the images that `ghcr.io/branderson/`
|
||||
serves (see [publishing images](../09-deployment/docker-deployment.md#publishing-images)).
|
||||
there.
|
||||
|
||||
The mirror's `main` is the forge's plus one commit, which adds a read-only notice
|
||||
under the README's title. Every forge commit is in the mirror unchanged, and
|
||||
@@ -21,8 +20,6 @@ instead of publishing without the notice.
|
||||
pushing it.
|
||||
3. Once the first sync has pushed, run `github-mirror.sh --settings` (needs
|
||||
`gh`). It turns off issues, pull requests, projects, wiki and discussions.
|
||||
4. The first image build creates its packages as private. In each package's
|
||||
settings on GitHub, set its visibility to public.
|
||||
|
||||
The timer runs a copy of the script, not the checkout's. Reinstall it after
|
||||
reviewing a change to `mirror/`.
|
||||
|
||||
@@ -28,27 +28,18 @@ All three are built from this repository by `docker compose up -d --build`.
|
||||
|
||||
### Prebuilt images
|
||||
|
||||
Images are published to GitHub's container registry. To pull them instead of
|
||||
building, set `IMAGE_PREFIX` in `.env`, ending in `/`. There's one tag,
|
||||
`latest`, built from the tip of `main`.
|
||||
No images are published for now, so build them with `docker compose up -d --build`.
|
||||
If you publish your own (see below), set `IMAGE_PREFIX` in `.env` to the
|
||||
registry path they live under, ending in `/`:
|
||||
|
||||
```sh
|
||||
IMAGE_PREFIX=ghcr.io/branderson/
|
||||
IMAGE_PREFIX=registry.example.com/owner/
|
||||
```
|
||||
|
||||
Then run `docker compose pull && docker compose up -d`. Images from another
|
||||
registry work the same way, with its path as the prefix.
|
||||
Then run `docker compose pull && docker compose up -d`.
|
||||
|
||||
### Publishing images
|
||||
|
||||
Two workflows build the same images with the same tags:
|
||||
|
||||
- `.github/workflows/images.yml` runs on the
|
||||
[GitHub mirror](../08-development/github-mirror.md) and pushes to
|
||||
`ghcr.io/<owner>/` with the workflow's own token. It needs no setup.
|
||||
- `.gitea/workflows/images.yml` runs on the forge. Gitea ignores
|
||||
`.github/workflows` while `.gitea/workflows` exists.
|
||||
|
||||
`.gitea/workflows/images.yml` builds all three images on Gitea Actions and
|
||||
pushes them to the Gitea instance's container registry, under the repository's
|
||||
owner. Each push to `main` publishes `latest`. Its jobs run docker builds, so they need a runner labelled
|
||||
|
||||
+1
-1
@@ -126,7 +126,7 @@ for Flashpoint Ultimate.
|
||||
- [Debugging](08-development/debugging.md) - Debugging tips
|
||||
- [Common Pitfalls](08-development/common-pitfalls.md) - Known issues
|
||||
- [Upstream Sync](08-development/upstream-sync.md) - Merging changes from flashpoint-web
|
||||
- [GitHub Mirror](08-development/github-mirror.md) - Publishing to GitHub and GHCR
|
||||
- [GitHub Mirror](08-development/github-mirror.md) - Publishing to GitHub
|
||||
- [Demo Data](08-development/demo-data.md) - Made-up games for development and screenshots
|
||||
|
||||
### 09. Deployment
|
||||
|
||||
@@ -54,9 +54,8 @@ transform() {
|
||||
|| die "README.md: no title to put the mirror notice under"
|
||||
}
|
||||
|
||||
# Issues, pull requests, wiki and the like off; Actions stays on, since it
|
||||
# publishes the images. Settings rather than content, so a sync does not
|
||||
# reapply them; run once after creating the repository.
|
||||
# Issues, pull requests, wiki and the like off. Settings rather than content,
|
||||
# so a sync does not reapply them; run once after creating the repository.
|
||||
settings() {
|
||||
command -v gh >/dev/null || die "--settings needs the gh CLI"
|
||||
gh api -X PATCH "repos/$MIRROR_REPO" --silent \
|
||||
|
||||
Reference in New Issue
Block a user