8181 done <<< "${{ steps.meta.outputs.tags }}"
8282
8383 # Build and push the Docker image with all tags
84- # docker buildx build --platform linux/arm64\
85- # docker buildx build --platform linux/amd64,linux/arm64\
86- docker buildx build --platform linux/amd64\
84+ docker buildx build --platform linux/amd64,linux/arm64\
8785 --file "$dockerfile" \
8886 "${tag_args[@]}" \
8987 --push \
@@ -93,142 +91,144 @@ jobs:
9391 echo "No valid Dockerfile found in $dir"
9492 fi
9593 done
96- # - name: Verify multi-platform support
97- # run: |
98- # MAX_RETRIES=2
99- # RETRY_DELAY=6
100- # for dir in build/images/*/; do
101- # IMAGE_NAME=$(basename "$dir" | tr '[:upper:]' '[:lower:]')
102- # for tag in $(echo "${{ steps.meta.outputs.tags }}" | tr ',' '\n'); do
103- # manifest=$(docker manifest inspect "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag" || echo "error")
104- # if [[ "$manifest" == "error" ]]; then
105- # echo "Manifest not found for $IMAGE_NAME:$tag"
106- # exit 1
107- # fi
108- # amd64_found=$(echo "$manifest" | jq '.manifests[] | select(.platform.architecture == "amd64")')
109- # echo "amd64_found is: $amd64_found"
110- # if [[ -z "$amd64_found" ]]; then
111- # echo "Multi-platform support check failed for $IMAGE_NAME:$tag - missing amd64"
112- # # exit 1
113- # fi
114- # # else
115- # echo "Multi-platform support for $IMAGE_NAME:$tag - have amd64"
116- # done
117- # done
118-
119- build-and-arm :
120- runs-on : ubuntu-latest
121-
122- steps :
123- - name : Checkout repository
124- uses : actions/checkout@v4
125-
126- - name : Set up Docker Buildx
127- uses : docker/setup-buildx-action@v2
128-
129- - name : set up qemu
130- uses : docker/setup-qemu-action@v3.3.0
131- with :
132- platforms : linux/arm64
133-
134- - name : Log in to Docker Hub
135- uses : docker/login-action@v2
136- with :
137- username : ${{ secrets.DOCKER_USERNAME }}
138- password : ${{ secrets.DOCKER_PASSWORD }}
139-
140- - name : Log in to GitHub Container Registry
141- uses : docker/login-action@v2
142- with :
143- registry : ghcr.io
144- username : ${{ github.repository_owner }}
145- password : ${{ secrets.GITHUB_TOKEN }}
146-
147- - name : Log in to Aliyun Container Registry
148- uses : docker/login-action@v2
149- with :
150- registry : registry.cn-hangzhou.aliyuncs.com
151- username : ${{ secrets.ALIREGISTRY_USERNAME }}
152- password : ${{ secrets.ALIREGISTRY_TOKEN }}
153-
154- - name : Extract metadata for Docker (tags, labels)
155- id : meta
156- uses : docker/metadata-action@v5
157- with :
158- tags : |
159- type=ref,event=tag
160- type=schedule
161- type=ref,event=branch
162- type=semver,pattern={{version}}
163- type=semver,pattern=v{{version}}
164- type=semver,pattern=release-{{raw}}
165- type=sha
166- type=raw,value=${{ github.event.inputs.tag }}
167-
168- - name : Build and push Docker images
94+ - name : Verify multi-platform support
16995 run : |
170- IMG_DIR="build/images"
171- for dir in "$IMG_DIR"/*/; do
172- # Find Dockerfile or *.dockerfile in a case-insensitive manner
173- dockerfile=$(find "$dir" -maxdepth 1 -type f \( -iname 'dockerfile' -o -iname '*.dockerfile' \) | head -n 1)
174-
175- if [ -n "$dockerfile" ] && [ -f "$dockerfile" ]; then
176- IMAGE_NAME=$(basename "$dir")
177- echo "Building Docker image for $IMAGE_NAME with tags:"
178-
179- # Initialize tag arguments
180- tag_args=()
181-
182- # Read each tag and append --tag arguments
183- while IFS= read -r tag; do
184- tag_args+=(--tag "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag")
185- # tag_args+=(--tag "ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME:$tag")
186- # tag_args+=(--tag "registry.cn-hangzhou.aliyuncs.com/openimsdk/$IMAGE_NAME:$tag")
187- done <<< "${{ steps.meta.outputs.tags }}"
188-
189- # Build and push the Docker image with all tags
190- docker buildx build --platform linux/arm64 \
191- --file "$dockerfile" \
192- "${tag_args[@]}" \
193- --push \
194- "."
195-
196- else
197- echo "No valid Dockerfile found in $dir"
198- fi
96+ MAX_RETRIES=2
97+ RETRY_DELAY=6
98+ for dir in build/images/*/; do
99+ IMAGE_NAME=$(basename "$dir" | tr '[:upper:]' '[:lower:]')
100+ for tag in $(echo "${{ steps.meta.outputs.tags }}" | tr ',' '\n'); do
101+ manifest=$(docker manifest inspect "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag" || echo "error")
102+ if [[ "$manifest" == "error" ]]; then
103+ echo "Manifest not found for $IMAGE_NAME:$tag"
104+ exit 1
105+ fi
106+ amd64_found=$(echo "$manifest" | jq '.manifests[] | select(.platform.architecture == "amd64")')
107+ arm64_found=$(echo "$manifest" | jq '.manifests[] | select(.platform.architecture == "arm64")')
108+ echo "amd64_found is: $amd64_found"
109+ echo "arm64_found is: $arm64_found"
110+ if [[ -z "$amd64_found" ]]; then
111+ echo "Multi-platform support check failed for $IMAGE_NAME:$tag - missing amd64"
112+ # exit 1
113+ fi
114+ # else
115+ echo "Multi-platform support for $IMAGE_NAME:$tag - have amd64"
116+ done
199117 done
200- # - name: Verify multi-platform support
201- # run: |
202- # MAX_RETRIES=6
203- # RETRY_DELAY=10
204- # for ((i=1; i<=MAX_RETRIES; i++)); do
205- # manifest=$(docker manifest inspect "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag" || echo "error")
206- # if [[ "$manifest" != "error" ]]; then
207- # break
208- # fi
209- # if [[ $i -eq $MAX_RETRIES ]]; then
210- # echo "Manifest not found for $IMAGE_NAME:$tag after $MAX_RETRIES retries"
211- # exit 1
212- # fi
213- # echo "Retry $i/$MAX_RETRIES: Manifest not found for $IMAGE_NAME:$tag, retrying in $RETRY_DELAY seconds..."
214- # sleep $RETRY_DELAY
215- # done
216-
217- # for dir in build/images/*/; do
218- # IMAGE_NAME=$(basename "$dir" | tr '[:upper:]' '[:lower:]')
219- # for tag in $(echo "${{ steps.meta.outputs.tags }}" | tr ',' '\n'); do
220- # manifest=$(docker manifest inspect "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag" || echo "error")
221- # if [[ "$manifest" == "error" ]]; then
222- # echo "Manifest not found for $IMAGE_NAME:$tag"
223- # exit 1
224- # fi
225- # arm64_found=$(echo "$manifest" | jq '.manifests[] | select(.platform.architecture == "arm64")')
226- # echo "arm64_found is: $arm64_found"
227- # if [[ -z "$arm64_found" ]]; then
228- # echo "Multi-platform support check failed for $IMAGE_NAME:$tag - missing arm64"
229- # exit 1
230- # fi
231- # # else
232- # echo "Multi-platform support for $IMAGE_NAME:$tag - have arm64"
233- # done
234- # done
118+
119+ # build-and-arm:
120+ # runs-on: ubuntu-latest
121+
122+ # steps:
123+ # - name: Checkout repository
124+ # uses: actions/checkout@v4
125+
126+ # - name: Set up Docker Buildx
127+ # uses: docker/setup-buildx-action@v2
128+
129+ # - name: set up qemu
130+ # uses: docker/setup-qemu-action@v3.3.0
131+ # with:
132+ # platforms: linux/arm64
133+
134+ # - name: Log in to Docker Hub
135+ # uses: docker/login-action@v2
136+ # with:
137+ # username: ${{ secrets.DOCKER_USERNAME }}
138+ # password: ${{ secrets.DOCKER_PASSWORD }}
139+
140+ # - name: Log in to GitHub Container Registry
141+ # uses: docker/login-action@v2
142+ # with:
143+ # registry: ghcr.io
144+ # username: ${{ github.repository_owner }}
145+ # password: ${{ secrets.GITHUB_TOKEN }}
146+
147+ # - name: Log in to Aliyun Container Registry
148+ # uses: docker/login-action@v2
149+ # with:
150+ # registry: registry.cn-hangzhou.aliyuncs.com
151+ # username: ${{ secrets.ALIREGISTRY_USERNAME }}
152+ # password: ${{ secrets.ALIREGISTRY_TOKEN }}
153+
154+ # - name: Extract metadata for Docker (tags, labels)
155+ # id: meta
156+ # uses: docker/metadata-action@v5
157+ # with:
158+ # tags: |
159+ # type=ref,event=tag
160+ # type=schedule
161+ # type=ref,event=branch
162+ # type=semver,pattern={{version}}
163+ # type=semver,pattern=v{{version}}
164+ # type=semver,pattern=release-{{raw}}
165+ # type=sha
166+ # type=raw,value=${{ github.event.inputs.tag }}
167+
168+ # - name: Build and push Docker images
169+ # run: |
170+ # IMG_DIR="build/images"
171+ # for dir in "$IMG_DIR"/*/; do
172+ # # Find Dockerfile or *.dockerfile in a case-insensitive manner
173+ # dockerfile=$(find "$dir" -maxdepth 1 -type f \( -iname 'dockerfile' -o -iname '*.dockerfile' \) | head -n 1)
174+
175+ # if [ -n "$dockerfile" ] && [ -f "$dockerfile" ]; then
176+ # IMAGE_NAME=$(basename "$dir")
177+ # echo "Building Docker image for $IMAGE_NAME with tags:"
178+
179+ # # Initialize tag arguments
180+ # tag_args=()
181+
182+ # # Read each tag and append --tag arguments
183+ # while IFS= read -r tag; do
184+ # tag_args+=(--tag "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag")
185+ # # tag_args+=(--tag "ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME:$tag")
186+ # # tag_args+=(--tag "registry.cn-hangzhou.aliyuncs.com/openimsdk/$IMAGE_NAME:$tag")
187+ # done <<< "${{ steps.meta.outputs.tags }}"
188+
189+ # # Build and push the Docker image with all tags
190+ # docker buildx build --platform linux/arm64 \
191+ # --file "$dockerfile" \
192+ # "${tag_args[@]}" \
193+ # --push \
194+ # "."
195+
196+ # else
197+ # echo "No valid Dockerfile found in $dir"
198+ # fi
199+ # done
200+ # - name: Verify multi-platform support
201+ # run: |
202+ # MAX_RETRIES=6
203+ # RETRY_DELAY=10
204+ # for ((i=1; i<=MAX_RETRIES; i++)); do
205+ # manifest=$(docker manifest inspect "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag" || echo "error")
206+ # if [[ "$manifest" != "error" ]]; then
207+ # break
208+ # fi
209+ # if [[ $i -eq $MAX_RETRIES ]]; then
210+ # echo "Manifest not found for $IMAGE_NAME:$tag after $MAX_RETRIES retries"
211+ # exit 1
212+ # fi
213+ # echo "Retry $i/$MAX_RETRIES: Manifest not found for $IMAGE_NAME:$tag, retrying in $RETRY_DELAY seconds..."
214+ # sleep $RETRY_DELAY
215+ # done
216+
217+ # for dir in build/images/*/; do
218+ # IMAGE_NAME=$(basename "$dir" | tr '[:upper:]' '[:lower:]')
219+ # for tag in $(echo "${{ steps.meta.outputs.tags }}" | tr ',' '\n'); do
220+ # manifest=$(docker manifest inspect "${{ secrets.DOCKER_USERNAME }}/$IMAGE_NAME:$tag" || echo "error")
221+ # if [[ "$manifest" == "error" ]]; then
222+ # echo "Manifest not found for $IMAGE_NAME:$tag"
223+ # exit 1
224+ # fi
225+ # arm64_found=$(echo "$manifest" | jq '.manifests[] | select(.platform.architecture == "arm64")')
226+ # echo "arm64_found is: $arm64_found"
227+ # if [[ -z "$arm64_found" ]]; then
228+ # echo "Multi-platform support check failed for $IMAGE_NAME:$tag - missing arm64"
229+ # exit 1
230+ # fi
231+ # # else
232+ # echo "Multi-platform support for $IMAGE_NAME:$tag - have arm64"
233+ # done
234+ # done
0 commit comments