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 / 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}'