From d4743027982a73f27c7b7e44b4e5438a4d2400b4 Mon Sep 17 00:00:00 2001 From: NiveditJain Date: Sun, 24 Aug 2025 16:38:12 +0530 Subject: [PATCH] Update GitHub Actions workflows to use 'beta-latest' tag for images and add new workflows for releasing dashboard and Python SDK --- .github/workflows/publish-dashboard.yml | 3 +- .github/workflows/publish-state-mangaer.yml | 2 +- .github/workflows/release-dashboard.yml | 54 +++++++++ ...sdk-release.yml => release-python-sdk.yml} | 0 .github/workflows/release-state-manager.yml | 113 ++++++++++++++++++ 5 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/release-dashboard.yml rename .github/workflows/{publish-python-sdk-release.yml => release-python-sdk.yml} (100%) create mode 100644 .github/workflows/release-state-manager.yml diff --git a/.github/workflows/publish-dashboard.yml b/.github/workflows/publish-dashboard.yml index 8d09a064..ec45c180 100644 --- a/.github/workflows/publish-dashboard.yml +++ b/.github/workflows/publish-dashboard.yml @@ -44,9 +44,8 @@ jobs: with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | - type=raw,value=latest + type=raw,value=beta-latest type=sha,format=short - type=ref,event=tag # v1.2.3 → v1.2.3 - name: Build and push uses: docker/build-push-action@v5 diff --git a/.github/workflows/publish-state-mangaer.yml b/.github/workflows/publish-state-mangaer.yml index 62e0ed2d..8ff6bfd3 100644 --- a/.github/workflows/publish-state-mangaer.yml +++ b/.github/workflows/publish-state-mangaer.yml @@ -44,7 +44,7 @@ jobs: with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | - type=raw, value=latest + type=raw, value=beta-latest type=sha, value=${{ env.SHA_TAG }} - name: Build and push diff --git a/.github/workflows/release-dashboard.yml b/.github/workflows/release-dashboard.yml new file mode 100644 index 00000000..49c170dd --- /dev/null +++ b/.github/workflows/release-dashboard.yml @@ -0,0 +1,54 @@ +name: Publish Dashboard image to GHCR and Deploy to K8s + +on: + release: + types: [published] + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/exosphere-dashboard + SHA_TAG: ${{ github.sha }} + +jobs: + publish-image: + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + + outputs: + tags: ${{ steps.meta.outputs.tags }} + json: ${{ steps.meta.outputs.json }} + + steps: + - uses: actions/checkout@v4 + + - uses: docker/setup-buildx-action@v3 + + - name: Log in to GHCR + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Generate tags & labels + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=latest + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha,format=short + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: ./dashboard + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/publish-python-sdk-release.yml b/.github/workflows/release-python-sdk.yml similarity index 100% rename from .github/workflows/publish-python-sdk-release.yml rename to .github/workflows/release-python-sdk.yml diff --git a/.github/workflows/release-state-manager.yml b/.github/workflows/release-state-manager.yml new file mode 100644 index 00000000..5516f60a --- /dev/null +++ b/.github/workflows/release-state-manager.yml @@ -0,0 +1,113 @@ +name: Publish State Manager image to GHCR and Deploy to K8s + +on: + push: + branches: [main] + paths: + - 'state-manager/**' + release: + types: [published] + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/exosphere-state-manager + SHA_TAG: ${{ github.sha }} + +jobs: + test: + runs-on: ubuntu-latest + services: + mongodb: + image: mongo:7 + ports: + - 27017:27017 + options: >- + --health-cmd "mongosh --eval 'db.runCommand(\"ping\")'" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: Install uv + uses: astral-sh/setup-uv@v2 + + - name: Install dev dependencies with uv + working-directory: state-manager + run: | + uv sync --group dev + + - name: Run unit tests with pytest and coverage + working-directory: state-manager + run: | + uv run pytest tests/unit/ --cov=app --cov-report=xml --cov-report=term-missing -v --junitxml=pytest-report.xml + + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_TOKEN }} + slug: exospherehost/exospherehost + files: state-manager/coverage.xml + flags: state-manager-unittests + name: state-manager-coverage-report + fail_ci_if_error: true + + - name: Upload test results + uses: actions/upload-artifact@v4 + if: always() + with: + name: state-manager-test-results + path: state-manager/pytest-report.xml + retention-days: 30 + + publish-image: + runs-on: ubuntu-latest + needs: test + + permissions: + contents: read + packages: write + + outputs: + tags: ${{ steps.meta.outputs.tags }} + json: ${{ steps.meta.outputs.json }} + + steps: + - uses: actions/checkout@v4 + + - uses: docker/setup-buildx-action@v3 + + - name: Log in to GHCR + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Generate tags & labels + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=latest + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha,format=short + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: ./state-manager + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }}