[mirror] Scalable static site server for Git forges (like GitHub Pages)
1name: CI
2
3on:
4 push:
5 pull_request:
6 workflow_dispatch:
7
8env:
9 FORGE: codeberg.org
10
11jobs:
12 check:
13 runs-on: codeberg-small-lazy
14 container:
15 image: docker.io/library/node:24-trixie-slim@sha256:fcdfd7bcd8f641c8c76a8950343c73912d68ba341e8dd1074e663b784d3e76f4
16 steps:
17 - name: Check out source code
18 uses: https://code.forgejo.org/actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
19 - name: Set up toolchain
20 uses: https://code.forgejo.org/actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
21 with:
22 go-version: '>=1.25.0'
23 - name: Install dependencies
24 run: |
25 apt-get -y update
26 apt-get -y install ca-certificates
27 go install honnef.co/go/tools/cmd/staticcheck@latest
28 - name: Build service
29 run: |
30 go build
31 - name: Run static analysis
32 run: |
33 go vet
34 staticcheck
35
36 release:
37 # IMPORTANT: This workflow step will not work without the Releases unit enabled!
38 if: ${{ forge.ref == 'refs/heads/main' || startsWith(forge.event.ref, 'refs/tags/v') }}
39 needs: [check]
40 runs-on: codeberg-medium-lazy
41 container:
42 image: docker.io/library/node:24-trixie-slim@sha256:fcdfd7bcd8f641c8c76a8950343c73912d68ba341e8dd1074e663b784d3e76f4
43 steps:
44 - name: Check out source code
45 uses: https://code.forgejo.org/actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
46 - name: Set up toolchain
47 uses: https://code.forgejo.org/actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0
48 with:
49 go-version: '>=1.25.0'
50 - name: Install dependencies
51 run: |
52 apt-get -y update
53 apt-get -y install ca-certificates
54 - name: Build release assets
55 # If you want more platforms to be represented, send a pull request.
56 run: |
57 set -x
58 build() { GOOS=$1 GOARCH=$2 go build -o assets/git-pages.$1-$2$3; }
59 build windows amd64 .exe
60 build linux amd64
61 build linux arm64
62 build darwin arm64
63 - name: Create release
64 uses: https://code.forgejo.org/actions/forgejo-release@fc0488c944626f9265d87fbc4dd6c08f78014c63 # v2.7.3
65 with:
66 tag: ${{ startsWith(forge.event.ref, 'refs/tags/v') && forge.ref_name || 'latest' }}
67 release-dir: assets
68 direction: upload
69 override: true
70 prerelease: ${{ !startsWith(forge.event.ref, 'refs/tags/v') }}
71
72 package:
73 if: ${{ forge.ref == 'refs/heads/main' || startsWith(forge.event.ref, 'refs/tags/v') }}
74 needs: [check]
75 runs-on: codeberg-medium-lazy
76 container:
77 image: docker.io/library/node:24-trixie-slim@sha256:fcdfd7bcd8f641c8c76a8950343c73912d68ba341e8dd1074e663b784d3e76f4
78 steps:
79 - name: Install dependencies
80 run: |
81 apt-get -y update
82 apt-get -y install buildah ca-certificates
83 - name: Check out source code
84 uses: https://code.forgejo.org/actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
85 - name: Authenticate with Docker
86 run: |
87 buildah login --authfile=/tmp/authfile-${FORGE}.json \
88 -u ${{ vars.PACKAGES_USER }} -p ${{ secrets.PACKAGES_TOKEN }} ${FORGE}
89 - name: Build container
90 run: |
91 printf '[storage]\ndriver="vfs"\nrunroot="/run/containers/storage"\ngraphroot="/var/lib/containers/storage"\n' | tee /etc/containers/storage.conf
92 buildah build ${CACHE} --arch=amd64 --tag=container:${VER}-amd64
93 buildah build ${CACHE} --arch=arm64 --tag=container:${VER}-arm64
94 buildah manifest create container:${VER} \
95 container:${VER}-amd64 \
96 container:${VER}-arm64
97 env:
98 BUILDAH_ISOLATION: chroot
99 VER: ${{ startsWith(forge.event.ref, 'refs/tags/v') && forge.ref_name || 'latest' }}
100 CACHE: ${{ format('--authfile=/tmp/authfile-{0}.json --layers --cache-from {0}/{1}/cache --cache-to {0}/{1}/cache', env.FORGE, forge.repository) }}
101 - if: ${{ forge.repository == 'git-pages/git-pages' }}
102 name: Push container to Codeberg
103 run: |
104 buildah manifest push --authfile=/tmp/authfile-${FORGE}.json \
105 --all container:${VER} "docker://${FORGE}/${{ forge.repository }}:${VER/v/}"
106 env:
107 VER: ${{ startsWith(forge.event.ref, 'refs/tags/v') && forge.ref_name || 'latest' }}