2.0.0-milestone-07 #8
Workflow file for this run
This file contains hidden or 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: 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 }} |