init push

This commit is contained in:
2026-07-16 22:16:45 +07:00
commit 8b068bdb10
1021 changed files with 332816 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
#!/bin/bash
set -euo pipefail
ENV_FILE="/opt/flight-manager/development/.env"
TEMPLATE="/opt/flight-manager/development/config.template.json"
OUTPUT="/opt/flight-manager/development/config.generated.json"
DOCKER_COMPOSE_PATH="/opt/stacks/..."
echo "[deploy] Secrets changed, reloading..."
# Load new secrets
set -a; source "$ENV_FILE"; set +a
# Validate all required vars are present
REQUIRED_VARS=$(grep -o '\${[A-Z0-9_]\+}' "$TEMPLATE" | tr -d '${}' | sort -u)
MISSING=()
for var in $REQUIRED_VARS; do
[ -z "${!var+set}" ] && MISSING+=("$var")
done
if [ ${#MISSING[@]} -gt 0 ]; then
echo "[deploy] ERROR: Missing variables: ${MISSING[*]}"
exit 1
fi
# Render config.generated.json
VARS=$(printf '${%s} ' $REQUIRED_VARS)
envsubst "$VARS" < "$TEMPLATE" > "$OUTPUT"
# Validate JSON
if ! jq empty "$OUTPUT" 2>/dev/null; then
echo "[deploy] ERROR: Generated config is not valid JSON"
rm -f "$OUTPUT"
exit 1
fi
echo "[deploy] Config generated at $OUTPUT"
# Restart docker compose
docker compose -f "$DOCKER_COMPOSE_PATH" restart
echo "[deploy] Done."

112
scripts/inject-secrets.sh Normal file
View File

@@ -0,0 +1,112 @@
#!/bin/bash
set -euo pipefail
# Usage:
# ./scripts/inject-secrets.sh local
# ./scripts/inject-secrets.sh staging
# ./scripts/inject-secrets.sh prod
ENV=${1:-local}
OUTPUT_PATH=${2:-/tmp/config.generated.json}
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
TEMPLATE="$REPO_ROOT/config/$ENV/config.json"
echo "==> Environment: $ENV"
echo "==> Template: $TEMPLATE"
echo "==> Output: $OUTPUT_PATH"
# ■■ Validate template exists ■■
if [ ! -f "$TEMPLATE" ]; then
echo "ERROR: Config template not found at $TEMPLATE"
exit 1
fi
# ■■ Load secrets ■■
if [ "$ENV" = "local" ]; then
ENV_FILE="$REPO_ROOT/.env.local"
if [ ! -f "$ENV_FILE" ]; then
echo "ERROR: .env.local not found. Copy .env.local.example and fill in your values."
exit 1
fi
echo "==> Loading local env from $ENV_FILE"
set -a
source "$ENV_FILE"
set +a
else
echo "==> Fetching secrets from AWS Secrets Manager"
AWS_ARGS=(
secretsmanager get-secret-value
--secret-id "$ENV/fm-be/config"
--query SecretString
--output text
)
if [ -n "${AWS_ENDPOINT_URL:-}" ]; then
echo "==> Using custom AWS endpoint: $AWS_ENDPOINT_URL"
AWS_ARGS+=(--endpoint-url "$AWS_ENDPOINT_URL")
fi
SECRET=$(aws "${AWS_ARGS[@]}")
eval "$(echo "$SECRET" | jq -r 'to_entries | .[] | "export \(.key)=\(.value)"')"
fi
# ■■ Extract required variables from template ■■
REQUIRED_VARS=$(grep -o '\${[A-Z0-9_]\+}' "$TEMPLATE" | tr -d '${}' | sort -u)
echo "==> Validating required variables..."
MISSING=()
EMPTY=()
for var in $REQUIRED_VARS; do
if [ -z "${!var+set}" ]; then
MISSING+=("$var")
elif [ -z "${!var}" ]; then
EMPTY+=("$var")
fi
done
if [ ${#MISSING[@]} -gt 0 ]; then
echo "ERROR: The following variables are not set at all:"
for v in "${MISSING[@]}"; do
echo " - $v"
done
exit 1
fi
if [ ${#EMPTY[@]} -gt 0 ]; then
echo "WARNING: The following variables are set but empty:"
for v in "${EMPTY[@]}"; do
echo " - $v"
done
fi
echo "==> All required variables are set"
# ■■ Safe substitution (only replace known vars) ■■
VARS=$(printf '${%s} ' $REQUIRED_VARS)
envsubst "$VARS" < "$TEMPLATE" > "$OUTPUT_PATH"
echo "==> Config generated at $OUTPUT_PATH"
# ■■ Validate JSON ■■
if ! jq empty "$OUTPUT_PATH" 2>/dev/null; then
echo "ERROR: Generated config is not valid JSON"
echo "==> jq diagnostics:"
jq empty "$OUTPUT_PATH" || true
rm -f "$OUTPUT_PATH"
exit 1
fi
echo "==> JSON validation passed"
echo "==> Done."