release: 0.2.2
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ENV_FILE="${ENV_FILE:-/etc/skd/env}"
|
||||
UPDATE_ENV_FILE="${UPDATE_ENV_FILE:-/etc/skd/update.env}"
|
||||
ADDON_ENV_FILE="${ADDON_ENV_FILE:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/update-addon.env}"
|
||||
PROFILE="${PROFILE:-dev}"
|
||||
SERVICE_URL="${SKD_UPDATE_SERVICE_URL:-}"
|
||||
PROJECT_ID="${SKD_UPDATE_PROJECT_ID:-}"
|
||||
TOKEN_FILE="${SKD_UPDATE_TOKEN_FILE:-}"
|
||||
@ -16,13 +16,13 @@ usage() {
|
||||
Usage: enroll_update_service.sh --enroll-token TOKEN [options]
|
||||
|
||||
Options:
|
||||
--service-url URL Update-Service URL (default: SKD_UPDATE_SERVICE_URL)
|
||||
--project-id ID Project ID (default: SKD_UPDATE_PROJECT_ID)
|
||||
--service-url URL Update-Service URL (overrides env)
|
||||
--project-id ID Project ID (overrides env)
|
||||
--client-id ID Client ID (default: hostname)
|
||||
--software-id ID Software ID (default: safe-kiddo)
|
||||
--output PATH Write token to PATH (default: SKD_UPDATE_TOKEN_FILE if set)
|
||||
--env-file PATH Read core env file (default: /etc/skd/env)
|
||||
--update-env PATH Read update env file (default: /etc/skd/update.env)
|
||||
--output PATH Write token to PATH (overrides env)
|
||||
--profile NAME Environment profile: dev|stage|prod (default: dev)
|
||||
--addon-env PATH Addon env file (default: ./update-addon.env)
|
||||
-h, --help Show this help
|
||||
EOF
|
||||
}
|
||||
@ -35,8 +35,8 @@ while [[ $# -gt 0 ]]; do
|
||||
--software-id) SOFTWARE_ID="$2"; shift 2 ;;
|
||||
--enroll-token) ENROLL_TOKEN="$2"; shift 2 ;;
|
||||
--output) OUTPUT_PATH="$2"; shift 2 ;;
|
||||
--env-file) ENV_FILE="$2"; shift 2 ;;
|
||||
--update-env) UPDATE_ENV_FILE="$2"; shift 2 ;;
|
||||
--profile) PROFILE="$2"; shift 2 ;;
|
||||
--addon-env) ADDON_ENV_FILE="$2"; shift 2 ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
*) echo "Unknown option: $1" >&2; usage; exit 1 ;;
|
||||
esac
|
||||
@ -44,16 +44,20 @@ done
|
||||
|
||||
read_env_value() {
|
||||
local key="$1"
|
||||
python3 - <<'PY' "${ENV_FILE}" "${UPDATE_ENV_FILE}" "${key}"
|
||||
python3 - <<'PY' "${ADDON_ENV_FILE}" "${key}"
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
env_paths = [Path(sys.argv[1]), Path(sys.argv[2])]
|
||||
key = sys.argv[3]
|
||||
env_paths = [Path(sys.argv[1])]
|
||||
key = sys.argv[2]
|
||||
for path in env_paths:
|
||||
if not path.exists():
|
||||
continue
|
||||
for raw in path.read_text(encoding="utf-8").splitlines():
|
||||
try:
|
||||
lines = path.read_text(encoding="utf-8").splitlines()
|
||||
except OSError:
|
||||
continue
|
||||
for raw in lines:
|
||||
line = raw.strip()
|
||||
if not line or line.startswith("#"):
|
||||
continue
|
||||
@ -67,9 +71,10 @@ for path in env_paths:
|
||||
PY
|
||||
}
|
||||
|
||||
SERVICE_URL="${SERVICE_URL:-$(read_env_value SKD_UPDATE_SERVICE_URL)}"
|
||||
PROJECT_ID="${PROJECT_ID:-$(read_env_value SKD_UPDATE_PROJECT_ID)}"
|
||||
TOKEN_FILE="${OUTPUT_PATH:-${TOKEN_FILE:-$(read_env_value SKD_UPDATE_TOKEN_FILE)}}"
|
||||
PROFILE_UPPER="$(printf '%s' "${PROFILE}" | tr '[:lower:]' '[:upper:]')"
|
||||
SERVICE_URL="${SERVICE_URL:-$(read_env_value "${PROFILE_UPPER}_UPDATE_SERVICE_URL")}"
|
||||
PROJECT_ID="${PROJECT_ID:-$(read_env_value "${PROFILE_UPPER}_UPDATE_PROJECT_ID")}"
|
||||
TOKEN_FILE="${OUTPUT_PATH:-${TOKEN_FILE:-$(read_env_value "${PROFILE_UPPER}_UPDATE_TOKEN_FILE")}}"
|
||||
CLIENT_ID="${CLIENT_ID:-$(hostname)}"
|
||||
|
||||
if [[ -z "${SERVICE_URL}" || -z "${PROJECT_ID}" ]]; then
|
||||
|
||||
@ -2,41 +2,49 @@
|
||||
set -euo pipefail
|
||||
|
||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
ENV_FILE="${ENV_FILE:-/etc/skd/env}"
|
||||
UPDATE_ENV_FILE="${UPDATE_ENV_FILE:-/etc/skd/update.env}"
|
||||
ADDON_ENV_FILE="${ADDON_ENV_FILE:-${PROJECT_ROOT}/update-addon.env}"
|
||||
PROFILE="${PROFILE:-dev}"
|
||||
|
||||
SERVICE_URL="${SKD_UPDATE_SERVICE_URL:-}"
|
||||
PROJECT_ID="${SKD_UPDATE_PROJECT_ID:-}"
|
||||
UPLOAD_TOKEN="${SKD_UPDATE_UPLOAD_TOKEN:-}"
|
||||
UPLOAD_TOKEN_FILE="${SKD_UPDATE_UPLOAD_TOKEN_FILE:-${PROJECT_ROOT}/upload.token}"
|
||||
SERVICE_URL=""
|
||||
PROJECT_ID=""
|
||||
UPLOAD_TOKEN=""
|
||||
UPLOAD_TOKEN_FILE=""
|
||||
VERSION=""
|
||||
ARTIFACT_PATH=""
|
||||
VERBOSE="${VERBOSE:-0}"
|
||||
|
||||
log() {
|
||||
if [[ "${VERBOSE}" == "1" ]]; then
|
||||
echo "[upload_release] $*"
|
||||
fi
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage: upload_release.sh [options]
|
||||
|
||||
Options:
|
||||
--service-url URL Update-Service URL (default: SKD_UPDATE_SERVICE_URL)
|
||||
--project-id ID Project ID (default: SKD_UPDATE_PROJECT_ID)
|
||||
--token TOKEN Upload token (default: SKD_UPDATE_UPLOAD_TOKEN)
|
||||
--token-file PATH Upload token file (default: ./upload.token or SKD_UPDATE_UPLOAD_TOKEN_FILE)
|
||||
--service-url URL Update-Service URL (overrides env)
|
||||
--project-id ID Project ID (overrides env)
|
||||
--token TOKEN Upload token (overrides env)
|
||||
--token-file PATH Upload token file (overrides env)
|
||||
--profile NAME Environment profile: dev|stage|prod (default: dev)
|
||||
--addon-env PATH Addon env file (default: ./update-addon.env)
|
||||
--verbose Enable debug logging
|
||||
--artifact PATH Use existing tar.gz artifact instead of building
|
||||
--version VERSION Override VERSION file
|
||||
--env-file PATH Read core env file (default: /etc/skd/env)
|
||||
--update-env PATH Read update env file (default: /etc/skd/update.env)
|
||||
-h, --help Show this help
|
||||
EOF
|
||||
}
|
||||
|
||||
read_env_value() {
|
||||
local key="$1"
|
||||
python3 - <<'PY' "${ENV_FILE}" "${UPDATE_ENV_FILE}" "${key}"
|
||||
python3 - <<'PY' "${ADDON_ENV_FILE}" "${key}"
|
||||
from pathlib import Path
|
||||
import sys
|
||||
|
||||
env_paths = [Path(sys.argv[1]), Path(sys.argv[2])]
|
||||
key = sys.argv[3]
|
||||
env_paths = [Path(sys.argv[1])]
|
||||
key = sys.argv[2]
|
||||
for path in env_paths:
|
||||
if not path.exists():
|
||||
continue
|
||||
@ -64,21 +72,29 @@ while [[ $# -gt 0 ]]; do
|
||||
--project-id) PROJECT_ID="$2"; shift 2 ;;
|
||||
--token) UPLOAD_TOKEN="$2"; shift 2 ;;
|
||||
--token-file) UPLOAD_TOKEN_FILE="$2"; shift 2 ;;
|
||||
--profile) PROFILE="$2"; shift 2 ;;
|
||||
--addon-env) ADDON_ENV_FILE="$2"; shift 2 ;;
|
||||
--verbose) VERBOSE="1"; shift 1 ;;
|
||||
--artifact) ARTIFACT_PATH="$2"; shift 2 ;;
|
||||
--version) VERSION="$2"; shift 2 ;;
|
||||
--env-file) ENV_FILE="$2"; shift 2 ;;
|
||||
--update-env) UPDATE_ENV_FILE="$2"; shift 2 ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
*) echo "Unknown option: $1" >&2; usage; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
SERVICE_URL="${SERVICE_URL:-$(read_env_value SKD_UPDATE_SERVICE_URL)}"
|
||||
PROJECT_ID="${PROJECT_ID:-$(read_env_value SKD_UPDATE_PROJECT_ID)}"
|
||||
UPLOAD_TOKEN="${UPLOAD_TOKEN:-$(read_env_value SKD_UPDATE_UPLOAD_TOKEN)}"
|
||||
UPLOAD_TOKEN_FILE="${UPLOAD_TOKEN_FILE:-$(read_env_value SKD_UPDATE_UPLOAD_TOKEN_FILE)}"
|
||||
PROFILE_UPPER="$(printf '%s' "${PROFILE}" | tr '[:lower:]' '[:upper:]')"
|
||||
SERVICE_URL="${SERVICE_URL:-$(read_env_value "${PROFILE_UPPER}_UPDATE_SERVICE_URL")}"
|
||||
PROJECT_ID="${PROJECT_ID:-$(read_env_value "${PROFILE_UPPER}_UPDATE_PROJECT_ID")}"
|
||||
UPLOAD_TOKEN="${UPLOAD_TOKEN:-$(read_env_value "${PROFILE_UPPER}_UPDATE_UPLOAD_TOKEN")}"
|
||||
UPLOAD_TOKEN_FILE="${UPLOAD_TOKEN_FILE:-$(read_env_value "${PROFILE_UPPER}_UPDATE_UPLOAD_TOKEN_FILE")}"
|
||||
VERSION="${VERSION:-$(cat "${PROJECT_ROOT}/VERSION" 2>/dev/null || true)}"
|
||||
|
||||
log "Profile: ${PROFILE}"
|
||||
log "Addon env: ${ADDON_ENV_FILE}"
|
||||
log "Service URL: ${SERVICE_URL}"
|
||||
log "Project ID: ${PROJECT_ID}"
|
||||
log "Version: ${VERSION}"
|
||||
|
||||
if [[ -z "${SERVICE_URL}" || -z "${PROJECT_ID}" ]]; then
|
||||
echo "Missing service URL or project ID." >&2
|
||||
echo "Set SKD_UPDATE_SERVICE_URL and SKD_UPDATE_PROJECT_ID or pass --service-url/--project-id." >&2
|
||||
@ -94,12 +110,17 @@ if [[ -z "${UPLOAD_TOKEN}" && -n "${UPLOAD_TOKEN_FILE}" && -f "${UPLOAD_TOKEN_FI
|
||||
UPLOAD_TOKEN="$(cat "${UPLOAD_TOKEN_FILE}" | tr -d '\n')"
|
||||
fi
|
||||
|
||||
if [[ -n "${UPLOAD_TOKEN_FILE}" ]]; then
|
||||
log "Upload token file: ${UPLOAD_TOKEN_FILE}"
|
||||
fi
|
||||
|
||||
if [[ -z "${UPLOAD_TOKEN}" ]]; then
|
||||
echo "Missing upload token. Provide --token or SKD_UPDATE_UPLOAD_TOKEN[_FILE]." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${ARTIFACT_PATH}" ]]; then
|
||||
log "Building artifact..."
|
||||
ARTIFACT_PATH="$(mktemp "/tmp/sk_release_${VERSION}.XXXXXX.tar.gz")"
|
||||
tar czf "${ARTIFACT_PATH}" \
|
||||
--exclude '.git' \
|
||||
@ -114,13 +135,26 @@ if [[ ! -f "${ARTIFACT_PATH}" ]]; then
|
||||
fi
|
||||
|
||||
SHA256="$(sha256sum "${ARTIFACT_PATH}" | awk '{print $1}')"
|
||||
log "Artifact: ${ARTIFACT_PATH}"
|
||||
log "SHA256: ${SHA256}"
|
||||
|
||||
UPLOAD_URL="${SERVICE_URL%/}/v1/projects/${PROJECT_ID}/releases"
|
||||
|
||||
curl -fsS -X POST "${UPLOAD_URL}" \
|
||||
log "Upload URL: ${UPLOAD_URL}"
|
||||
response_file="$(mktemp)"
|
||||
trap 'rm -f "${response_file}"' EXIT
|
||||
|
||||
http_code=$(curl -sS -o "${response_file}" -w '%{http_code}' \
|
||||
-X POST "${UPLOAD_URL}" \
|
||||
-H "Authorization: Bearer ${UPLOAD_TOKEN}" \
|
||||
-F "version=${VERSION}" \
|
||||
-F "sha256=${SHA256}" \
|
||||
-F "artifact=@${ARTIFACT_PATH}"
|
||||
-F "artifact=@${ARTIFACT_PATH}")
|
||||
|
||||
if [[ "${http_code}" != "201" && "${http_code}" != "200" ]]; then
|
||||
echo "Upload failed (HTTP ${http_code}). Response:" >&2
|
||||
cat "${response_file}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Upload finished: version=${VERSION} sha256=${SHA256}"
|
||||
|
||||
Reference in New Issue
Block a user