Skip to content

Commit

Permalink
Add support for docker build caching, disabled by default (#313)
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanwi authored Aug 14, 2024
1 parent e57fb5c commit fba8bb6
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 26 deletions.
57 changes: 42 additions & 15 deletions .github/actions/docker/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,13 +63,9 @@ inputs:
default: 'false'
description: 'Generate tag only.'
required: false
CACHE_FROM:
default: 'type=gha'
description: 'Cache from.'
required: false
CACHE_TO:
default: 'type=gha,mode=max'
description: 'Cache to.'
ENABLE_CACHE:
default: 'false'
description: 'Whether to use cache when building the image'
required: false
outputs:
IMAGE_TAG:
Expand Down Expand Up @@ -126,15 +122,31 @@ runs:
run: echo BUILD_ARGS=${{inputs.BUILD_ARGS}} >> $GITHUB_ENV
shell: bash

- name: Build and export to Docker
- name: Build and export to Docker without cache
uses: docker/build-push-action@v6
if: inputs.TAG_ONLY == 'false'
if: inputs.ENABLE_CACHE == 'false'
with:
load: true
tags: |
${{ steps.meta.outputs.tags }}
no-cache: true
file: ${{ inputs.FILE }}
context: ${{ inputs.CONTEXT }}
# cannot use multiple platforms with `load`, build a single arch image for validation purposes in CI
platforms: linux/amd64
build-args: ${{ env.BUILD_ARGS }}
secrets: ${{ env.DOCKER_SECRETS }}

- name: Build and export to Docker with cache
uses: docker/build-push-action@v6
if: inputs.ENABLE_CACHE == 'true'
with:
load: true
tags: |
${{ steps.meta.outputs.tags }}
# cache-from: type=gha
# cache-to: type=gha,mode=max
cache-from: type=gha
cache-to: type=gha,mode=max
no-cache: false
file: ${{ inputs.FILE }}
context: ${{ inputs.CONTEXT }}
# cannot use multiple platforms with `load`, build a single arch image for validation purposes in CI
Expand All @@ -155,16 +167,31 @@ runs:
docker logs test
${{ inputs.CONTAINER_TEST_COMMAND }}
- name: Build and push
if: inputs.PUSH == 'true' # && inputs.TAG_ONY == 'false'
- name: Build and push with cache
if: inputs.PUSH == 'true' && inputs.ENABLE_CACHE == 'true'
uses: docker/build-push-action@v6
with:
push: true
tags: |
${{ steps.meta.outputs.tags }}
cache-from: type=gha
cache-to: type=gha,mode=max
no-cache: false
file: ${{ inputs.FILE }}
context: ${{ inputs.CONTEXT }}
platforms: ${{ inputs.PLATFORMS }}
build-args: ${{ env.BUILD_ARGS }}
secrets: ${{ env.DOCKER_SECRETS }}

- name: Build and push without cache
if: inputs.PUSH == 'true' && inputs.ENABLE_CACHE == 'false'
uses: docker/build-push-action@v6
with:
push: true
tags: |
${{ steps.meta.outputs.tags }}
cache-from: ${{ inputs.CACHE_FROM }}
cache-to: ${{ inputs.CACHE_TO }}}
file: ${{ inputs.FILE }}
no-cache: true
context: ${{ inputs.CONTEXT }}
platforms: ${{ inputs.PLATFORMS }}
build-args: ${{ env.BUILD_ARGS }}
Expand Down
16 changes: 5 additions & 11 deletions .github/workflows/ci-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -106,15 +106,10 @@ on:
type: string
description: ref to pull and build default to github.ref
required: false
CACHE_FROM:
type: string
default: 'type=gha'
description: 'Cache from.'
required: false
CACHE_TO:
type: string
default: 'type=gha,mode=max'
description: 'Cache to.'
ENABLE_DOCKER_BUILD_CACHE:
type: boolean
default: false
description: 'Whether to use cache when building the image'
required: false
## Vault Secrets
VAULT_SECRETS:
Expand Down Expand Up @@ -280,8 +275,7 @@ jobs:
CONTAINER_TEST_RUN_OPTIONS: ${{ inputs.CONTAINER_TEST_RUN_OPTIONS }}
CONTAINER_TEST_COMMAND: ${{ inputs.CONTAINER_TEST_COMMAND }}
OUTPUT_TAG_INDEX: ${{ inputs.OUTPUT_TAG_INDEX }}
CACHE_FROM: ${{ inputs.CACHE_FROM }}
CACHE_TO: ${{ inputs.CACHE_TO }}
ENABLE_CACHE: ${{ inputs.ENABLE_DOCKER_BUILD_CACHE }}
env:
GITHUB_TOKEN: ${{ github.token }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,11 @@ on:
default: .
description: Whenever the WF requires a different path than . for the revision file
required: false
ENABLE_DOCKER_BUILD_CACHE:
type: boolean
default: false
description: 'Whether to use cache when building the image'
required: false
## Vault Secrets
VAULT_SECRETS:
type: string
Expand Down Expand Up @@ -269,6 +274,7 @@ jobs:
VAULT_SECRETS: ${{ inputs.VAULT_SECRETS }}
TELEPORT_APP: ${{ inputs.TELEPORT_APP }}
TELEPORT_PROXY_URL: ${{ inputs.TELEPORT_PROXY_URL }}
ENABLE_DOCKER_BUILD_CACHE: ${{ inputs.ENABLE_DOCKER_BUILD_CACHE }}
secrets:
GH_BOT_DEPLOY_KEY: ${{ secrets.GH_BOT_DEPLOY_KEY }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
Expand Down

0 comments on commit fba8bb6

Please sign in to comment.