chore: add safe republish workflow
This commit is contained in:
Executable
+69
@@ -0,0 +1,69 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
script_dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
|
||||
cd "${script_dir}"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [--build]" >&2
|
||||
}
|
||||
|
||||
build_image=false
|
||||
case "${1:-}" in
|
||||
"")
|
||||
;;
|
||||
--build)
|
||||
build_image=true
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$#" -gt 1 ]; then
|
||||
usage
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ -f "docker-compose.yml" ]; then
|
||||
compose_file="docker-compose.yml"
|
||||
elif [ -f "compose.yaml" ]; then
|
||||
compose_file="compose.yaml"
|
||||
else
|
||||
echo "No supported Compose file found." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
compose_backup="${compose_file}.bak"
|
||||
|
||||
if [ ! -f "${compose_backup}" ]; then
|
||||
echo "Missing deployment Compose backup: ${compose_backup}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! cmp -s "${compose_backup}" "${compose_file}"; then
|
||||
echo "${compose_file} differs from ${compose_backup}; refusing to republish." >&2
|
||||
diff -u "${compose_backup}" "${compose_file}" >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Restore the deployment-specific Compose file even if a Git operation fails.
|
||||
restore_compose() {
|
||||
cp "${compose_backup}" "${compose_file}"
|
||||
}
|
||||
trap restore_compose EXIT
|
||||
|
||||
git restore -- "${compose_file}"
|
||||
git fetch --all --prune
|
||||
git pull --ff-only
|
||||
|
||||
restore_compose
|
||||
trap - EXIT
|
||||
|
||||
docker compose down -v
|
||||
if [ "${build_image}" = true ]; then
|
||||
docker compose up -d --build
|
||||
else
|
||||
docker compose up -d
|
||||
fi
|
||||
Reference in New Issue
Block a user