diff --git a/.github/workflows/publish-cloud-builder.yaml b/.github/workflows/publish-cloud-builder.yaml new file mode 100644 index 0000000..9cd308c --- /dev/null +++ b/.github/workflows/publish-cloud-builder.yaml @@ -0,0 +1,57 @@ +--- +# Automatically build Docker images using a cloud builder and publish them to a +# container registry using HCL Bake file. + +name: Build Docker Images using Cloud Builder + +on: + # workflow_dispatch: + # pull_request: + # branches: ['main'] + push: + branches: ['main'] + tags: ['*'] + +jobs: + # When pushing into main will build the regular multi-arch image + # For pull requests will use the default target to only + # generate local architecture version + bake-target: + name: Determine bake target + runs-on: ubuntu-22.04 # don't use the big runners for this small step + outputs: + target: ${{ steps.generate.outputs.bake_target }} + steps: + - name: Determine target + id: generate + run: | + # NOTE: Using direct target names instead of group names as its a single + # image build and want to use the target as part of the output image tag + if [[ '${{ github.event_name }}' == 'pull_request' ]]; then + TGT=askem-julia-base + else + TGT=askem-julia + fi + + echo "$TGT" + echo "bake_target=${TGT,,}" >> ${GITHUB_OUTPUT} + + - name: Show Generated Tag + run: echo ${{ steps.generate.outputs.bake_target }} + + # Build and Publish all targets associated with specified group + bake: + needs: + - bake-target + uses: darpa-askem/.github/.github/workflows/bake-publish-cloud-builder.yaml@main + with: + file: 'docker/docker-bake.hcl' + group: ${{ needs.bake-target.outputs.target }} + registry: 'ghcr.io' + organization: ${{ github.repository_owner }} + secrets: + username: ${{ secrets.DOCKER_CLOUD_BUILD_USERNAME }} + token: ${{ secrets.DOCKER_CLOUD_BUILD_TOKEN }} + endpoint: "${{ secrets.DOCKER_CLOUD_BUILD_ENDPOINT }}" + + diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml deleted file mode 100644 index 7311072..0000000 --- a/.github/workflows/publish.yaml +++ /dev/null @@ -1,54 +0,0 @@ ---- -# Automatically build Docker images on changes to dev and push them to a -# Container Registry using HCL Bake file. - -name: Build Docker Images - -on: - push: - branches: ['main'] - tags: ['*'] - -jobs: - # generate-tag: - # runs-on: ubuntu-latest - # outputs: - # tag: ${{ steps.set-tag.outputs.tag }} - # steps: - # - name: Checkout repository - # uses: actions/checkout@v3 - - # - name: Read tag from project - # id: set-tag - # run: | - # TAG=$(awk -F '\"' '/^version = /{print $2}' Project.toml) - # echo "tag=$TAG" >> $GITHUB_OUTPUT - - # Build and Publish all targets associated with specified group - bake-arm64: - # needs: - # - generate-tag - uses: darpa-askem/.github/.github/workflows/bake-publish.yml@main - with: - file: 'docker/docker-bake-arm64.hcl' - group: 'prod' - registry: 'ghcr.io' - organization: ${{ github.repository_owner }} - # tag: ${{ needs.generate-tag.outputs.tag }} - secrets: - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - bake-amd64: - # needs: - # - generate-tag - uses: darpa-askem/.github/.github/workflows/bake-publish.yml@main - with: - file: 'docker/docker-bake-amd64.hcl' - group: 'prod' - registry: 'ghcr.io' - organization: ${{ github.repository_owner }} - # tag: ${{ needs.generate-tag.outputs.tag }} - secrets: - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} diff --git a/docker/docker-bake-amd64.hcl b/docker/docker-bake-amd64.hcl deleted file mode 100644 index 9b519e2..0000000 --- a/docker/docker-bake-amd64.hcl +++ /dev/null @@ -1,54 +0,0 @@ -variable "DOCKER_REGISTRY" { - default = "ghcr.io" -} -variable "DOCKER_ORG" { - default = "darpa-askem" -} -variable "VERSION" { - default = "local" -} - -# ---------------------------------------------------------------------------------------------------------------------- - -function "buildtag" { - params = [image_name, prefix, suffix] - result = [ "${DOCKER_REGISTRY}/${DOCKER_ORG}/${image_name}:${check_prefix(prefix)}${VERSION}${check_suffix(suffix)}", "${image_name}:build" ] -} - -function "tag" { - params = [image_name, prefix, suffix] - result = [ "${DOCKER_REGISTRY}/${DOCKER_ORG}/${image_name}:${check_prefix(prefix)}${VERSION}${check_suffix(suffix)}" ] -} - -function "check_prefix" { - params = [tag] - result = notequal("",tag) ? "${tag}-": "" -} - -function "check_suffix" { - params = [tag] - result = notequal("",tag) ? "-${tag}": "" -} - -# ---------------------------------------------------------------------------------------------------------------------- - -group "prod" { - targets = ["askem-julia"] -} - -group "default" { - targets = [] -} - -# ---------------------------------------------------------------------------------------------------------------------- - -target "_platforms" { - platforms = ["linux/amd64"] -} - -target "askem-julia" { - inherits = ["_platforms"] - context = "." - tags = tag("askem-julia", "", "") - dockerfile = "docker/Dockerfile" -} diff --git a/docker/docker-bake-arm64.hcl b/docker/docker-bake-arm64.hcl deleted file mode 100644 index 6d52f76..0000000 --- a/docker/docker-bake-arm64.hcl +++ /dev/null @@ -1,54 +0,0 @@ -variable "DOCKER_REGISTRY" { - default = "ghcr.io" -} -variable "DOCKER_ORG" { - default = "darpa-askem" -} -variable "VERSION" { - default = "local" -} - -# ---------------------------------------------------------------------------------------------------------------------- - -function "buildtag" { - params = [image_name, prefix, suffix] - result = [ "${DOCKER_REGISTRY}/${DOCKER_ORG}/${image_name}:${check_prefix(prefix)}${VERSION}${check_suffix(suffix)}", "${image_name}:build" ] -} - -function "tag" { - params = [image_name, prefix, suffix] - result = [ "${DOCKER_REGISTRY}/${DOCKER_ORG}/${image_name}:${check_prefix(prefix)}${VERSION}${check_suffix(suffix)}" ] -} - -function "check_prefix" { - params = [tag] - result = notequal("",tag) ? "${tag}-": "" -} - -function "check_suffix" { - params = [tag] - result = notequal("",tag) ? "-${tag}": "" -} - -# ---------------------------------------------------------------------------------------------------------------------- - -group "prod" { - targets = ["askem-julia"] -} - -group "default" { - targets = [] -} - -# ---------------------------------------------------------------------------------------------------------------------- - -target "_platforms" { - platforms = ["linux/arm64"] -} - -target "askem-julia" { - inherits = ["_platforms"] - context = "." - tags = tag("askem-julia", "", "") - dockerfile = "docker/Dockerfile" -} diff --git a/docker/docker-bake.hcl b/docker/docker-bake.hcl index 43ed83e..11b0433 100644 --- a/docker/docker-bake.hcl +++ b/docker/docker-bake.hcl @@ -10,14 +10,9 @@ variable "VERSION" { # ---------------------------------------------------------------------------------------------------------------------- -function "buildtag" { - params = [image_name, prefix, suffix] - result = [ "${DOCKER_REGISTRY}/${DOCKER_ORG}/${image_name}:${check_prefix(prefix)}${VERSION}${check_suffix(suffix)}", "${image_name}:build" ] -} - function "tag" { params = [image_name, prefix, suffix] - result = [ "${DOCKER_REGISTRY}/${DOCKER_ORG}/${image_name}:${check_prefix(prefix)}${VERSION}${check_suffix(suffix)}" ] + result = [ "${gen_image_name(image_name)}:${check_prefix(prefix)}${VERSION}${check_suffix(suffix)}" ] } function "check_prefix" { @@ -30,25 +25,38 @@ function "check_suffix" { result = notequal("",tag) ? "-${tag}": "" } -# ---------------------------------------------------------------------------------------------------------------------- +function "gen_image_name" { + params = [image_name] + result = "${DOCKER_REGISTRY}/${DOCKER_ORG}/${image_name}" +} +# ---------------------------------------------------------------------------------------------------------------------- group "prod" { targets = ["askem-julia"] } group "default" { - targets = [] + targets = ["askem-julia-base"] } # ---------------------------------------------------------------------------------------------------------------------- +# Used by the metafile GH action +# DO NOT ADD ANYTHING HERE THIS WILL BE POPULATED DYNAMICALLY +# MAKE SURE THIS IS INHERITED NEAR THE END SO THAT IT DOES NOT GET OVERRIDEN +target "docker-metadata-action" {} target "_platforms" { platforms = ["linux/amd64", "linux/arm64"] } +target "askem-julia-base" { + context = "." + dockerfile = "docker/Dockerfile" + tags = tag("askem-julia", "", "") +} + +# NOTE: This is the target that CI will trigger and the metadata action will override image names target "askem-julia" { - inherits = ["_platforms"] - context = "." - tags = tag("askem-julia", "", "") - dockerfile = "docker/Dockerfile" + inherits = ["askem-julia-base", "docker-metadata-action", "_platforms"] } +