Files
will 954edeb7b9
Deploy / deploy (push) Successful in 35s
CI: join vu-smoke to the reground network, not the default bridge
The job's own sandbox container is created on the "reground" network, but
a plain docker run (no --network) puts vu-smoke on the default bridge
instead — two different, unrouted networks, so the curl in the previous
fix couldn't reach it at all and just hung for 2 minutes until it timed
out, rather than failing fast.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-09 20:22:29 -04:00

62 lines
2.4 KiB
YAML

name: Deploy
on:
push:
branches: [master]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "26"
- name: Install
run: npm ci
- name: Build
run: npm run build
- name: Test
run: npm test
- name: Build and smoke-test the container
# vu has no server-side logic, so there's nothing an integration
# test would exercise beyond "does the built bundle actually get
# served correctly under the /vu/ base path" — this is that check,
# run against the exact image that ships.
#
# The runner shares the host's Docker daemon, so a hardcoded host
# port (this used to be -p 8080:80) is contended across every repo's
# CI on the same host, not scoped to this job — hence the earlier
# "port already allocated" failures even after cleaning up any
# leftover vu-smoke container. Curl the container's own IP instead,
# so no host port is published at all — but this job's own sandbox
# container lives on the "reground" network, not the default bridge,
# so vu-smoke has to join that same network or the two can't reach
# each other at all (that's why the first attempt at this just hung
# for 2 minutes before timing out, rather than failing fast).
run: |
docker rm -f vu-smoke 2>/dev/null || true
docker build -t vu:ci .
docker run -d --name vu-smoke --network reground vu:ci
sleep 1
container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vu-smoke)
curl -sf "http://${container_ip}/" | grep -q 'vu — Divine Office'
docker stop vu-smoke
docker rm vu-smoke
- name: Trigger redeploy via SSH
run: |
mkdir -p ~/.ssh
printf '%s\n' "$VU_DEPLOY_SSH_KEY" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
# Forced-command key, same pattern as eec/bookshop/drip: the
# server-side sudoers grant runs the vu redeploy script regardless
# of what's requested here — see the vu Ansible role.
ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=accept-new vu-deploy@reground.org true
env:
VU_DEPLOY_SSH_KEY: ${{ secrets.VU_DEPLOY_SSH_KEY }}