Skip to content

Create, Test and publish Docker image #437

Create, Test and publish Docker image

Create, Test and publish Docker image #437

Workflow file for this run

name: Create, Test and publish Docker image
on:
push:
schedule:
- cron: "15 2 * * *" # run at 2:15 AM UTC
workflow_dispatch:
inputs:
version:
type: string
required: true
description: semver - Version of dbt-oracle the image will use. Also the new Version Tag of this image.
default: ""
env:
DEV_TAG: untested
DOCKER_IO_REPO: itatm/dbt-oracle
DBT_ORACLE_VERSION: ${{ github.event.inputs.version == '' && ' ' || format('=={0}', github.event.inputs.version) }}
jobs:
# Build a Version of the image tage with 'untested'.
build-and-push-untested-image-to-ghcr:
runs-on: ubuntu-latest
steps:
- name: Echo Env Vars through Context
run: |
echo "$GITHUB_CONTEXT"
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=raw,value=${{ env.DEV_TAG }}
- name: Build and push untested Docker image to GHCR
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-to: type=gha,mode=max
build-args: |
DBT_ORACLE_VERSION=${{ env.DBT_ORACLE_VERSION }}
outputs:
imagename: ${{ steps.meta.outputs.tags }}
# Use the Image taged with 'untested' and run it agains a oraclexe servicecontainer to check if everything is working
test-untested-image:
needs: build-and-push-untested-image-to-ghcr
runs-on: ubuntu-latest
container:
image: ${{ needs.build-and-push-untested-image-to-ghcr.outputs.imagename }}
services:
oraclexe:
image: container-registry.oracle.com/database/express:21.3.0-xe
env:
ORACLE_PWD: notsecret
ports:
- 1521:1521
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Test image - dbt debug against oracle db
run: |
dbt --version
cd src/test/dbt_test && dbt debug --profiles-dir=.
# If the test was positive we rebuild the Image from cache and publish it to GHCR and Dockerhub
publish-tested-image:
needs: test-untested-image
if: github.event_name != 'push'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_KEY }}
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Publish
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/${{ github.repository }}
docker.io/${{ env.DOCKER_IO_REPO }}
tags: |
type=semver,pattern={{version}},value=${{ inputs.version }},enable=${{ github.event_name == 'workflow_dispatch' }}
type=schedule,pattern=nightly,enable=${{ github.event_name == 'schedule' }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
DBT_ORACLE_VERSION=${{ env.DBT_ORACLE_VERSION }}