Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/sxzz/midden. Archive posts and media across platforms, with tenant accounts and Telegram access
Something went wrong. Try again.
Shell
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#!/usr/bin/env bash# Install outside the checkout: cp scripts/deploy-latest.sh ~/deploy-midden.shset -euo pipefailumask 077repo_dir="${MIDDEN_DIR:-$HOME/midden}"mode="${1:-deploy}"if [[ "$mode" != deploy && "$mode" != --check ]]; then echo "Usage: $0 [--check] (MIDDEN_DIR defaults to ~/midden)" >&2 exit 2ficd "$repo_dir"mkdir -p .localif ! mkdir .local/deploy.lock 2>/dev/null; then echo 'Another deployment holds .local/deploy.lock.' >&2 exit 1fiphase='checking release'trap 'rmdir .local/deploy.lock' EXITtrap 'echo "Deployment failed while $phase. Inspect the error and database backup before retrying." >&2' ERRif [[ -n "$(git status --porcelain --untracked-files=normal)" ]]; then echo 'The repository has local changes. Commit or move them before deployment.' >&2 exit 1fi
docker pull ghcr.io/sxzz/midden-core:latest </dev/nullrevision=$(docker image inspect ghcr.io/sxzz/midden-core:latest --format '{{index .Config.Labels "org.opencontainers.image.revision"}}')if [[ ! "$revision" =~ ^[a-f0-9]{40}$ ]]; then echo 'Latest core image has no valid source revision.' >&2 exit 1fiexport CORE_IMAGE="ghcr.io/sxzz/midden-core:sha-$revision"export ADAPTER_IMAGE="ghcr.io/sxzz/midden-adapter:sha-$revision"# The latest tags are published independently. Resolve both immutable tags before stopping anything.for image in "$CORE_IMAGE" "$ADAPTER_IMAGE"; do docker pull "$image" </dev/null actual=$(docker image inspect "$image" --format '{{index .Config.Labels "org.opencontainers.image.revision"}}') if [[ "$actual" != "$revision" ]]; then echo "Image revision mismatch: $image" >&2 exit 1 fidonegit fetch origin main </dev/nullgit cat-file -e "$revision^{commit}"if ! git merge-base --is-ancestor "$revision" origin/main; then echo 'Published revision is not in origin/main.' >&2 exit 1fiif [[ "$mode" == --check ]]; then echo "Ready to deploy $revision (both images available). No services changed." exit 0fi
phase='checking deployment configuration'git checkout --detach "$revision"# Use the deployment implementation shipped with the selected release.source ./scripts/deploy-common.shdeploy_revision "${revision}"