Files
maptool/.gitea/workflows/ci.yml
T
randy cd4eef342b
CI / check (push) Successful in 1m56s
CI / deploy (push) Successful in 2m56s
Add a persisted test suite
`bundle exec rake test` (minitest, a default gem but pinned in
Gemfile for reproducibility) now covers what ad-hoc scripts kept
re-verifying by hand during development: Gpx/Fit/TrackStats parsing,
GpxStore/LiveTrackStore file/TTL logic, LiveTrackClient's payload
parsing, and app.rb's routes end to end via Rack::MockRequest.

MAPTOOL_DATA_DIR (new, app.rb) lets the suite point GPX_STORE/
LIVETRACK_STORE at a throwaway directory instead of real data/ —
without it every run would leave uploaded test files behind. Each
lib file's old `if __FILE__ == $0` self-check is now redundant with
real tests covering the same ground, so removed rather than kept as
a second copy of the same assertions. Wired into ci.yml so it isn't
just a local convenience.
2026-09-07 12:46:35 +02:00

96 lines
3.6 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"'
- name: Ruby tests
run: bundle exec rake test
- 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 "cube-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: cube-host
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) and copies the fresh checkout over, dropping
# .git afterwards. Dotfiles like .env (deployment secrets) are left
# alone too — the glob below doesn't match them — and neither is ever
# part of the git checkout in the first place, since both are
# gitignored.
- 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
# Regenerated on every deploy from repo secrets (Settings -> Actions
# -> Secrets) rather than created once by hand on the server — see
# docs/deployment.adoc. Values are masked in the job log by Gitea
# automatically since they come from `secrets`. Secret names here
# can't start with "GITEA_"/"GITHUB_" — Gitea reserves those prefixes
# — hence OAUTH_CLIENT_* rather than GITEA_OAUTH_CLIENT_*; the .env
# var names on the right of `=` are unaffected, still what app.rb
# actually reads.
- name: Write .env
run: |
cat > /srv/docker/maptool/.env <<EOF
SESSION_SECRET=${{ secrets.SESSION_SECRET }}
GITEA_OAUTH_CLIENT_ID=${{ secrets.OAUTH_CLIENT_ID }}
GITEA_OAUTH_CLIENT_SECRET=${{ secrets.OAUTH_CLIENT_SECRET }}
MAPTOOL_ALLOWED_GITEA_USER=${{ secrets.MAPTOOL_ALLOWED_GITEA_USER }}
LIVETRACK_WEBHOOK_SECRET=${{ secrets.LIVETRACK_WEBHOOK_SECRET }}
EOF
chmod 600 /srv/docker/maptool/.env
- name: Deploy
run: |
cd /srv/docker/maptool
docker compose -p maptool up --build -d