| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- name: Build and Publish Release
- on:
- push:
- tags:
- - 'v[0-9]+.[0-9]+.[0-9]+'
- workflow_dispatch:
- inputs:
- release_version:
- description: "Version of the release"
- required: true
- concurrency:
- group: build-opencost
- cancel-in-progress: true
- env:
- # Use docker.io for Docker Hub if empty
- REGISTRY: ghcr.io
- # github.repository as <account>/<repo>
- IMAGE_NAME: ${{ github.repository }}
- jobs:
- build-and-publish-opencost:
- runs-on: ubuntu-latest
- permissions:
- contents: read
- packages: write
- steps:
- - name: Get Version From Tag
- id: tag
- if: ${{ github.event_name }} == 'push'
- run: |
- echo "TRIGGERED_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- - name: Determine Version Number
- id: version_number
- run: |
- if [ -z "${TRIGGERED_TAG}" ];
- then
- version=${{ inputs.release_version }}
- else
- version=$TRIGGERED_TAG
- fi
- if [[ ${version:0:1} == "v" ]];
- then
- echo "RELEASE_VERSION=${version:1}" >> $GITHUB_OUTPUT
- else
- echo "RELEASE_VERSION=$version" >> $GITHUB_OUTPUT
- fi
- - name: Show Input Values
- run: |
- echo "release version: ${{ inputs.release_version }}"
- - name: Make Branch Name
- id: branch
- run: |
- VERSION_NUMBER=${{ steps.version_number.outputs.RELEASE_VERSION }}
- echo "BRANCH_NAME=v${VERSION_NUMBER%.*}" >> $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_OUTPUT
- popd
- # Login against a Docker registry except on PR
- # https://github.com/docker/login-action
- - name: Log into registry ${{ env.REGISTRY }}
- uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
- - name: Set OpenCost Image Tags
- id: tags
- run: |
- echo "IMAGE_TAG=ghcr.io/opencost/opencost:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_OUTPUT
- echo "IMAGE_TAG_LATEST=ghcr.io/opencost/opencost:latest" >> $GITHUB_OUTPUT
- echo "IMAGE_TAG_VERSION=ghcr.io/opencost/opencost:${{ steps.version_number.outputs.RELEASE_VERSION }}" >> $GITHUB_OUTPUT
- echo "IMAGE_TAG_UI=ghcr.io/opencost/opencost-ui:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_OUTPUT
- echo "IMAGE_TAG_UI_LATEST=ghcr.io/opencost/opencost-ui:latest" >> $GITHUB_OUTPUT
- echo "IMAGE_TAG_UI_VERSION=ghcr.io/opencost/opencost-ui:${{ steps.version_number.outputs.RELEASE_VERSION }}" >> $GITHUB_OUTPUT
- # echo "IMAGE_TAG_QUAY=quay.io/kubecost1/kubecost-cost-model:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_OUTPUT
- # echo "IMAGE_TAG_LATEST_QUAY=quay.io/kubecost1/kubecost-cost-model:latest" >> $GITHUB_OUTPUT
- # echo "IMAGE_TAG_VERSION_QUAY=quay.io/kubecost1/kubecost-cost-model:prod-${{ steps.version_number.outputs.RELEASE_VERSION }}" >> $GITHUB_OUTPUT
- # echo "IMAGE_TAG_UI_QUAY=quay.io/kubecost1/opencost-ui:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_OUTPUT
- # echo "IMAGE_TAG_UI_LATEST_QUAY=quay.io/kubecost1/opencost-ui:latest" >> $GITHUB_OUTPUT
- # echo "IMAGE_TAG_UI_VERSION_QUAY=quay.io/kubecost1/opencost-ui:prod-${{ inputs.release_version }}" >> $GITHUB_OUTPUT
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
- with:
- buildkitd-flags: --debug
- - name: Install Go
- uses: actions/setup-go@v5
- with:
- go-version: 'stable'
- - name: Set up just
- uses: extractions/setup-just@v1
- - name: Install crane
- uses: imjasonh/setup-crane@v0.3
- ## 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 }}' '${{ steps.version_number.outputs.RELEASE_VERSION }}'
- crane copy '${{ steps.tags.outputs.IMAGE_TAG }}' '${{ steps.tags.outputs.IMAGE_TAG_LATEST }}'
- crane copy '${{ steps.tags.outputs.IMAGE_TAG }}' '${{ steps.tags.outputs.IMAGE_TAG_VERSION }}'
- # crane copy '${{ steps.tags.outputs.IMAGE_TAG }}' '${steps.tags.outputs.IMAGE_TAG_QUAY}'
- # crane copy '${{ steps.tags.outputs.IMAGE_TAG }}' '${steps.tags.outputs.IMAGE_TAG_LATEST_QUAY}'
- # crane copy '${{ steps.tags.outputs.IMAGE_TAG }}' '${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 }}' '${{ steps.version_number.outputs.RELEASE_VERSION }}'
- crane copy '${{ steps.tags.outputs.IMAGE_TAG_UI }}' '${{ steps.tags.outputs.IMAGE_TAG_UI_LATEST }}'
- crane copy '${{ steps.tags.outputs.IMAGE_TAG_UI }}' '${{ steps.tags.outputs.IMAGE_TAG_UI_VERSION }}'
- # crane copy '${steps.tags.outputs.IMAGE_TAG_UI}' '${steps.tags.outputs.IMAGE_TAG_UI_QUAY}'
- # crane copy '${steps.tags.outputs.IMAGE_TAG_UI}' '${steps.tags.outputs.IMAGE_TAG_UI_LATEST_QUAY}'
- # crane copy '${steps.tags.outputs.IMAGE_TAG_UI}' '${steps.tags.outputs.IMAGE_TAG_UI_VERSION_QUAY}'
|