Archived
57 lines
2.1 KiB
Bash
Executable File
57 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
export PATH
|
|
|
|
log() {
|
|
printf '%s\n' "$*" >&2
|
|
}
|
|
|
|
die() {
|
|
log "pi-web Docker dev dependencies: $*"
|
|
exit 1
|
|
}
|
|
|
|
workspace_dir=${PI_WEB_DEV_WORKSPACE_DIR:-/workspace}
|
|
seed_dir=${PI_WEB_DEV_DEPENDENCY_SEED_DIR:-/opt/pi-web-dev-dependencies}
|
|
target_dir=$workspace_dir/node_modules
|
|
generation_file=$seed_dir/generation
|
|
marker_file=$target_dir/.pi-web-dev-dependency-generation
|
|
|
|
# A direct Compose invocation may skip the image rebuild. Fail closed rather
|
|
# than copying dependencies for different checkout manifests.
|
|
for manifest in package.json package-lock.json; do
|
|
source_manifest=$workspace_dir/$manifest
|
|
image_manifest=$seed_dir/$manifest
|
|
[ -f "$source_manifest" ] || die "checkout is missing $source_manifest"
|
|
[ -f "$image_manifest" ] || die "development image is missing $image_manifest"
|
|
if ! cmp -s "$source_manifest" "$image_manifest"; then
|
|
die "development image dependencies do not match the checkout; run ./docker/pi-web-docker --dev start or update to rebuild the image"
|
|
fi
|
|
done
|
|
|
|
[ -d "$seed_dir/node_modules" ] || die "development image is missing the dependency seed at $seed_dir/node_modules"
|
|
[ -s "$generation_file" ] || die "development image is missing its dependency generation at $generation_file"
|
|
[ ! -L "$target_dir" ] || die "refusing to synchronize through the node_modules symlink at $target_dir"
|
|
mkdir -p "$target_dir"
|
|
|
|
expected_generation=$(cat "$generation_file")
|
|
current_generation=
|
|
if [ -f "$marker_file" ]; then
|
|
current_generation=$(cat "$marker_file")
|
|
fi
|
|
|
|
if [ "$current_generation" = "$expected_generation" ]; then
|
|
log "PI WEB Docker dev dependencies are current."
|
|
exit 0
|
|
fi
|
|
|
|
log "Synchronizing PI WEB Docker dev dependencies from the rebuilt image ..."
|
|
# Write the marker only after a complete copy so a failed init retries next time.
|
|
find "$target_dir" -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +
|
|
cp -a "$seed_dir/node_modules/." "$target_dir/"
|
|
printf '%s\n' "$expected_generation" >"$marker_file"
|
|
chmod 0666 "$marker_file"
|
|
log "PI WEB Docker dev dependencies synchronized."
|