The self-hosting check cannot run on this runner
The job I added failed with `env: can't execute bash`, and the reason is worse than a missing package. This project's runner is a docker executor with `privileged = false` and `volumes = ["/cache"]`, so the job gets an alpine container with no bash, no docker CLI, and no path to a daemon. I wrote and tested the script against the host shell over ssh, which is not what CI is. Wiring it up needs a runner change — privileged, a socket mount, or a shell executor — on a machine that also serves production. That is not a change to make on the way past, so the job is removed rather than left failing or, worse, made to skip. A job that always skips is the pattern I spent this afternoon removing from the Android suite; adding one here would be indefensible. The script stays, and says plainly where it has to run and why it is not automatic. It has earned that much: on its first two runs it found the missing `docker network create web` and a documented password that broke the relay about three times in four. ⚠️ So this closes #4 only in the sense that the check now exists and works. "Nothing boots the quick start in CI" is still true, and now has a named blocker rather than an absence.
This commit is contained in:
@@ -170,23 +170,6 @@ conformance:
|
||||
timeout: 40 minutes
|
||||
|
||||
# What gets a package wrong is missing files, not failing logic.
|
||||
# 🔴 Nothing in this repository ran the instructions it publishes, so when the
|
||||
# quick start broke it stayed broken — three faults at once, and the last one
|
||||
# survived a day of nobody noticing. The people it fails are self-hosters, at
|
||||
# the moment they are deciding whether this project works.
|
||||
#
|
||||
# ⚠️ It BOOTS rather than validating YAML. `docker compose config` renders that
|
||||
# file happily with no `web` network in existence — the external-network check
|
||||
# happens at `up`, and so does the database URL the password goes into. A job
|
||||
# that only linted would have passed throughout both outages it exists to catch.
|
||||
selfhost:
|
||||
<<: *rules
|
||||
stage: test
|
||||
tags: [vps]
|
||||
script:
|
||||
- Scripts/selfhost-smoke.sh
|
||||
timeout: 15m
|
||||
|
||||
# 🔴 The generated pages are what people actually read. A source can be fixed
|
||||
# and the page left stale, and nothing says so — /self-hosting was served for a
|
||||
# day telling self-hosters to run `docker compose up -d` without the
|
||||
|
||||
@@ -16,6 +16,23 @@
|
||||
# Scripts/selfhost-smoke.sh # published image, the documented path
|
||||
# Scripts/selfhost-smoke.sh --build # build from source, the ARM path
|
||||
#
|
||||
# 🔴 **Not wired into CI, and not for want of trying.** This project's runner is
|
||||
# a docker executor with `privileged = false` and no socket mounted, so a job
|
||||
# here gets an alpine container with no bash, no docker CLI and no way to reach
|
||||
# a daemon — `env: can't execute bash` is as far as it got. Running it in CI
|
||||
# needs a runner change (privileged, a socket mount, or a shell executor), which
|
||||
# is a decision about a machine that also serves production.
|
||||
#
|
||||
# ⚠️ Until then this is a RELEASE-TIME check somebody has to run, on any machine
|
||||
# with docker:
|
||||
#
|
||||
# ssh <box> "cd /srv/prod/messenger/src && ./Scripts/selfhost-smoke.sh"
|
||||
#
|
||||
# A check that only runs when remembered is weaker than one that cannot be
|
||||
# forgotten. It is still worth having: on its first two runs it found the
|
||||
# missing `docker network create web` AND a documented password that broke the
|
||||
# relay three times in four.
|
||||
#
|
||||
# Leaves nothing behind: a scratch directory, its own compose project name, and
|
||||
# a trap that tears down volumes as well as containers.
|
||||
set -euo pipefail
|
||||
|
||||
Reference in New Issue
Block a user