Compare commits

..
1 Commits
Author SHA1 Message Date
clawbot 38b0bcf11d Merge pull request '#41: add cibuild and precommit make shims (closes #34)'
check / check (push) Successful in 11s
Build and Deploy to Cloudflare Pages / build (push) Successful in 45s
Build and Deploy to Cloudflare Pages / deploy (push) Successful in 18s
2026-08-10 16:14:53 +02:00
6 changed files with 19 additions and 77 deletions
-40
View File
@@ -108,43 +108,3 @@ jobs:
run: wrangler pages deploy public --project-name=lora-vegas --branch=${{ github.ref_name }}
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
notify:
runs-on: ubuntu-latest
needs: [build, deploy]
# Run whether the build and deploy passed or failed. The Notify step
# carries continue-on-error: true so a notification that cannot be sent
# leaves the deploy's result exactly as it was.
if: always()
container:
# node 20.20.2-bookworm, 2026-08-09. Same pinned image as the deploy
# job, chosen because it ships curl; no extra packages to install.
image: node@sha256:8f693eaa7e0a8e71560c9a82b55fd54c2ae920a2ba5d2cde28bac7d1c01c9ba5
steps:
# needs.deploy.result is "success" only when the deploy job actually
# published; anything else -- a failed build or a failed deploy -- is
# reported as a failure with a link to the run.
- name: Notify
# curl failing (ntfy unreachable or erroring, or NTFY_TOPIC
# absent) must not fail the run, so continue-on-error lives on
# this step and not on the job: on this Gitea a job-level flag
# still marks the job failed and reddens the commit.
continue-on-error: true
env:
RESULT: ${{ needs.deploy.result }}
NTFY_TOPIC: ${{ secrets.NTFY_TOPIC }}
run: |
short="$(printf '%.7s' "$GITHUB_SHA")"
run_url="$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID"
if [ "$RESULT" = success ]; then
curl -fsS --max-time 10 \
-H "Title: lora.vegas deployed from $GITHUB_REF_NAME" \
-d "$short deployed to https://lora.vegas/" \
"https://ntfy.sh/$NTFY_TOPIC"
else
curl -fsS --max-time 10 \
-H "Title: lora.vegas deploy from $GITHUB_REF_NAME failed" \
-H "Priority: high" \
-d "Run: $run_url" \
"https://ntfy.sh/$NTFY_TOPIC"
fi
+4 -7
View File
@@ -21,11 +21,9 @@
# so calling it from inside would recurse into a docker build with no
# daemon.
#
# This repo's lint is a Hugo build that fails on any build error and on
# any Hugo warning. --printPathWarnings makes Hugo warn when two pages
# write the same output path, and --panicOnWarning turns that warning,
# and every other one, into a failed build. Only the lint is this strict:
# script/test and the deploy build stay plain `hugo --minify`.
# This repo's lint is a clean Hugo build that surfaces broken internal
# links and template path problems: `hugo` fails on build errors and
# --printPathWarnings reports render-target collisions.
# alpine 3.21, 2026-02-28
FROM alpine@sha256:c3f8e73fdb79deaebaa2037150150191b9dcbfba68b4a46d70103204c53f4709
@@ -60,5 +58,4 @@ COPY . .
# references.
ARG CHECK_EPOCH
RUN [ -n "$CHECK_EPOCH" ] || exit 1
RUN echo "lint epoch: ${CHECK_EPOCH}" && \
hugo --minify --printPathWarnings --panicOnWarning
RUN echo "lint epoch: ${CHECK_EPOCH}" && hugo --minify --printPathWarnings
+3 -4
View File
@@ -66,10 +66,9 @@ provide:
git pre-commit hook
- `script/test` — the correctness check: a clean `hugo --minify` production
build
- `script/lint` — a Hugo build that fails on any Hugo warning, including two
pages that write the same output path, run inside Docker: it builds
`Dockerfile.lint`, where the lint is a build step, so a successful build is a
clean lint
- `script/lint` — a clean build that surfaces broken links and path collisions,
run inside Docker: it builds `Dockerfile.lint`, where the lint is a build
step, so a successful build is a clean lint
- `script/fmt` — format every markdown and CSS file in the repo with prettier;
the exclusions live in `.prettierignore` with the reason for each
- `script/fmt-check` — check that formatting (read-only)
+4 -17
View File
@@ -34,23 +34,6 @@ leaning on `.gitignore` (https://git.eeqj.de/sneak/lora.vegas/issues/33).
# Completed Steps
- 2026-11-05: added a `notify` job to the deploy workflow that posts an ntfy
message on every deploy, success or failure (closes
https://git.eeqj.de/sneak/lora.vegas/issues/48). The job runs `if: always()`
so it fires whether the build and deploy passed or failed, and the Notify step
carries `continue-on-error: true` so a notification that cannot be sent leaves
the deploy's result exactly as it was. On success the message body is the
short commit plus the site URL, and on failure it is a link to the run. The
topic comes from the `NTFY_TOPIC` Actions secret, which sneak must add before
anything is sent; the topic is never written in the repository. Both curl
calls carry `--max-time 10` so a stalled ntfy cannot hold the run open
- 2026-10-21: made `script/lint` fail when two pages write the same output path
(https://git.eeqj.de/sneak/lora.vegas/issues/25). `Dockerfile.lint` now runs
`hugo --minify --printPathWarnings --panicOnWarning`. `--printPathWarnings`
makes Hugo warn about the collision, and `--panicOnWarning` turns that warning
and every other Hugo warning into a failed lint; until now the warning was
printed and the lint still exited 0. `script/test` and the deploy build stay
plain `hugo --minify`
- 2026-08-10: added the `cibuild` and `precommit` targets to the `Makefile`
(https://git.eeqj.de/sneak/lora.vegas/issues/34). Both scripts already
existed, were already documented, and are the two entrypoints a contributor is
@@ -345,6 +328,10 @@ outside this repo, so nothing there may be picked up as the Next Step.
## Blocked
- Decide whether `script/lint` should fail on render-target collisions rather
than only print them; `--printPathWarnings` exits 0 today, so the signal is
reported and not enforced. Owner call, since it changes what the gate rejects
(https://git.eeqj.de/sneak/lora.vegas/issues/25)
- Move the artifact actions in `.gitea/workflows/deploy.yml` to v4 once this
Gitea Actions instance serves the v4 artifact protocol; they are pinned on the
deprecated v3 line because v4 fails here
+1 -1
View File
@@ -2,7 +2,7 @@
# script/check: run all checks. Our own extension to
# scripts-to-rule-them-all. Must not modify any tracked files. Runs the
# canonical order: the clean production build, then the lint build that
# fails on any Hugo warning, then the read-only formatting check.
# reports path warnings, then the read-only formatting check.
#
# The lint - and only the lint - runs inside Docker: it is a build of
# Dockerfile.lint, so this script needs a working docker daemon and has
+7 -8
View File
@@ -1,13 +1,12 @@
#!/bin/sh
# script/lint: run the lint. This Hugo site has no dedicated linter, so
# the lint is a Hugo build that fails on any build error and on any Hugo
# warning, including two pages that write the same output path. Where
# it runs is not negotiable. Every lint run happens inside a Docker
# container, so this script does nothing except build Dockerfile.lint.
# The lint is a build step there, so a successful build is a clean lint.
# There is deliberately no host fallback and no "already inside a
# container?" branch: either would be a host lint path wearing a
# disguise.
# the lint gate is a clean build that surfaces broken internal links and
# template path problems -- but where it runs is not negotiable: every
# lint run happens inside a Docker container, so this script does
# nothing except build Dockerfile.lint. The lint is a build step there,
# so a successful build is a clean lint. There is deliberately no host
# fallback and no "already inside a container?" branch: either would be
# a host lint path wearing a disguise.
#
# No --target: Dockerfile.lint has exactly one stage, so the whole-file
# build IS the lint. See that file for why a second, sibling stage would