ci: throwaway test passwords, analytics off every time
The first CI run failed at the server tests: they need the test run mode's passwords, which passwords.yaml holds on a developer's machine and which is never committed. Without them Serverpod's test tools exit with code 1 and print nothing. Reproduced in a clean clone; with the three passwords in the environment (SERVERPOD_DATABASE_PASSWORD, SERVERPOD_PASSWORD_serverSideSessionKeyHashPepper, SERVERPOD_PASSWORD_serviceSecret) all checks pass. The job now draws new random ones every time: they only guard the test database it creates in its own checkout. Also switch off Flutter's and Dart's usage reports on every job, not only when installing the SDK: the cancelled first run left an SDK behind before getting that far. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
c837cee51f
commit
9877fba155
2 changed files with 17 additions and 3 deletions
|
|
@ -60,15 +60,29 @@ jobs:
|
||||||
if [ ! -x "$sdk/bin/flutter" ]; then
|
if [ ! -x "$sdk/bin/flutter" ]; then
|
||||||
rm -rf "$sdk"
|
rm -rf "$sdk"
|
||||||
git clone -q --depth 1 --branch "$FLUTTER_VERSION" https://github.com/flutter/flutter.git "$sdk"
|
git clone -q --depth 1 --branch "$FLUTTER_VERSION" https://github.com/flutter/flutter.git "$sdk"
|
||||||
"$sdk/bin/flutter" config --no-analytics >/dev/null
|
|
||||||
"$sdk/bin/dart" --disable-analytics >/dev/null
|
|
||||||
fi
|
fi
|
||||||
|
# No usage reports to Google, every time: a cancelled job may have left an SDK
|
||||||
|
# behind before switching them off.
|
||||||
|
"$sdk/bin/flutter" config --no-analytics >/dev/null
|
||||||
|
"$sdk/bin/dart" --disable-analytics >/dev/null
|
||||||
echo "$sdk/bin" >> "$FORGEJO_PATH"
|
echo "$sdk/bin" >> "$FORGEJO_PATH"
|
||||||
"$sdk/bin/flutter" --version
|
"$sdk/bin/flutter" --version
|
||||||
|
|
||||||
- name: Dependencies
|
- name: Dependencies
|
||||||
run: flutter pub get
|
run: flutter pub get
|
||||||
|
|
||||||
|
# The test run mode's passwords, which passwords.yaml holds on a developer's machine
|
||||||
|
# and which is never committed. Without them the server tests stop without a word.
|
||||||
|
# Throwaway and new for every job: they only guard the test database the job creates
|
||||||
|
# in its own checkout.
|
||||||
|
- name: Test passwords
|
||||||
|
run: |
|
||||||
|
for name in SERVERPOD_DATABASE_PASSWORD \
|
||||||
|
SERVERPOD_PASSWORD_serverSideSessionKeyHashPepper \
|
||||||
|
SERVERPOD_PASSWORD_serviceSecret; do
|
||||||
|
echo "$name=$(openssl rand -hex 32)" >> "$FORGEJO_ENV"
|
||||||
|
done
|
||||||
|
|
||||||
- name: Checks
|
- name: Checks
|
||||||
run: tool/check.sh
|
run: tool/check.sh
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@ A spaced-repetition learning app: studysets of flashcards, reviewed on an FSRS s
|
||||||
|
|
||||||
## CI and deploys
|
## CI and deploys
|
||||||
|
|
||||||
- **CI** (`.forgejo/workflows/ci.yaml`) runs `tool/check.sh` on every push, on the Forgejo runner on sahaquiel (`deploy/runner/`). Jobs run directly on the host as the unprivileged user `runner`, never in containers: Docker access would be root on the production server. The runner's systemd unit keeps jobs away from production (no `/home`, no Docker socket, Docker's container networks unreachable, memory and CPU capped); keep it that way when changing it. `runner` has user ID 61000 and must never share one with a container's processes (PostgreSQL and the server run as 999, not remapped): the same user ID can read their environment and files. The job's first step (*Sandbox*) fails if any of this leaks. Flutter is pinned in the workflow (`FLUTTER_VERSION`): move it together with the local one. CI runs on pushes only: a pull request from a fork would run its code on the production server.
|
- **CI** (`.forgejo/workflows/ci.yaml`) runs `tool/check.sh` on every push, on the Forgejo runner on sahaquiel (`deploy/runner/`). Jobs run directly on the host as the unprivileged user `runner`, never in containers: Docker access would be root on the production server. The runner's systemd unit keeps jobs away from production (no `/home`, no Docker socket, Docker's container networks unreachable, memory and CPU capped); keep it that way when changing it. `runner` has user ID 61000 and must never share one with a container's processes (PostgreSQL and the server run as 999, not remapped): the same user ID can read their environment and files. The job's first step (*Sandbox*) fails if any of this leaks. Flutter is pinned in the workflow (`FLUTTER_VERSION`): move it together with the local one. The server tests there get throwaway passwords from the environment (`SERVERPOD_…`, new for every job), since `passwords.yaml` is never committed; without them they exit with code 1 and no message. CI runs on pushes only: a pull request from a fork would run its code on the production server.
|
||||||
- **A green `main` deploys learn.halkyon.eu** through `deploy/redeploy.sh`, the only command the runner's key may run as `deploy` (pinned in `authorized_keys`, from sahaquiel itself only). It deploys the commit CI checked while it is still the tip, as a fast-forward, only if every new commit is signed by a key in `deploy/allowed-signers` (the deployed copy decides), after dumping the database (the last 10 dumps stay in `~deploy/backups`), and fails unless the server answers. A failed deploy leaves the checkout at the deployed commit; run the workflow again to retry. By hand: `ssh sahaquiel-deploy halkyon-learn/deploy/redeploy.sh <commit>`. Never `docker compose down -v` there.
|
- **A green `main` deploys learn.halkyon.eu** through `deploy/redeploy.sh`, the only command the runner's key may run as `deploy` (pinned in `authorized_keys`, from sahaquiel itself only). It deploys the commit CI checked while it is still the tip, as a fast-forward, only if every new commit is signed by a key in `deploy/allowed-signers` (the deployed copy decides), after dumping the database (the last 10 dumps stay in `~deploy/backups`), and fails unless the server answers. A failed deploy leaves the checkout at the deployed commit; run the workflow again to retry. By hand: `ssh sahaquiel-deploy halkyon-learn/deploy/redeploy.sh <commit>`. Never `docker compose down -v` there.
|
||||||
|
|
||||||
## Rules the code relies on
|
## Rules the code relies on
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue