xworkmate-app/scripts/ci/platform_preflight.sh

107 lines
2.2 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
platform="${1:?platform is required}"
should_release="${2:-false}"
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
emit_output() {
local key="$1"
local value="$2"
if [[ -n "${GITHUB_OUTPUT:-}" ]]; then
printf '%s=%s\n' "$key" "$value" >> "$GITHUB_OUTPUT"
else
printf '%s=%s\n' "$key" "$value"
fi
}
set_build_state() {
local should_build="$1"
local reason="$2"
emit_output "should_build_platform" "$should_build"
emit_output "skip_reason" "$reason"
if [[ "$should_build" == "true" ]]; then
echo "Preflight passed for $platform."
else
echo "Skipping $platform lane: $reason"
fi
}
fail_release_preflight() {
local reason="$1"
emit_output "should_build_platform" "false"
emit_output "skip_reason" "$reason"
echo "Release preflight failed for $platform: $reason" >&2
exit 1
}
case "$platform" in
linux)
set_build_state "true" ""
;;
windows)
set_build_state "true" ""
;;
macos)
required_vars=(
APPLE_CERT_P12_BASE64
APPLE_CERT_PASSWORD
APPLE_KEYCHAIN_PASSWORD
)
missing=()
for var_name in "${required_vars[@]}"; do
if [[ -z "${!var_name:-}" ]]; then
missing+=("$var_name")
fi
done
if [[ "${#missing[@]}" -gt 0 ]]; then
if [[ "$should_release" == "true" ]]; then
fail_release_preflight "missing macOS signing secrets: ${missing[*]}"
fi
set_build_state "false" "missing macOS signing secrets: ${missing[*]}"
exit 0
fi
set_build_state "true" ""
;;
ios)
if [[ "$should_release" != "true" ]]; then
set_build_state "true" ""
exit 0
fi
required_vars=(
APPLE_CERT_P12_BASE64
APPLE_CERT_PASSWORD
APPLE_PROVISION_PROFILE_BASE64
APPLE_KEYCHAIN_PASSWORD
)
missing=()
for var_name in "${required_vars[@]}"; do
if [[ -z "${!var_name:-}" ]]; then
missing+=("$var_name")
fi
done
if [[ "${#missing[@]}" -gt 0 ]]; then
fail_release_preflight "missing iOS signing secrets: ${missing[*]}"
fi
set_build_state "true" ""
;;
android)
set_build_state "true" ""
;;
*)
echo "Unsupported platform: $platform" >&2
exit 1
;;
esac