Builds now happen wherever the operator likes, so naming the destination after building described the old arrangement rather than the current one. What the push and deploy commands reach is the machine that serves pkgs.omarchy.org and holds the signing key: the repository host. It also runs the scheduled builds, which is why the trigger in omarchy-pkgs release points at the same place. Resolution moves into helpers/host-helpers.sh, which all three commands now share instead of repeating: --host, then OMARCHY_REPO_HOST, then .repo-host. OMARCHY_BUILD_HOST and .build-host keep working as fallbacks, so existing environments and checkouts are unaffected. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
147 lines
3.8 KiB
Bash
Executable File
147 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Meta command for Omarchy repository management
|
|
# Usage: ./bin/repo <command> [options]
|
|
|
|
set -e
|
|
|
|
# Get the directory of this script
|
|
SCRIPT_DIR=$(realpath "${BASH_SOURCE[0]%/*}")
|
|
BUILD_ROOT=$(realpath "$SCRIPT_DIR/..")
|
|
|
|
# Source common functions
|
|
source "$BUILD_ROOT/helpers/message-helpers.sh"
|
|
source "$BUILD_ROOT/helpers/paths.sh"
|
|
|
|
# Extract mirror from arguments for log naming (before args are shifted)
|
|
LOG_MIRROR=""
|
|
for ((i=1; i<=$#; i++)); do
|
|
if [[ "${!i}" == "--mirror" ]]; then
|
|
next=$((i+1))
|
|
LOG_MIRROR="${!next}"
|
|
break
|
|
fi
|
|
done
|
|
|
|
# Setup logging with timestamps
|
|
mkdir -p "$LOG_DIR"
|
|
|
|
# Rotate logs first - keep only the 10 most recent
|
|
if [[ -d "$LOG_DIR" ]]; then
|
|
cd "$LOG_DIR"
|
|
# List logs by modification time (newest first), skip first 9, delete the rest
|
|
# This way after we create the new log, we'll have exactly 10
|
|
ls -t repo_*.log 2>/dev/null | tail -n +10 | xargs -r rm -f
|
|
cd "$BUILD_ROOT"
|
|
fi
|
|
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
if [[ -n "$LOG_MIRROR" ]]; then
|
|
LOG_FILE="$LOG_DIR/repo_${LOG_MIRROR}_${TIMESTAMP}.log"
|
|
else
|
|
LOG_FILE="$LOG_DIR/repo_${TIMESTAMP}.log"
|
|
fi
|
|
export LOG_FILE
|
|
export OMARCHY_LOG_FILE="$LOG_FILE"
|
|
|
|
# Show usage
|
|
show_usage() {
|
|
echo "Usage: $0 <command> [options]"
|
|
echo ""
|
|
echo "Commands:"
|
|
echo " release Run complete workflow: build → sign → promote → clean → update → sync"
|
|
echo " build Build packages (unsigned)"
|
|
echo " sign Sign all packages in build-output"
|
|
echo " promote Promote build to production (build-output → pkgs.omarchy.org)"
|
|
echo " update Update repository database"
|
|
echo " clean Clean old package versions"
|
|
echo " migrate Migrate edge packages into stable (no overwrite), then clean + update"
|
|
echo " list List source package metadata (use --repo for published repo)"
|
|
echo " remove Remove a specific package"
|
|
echo " sync Sync repository to remote"
|
|
echo " push Upload local builds to the repository host and publish them there"
|
|
echo " deploy Build locally, then push: one command from a build machine"
|
|
echo ""
|
|
echo "Typical workflows:"
|
|
echo " $0 release # Complete release workflow"
|
|
echo ""
|
|
echo " $0 build # Manual step-by-step:"
|
|
echo " $0 sign"
|
|
echo " $0 promote"
|
|
echo " $0 clean"
|
|
echo " $0 update"
|
|
echo " $0 sync pkgs.omarchy.org/x86_64"
|
|
echo ""
|
|
echo "For command-specific help, use:"
|
|
echo " $0 <command> --help"
|
|
exit 0
|
|
}
|
|
|
|
# Check if no command provided
|
|
if [[ $# -eq 0 ]]; then
|
|
show_usage
|
|
fi
|
|
|
|
# Get command and shift arguments
|
|
COMMAND="$1"
|
|
shift
|
|
|
|
# Route to appropriate script with logging
|
|
case $COMMAND in
|
|
release)
|
|
"$SCRIPT_DIR/release" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
build)
|
|
"$SCRIPT_DIR/build" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
sign)
|
|
"$SCRIPT_DIR/sign" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
promote)
|
|
"$SCRIPT_DIR/promote-build" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
update)
|
|
"$SCRIPT_DIR/update-repo" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
clean)
|
|
"$SCRIPT_DIR/clean-repo" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
migrate)
|
|
"$SCRIPT_DIR/migrate-edge-to-stable" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
list)
|
|
"$SCRIPT_DIR/list-packages" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
remove)
|
|
"$SCRIPT_DIR/remove-package" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
sync)
|
|
"$SCRIPT_DIR/sync-repo" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
push)
|
|
"$SCRIPT_DIR/push-build" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
deploy)
|
|
"$SCRIPT_DIR/deploy" "$@" 2>&1 | tee "$LOG_FILE"
|
|
exit ${PIPESTATUS[0]}
|
|
;;
|
|
-h | --help | help)
|
|
show_usage
|
|
;;
|
|
*)
|
|
print_error "Unknown command: $COMMAND"
|
|
echo ""
|
|
show_usage
|
|
;;
|
|
esac
|