Add deployment
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env bash
|
||||
# Builds a self-contained EF Core migration bundle for VigilCareClinicalAPI.
|
||||
# CD (Phase 36 Step 12) runs the same command; this script is for local dry-runs
|
||||
# and for operators who apply schema changes before rolling the API image.
|
||||
#
|
||||
# Usage (from repo root or anywhere):
|
||||
# ./scripts/build-api-migration-bundle.sh
|
||||
# RID=win-x64 ./scripts/build-api-migration-bundle.sh # local Windows test
|
||||
#
|
||||
# Apply against a database (DDL-privileged connection string):
|
||||
# ./artifacts/migrate-api --connection "$PG_CONNECTION_DDL"
|
||||
#
|
||||
# Zero-downtime discipline: every migration must be backwards-compatible with
|
||||
# the previously deployed API image (expand-then-contract). The bundle runs
|
||||
# while old containers are still serving traffic.
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
OUT_DIR="${OUT_DIR:-${ROOT_DIR}/artifacts}"
|
||||
RID="${RID:-linux-x64}"
|
||||
OUTPUT="${OUT_DIR}/migrate-api"
|
||||
|
||||
# Git Bash on Windows often lacks the host PATH; prefer known install locations.
|
||||
if ! command -v dotnet >/dev/null 2>&1; then
|
||||
for candidate in \
|
||||
"/c/Program Files/dotnet/dotnet" \
|
||||
"/mnt/c/Program Files/dotnet/dotnet" \
|
||||
"${HOME}/.dotnet/dotnet"
|
||||
do
|
||||
if [[ -x "${candidate}" ]]; then
|
||||
PATH="$(dirname "${candidate}"):${PATH}"
|
||||
export PATH
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if ! command -v dotnet >/dev/null 2>&1; then
|
||||
echo "dotnet SDK is required (not found on PATH)." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "${OUT_DIR}"
|
||||
|
||||
# Prefer a globally installed dotnet-ef; install 8.0.4 when nothing is present.
|
||||
# A newer global tool is fine — do not downgrade an existing install.
|
||||
if ! dotnet ef --version >/dev/null 2>&1; then
|
||||
echo "Installing dotnet-ef 8.0.4..."
|
||||
dotnet tool install --global dotnet-ef --version 8.0.4
|
||||
export PATH="${PATH}:${HOME}/.dotnet/tools:${USERPROFILE:-}/.dotnet/tools"
|
||||
fi
|
||||
|
||||
echo "Building API migration bundle → ${OUTPUT} (RID=${RID})"
|
||||
dotnet ef migrations bundle \
|
||||
--project "${ROOT_DIR}/VigilCareClinicalAPI" \
|
||||
--startup-project "${ROOT_DIR}/VigilCareClinicalAPI" \
|
||||
--configuration Release \
|
||||
--self-contained -r "${RID}" \
|
||||
--output "${OUTPUT}" \
|
||||
--force
|
||||
|
||||
echo "Bundle ready: ${OUTPUT}"
|
||||
echo "Apply with: ${OUTPUT} --connection \"\$PG_CONNECTION_DDL\""
|
||||
Reference in New Issue
Block a user