ci: add service-scoped calver tagging and automate www deploy
packages/kits - next/required / Setup - Stage (push) Successful in 41s
packages/ssg - next/required / Setup - Stage (push) Successful in 40s
packages/stl - next/required / Setup - Stage (push) Successful in 41s
packages/ui - next/required / Setup - Stage (push) Successful in 41s
services/docs - next/required / Setup - Hugo (push) Successful in 3s
services/static - next/required / Setup - Stage (push) Successful in 40s
services/www - next/required / Setup - Stage (push) Successful in 41s
packages/kits - next/required / Build - Configs & UI (push) Successful in 34s
packages/ssg - next/required / Build - Configs (push) Successful in 19s
packages/stl - next/required / Build - Configs (push) Successful in 19s
packages/ui - next/required / Build - Configs (push) Successful in 24s
services/docs - next/required / Build - Hugo Site (push) Successful in 5s
services/static - next/required / Build - Configs (push) Successful in 23s
services/www - next/required / Build - Configs (push) Successful in 25s
packages/kits - next/required / Lint - Kits (push) Successful in 53s
packages/kits - next/required / Typecheck - Kits (push) Successful in 21s
packages/kits - next/required / Test - Unit (push) Successful in 24s
packages/kits - next/required / Build - Storybook (push) Successful in 30s
packages/kits - next/required / Build - Kits (push) Successful in 24s
packages/ssg - next/required / Lint - SSG (push) Successful in 22s
packages/ssg - next/required / Typecheck - SSG (push) Successful in 19s
packages/ssg - next/required / Build - SSG (push) Successful in 19s
packages/kits - next/required / Test - Storybook (push) Canceled after 0s
packages/stl - next/required / Typecheck - STL (push) Canceled after 0s
packages/stl - next/required / Test - STL (push) Canceled after 0s
packages/stl - next/required / Build - STL (push) Canceled after 0s
packages/ui - next/required / Lint - UI (push) Canceled after 0s
packages/ui - next/required / Typecheck - UI (push) Canceled after 0s
packages/ui - next/required / Test - Unit (push) Canceled after 0s
packages/ui - next/required / Build - Storybook (push) Canceled after 0s
packages/ui - next/required / Test - Storybook (push) Canceled after 0s
packages/ui - next/required / Build - UI (push) Canceled after 0s
services/docs - next/required / Release - Docker Image (push) Canceled after 0s
services/docs - next/required / Deploy - Kubernetes (GitOps) (push) Canceled after 0s
services/docs - next/required / Verify - Production Rollout (push) Canceled after 0s
services/static - next/required / Lint - Static (push) Canceled after 0s
services/static - next/required / Typecheck - Static (push) Canceled after 0s
services/static - next/required / Build - Static Site (push) Canceled after 0s
services/static - next/required / Deploy - S3 (push) Canceled after 0s
packages/stl - next/required / Lint - STL (push) Successful in 21s
services/www - next/required / Lint - WWW (push) Canceled after 0s
services/www - next/required / Typecheck - WWW (push) Canceled after 0s
services/www - next/required / Build - Storybook (push) Canceled after 0s
services/www - next/required / Test - Unit (push) Canceled after 0s
services/www - next/required / Test - Storybook (push) Canceled after 0s
services/www - next/required / Build - WWW Service (push) Canceled after 0s
services/www - next/required / Build - Docker Image (push) Canceled after 0s
services/www - next/required / Deploy - Kubernetes (GitOps) (push) Canceled after 0s
services/www - next/required / Verify - Production Rollout (push) Canceled after 0s

This commit is contained in:
deytenit committed 2026-11-08 11:25:21 +03:00
1 parent b4387b0616
commit 0c2474ba20
5 files changed
+160 -60

No files matched your search

