2
0

build-and-publish-release.yml 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. name: Build and Publish Release
  2. on:
  3. workflow_dispatch:
  4. inputs:
  5. release_version:
  6. description: "Version. Please DO NOT include the 'v' prefix"
  7. required: true
  8. concurrency:
  9. group: build-opencost
  10. cancel-in-progress: true
  11. env:
  12. # Use docker.io for Docker Hub if empty
  13. REGISTRY: ghcr.io
  14. # github.repository as <account>/<repo>
  15. IMAGE_NAME: ${{ github.repository }}
  16. jobs:
  17. build-and-publish-opencost:
  18. runs-on: ubuntu-latest
  19. permissions:
  20. contents: read
  21. packages: write
  22. steps:
  23. - name: Show Input Values
  24. run: |
  25. echo "release version: ${{ inputs.release_version }}"
  26. - name: Make Branch Name
  27. id: branch
  28. run: |
  29. VERSION_NUMBER=${{ inputs.release_version }}
  30. echo "BRANCH_NAME=v${VERSION_NUMBER%.*}" >> $GITHUB_ENV
  31. - name: Checkout Repo
  32. uses: actions/checkout@v4
  33. with:
  34. repository: 'opencost/opencost'
  35. ref: '${{ steps.branch.outputs.BRANCH_NAME }}'
  36. path: ./opencost
  37. - name: Set SHA
  38. id: sha
  39. run: |
  40. pushd ./opencost
  41. echo "OC_SHORTHASH=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
  42. popd
  43. # Login against a Docker registry except on PR
  44. # https://github.com/docker/login-action
  45. - name: Log into registry ${{ env.REGISTRY }}
  46. if: github.event_name != 'pull_request'
  47. uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
  48. with:
  49. registry: ${{ env.REGISTRY }}
  50. username: ${{ github.actor }}
  51. password: ${{ secrets.GITHUB_TOKEN }}
  52. - name: Set OpenCost Image Tags
  53. id: tags
  54. run: |
  55. echo "IMAGE_TAG=ghcr.io/opencost/opencost:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_OUTPUT
  56. echo "IMAGE_TAG_LATEST=ghcr.io/opencost/opencost:latest" >> $GITHUB_OUTPUT
  57. echo "IMAGE_TAG_VERSION=ghcr.io/opencost/opencost:${{ inputs.release_version }}" >> $GITHUB_OUTPUT
  58. echo "IMAGE_TAG_UI=ghcr.io/opencost/opencost-ui:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_OUTPUT
  59. echo "IMAGE_TAG_UI_LATEST=ghcr.io/opencost/opencost-ui:latest" >> $GITHUB_OUTPUT
  60. echo "IMAGE_TAG_UI_VERSION=ghcr.io/opencost/opencost-ui:${{ inputs.release_version }}" >> $GITHUB_OUTPUT
  61. # echo "IMAGE_TAG_QUAY=quay.io/kubecost1/kubecost-cost-model:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_OUTPUT
  62. # echo "IMAGE_TAG_LATEST_QUAY=quay.io/kubecost1/kubecost-cost-model:latest" >> $GITHUB_OUTPUT
  63. # echo "IMAGE_TAG_VERSION_QUAY=quay.io/kubecost1/kubecost-cost-model:prod-${{ inputs.release_version }}" >> $GITHUB_OUTPUT
  64. # echo "IMAGE_TAG_UI_QUAY=quay.io/kubecost1/opencost-ui:${{ steps.sha.outputs.OC_SHORTHASH }}" >> $GITHUB_OUTPUT
  65. # echo "IMAGE_TAG_UI_LATEST_QUAY=quay.io/kubecost1/opencost-ui:latest" >> $GITHUB_OUTPUT
  66. # echo "IMAGE_TAG_UI_VERSION_QUAY=quay.io/kubecost1/opencost-ui:prod-${{ inputs.release_version }}" >> $GITHUB_OUTPUT
  67. - name: Set up Docker Buildx
  68. uses: docker/setup-buildx-action@v3
  69. with:
  70. buildkitd-flags: --debug
  71. - name: Set up just
  72. uses: extractions/setup-just@v1
  73. - name: Install crane
  74. uses: imjasonh/setup-crane@v0.1
  75. - name: Install Go
  76. uses: actions/setup-go@v5
  77. with:
  78. go-version: 'stable'
  79. ## Install manifest-tool, which is required to combine multi-arch images
  80. ## https://github.com/estesp/manifest-tool
  81. - name: Install manifest-tool
  82. run: |
  83. mkdir -p manifest-tool
  84. pushd manifest-tool
  85. wget -q https://github.com/estesp/manifest-tool/releases/download/v2.0.8/binaries-manifest-tool-2.0.8.tar.gz
  86. tar -xzf binaries-manifest-tool-2.0.8.tar.gz
  87. cp manifest-tool-linux-amd64 manifest-tool
  88. echo "$(pwd)" >> $GITHUB_PATH
  89. # - name: Login to Quay
  90. # uses: docker/login-action@v3
  91. # with:
  92. # registry: quay.io
  93. # username: ${{ secrets.QUAY_USERNAME }}
  94. # password: ${{ secrets.QUAY_PASSWORD }}
  95. - name: Build and push (multiarch) OpenCost
  96. working-directory: ./opencost
  97. run: |
  98. just build '${{steps.tags.outputs.IMAGE_TAG}}' ${{ inputs.release_version }}
  99. crane copy '${{steps.tags.outputs.IMAGE_TAG}}' '${{steps.tags.outputs.IMAGE_TAG_LATEST}}'
  100. crane copy '${{steps.tags.outputs.IMAGE_TAG}}' '${{steps.tags.outputs.IMAGE_TAG_VERSION}}'
  101. # crane copy '${steps.tags.outputs.IMAGE_TAG}' '${steps.tags.outputs.IMAGE_TAG_QUAY}'
  102. # crane copy '${steps.tags.outputs.IMAGE_TAG}' '${steps.tags.outputs.IMAGE_TAG_LATEST_QUAY}'
  103. # crane copy '${steps.tags.outputs.IMAGE_TAG}' '${steps.tags.outputs.IMAGE_TAG_VERSION_QUAY}'
  104. - name: Build and push (multiarch) OpenCost UI
  105. working-directory: ./opencost/ui
  106. run: |
  107. just build '${{steps.tags.outputs.IMAGE_TAG_UI}}'
  108. crane copy '${{steps.tags.outputs.IMAGE_TAG_UI}}' '${{steps.tags.outputs.IMAGE_TAG_UI_LATEST}}'
  109. crane copy '${{steps.tags.outputs.IMAGE_TAG_UI}}' '${{steps.tags.outputs.IMAGE_TAG_UI_VERSION}}'
  110. # crane copy '${steps.tags.outputs.IMAGE_TAG_UI}' '${steps.tags.outputs.IMAGE_TAG_UI_QUAY}'
  111. # crane copy '${steps.tags.outputs.IMAGE_TAG_UI}' '${steps.tags.outputs.IMAGE_TAG_UI_LATEST_QUAY}'
  112. # crane copy '${steps.tags.outputs.IMAGE_TAG_UI}' '${steps.tags.outputs.IMAGE_TAG_UI_VERSION_QUAY}'