fix build and cleanup steps if Dockerfile.aarch64 does not exist
build-and-push.yaml / release-and-build (push) Canceled after 1m44s
build-and-push.yaml / release-and-build (push) Canceled after 1m44s
This commit is contained in:
1 parent
0d1bf8ecde
commit
d25f1697c5
1 file changed
+43
-19
@@ -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
|
||||||
|
|||||||
Reference in new issue
Block a user