+3 -2
View File
@@ -32,9 +32,10 @@ while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do
if [ "$HTTP_CODE" = "200" ]; then
LIVE_COMMIT=$(jq -r '.commit // empty' "$RESP_FILE" 2>/dev/null || true)
echo " Live commit: ${LIVE_COMMIT:-<none>}"
LIVE_VERSION=$(jq -r '.version // empty' "$RESP_FILE" 2>/dev/null || true)
echo " Live commit: ${LIVE_COMMIT:-<none>}, Live version: ${LIVE_VERSION:-<none>}"
if [ "$LIVE_COMMIT" = "$TARGET_COMMIT" ]; then
if [ "$LIVE_COMMIT" = "$TARGET_COMMIT" ] || [ "$LIVE_VERSION" = "$TARGET_COMMIT" ]; then
echo "✅ Success! Production $SERVICE has successfully rolled out $TARGET_COMMIT."
rm -f "$RESP_FILE"
exit 0
+69 -11
View File
@@ -1,21 +1,79 @@
#!/bin/bash
set -euo pipefail
MODE="version"
SERVICE=""
COMMIT="HEAD"
EXPLICIT_VERSION=""
if [ $# -ge 2 ] && [ "$1" = "tag" ]; then
MODE="tag"
SERVICE="$2"
COMMIT="${3:-HEAD}"
EXPLICIT_VERSION="${4:-}"
elif [ $# -ge 1 ]; then
SERVICE="$1"
fi
YEAR_MONTH=$(date -u +'%Y.%m')
git fetch --tags --quiet 2>/dev/null || true
# Find highest MICRO version for current YYYY.MM (matching tags formatted like YYYY.MM.MICRO)
LATEST_TAG=$(git tag -l "${YEAR_MONTH}.*" | sort -V | tail -n1 || echo "")
if [ -z "$LATEST_TAG" ]; then
MICRO=0
else
LATEST_MICRO="${LATEST_TAG#"${YEAR_MONTH}."}"
if [[ "$LATEST_MICRO" =~ ^[0-9]+$ ]]; then
MICRO=$((LATEST_MICRO + 1))
if [ -n "$SERVICE" ]; then
PREFIX="services/${SERVICE}-"
if [ -n "$EXPLICIT_VERSION" ]; then
VERSION="$EXPLICIT_VERSION"
else
MICRO=0
PATTERN="${PREFIX}${YEAR_MONTH}.*"
LATEST_TAG=$(git tag -l "$PATTERN" | sort -V | tail -n1 || echo "")
if [ -z "$LATEST_TAG" ]; then
MICRO=1
else
LATEST_MICRO="${LATEST_TAG#"${PREFIX}${YEAR_MONTH}."}"
if [[ "$LATEST_MICRO" =~ ^[0-9]+$ ]]; then
MICRO=$((LATEST_MICRO + 1))
else
MICRO=1
fi
fi
VERSION="${YEAR_MONTH}.${MICRO}"
fi
TAG_NAME="${PREFIX}${VERSION}"
else
if [ -n "$EXPLICIT_VERSION" ]; then
VERSION="$EXPLICIT_VERSION"
else
PATTERN="${YEAR_MONTH}.*"
LATEST_TAG=$(git tag -l "$PATTERN" | sort -V | tail -n1 || echo "")
if [ -z "$LATEST_TAG" ]; then
MICRO=0
else
LATEST_MICRO="${LATEST_TAG#"${YEAR_MONTH}."}"
if [[ "$LATEST_MICRO" =~ ^[0-9]+$ ]]; then
MICRO=$((LATEST_MICRO + 1))
else
MICRO=0
fi
fi
VERSION="${YEAR_MONTH}.${MICRO}"
fi
TAG_NAME="$VERSION"
fi
echo "${YEAR_MONTH}.${MICRO}"
if [ "$MODE" = "tag" ]; then
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
if git rev-parse -q --verify "refs/tags/$TAG_NAME" >/dev/null; then
EXISTING_COMMIT=$(git rev-parse "refs/tags/$TAG_NAME")
if [ "$EXISTING_COMMIT" = "$(git rev-parse "$COMMIT")" ]; then
echo "Tag $TAG_NAME already points to $COMMIT"
else
echo "Tag $TAG_NAME exists but points to $EXISTING_COMMIT, skipping create"
fi
else
echo "Creating tag $TAG_NAME on $COMMIT..."
git tag "$TAG_NAME" "$COMMIT"
fi
echo "Pushing tag $TAG_NAME..."
python3 "$ROOT_DIR/ci/scripts/git_write.py" "refs/tags/$TAG_NAME"
echo "Successfully created and pushed tag $TAG_NAME"
fi
echo "$VERSION"
+1 -1
View File
@@ -9,7 +9,7 @@ from pathlib import Path
def main():
ref=sys.argv[1]
if ref not in ('HEAD:next','trunk') and not re.fullmatch(r'refs/tags/[A-Za-z0-9][A-Za-z0-9._-]*',ref):
if ref not in ('HEAD:next','trunk') and not re.fullmatch(r'refs/tags/[A-Za-z0-9][A-Za-z0-9._-]*(/[A-Za-z0-9][A-Za-z0-9._-]*)*',ref):
raise ValueError('Unexpected publication ref')
repository=os.environ['GITHUB_REPOSITORY']
if not re.fullmatch(r'deytenit/[A-Za-z0-9_.-]+',repository):