Files
Synapsis/scripts/docker-publish.sh
T
2026-03-07 21:55:55 -08:00

82 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
set -eu
IMAGE_REPO="${IMAGE_REPO:-ghcr.io/gnosyslabs/synapsis}"
PACKAGE_API="${PACKAGE_API:-/orgs/GnosysLabs/packages/container/synapsis/versions?per_page=100}"
BUILDER="${BUILDER:-colima}"
PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}"
DATE_PREFIX="${DATE_PREFIX:-$(date -u +%Y.%m.%d)}"
SOURCE_REPO="${SOURCE_REPO:-https://github.com/GnosysLabs/Synapsis}"
require_command() {
if ! command -v "$1" >/dev/null 2>&1; then
echo "❌ Required command not found: $1" >&2
exit 1
fi
}
require_command docker
require_command gh
require_command git
CURRENT_SHA="$(git rev-parse --short HEAD)"
CURRENT_FULL_SHA="$(git rev-parse HEAD)"
BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
existing_tags="$(
gh api "${PACKAGE_API}" --paginate --jq '.[].metadata.container.tags[]?' 2>/dev/null || true
)"
max_build=0
for tag in ${existing_tags}; do
case "${tag}" in
"${DATE_PREFIX}".*)
build_number="${tag##${DATE_PREFIX}.}"
case "${build_number}" in
''|*[!0-9]*)
;;
*)
if [ "${build_number}" -gt "${max_build}" ]; then
max_build="${build_number}"
fi
;;
esac
;;
esac
done
next_build=$((max_build + 1))
APP_VERSION="${DATE_PREFIX}.${next_build}"
GITHUB_URL="${SOURCE_REPO}/commit/${CURRENT_FULL_SHA}"
echo "========================================"
echo " Synapsis Docker Publish"
echo "========================================"
echo " Version: ${APP_VERSION}"
echo " Commit: ${CURRENT_SHA}"
echo " Image: ${IMAGE_REPO}"
echo "========================================"
docker buildx build \
--builder "${BUILDER}" \
--platform "${PLATFORMS}" \
--build-arg "APP_VERSION=${APP_VERSION}" \
--build-arg "APP_COMMIT=${CURRENT_FULL_SHA}" \
--build-arg "APP_BUILD_DATE=${BUILD_DATE}" \
--build-arg "APP_GITHUB_URL=${GITHUB_URL}" \
--build-arg "APP_IMAGE_REPO=${IMAGE_REPO}" \
--build-arg "APP_SOURCE_REPO=${SOURCE_REPO}" \
-f docker/Dockerfile \
-t "${IMAGE_REPO}:latest" \
-t "${IMAGE_REPO}:${APP_VERSION}" \
-t "${IMAGE_REPO}:${CURRENT_SHA}" \
--push \
.
echo ""
echo "✅ Published:"
echo " ${IMAGE_REPO}:latest"
echo " ${IMAGE_REPO}:${APP_VERSION}"
echo " ${IMAGE_REPO}:${CURRENT_SHA}"