build: one list of checks, run by the release build and by CI alike
tools/check.sh is what build-release.sh ran before building — every script's syntax, the manual, every tests/test-*.sh — moved, not copied, so a new test is run by both with nothing else to edit. It now runs every test even after one fails, keeps each one's output and a summary table for a CI run, and with --base checks the change's hygiene too. The manual's revision date honours SOURCE_DATE_EPOCH, so a release built from a commit a day later ships the manual that commit holds. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
4413114d2a
commit
5416112db5
+6
-51
@@ -19,57 +19,12 @@ release_require_version "$VERSION" || exit 1
|
||||
STAGE="$ROOT/packaging/root"
|
||||
OUTPUT="$ROOT/dist/ekklesia-classroom_${VERSION}_amd64.deb"
|
||||
|
||||
# Syntax check everything the package ships, by shebang, so this cannot
|
||||
# drift out of date as classroom commands are added.
|
||||
echo "Validating sources"
|
||||
|
||||
for script in "$ROOT/packaging/debian/postinst" "$ROOT"/scripts/* "$ROOT"/tests/*; do
|
||||
[[ -f "$script" ]] || continue
|
||||
|
||||
case "$(head -n 1 "$script")" in
|
||||
*python3*)
|
||||
python3 -m py_compile "$script"
|
||||
;;
|
||||
*bash*|*bin/sh*)
|
||||
bash -n "$script"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
for module in "$ROOT"/lib/*.py; do
|
||||
[[ -f "$module" ]] || continue
|
||||
|
||||
python3 -m py_compile "$module"
|
||||
done
|
||||
|
||||
for policy in "$ROOT"/config/chrome/policies/*/*.json; do
|
||||
[[ -f "$policy" ]] || continue
|
||||
|
||||
python3 -c 'import json, sys; json.load(open(sys.argv[1]))' "$policy"
|
||||
done
|
||||
|
||||
find "$ROOT/scripts" "$ROOT/lib" "$ROOT/tests" \
|
||||
-name '__pycache__' -type d -prune -exec rm -rf {} + 2>/dev/null || true
|
||||
|
||||
# THE MANUAL IS PART OF THE RELEASE, NOT A JOB FOR AFTERWARDS.
|
||||
#
|
||||
# Built from docs/manual before the tests run, so that the test which
|
||||
# checks the digital and printed versions against each other is checking
|
||||
# what this package is about to ship rather than whatever was built last.
|
||||
# A page that would make the printed manual wrong fails the build here.
|
||||
echo "Building the teacher's manual"
|
||||
"$ROOT/tools/build-manual"
|
||||
|
||||
for test in "$ROOT"/tests/test-*.sh; do
|
||||
[[ -x "$test" ]] || continue
|
||||
|
||||
echo "Running $(basename "$test")"
|
||||
"$test" > /dev/null || {
|
||||
echo "Tests failed. Run it directly to see why:"
|
||||
echo " $test"
|
||||
exit 1
|
||||
}
|
||||
done
|
||||
# Sources, the teacher's manual and every test, before anything is built.
|
||||
# The same list CI runs on every change; see tools/check.sh.
|
||||
"$ROOT/tools/check.sh" || {
|
||||
echo "Checks failed; nothing was built."
|
||||
exit 1
|
||||
}
|
||||
|
||||
echo "Building Ekklesia Classroom ${VERSION}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user