Files
maptool/.gitea/workflows/ci.yml
T
randy ae67cc72c7
CI / check (push) Successful in 5m43s
CI / deploy (push) Successful in 2m46s
Move deploy job to a dedicated native runner
The Docker-based runner's own container is too minimal for host-mode
jobs (no rsync, docker CLI, or Node.js) and has no reliable path to
the host filesystem or systemctl otherwise. Register a separate,
native runner (label deploy:host) just for deployment, and point the
deploy job at it.
2026-08-27 16:12:33 +02:00

72 lines
2.4 KiB
YAML

name: CI
on:
push:
pull_request:
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# No ruby-version input: the action auto-detects it from
# .ruby-version when the input is omitted (not "file", which isn't
# a recognized value and fails with "Unknown engine file").
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Ruby syntax check
run: find app.rb config lib -name "*.rb" -print0 | xargs -0 -n1 ruby -c
- name: App loads without errors
run: bundle exec ruby -e 'require_relative "app"'
- uses: actions/setup-node@v4
with:
node-version: "22"
- name: JS syntax check
run: find public/js -name "*.js" -print0 | xargs -0 -n1 node --check
# Handled by a separate, native (non-Docker) runner registered with the
# single "deploy:host" label (see docs/deployment.adoc) — it runs directly
# on the server, so it has docker/git/etc. from the host, no socket/bind
# mount tricks needed. The Docker-based runner keeps handling `check`.
deploy:
needs: check
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: deploy
steps:
# Not actions/checkout@v4: keeping this plain-git checkout from when
# the job ran in a Node-less container — no reason to add a Node
# dependency back in for something this already does.
- name: Checkout
run: |
rm -rf .git * .[!.]* 2>/dev/null
git init -q
git remote add origin "${{ gitea.server_url }}/${{ gitea.repository }}.git"
git -c http.extraHeader="Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
fetch --depth 1 origin "${{ gitea.sha }}"
git checkout -q FETCH_HEAD
# Clears out everything in the target except data/ (uploaded GPX
# files, offline.pmtiles — never part of the git checkout in the
# first place, since it's gitignored) and copies the fresh checkout
# over, dropping .git afterwards.
- name: Sync to /srv/docker/maptool
run: |
mkdir -p /srv/docker/maptool
for f in /srv/docker/maptool/*; do
[ "$(basename "$f")" = "data" ] && continue
rm -rf "$f"
done
cp -a . /srv/docker/maptool/
rm -rf /srv/docker/maptool/.git
- name: Deploy
run: |
cd /srv/docker/maptool
docker compose -p maptool up --build -d