Files
ClawSkills/git-hangman-lab/scripts/publish-package

119 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
COMMAND=""
REGISTRY=""
IMAGE=""
TAG=""
PACKAGE_FILE=""
REPO=""
usage() {
echo "Usage:"
echo " publish-package docker <registry> <image> <tag> --proj <repo>"
echo " publish-package nuget <source> <package-file> --proj <repo>"
echo " publish-package pypi <package-file> --proj <repo>"
echo " publish-package npm --proj <repo>"
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 <registry> <image> <tag>"
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; docker logout "$REGISTRY" 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" \
"https://git.hangman-lab.top/api/v1/packages/${OWNER}/container/${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