92 lines
2.6 KiB
Bash
92 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# shellcheck source=lib.sh
|
|
. "${SCRIPT_DIR}/lib.sh"
|
|
# shellcheck source=repo-status.sh
|
|
. "${SCRIPT_DIR}/repo-status.sh"
|
|
|
|
qipai_release_manifest_json() {
|
|
local repo_dir="$1"
|
|
local release_id="$2"
|
|
local deployed="$3"
|
|
local backend_build admin_build database_migration
|
|
|
|
if [ -f "${repo_dir}/backend/package.json" ]; then
|
|
backend_build="PROJECT_PRESENT_BUILD_NOT_RUN"
|
|
else
|
|
backend_build="SKIPPED_NO_PROJECT"
|
|
fi
|
|
|
|
if [ -f "${repo_dir}/admin/package.json" ]; then
|
|
admin_build="PROJECT_PRESENT_BUILD_NOT_RUN"
|
|
else
|
|
admin_build="SKIPPED_NO_PROJECT"
|
|
fi
|
|
|
|
if find "${repo_dir}/database/migrations" -maxdepth 1 -type f -name '*.sql' | grep -q .; then
|
|
database_migration="PROJECT_PRESENT_MIGRATION_NOT_RUN"
|
|
else
|
|
database_migration="SKIPPED_NO_MIGRATIONS"
|
|
fi
|
|
|
|
cat <<EOF
|
|
{
|
|
"releaseId": "${release_id}",
|
|
"generatedAt": "$(qipai_timestamp)",
|
|
"commit": "$(git -C "$repo_dir" rev-parse HEAD)",
|
|
"branch": "${QIPAI_BRANCH}",
|
|
"backendBuild": "${backend_build}",
|
|
"adminBuild": "${admin_build}",
|
|
"miniappMirror": "RECORDED_SOURCE_COMMIT_ONLY",
|
|
"databaseMigration": "${database_migration}",
|
|
"deployed": ${deployed}
|
|
}
|
|
EOF
|
|
}
|
|
|
|
qipai_deploy_business() {
|
|
qipai_require_root_for_write
|
|
local repo_dir release_id release_dir manifest
|
|
repo_dir="$(qipai_repo_dir)"
|
|
|
|
if [ ! -d "${repo_dir}/.git" ]; then
|
|
qipai_info "cloning repository to ${repo_dir}"
|
|
git clone --branch "$QIPAI_BRANCH" "$QIPAI_REPO_URL" "$repo_dir"
|
|
fi
|
|
|
|
qipai_repo_status
|
|
git -C "$repo_dir" pull --ff-only origin "$QIPAI_BRANCH"
|
|
|
|
release_id="$(date +%Y%m%d%H%M%S)-$(git -C "$repo_dir" rev-parse --short HEAD)"
|
|
release_dir="$(qipai_release_dir)/${release_id}"
|
|
mkdir -p "$release_dir"
|
|
|
|
manifest="${release_dir}/release.json"
|
|
qipai_release_manifest_json "$repo_dir" "$release_id" "false" >"$manifest"
|
|
ln -sfn "$release_dir" "${APP_ROOT}/current-release"
|
|
cp "$manifest" "$(qipai_current_release_file)"
|
|
qipai_pass "release manifest written: $manifest"
|
|
qipai_warn "business build is a safe M00 dry run until backend/admin projects exist"
|
|
}
|
|
|
|
qipai_deploy_business_dry_run() {
|
|
local repo_dir release_id
|
|
repo_dir="${1:-$(pwd)}"
|
|
|
|
if [ ! -d "${repo_dir}/.git" ]; then
|
|
qipai_fail "repository not found: ${repo_dir}"
|
|
return 1
|
|
fi
|
|
|
|
release_id="DRYRUN-$(git -C "$repo_dir" rev-parse --short HEAD)"
|
|
qipai_release_manifest_json "$repo_dir" "$release_id" "false"
|
|
}
|
|
|
|
if [ "${1:-}" = "--run" ]; then
|
|
qipai_deploy_business
|
|
elif [ "${1:-}" = "--dry-run" ]; then
|
|
qipai_deploy_business_dry_run "${2:-$(pwd)}"
|
|
fi
|