-
Notifications
You must be signed in to change notification settings - Fork 70
152 lines (130 loc) · 6.47 KB
/
docker-milestone-release.yml
File metadata and controls
152 lines (130 loc) · 6.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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
- name: digitaltwinregistry
path: basyx.aasdigitaltwinregistry/basyx.digitaltwinregistry.component
steps:
- name: Checkout Code
uses: actions/checkout@v6
- name: Set up QEMU
uses: docker/setup-qemu-action@v4
with:
platforms: linux/amd64,linux/arm64,linux/arm/v7
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Log in to Docker Hub
uses: docker/login-action@v4
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') && matrix.name != 'digitaltwinregistry'
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') || matrix.name == 'digitaltwinregistry' }}
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@v7
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 }}