fix: check-git-install pins only the layer's commit and builds the playground config
- the lockfile check counts only vue-journal-layer's commit, so the layer's own git dependency on vue-seo-layer no longer fails it - the scratch app takes the playground's nuxt.config.ts and app.vue (the search route, one post per category page, the layout trail), which testing/expect-acme.txt is written against - --self-test checks the lockfile reading
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
# Usage: scripts/check-git-install.sh <tag>
|
||||
# scripts/check-git-install.sh --self-test (the lockfile check only)
|
||||
#
|
||||
# Proves the layer's distribution end to end: a scratch app installs
|
||||
# vue-journal-layer from git+https://git.golem15.com/golem15/vue-journal-layer.git#<tag>
|
||||
# anonymously, the lockfile pins the tag's commit, `nuxt build` succeeds, and
|
||||
# the built server passes testing/expect-acme.txt against the fixture API.
|
||||
# anonymously, the lockfile pins the tag's commit, `nuxt build` of the layer's
|
||||
# playground config succeeds, and the built server passes
|
||||
# testing/expect-acme.txt against the fixture API.
|
||||
# Nothing outside a temporary directory is touched.
|
||||
set -euo pipefail
|
||||
|
||||
@@ -12,6 +14,35 @@ REPO_URL="https://git.golem15.com/golem15/vue-journal-layer.git"
|
||||
|
||||
die() { echo "check-git-install: $*" >&2; exit 1; }
|
||||
|
||||
# lock_commits FILE prints the commits FILE pins for vue-journal-layer, one
|
||||
# per line: the #<commit> of its git+https entries and the commit of a
|
||||
# resolution whose repo is the layer's. Other git dependencies are ignored.
|
||||
lock_commits() {
|
||||
{
|
||||
grep -oE 'vue-journal-layer\.git#[0-9a-f]{40}' "$1" | cut -d'#' -f2
|
||||
grep -oE 'commit: [0-9a-f]{40}, repo: [^,}]*/vue-journal-layer\.git' "$1" | grep -oE '[0-9a-f]{40}'
|
||||
} | sort -u
|
||||
}
|
||||
|
||||
if [[ "${1:-}" == "--self-test" ]]; then
|
||||
lock="$(mktemp)"
|
||||
trap 'rm -f "$lock"' EXIT
|
||||
j=1111111111111111111111111111111111111111
|
||||
s=2222222222222222222222222222222222222222
|
||||
cat >"$lock" <<LOCK
|
||||
vue-journal-layer:
|
||||
specifier: git+https://git.golem15.com/golem15/vue-journal-layer.git#v1.0.0
|
||||
version: git+https://git.golem15.com/golem15/vue-journal-layer.git#$j(abcdef0123456789abcdef0123456789)
|
||||
vue-journal-layer@git+https://git.golem15.com/golem15/vue-journal-layer.git#$j:
|
||||
resolution: {commit: $j, repo: https://git.golem15.com/golem15/vue-journal-layer.git, type: git}
|
||||
vue-seo-layer@git+https://git.golem15.com/golem15/vue-seo-layer.git#$s:
|
||||
resolution: {commit: $s, repo: https://git.golem15.com/golem15/vue-seo-layer.git, type: git}
|
||||
LOCK
|
||||
[[ "$(lock_commits "$lock")" == "$j" ]] || die "self-test: lock_commits gave $(lock_commits "$lock" | tr '\n' ' '), want only $j"
|
||||
echo "check-git-install: self-test ok"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
TAG="${1:-}"
|
||||
[[ -n "$TAG" ]] || die "usage: $0 <tag>"
|
||||
|
||||
@@ -58,30 +89,28 @@ allowBuilds:
|
||||
vue-demi: true
|
||||
YAML
|
||||
|
||||
cat >nuxt.config.ts <<'TS'
|
||||
export default defineNuxtConfig({
|
||||
extends: ['vue-journal-layer'],
|
||||
compatibilityDate: '2025-07-15',
|
||||
site: { url: 'https://acme.test', name: 'Acme Blog' },
|
||||
i18n: {
|
||||
strategy: 'prefix_except_default',
|
||||
defaultLocale: 'en',
|
||||
locales: [
|
||||
{ code: 'en', language: 'en-US' },
|
||||
{ code: 'pl', language: 'pl-PL' },
|
||||
],
|
||||
},
|
||||
})
|
||||
TS
|
||||
|
||||
GIT_TERMINAL_PROMPT=0 pnpm install || die "pnpm install failed"
|
||||
|
||||
# The lockfile must pin the tag's commit, not a branch.
|
||||
LOCK_SHA="$(grep -oE "vue-journal-layer[^[:space:]]*[0-9a-f]{40}|commit: [0-9a-f]{40}" pnpm-lock.yaml | grep -oE '[0-9a-f]{40}' | sort -u)"
|
||||
# The lockfile must pin the tag's commit, not a branch. Only the
|
||||
# vue-journal-layer entries count: the layer's own git dependencies
|
||||
# (vue-seo-layer) are pinned in the same file.
|
||||
LOCK_SHA="$(lock_commits pnpm-lock.yaml)"
|
||||
[[ -n "$LOCK_SHA" ]] || die "pnpm-lock.yaml records no commit for vue-journal-layer"
|
||||
[[ "$(wc -l <<<"$LOCK_SHA")" -eq 1 ]] || die "pnpm-lock.yaml records more than one commit: $LOCK_SHA"
|
||||
[[ "$(wc -l <<<"$LOCK_SHA")" -eq 1 ]] || die "pnpm-lock.yaml records more than one vue-journal-layer commit: $LOCK_SHA"
|
||||
[[ "$LOCK_SHA" == "$TAG_SHA" ]] || die "pnpm-lock.yaml pins $LOCK_SHA, tag $TAG is $TAG_SHA"
|
||||
|
||||
# The scratch app is the layer's playground (its journal options, such as
|
||||
# the search route and one post per category page, and its app.vue with the
|
||||
# search box and the layout trail), which testing/expect-acme.txt is
|
||||
# written against, extending the installed layer instead of '..'.
|
||||
PLAYGROUND=node_modules/vue-journal-layer/.playground
|
||||
[[ -f "$PLAYGROUND/nuxt.config.ts" && -f "$PLAYGROUND/app/app.vue" ]] \
|
||||
|| die "the installed layer has no .playground/nuxt.config.ts and .playground/app/app.vue"
|
||||
sed "s#extends: \['\.\.'\]#extends: ['vue-journal-layer']#" "$PLAYGROUND/nuxt.config.ts" >nuxt.config.ts
|
||||
grep -q "extends: \['vue-journal-layer'\]" nuxt.config.ts || die "the playground's nuxt.config.ts does not extend '..'"
|
||||
mkdir -p app
|
||||
cp "$PLAYGROUND/app/app.vue" app/app.vue
|
||||
|
||||
pnpm exec nuxt build || die "nuxt build failed"
|
||||
|
||||
node node_modules/vue-journal-layer/testing/smoke-ssr.mjs \
|
||||
|
||||
Reference in New Issue
Block a user