82 lines
2.3 KiB
Bash
Executable File
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}"
|