Skip to content

2.0.0-milestone-07

2.0.0-milestone-07 #8

name: Build and Push Docker Images on Release
on:
release:
types: [published]
env:
DOCKER_NAMESPACE: eclipsebasyx
jobs:
build-and-push-milestone-release:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- name: aas-environment
path: basyx.aasenvironment/basyx.aasenvironment.component
- name: aas-repository
path: basyx.aasrepository/basyx.aasrepository.component
- name: submodel-repository
path: basyx.submodelrepository/basyx.submodelrepository.component
- name: submodel-service
path: basyx.submodelservice/basyx.submodelservice.component
- name: conceptdescription-repository
path: basyx.conceptdescriptionrepository/basyx.conceptdescriptionrepository.component
- name: aas-discovery
path: basyx.aasdiscoveryservice/basyx.aasdiscoveryservice.component
- name: aasxfileserver
path: basyx.aasxfileserver/basyx.aasxfileserver.component
- name: aas-registry-kafka-mem
path: basyx.aasregistry/basyx.aasregistry-service-release-kafka-mem/src/main/docker
- name: aas-registry-kafka-mongodb
path: basyx.aasregistry/basyx.aasregistry-service-release-kafka-mongodb/src/main/docker
- name: aas-registry-log-mem
path: basyx.aasregistry/basyx.aasregistry-service-release-log-mem/src/main/docker
- name: aas-registry-log-mongodb
path: basyx.aasregistry/basyx.aasregistry-service-release-log-mongodb/src/main/docker
- name: submodel-registry-kafka-mem
path: basyx.submodelregistry/basyx.submodelregistry-service-release-kafka-mem/src/main/docker
- name: submodel-registry-kafka-mongodb
path: basyx.submodelregistry/basyx.submodelregistry-service-release-kafka-mongodb/src/main/docker
- name: submodel-registry-log-mem
path: basyx.submodelregistry/basyx.submodelregistry-service-release-log-mem/src/main/docker
- name: submodel-registry-log-mongodb
path: basyx.submodelregistry/basyx.submodelregistry-service-release-log-mongodb/src/main/docker
steps:
- name: Checkout Code
uses: actions/checkout@v5
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: linux/amd64,linux/arm64,linux/arm/v7
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
- name: Set up JDK 17
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'
cache: maven
# Set the project version from the release tag
- name: Set project version from tag
run: |
echo "Setting project version from release tag: ${{ github.event.release.tag_name }}"
mvn --batch-mode versions:set -DnewVersion=${{ github.event.release.tag_name }} -DgenerateBackupPoms=false
- name: Build all modules first
run: mvn clean install -DskipTests
# Process registry modules
- name: Process Registry Module
id: registry_module
if: contains(matrix.name, 'registry')
run: |
# Get the module path without /src/main/docker
MODULE_PATH=$(echo ${{ matrix.path }} | sed 's|/src/main/docker||')
echo "Building registry module at: ${MODULE_PATH}"
# Build with dockerbuild profile
mvn clean package -DskipTests -Pdockerbuild "-Ddocker.namespace=${{ env.DOCKER_NAMESPACE }}" "-Ddocker.image.tag=${{ github.event.release.tag_name }}" -f ${MODULE_PATH}/pom.xml
# Create maven directory for Docker
mkdir -p "${{ matrix.path }}/maven"
# Find the JAR file using multiple search patterns
echo "Looking for JAR files in standard target directory..."
JAR_FILE=$(find "${MODULE_PATH}/target" -name "*.jar" -not -name "*sources*" -not -name "*javadoc*" -not -name "*-tests.jar" | head -n 1)
if [ -z "$JAR_FILE" ]; then
echo "Not found in standard location, trying docker build location..."
JAR_FILE=$(find "${MODULE_PATH}" -path "*/docker/*/${{ env.DOCKER_NAMESPACE }}/*/${{ github.event.release.tag_name }}/build/maven/*[!tests].jar" | head -n 1)
fi
# If still not found, try a more aggressive search
if [ -z "$JAR_FILE" ]; then
echo "Still not found, trying broader search..."
JAR_FILE=$(find "${MODULE_PATH}" -name "*.jar" -not -name "*sources*" -not -name "*javadoc*" -not -name "*-tests.jar" | head -n 1)
fi
if [ -z "$JAR_FILE" ]; then
echo "No JAR file found! Listing directory structure:"
find "${MODULE_PATH}" -type d | sort
echo "Listing all JAR files:"
find "${MODULE_PATH}" -name "*.jar" | sort
exit 1
fi
echo "Found JAR: ${JAR_FILE}"
cp "${JAR_FILE}" "${{ matrix.path }}/maven/"
# Save the JAR name for Docker
JAR_BASENAME=$(basename "${JAR_FILE}" .jar)
echo "FINAL_NAME=${JAR_BASENAME}" >> $GITHUB_ENV
# Process non-registry modules
- name: Process Non-Registry Module
id: non_registry_module
if: "!contains(matrix.name, 'registry')"
run: |
echo "Processing non-registry module"
echo "FINAL_NAME=" >> $GITHUB_ENV
# Build and push Docker image
- name: Build and Push Docker Image
uses: docker/build-push-action@v6
with:
context: ${{ matrix.path }}
file: ${{ matrix.path }}/Dockerfile
push: true
platforms: linux/amd64,linux/arm64,linux/arm/v7
tags: |
${{ env.DOCKER_NAMESPACE }}/${{ matrix.name }}:${{ github.event.release.tag_name }}
build-args: |
FINAL_NAME=${{ env.FINAL_NAME }}
- name: Verify Docker Image
run: |
echo "Verifying Docker image: ${{ env.DOCKER_NAMESPACE }}/${{ matrix.name }}:${{ github.event.release.tag_name }}"
docker pull ${{ env.DOCKER_NAMESPACE }}/${{ matrix.name }}:${{ github.event.release.tag_name }}