Docker release #222
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# **what?** | |
# This workflow will generate a series of docker images for dbt and push them to the github container registry | |
# **why?** | |
# Docker images for dbt are used in a number of important places throughout the dbt ecosystem. This is how we keep those images up-to-date. | |
# **when?** | |
# This is triggered manually | |
# **next steps** | |
# - build this into the release workflow (or conversly, break out the different release methods into their own workflow files) | |
name: Docker release | |
permissions: | |
packages: write | |
on: | |
workflow_dispatch: | |
inputs: | |
package: | |
description: The package to release. _One_ of [dbt-core, dbt-redshift, dbt-bigquery, dbt-snowflake, dbt-spark, dbt-postgres] | |
required: true | |
version_number: | |
description: The release version number (i.e. 1.0.0b1). Do not include `latest` tags or a leading `v`! | |
required: true | |
jobs: | |
get_version_meta: | |
name: Get version meta | |
runs-on: ubuntu-latest | |
outputs: | |
major: ${{ steps.version.outputs.major }} | |
minor: ${{ steps.version.outputs.minor }} | |
patch: ${{ steps.version.outputs.patch }} | |
latest: ${{ steps.latest.outputs.latest }} | |
minor_latest: ${{ steps.latest.outputs.minor_latest }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Split version | |
id: version | |
run: | | |
IFS="." read -r MAJOR MINOR PATCH <<< ${{ github.event.inputs.version_number }} | |
echo "major=$MAJOR" >> $GITHUB_OUTPUT | |
echo "minor=$MINOR" >> $GITHUB_OUTPUT | |
echo "patch=$PATCH" >> $GITHUB_OUTPUT | |
- name: Is pkg 'latest' | |
id: latest | |
uses: ./.github/actions/latest-wrangler | |
with: | |
package: ${{ github.event.inputs.package }} | |
new_version: ${{ github.event.inputs.version_number }} | |
gh_token: ${{ secrets.GITHUB_TOKEN }} | |
halt_on_missing: False | |
setup_image_builder: | |
name: Set up docker image builder | |
runs-on: ubuntu-latest | |
needs: [get_version_meta] | |
steps: | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
build_and_push: | |
name: Build images and push to GHCR | |
runs-on: ubuntu-latest | |
needs: [setup_image_builder, get_version_meta] | |
steps: | |
- name: Get docker build arg | |
id: build_arg | |
run: | | |
BUILD_ARG_NAME=$(echo ${{ github.event.inputs.package }} | sed 's/\-/_/g') | |
BUILD_ARG_VALUE=$(echo ${{ github.event.inputs.package }} | sed 's/postgres/core/g') | |
echo "build_arg_name=$BUILD_ARG_NAME" >> $GITHUB_OUTPUT | |
echo "build_arg_value=$BUILD_ARG_VALUE" >> $GITHUB_OUTPUT | |
- name: Log in to the GHCR | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build and push MAJOR.MINOR.PATCH tag | |
uses: docker/build-push-action@v5 | |
with: | |
file: docker/Dockerfile | |
push: True | |
target: ${{ github.event.inputs.package }} | |
build-args: | | |
${{ steps.build_arg.outputs.build_arg_name }}_ref=${{ steps.build_arg.outputs.build_arg_value }}@v${{ github.event.inputs.version_number }} | |
tags: | | |
ghcr.io/dbt-labs/${{ github.event.inputs.package }}:${{ github.event.inputs.version_number }} | |
- name: Build and push MINOR.latest tag | |
uses: docker/build-push-action@v5 | |
if: ${{ needs.get_version_meta.outputs.minor_latest == 'True' }} | |
with: | |
file: docker/Dockerfile | |
push: True | |
target: ${{ github.event.inputs.package }} | |
build-args: | | |
${{ steps.build_arg.outputs.build_arg_name }}_ref=${{ steps.build_arg.outputs.build_arg_value }}@v${{ github.event.inputs.version_number }} | |
tags: | | |
ghcr.io/dbt-labs/${{ github.event.inputs.package }}:${{ needs.get_version_meta.outputs.major }}.${{ needs.get_version_meta.outputs.minor }}.latest | |
- name: Build and push latest tag | |
uses: docker/build-push-action@v5 | |
if: ${{ needs.get_version_meta.outputs.latest == 'True' }} | |
with: | |
file: docker/Dockerfile | |
push: True | |
target: ${{ github.event.inputs.package }} | |
build-args: | | |
${{ steps.build_arg.outputs.build_arg_name }}_ref=${{ steps.build_arg.outputs.build_arg_value }}@v${{ github.event.inputs.version_number }} | |
tags: | | |
ghcr.io/dbt-labs/${{ github.event.inputs.package }}:latest |