52 lines
1.7 KiB
Bash
52 lines
1.7 KiB
Bash
#!/usr/bin/env bash
|
|
# Workflow check: run the offline build with temp output roots and verify the
|
|
# report, manifest, and sample assets are produced.
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
cd "$ROOT_DIR"
|
|
|
|
TMP_ROOT="$(mktemp -d)"
|
|
trap 'rm -rf "$TMP_ROOT"' EXIT
|
|
|
|
BUILD_ROOT="$TMP_ROOT/build"
|
|
EXAMPLES_ROOT="$TMP_ROOT/examples"
|
|
|
|
STEPFORGE_BUILD_DIR="$BUILD_ROOT" \
|
|
STEPFORGE_EXAMPLES_DIR="$EXAMPLES_ROOT" \
|
|
bash scripts/build-release.sh >/dev/null
|
|
|
|
for f in build_report.md artifacts_manifest.json; do
|
|
if [[ ! -s "$BUILD_ROOT/$f" ]]; then
|
|
echo "Missing build output: $f" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
if ! find "$BUILD_ROOT/artifacts" -maxdepth 1 -type f -name '*.tar.gz' -print -quit | grep -q .; then
|
|
echo "Missing portable tarball" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -s "$EXAMPLES_ROOT/sample-manifest.json" ]]; then
|
|
echo "Missing sample manifest from build" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -s "$EXAMPLES_ROOT/sample-guide.sfgz" ]]; then
|
|
echo "Missing sample archive from build" >&2
|
|
exit 1
|
|
fi
|
|
|
|
MANIFEST_FILE="$BUILD_ROOT/artifacts_manifest.json" node - <<'NODE'
|
|
const fs = require('node:fs');
|
|
const manifest = JSON.parse(fs.readFileSync(process.env.MANIFEST_FILE, 'utf8'));
|
|
if (manifest.format !== 'stepforge-artifacts-manifest') throw new Error('unexpected build manifest format');
|
|
if (!Array.isArray(manifest.files) || manifest.files.length < 3) throw new Error('missing build files');
|
|
if (!manifest.files.some((file) => file.path.endsWith('.tar.gz'))) throw new Error('missing tarball entry');
|
|
if (!manifest.files.some((file) => file.path.endsWith('sample-guide.sfgz'))) throw new Error('missing sample archive entry');
|
|
NODE
|
|
|
|
echo "build release OK"
|