954edeb7b9
Deploy / deploy (push) Successful in 35s
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>
62 lines
2.4 KiB
YAML
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 }}
|