fix build and cleanup steps if Dockerfile.aarch64 does not exist
build-and-push.yaml / release-and-build (push) Canceled after 1m44s

This commit is contained in:
pi-farm committed 2026-10-07 10:31:35 +00:00
1 parent 0d1bf8ecde
commit d25f1697c5
1 file changed
+43 -19
+43 -19
View File
@@ -143,26 +143,40 @@ jobs:
BASE_SHA=$(docker buildx imagetools inspect $BASE --format '{{json .Manifest.Digest}}' 2>/dev/null | tr -d '"' || echo "unknown") BASE_SHA=$(docker buildx imagetools inspect $BASE --format '{{json .Manifest.Digest}}' 2>/dev/null | tr -d '"' || echo "unknown")
# Bereite die Tags für den initialen Build vor (Gitea immer, Docker Hub optional) # AMD64 ist immer das primäre Target
AMD_TAGS=("-t" "$IMAGE_GITEA:tmp-amd64") AMD_TAGS=("-t" "$IMAGE_GITEA:tmp-amd64")
ARM_TAGS=("-t" "$IMAGE_GITEA:tmp-arm64") GITEA_SOURCES=("$IMAGE_GITEA:tmp-amd64")
if [[ "$PUSH" == *"dockerhub"* ]]; then if [[ "$PUSH" == *"dockerhub"* ]]; then
AMD_TAGS+=("-t" "$DOCKERHUB_REPO:tmp-amd64") AMD_TAGS+=("-t" "$DOCKERHUB_REPO:tmp-amd64")
ARM_TAGS+=("-t" "$DOCKERHUB_REPO:tmp-arm64") DH_SOURCES=("$DOCKERHUB_REPO:tmp-amd64")
fi fi
# Build AMD64 & Push zu allen Zielen # 1. Build AMD64 & Push
docker buildx build "${DOCKER_ARGS[@]}" "${AMD_TAGS[@]}" \ docker buildx build "${DOCKER_ARGS[@]}" "${AMD_TAGS[@]}" \
--pull --platform linux/amd64 -f Dockerfile \ --pull --platform linux/amd64 -f Dockerfile \
--label "pi_farm.base_digest=$BASE_SHA" --label "pi_farm.args_hash=$ARGS_HASH" --push . --label "pi_farm.base_digest=$BASE_SHA" --label "pi_farm.args_hash=$ARGS_HASH" --push .
# Build ARM64 & Push zu allen Zielen # 2. Prüfung auf ARM64 Dockerfile
docker buildx build "${DOCKER_ARGS[@]}" "${ARM_TAGS[@]}" \ if [ -f "Dockerfile.aarch64" ]; then
--pull --platform linux/arm64 -f Dockerfile.aarch64 \ echo "⚙️ Dockerfile.aarch64 gefunden. Baue ARM64 Image..."
--label "pi_farm.base_digest=$BASE_SHA" --label "pi_farm.args_hash=$ARGS_HASH" --push .
# 1. Manifest auf Gitea erstellen (aus Gitea Temp-Tags) ARM_TAGS=("-t" "$IMAGE_GITEA:tmp-arm64")
GITEA_SOURCES+=("$IMAGE_GITEA:tmp-arm64")
if [[ "$PUSH" == *"dockerhub"* ]]; then
ARM_TAGS+=("-t" "$DOCKERHUB_REPO:tmp-arm64")
DH_SOURCES+=("$DOCKERHUB_REPO:tmp-arm64")
fi
docker buildx build "${DOCKER_ARGS[@]}" "${ARM_TAGS[@]}" \
--pull --platform linux/arm64 -f Dockerfile.aarch64 \
--label "pi_farm.base_digest=$BASE_SHA" --label "pi_farm.args_hash=$ARGS_HASH" --push .
else
echo "ℹ️ Keine Dockerfile.aarch64 gefunden. ARM64 Build wird übersprungen."
fi
# 3. Manifest auf Gitea erstellen (nutzt nur die tatsächlich gebauten Temp-Tags)
GITEA_MANIFEST_TAGS=("-t" "$IMAGE_GITEA:$TAG") GITEA_MANIFEST_TAGS=("-t" "$IMAGE_GITEA:$TAG")
if [[ "$BUILD_TAG_LATEST" == "y" ]]; then if [[ "$BUILD_TAG_LATEST" == "y" ]]; then
GITEA_MANIFEST_TAGS+=("-t" "$IMAGE_GITEA:latest") GITEA_MANIFEST_TAGS+=("-t" "$IMAGE_GITEA:latest")
@@ -170,19 +184,18 @@ jobs:
docker buildx imagetools create \ docker buildx imagetools create \
--annotation "index:pi_farm.base_digest=$BASE_SHA" --annotation "index:pi_farm.args_hash=$ARGS_HASH" \ --annotation "index:pi_farm.base_digest=$BASE_SHA" --annotation "index:pi_farm.args_hash=$ARGS_HASH" \
"${GITEA_MANIFEST_TAGS[@]}" $IMAGE_GITEA:tmp-amd64 $IMAGE_GITEA:tmp-arm64 "${GITEA_MANIFEST_TAGS[@]}" "${GITEA_SOURCES[@]}"
# 2. Manifest auf Docker Hub erstellen (aus Docker Hub Temp-Tags!) # 4. Manifest auf Docker Hub erstellen
if [[ "$PUSH" == *"dockerhub"* ]]; then if [[ "$PUSH" == *"dockerhub"* ]]; then
DH_MANIFEST_TAGS=("-t" "$DOCKERHUB_REPO:$TAG") DH_MANIFEST_TAGS=("-t" "$DOCKERHUB_REPO:$TAG")
if [[ "$BUILD_TAG_LATEST" == "y" ]]; then if [[ "$BUILD_TAG_LATEST" == "y" ]]; then
DH_MANIFEST_TAGS+=("-t" "$DOCKERHUB_REPO:latest") DH_MANIFEST_TAGS+=("-t" "$DOCKERHUB_REPO:latest")
fi fi
# WICHTIG: Hier werden jetzt als Quelle die Docker Hub Temp-Tags genutzt!
docker buildx imagetools create \ docker buildx imagetools create \
--annotation "index:pi_farm.base_digest=$BASE_SHA" --annotation "index:pi_farm.args_hash=$ARGS_HASH" \ --annotation "index:pi_farm.base_digest=$BASE_SHA" --annotation "index:pi_farm.args_hash=$ARGS_HASH" \
"${DH_MANIFEST_TAGS[@]}" $DOCKERHUB_REPO:tmp-amd64 $DOCKERHUB_REPO:tmp-arm64 "${DH_MANIFEST_TAGS[@]}" "${DH_SOURCES[@]}"
fi fi
- name: Update Documentation and Compose - name: Update Documentation and Compose
@@ -436,17 +449,23 @@ jobs:
TOKEN=$(curl -s -X POST "https://hub.docker.com/v2/users/login/" \ TOKEN=$(curl -s -X POST "https://hub.docker.com/v2/users/login/" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d "{\"username\": \"${{ secrets.DOCKERHUB_USERNAME }}\", \"password\": \"${{ secrets.DOCKERHUB_TOKEN }}\"}" | jq -r .token) -d "{\"username\": \"${{ secrets.DOCKERHUB_USERNAME }}\", \"password\": \"${{ secrets.DOCKERHUB_TOKEN }}\"}" | jq -r .token || echo "")
if [ "$TOKEN" != "null" ] && [ -n "$TOKEN" ]; then if [ "$TOKEN" != "null" ] && [ -n "$TOKEN" ]; then
REPO_PURE=${{ steps.prep.outputs.repo_pure }} REPO_PURE=${{ steps.prep.outputs.repo_pure }}
DH_USER="${{ secrets.DOCKERHUB_USERNAME }}" DH_USER="${{ secrets.DOCKERHUB_USERNAME }}"
for t in tmp-amd64 tmp-arm64; do # Nur existierende Tags löschen
CLEAN_TAGS=("tmp-amd64")
if [ -f "Dockerfile.aarch64" ]; then
CLEAN_TAGS+=("tmp-arm64")
fi
for t in "${CLEAN_TAGS[@]}"; do
echo "Deleting tag $t..." echo "Deleting tag $t..."
STATUS=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE \ STATUS=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE \
"https://hub.docker.com/v2/repositories/${DH_USER}/${REPO_PURE}/tags/$t/" \ "https://hub.docker.com/v2/repositories/${DH_USER}/${REPO_PURE}/tags/$t/" \
-H "Authorization: JWT ${TOKEN}") -H "Authorization: JWT ${TOKEN}" || echo "000")
echo "Status: $STATUS" echo "Status: $STATUS"
done done
echo "✅ Temp. tags deleted." echo "✅ Temp. tags deleted."
@@ -459,9 +478,14 @@ jobs:
ORG_NAME=$(echo "${{ gitea.repository }}" | cut -d'/' -f1) ORG_NAME=$(echo "${{ gitea.repository }}" | cut -d'/' -f1)
REPO_NAME=$(echo "${{ gitea.repository }}" | cut -d'/' -f2) REPO_NAME=$(echo "${{ gitea.repository }}" | cut -d'/' -f2)
for t in tmp-amd64 tmp-arm64; do CLEAN_TAGS=("tmp-amd64")
curl -s -X DELETE "https://git.pi-farm.de/api/v1/packages/$ORG_NAME/container/$REPO_NAME/$t" -H "Authorization: token $TOKEN" if [ -f "Dockerfile.aarch64" ]; then
curl -s -X DELETE "https://git.pi-farm.de/api/v1/packages/${ORG_NAME,,}/container/${REPO_NAME,,}/$t" -H "Authorization: token $TOKEN" CLEAN_TAGS+=("tmp-arm64")
fi
for t in "${CLEAN_TAGS[@]}"; do
curl -s -X DELETE "https://git.pi-farm.de/api/v1/packages/$ORG_NAME/container/$REPO_NAME/$t" -H "Authorization: token $TOKEN" || true
curl -s -X DELETE "https://git.pi-farm.de/api/v1/packages/${ORG_NAME,,}/container/${REPO_NAME,,}/$t" -H "Authorization: token $TOKEN" || true
done done
- name: Cleanup Docker Artifacts - name: Cleanup Docker Artifacts