use build container image, add docker setup and login actions #44
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
--- | |
# Build Application and Upload Container Image to Docker Hub | |
name: Build | |
# Events: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows | |
on: | |
# Run workflow on push except for ignored branches and paths | |
push: | |
# Secrets aren't available for dependabot on push. https://docs.github.com/en/enterprise-cloud@latest/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/troubleshooting-the-codeql-workflow#error-403-resource-not-accessible-by-integration-when-using-dependabot | |
branches-ignore: | |
# - 'dependabot/**' | |
- 'cherry-pick-*' | |
paths-ignore: | |
- '**.md' # Ignore documentation changes | |
- '.github/dependabot.yml' # Ignore dependabot changes | |
# Allow user to manually trigger Workflow execution | |
workflow_dispatch: | |
# Set Workflow-level permissions: https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs | |
permissions: | |
contents: read | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
# Set Job-level permissions: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idpermissions | |
permissions: | |
packages: write # Allow `build` job to create packages (push docker image) | |
container: | |
image: registry.access.redhat.com/ubi8/openjdk-17 # Use same build image as Containerfile.multistage | |
services: | |
mysql: | |
image: mysql:8.0 # Use same mysql image from devcontainer.json | |
env: | |
MYSQL_DATABASE: demoapp | |
MYSQL_USER: user | |
MYSQL_PASSWORD: password | |
MYSQL_ROOT_PASSWORD: local | |
# Ports are required only when `container` keyword is not defined | |
ports: | |
- 3306:3306 # Opens tcp port 3306 on the host and service container | |
steps: | |
- name: Clone | |
uses: actions/checkout@v4 # https://github.com/marketplace/actions/checkout | |
# Uncomment line below when `container` keyword is not defined | |
# # Setup Java | |
# - uses: actions/setup-java@v3 # https://github.com/actions/setup-java | |
# with: | |
# distribution: microsoft # Microsoft was selected to match Visual Studio Code Dev Container Java distribuition, see .devcontainer/devcontainer.json. Supported distributions: https://github.com/actions/setup-java#supported-distributions | |
# java-version: '17' # Java version must match `project.properties['java.version']` in pom.xml | |
# Cache Maven dependencies | |
- name: Install and Cache Maven dependencies | |
id: cache | |
uses: actions/cache@v3 # https://github.com/marketplace/actions/cache#using-a-combination-of-restore-and-save-actions | |
with: | |
path: ~/.m2 | |
key: maven-${{ hashFiles('**/pom.xml') }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 # https://github.com/marketplace/actions/docker-setup-qemu | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 # https://github.com/marketplace/actions/docker-setup-build | |
- name: Login to DockerHub | |
uses: docker/login-action@v3 # https://github.com/marketplace/actions/docker-login | |
with: | |
registry: paulgilber/ | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
# Build with Maven and Upload Container Image to Docker Hub | |
- name: Build | |
env: | |
# SPRING_DATASOURCE_URL: jdbc:mysql://localhost:3306/demoapp # Use service name when `container` keyword is defined | |
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/demoapp | |
SPRING_DATASOURCE_USERNAME: root | |
SPRING_DATASOURCE_PASSWORD: local | |
DOCKER_REGISTRY_URL: paulgilber/ # Docker Hub repository: https://hub.docker.com/repository/docker/paulgilber/demoapp-backend | |
DOCKER_REGISTRY_USERNAME: ${{ secrets.DOCKER_REGISTRY_USERNAME }} | |
DOCKER_REGISTRY_PASSWORD: ${{ secrets.DOCKER_REGISTRY_PASSWORD }} | |
run: | | |
mvn package dockerfile:build dockerfile:tag dockerfile:push \ | |
-DDOCKER_REGISTRY_URL=${{ env.DOCKER_REGISTRY_URL }} \ | |
-DDOCKER_REGISTRY_USERNAME=${{ env.DOCKER_REGISTRY_USERNAME }} \ | |
-DDOCKER_REGISTRY_PASSWORD=${{ env.DOCKER_REGISTRY_PASSWORD }} | |
# Uncomment lines below to build with Docker | |
# - name: Build container image | |
# uses: docker/build-push-action@v5 # https://github.com/marketplace/actions/build-and-push-docker-images | |
# with: | |
# context: . | |
# file: Containerfile | |
# push: true | |
# tags: paulgilber/demoapp-backend | |
# cache-from: type=gha | |
# cache-to: type=gha,mode=max |