#!/usr/bin/env bash set -euo pipefail COMMAND="" REGISTRY="" IMAGE="" TAG="" PACKAGE_FILE="" REPO="" usage() { echo "Usage:" echo " publish-package docker --proj " echo " publish-package nuget --proj " echo " publish-package pypi --proj " echo " publish-package npm --proj " exit 1 } while [[ $# -gt 0 ]]; do case $1 in docker|nuget|pypi|npm) COMMAND="$1" shift ;; --proj) REPO="$2" shift 2 ;; *) if [[ -z "$COMMAND" ]]; then usage fi case $COMMAND in docker) [[ -z "$REGISTRY" ]] && REGISTRY="$1" && shift && continue [[ -z "$IMAGE" ]] && IMAGE="$1" && shift && continue [[ -z "$TAG" ]] && TAG="$1" && shift && continue ;; nuget) [[ -z "$SOURCE" ]] && SOURCE="$1" && shift && continue [[ -z "$PACKAGE_FILE" ]] && PACKAGE_FILE="$1" && shift && continue ;; pypi) [[ -z "$PACKAGE_FILE" ]] && PACKAGE_FILE="$1" && shift && continue ;; esac shift ;; esac done if [[ -z "$COMMAND" ]] || [[ -z "$REPO" ]]; then usage fi do_docker() { if [[ -z "$REGISTRY" ]] || [[ -z "$IMAGE" ]] || [[ -z "$TAG" ]]; then echo "Error: docker requires " exit 1 fi OWNER=$(ego-mgr get default-username) if [[ -z "$OWNER" ]]; then echo "Error: cannot get username from ego-mgr" exit 1 fi KEY=$(python3 -c "import uuid; print(uuid.uuid4())") LOCKFILE="$HOME/.openclaw/.docker" lock-mgr acquire "$LOCKFILE" "$KEY" trap 'lock-mgr release "$LOCKFILE" "$KEY" 2>/dev/null || true' EXIT echo "Logging in to $REGISTRY..." docker login "$REGISTRY" -u "$OWNER" -p "$(secret-mgr get-secret --key git)" 2>/dev/null FULL_IMAGE="${REGISTRY}/${OWNER}/${IMAGE}:${TAG}" echo "Building: $FULL_IMAGE" cd "$REPO" docker build -t "$FULL_IMAGE" . echo "Pushing: $FULL_IMAGE" docker push "$FULL_IMAGE" # Link package to repository TOKEN=$(secret-mgr get-secret --key git-access-token 2>/dev/null || secret-mgr get-secret --key git) REPO_NAME=$(basename "$REPO") curl -s -X POST \ -H "Authorization: token $TOKEN" \ -H "Content-Type: application/json" \ -d "{\"repo_name\": \"$REPO_NAME\"}" \ "https://git.hangman-lab.top/api/v1/packages/${OWNER}/docker/${IMAGE}/-/link/${REPO_NAME}" || true lock-mgr release "$LOCKFILE" "$KEY" echo "Done: $FULL_IMAGE" } do_nuget() { echo "publish-package nuget: not yet implemented" exit 1 } do_pypi() { echo "publish-package pypi: not yet implemented" exit 1 } do_npm() { echo "publish-package npm: not yet implemented" exit 1 } case "$COMMAND" in docker) do_docker ;; nuget) do_nuget ;; pypi) do_pypi ;; npm) do_npm ;; esac