Create, Test and publish Docker image #267
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
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@v3 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
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@v4 | |
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@v3 | |
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@v3 | |
- 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@v3 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Login to Docker Hub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_KEY }} | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
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@v4 | |
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@v3 | |
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 }} |