Skip to content
This repository was archived by the owner on Oct 10, 2025. It is now read-only.

Merge pull request #58 merge from branch 26 - 3 #5

Merge pull request #58 merge from branch 26 - 3

Merge pull request #58 merge from branch 26 - 3 #5

# This GitHub Action workflow builds the Spring Boot application into a Docker image
# and publishes it to Docker Hub.
#
# It triggers on two events:
# 1. A push to the 'master' branch, which tags the image as 'latest'.
# 2. Publishing a new release, which tags the image with the release version (e.g., 'v1.0.0').
name: Publish Docker Image to Docker Hub
on:
push:
branches: [ "master" ]
release:
types: [ published ]
jobs:
build-and-publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up JDK 25
uses: actions/setup-java@v4
with:
java-version: '25'
distribution: 'liberica' # Liberica provides builds for JDK 25
- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@v5
with:
# The image name is defined in pom.xml. This action only generates tags.
images: ${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name }}
tags: |
# Generate tags based on the event
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
# Set 'latest' tag when pushing to the master branch
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/master' }}
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Docker image
run: |
# The 'spring-boot:build-image' goal uses Paketo Buildpacks to create a Docker image.
# The 'pom.xml' is already configured with the base image name.
# We pass the generated tags as a comma-separated list to the 'tags' property.
./mvnw spring-boot:build-image \
-DskipTests \
-Dspring-boot.build-image.publish=true \
-Dspring-boot.build-image.tags="${{ steps.meta.outputs.tags }}"