From a0654415e95efda5ab717bc8afa1d3e26b9a35a4 Mon Sep 17 00:00:00 2001 From: User-git-3050 Date: Mon, 20 Oct 2025 09:41:41 +0400 Subject: [PATCH] feat: enhance chart deployment with GitHub Releases --- .github/workflows/release.yml | 11 ++++++ Makefile | 67 +++++++++++++++++++++++------------ 2 files changed, 55 insertions(+), 23 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 22f9514..b75c00d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,6 +66,17 @@ jobs: run: | make build-charts-site + - name: Upload chart to current release + run: | + CHART_VERSION="${GITHUB_REF#refs/tags/v}" + CHART_FILE="api-server-${CHART_VERSION}.tgz" + + echo "đŸ“Ļ Uploading $CHART_FILE to release $VERSION..." + gh release upload $VERSION $CHART_FILE --clobber + echo "✅ Chart uploaded to GitHub Release" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Setup Pages uses: actions/configure-pages@v5 diff --git a/Makefile b/Makefile index 8b41cb5..1b3a226 100644 --- a/Makefile +++ b/Makefile @@ -127,29 +127,46 @@ build-charts-site: helm-package ## Create charts directory for GitHub Pages CHARTS_DIR="charts-site"; \ echo "đŸ“Ļ Preparing charts site..."; \ mkdir -p "$$CHARTS_DIR" - @echo "đŸ“Ĩ Fetching existing charts from GitHub Pages..." - @if curl -fsSL https://forkspacer.github.io/api-server/index.yaml -o /tmp/current-index.yaml 2>/dev/null; then \ - echo "✅ Found existing Helm repository"; \ - else \ - echo "â„šī¸ No existing charts found (first deployment)"; \ - fi - @CHART_VERSION=$$(grep '^version:' helm/Chart.yaml | awk '{print $$2}' | tr -d '"' | tr -d "'"); \ + @echo "đŸ“Ĩ Fetching existing charts from GitHub Releases..." + @REPO_OWNER="forkspacer"; \ + REPO_NAME="api-server"; \ + CHART_VERSION=$$(grep '^version:' helm/Chart.yaml | awk '{print $$2}' | tr -d '"' | tr -d "'"); \ CHART_FILE="api-server-$$CHART_VERSION.tgz"; \ CHARTS_DIR="charts-site"; \ - if [ -f /tmp/current-index.yaml ]; then \ - grep -oP 'https://forkspacer\.github\.io/api-server/api-server-[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?\.tgz' /tmp/current-index.yaml | sort -u | while read url; do \ - filename=$$(basename "$$url"); \ - if [ "$$filename" = "$$CHART_FILE" ]; then \ - echo " â­ī¸ Skipping $$filename (will be replaced)"; \ - continue; \ - fi; \ - echo " đŸ“Ĩ Downloading $$filename..."; \ - if curl -fsSL "$$url" -o "$$CHARTS_DIR/$$filename"; then \ - echo " ✅ Downloaded $$filename"; \ - else \ - echo " âš ī¸ Failed to download $$filename"; \ - fi; \ - done; \ + if curl -fsSL "https://api.github.com/repos/$$REPO_OWNER/$$REPO_NAME/releases" -o /tmp/releases.json 2>/dev/null; then \ + echo "✅ Found GitHub releases"; \ + if command -v jq >/dev/null 2>&1; then \ + echo "🔍 Using jq for JSON parsing..."; \ + cat /tmp/releases.json | jq -r '.[] | select(.assets[].name | test("api-server-.*\\.tgz")) | .assets[] | select(.name | test("api-server-.*\\.tgz")) | .browser_download_url' | sort -u | while read url; do \ + filename=$$(basename "$$url"); \ + if [ "$$filename" = "$$CHART_FILE" ]; then \ + echo " â­ī¸ Skipping $$filename (will be replaced)"; \ + continue; \ + fi; \ + echo " đŸ“Ĩ Downloading $$filename from GitHub Releases..."; \ + if curl -fsSL "$$url" -o "$$CHARTS_DIR/$$filename"; then \ + echo " ✅ Downloaded $$filename"; \ + else \ + echo " âš ī¸ Failed to download $$filename"; \ + fi; \ + done; \ + else \ + echo "âš ī¸ jq not available, using manual parsing..."; \ + grep -o '"browser_download_url": "[^"]*api-server-[^"]*\.tgz"' /tmp/releases.json | cut -d'"' -f4 | sort -u | while read url; do \ + filename=$$(basename "$$url"); \ + if [ "$$filename" != "$$CHART_FILE" ]; then \ + echo " đŸ“Ĩ Downloading $$filename from GitHub Releases..."; \ + if curl -fsSL "$$url" -o "$$CHARTS_DIR/$$filename"; then \ + echo " ✅ Downloaded $$filename"; \ + else \ + echo " âš ī¸ Failed to download $$filename"; \ + fi; \ + fi; \ + done; \ + fi; \ + rm -f /tmp/releases.json; \ + else \ + echo "â„šī¸ No GitHub releases found or API unavailable (first deployment)"; \ fi @CHART_VERSION=$$(grep '^version:' helm/Chart.yaml | awk '{print $$2}' | tr -d '"' | tr -d "'"); \ CHART_FILE="api-server-$$CHART_VERSION.tgz"; \ @@ -158,8 +175,12 @@ build-charts-site: helm-package ## Create charts directory for GitHub Pages cp "$$CHART_FILE" "$$CHARTS_DIR/"; \ echo "✅ Added new chart: $$CHART_FILE" @CHARTS_DIR="charts-site"; \ - echo "📄 Generating Helm repo index..."; \ - helm repo index "$$CHARTS_DIR" --url https://forkspacer.github.io/api-server + echo "📄 Generating Helm repo index with GitHub Releases URLs..."; \ + CHART_VERSION=$$(grep '^version:' helm/Chart.yaml | awk '{print $$2}' | tr -d '"' | tr -d "'"); \ + APP_VERSION=$$(grep '^appVersion:' helm/Chart.yaml | awk '{print $$2}' | tr -d '"' | tr -d "'"); \ + helm repo index "$$CHARTS_DIR" --url "https://github.com/forkspacer/api-server/releases/download"; \ + sed -i.bak "s|https://github.com/forkspacer/api-server/releases/download/api-server-\([0-9]\+\.[0-9]\+\.[0-9]\+\)\.tgz|https://github.com/forkspacer/api-server/releases/download/v\1/api-server-\1.tgz|g" "$$CHARTS_DIR/index.yaml"; \ + rm -f "$$CHARTS_DIR/index.yaml.bak" @CHARTS_DIR="charts-site"; \ if [ -f ".github/templates/helm-page.html" ]; then \ cp .github/templates/helm-page.html "$$CHARTS_DIR/index.html"; \