Przeglądaj źródła

initial workflow

Signed-off-by: Cliff Colvin <ccolvin@kubecost.com>

update to add version option

Signed-off-by: Cliff Colvin <ccolvin@kubecost.com>

add manifest-tool

Signed-off-by: Cliff Colvin <ccolvin@kubecost.com>

add quay push

Signed-off-by: Cliff Colvin <ccolvin@kubecost.com>

handle branch name semver maj.min

Signed-off-by: Cliff Colvin <ccolvin@kubecost.com>
Cliff Colvin 2 lat temu
rodzic
commit
41679d5e2a
1 zmienionych plików z 102 dodań i 0 usunięć
  1. 102 0
      .github/workflows/build-and-publish-release.yml

+ 102 - 0
.github/workflows/build-and-publish-release.yml

@@ -0,0 +1,102 @@
+name: Build and Publish Release
+
+on:
+  workflow_dispatch:
+    inputs:
+      release_version:
+        description: "Version. Please DO NOT include the 'v' prefix"
+        required: true
+
+concurrency:
+  group: build-opencost
+  cancel-in-progress: true
+
+jobs:
+  build-and-publish-opencost:
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+      id-token: write
+    
+    steps:
+      - name: Show Input Values
+        run: |
+          echo "release version: ${{ inputs.release_version }}"
+
+      - name: Make Branch Name
+        id: branch
+        run: |
+          echo "BRANCH_NAME=v${${{ inputs.release_version}}%.*}" >> $GITHUB_ENV
+  
+      - name: Checkout Repo
+        uses: actions/checkout@v4
+        with:
+          repository: 'opencost/opencost'
+          ref: '${{ steps.branch.outputs.BRANCH_NAME }}'
+          path: ./opencost  
+
+      - name: Set SHA
+        id: sha
+        run: |
+          pushd ./opencost
+          echo "OC_SHORTHASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
+          popd
+
+      - name: Set OpenCost Image Tags
+        id: tags
+        run: |
+          echo "IMAGE_TAG=ghcr.io/opencost/opencost:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_ENV
+          echo "IMAGE_TAG_LATEST=ghcr.io/opencost/opencost:latest" >> $GITHUB_ENV
+          echo "IMAGE_TAG_VERSION=ghcr.io/opencost/opencost:${{ inputs.release_version }}" >> $GITHUB_ENV
+          echo "IMAGE_TAG_UI=ghcr.io/opencost/opencost-ui:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_ENV
+          echo "IMAGE_TAG_UI_LATEST=ghcr.io/opencost/opencost-ui:latest" >> $GITHUB_ENV
+          echo "IMAGE_TAG_UI_VERSION=ghcr.io/opencost/opencost-ui:${{ inputs.release_version }}" >> $GITHUB_ENV
+          echo "IMAGE_TAG_QUAY=quay.io/kubecost1/kubecost-cost-model:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_ENV
+          echo "IMAGE_TAG_LATEST_QUAY=quay.io/kubecost1/kubecost-cost-model:latest" >> $GITHUB_ENV
+          echo "IMAGE_TAG_VERSION_QUAY=quay.io/kubecost1/kubecost-cost-model:prod-v${{ inputs.release_version }}" >> $GITHUB_ENV
+          echo "IMAGE_TAG_UI_QUAY=quay.io/kubecost1/opencost-ui:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_ENV
+          echo "IMAGE_TAG_UI_LATEST_QUAY=quay.io/kubecost1/opencost-ui:latest" >> $GITHUB_ENV
+          echo "IMAGE_TAG_UI_VERSION_QUAY=quay.io/kubecost1/opencost-ui:${{ inputs.release_version }}" >> $GITHUB_ENV
+     
+      - name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v3
+      
+      - name: Set up just
+        uses: extractions/setup-just@v1
+
+      ## Install manifest-tool, which is required to combine multi-arch images
+      ## https://github.com/estesp/manifest-tool
+      - name: Install manifest-tool
+        run: |
+          mkdir -p manifest-tool
+          pushd manifest-tool
+          wget -q https://github.com/estesp/manifest-tool/releases/download/v2.0.8/binaries-manifest-tool-2.0.8.tar.gz
+          tar -xzf binaries-manifest-tool-2.0.8.tar.gz
+          cp manifest-tool-linux-amd64 manifest-tool
+          echo "$(pwd)" >> $GITHUB_PATH
+
+      - name: Login to Quay
+        uses: docker/login-action@v3
+        with:
+          registry: quay.io
+          username: ${{ secrets.QUAY_USERNAME }}
+          password: ${{ secrets.QUAY_PASSWORD }}
+      
+      - name: Build and push (multiarch) OpenCost
+        working-directory: ./opencost
+        run: |
+          just build '${steps.tags.outputs.IMAGE_TAG}'
+          just build '${steps.tags.outputs.IMAGE_TAG_LATEST}'
+          just build '${steps.tags.outputs.IMAGE_TAG_VERSION}'
+          just build '${steps.tags.outputs.IMAGE_TAG_QUAY}'
+          just build '${steps.tags.outputs.IMAGE_TAG_LATEST_QUAY}'
+          just build '${steps.tags.outputs.IMAGE_TAG_VERSION_QUAY}'
+      - name: Build and push (multiarch) OpenCost UI
+        working-directory: ./opencost/ui
+        run: |
+          just build '${steps.tags.outputs.IMAGE_TAG_UI}'
+          just build '${steps.tags.outputs.IMAGE_TAG_UI_LATEST}'
+          just build '${steps.tags.outputs.IMAGE_TAG_UI_VERSION}'
+          just build '${steps.tags.outputs.IMAGE_TAG_UI_QUAY}'
+          just build '${steps.tags.outputs.IMAGE_TAG_UI_LATEST_QUAY}'
+          just build '${steps.tags.outputs.IMAGE_TAG_UI_VERSION_QUAY}'