From 964b16780db56fb6788c20e3cd0c3af4fa785bf1 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Sun, 29 Mar 2026 12:35:03 -0500 Subject: [PATCH] fix: use Podman instead of non-existent Kaniko binary (#223) Kaniko doesn't provide standalone binary downloads - it's distributed as a container image. The download URL returns 404. Solution: Use Podman which: - Available as standard apt package - Runs rootless without daemon - Works on unprivileged runners - Docker-compatible CLI This avoids both the Docker namespace issue and the missing Kaniko binary. Reviewed-on: https://git.mcintire.me/graham/towerops-web/pulls/223 --- .forgejo/workflows/production.yaml | 35 ++++++++++++++++-------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/.forgejo/workflows/production.yaml b/.forgejo/workflows/production.yaml index ff054f20..f1cf862c 100644 --- a/.forgejo/workflows/production.yaml +++ b/.forgejo/workflows/production.yaml @@ -100,28 +100,31 @@ jobs: echo "tag=${TAG}" >> $GITHUB_OUTPUT echo "Full image tag: ${TAG}" - - name: Install Kaniko + - name: Install Podman run: | - curl -fsSL https://github.com/GoogleContainerTools/kaniko/releases/latest/download/executor-linux-amd64 \ - -o /usr/local/bin/kaniko - chmod +x /usr/local/bin/kaniko + sudo apt-get update + sudo apt-get install -y podman - - name: Build and push with Kaniko + - name: Build and push with Podman run: | IMAGE_TAG="${{ steps.tag.outputs.tag }}" - REGISTRY_AUTH=$(echo -n "${{ secrets.REGISTRY_USER }}:${{ secrets.REGISTRY_PASSWORD }}" | base64 -w 0) - mkdir -p /tmp/kaniko-docker - echo "{\"auths\":{\"${{ secrets.REGISTRY_URL }}\":{\"auth\":\"${REGISTRY_AUTH}\"}}}" \ - > /tmp/kaniko-docker/config.json + # Build image with Podman (rootless, works on unprivileged runners) + podman build \ + --build-arg MIX_ENV=prod \ + --file k8s/Dockerfile \ + --tag "${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${IMAGE_TAG}" \ + --tag "${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:production" \ + . - /usr/local/bin/kaniko \ - --context="${GITHUB_WORKSPACE}" \ - --dockerfile="${GITHUB_WORKSPACE}/k8s/Dockerfile" \ - --build-arg="MIX_ENV=prod" \ - --docker-config=/tmp/kaniko-docker \ - --destination="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${IMAGE_TAG}" \ - --destination="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:production" + # Login and push both tags + echo "${{ secrets.REGISTRY_PASSWORD }}" | podman login \ + --username "${{ secrets.REGISTRY_USER }}" \ + --password-stdin \ + "${{ secrets.REGISTRY_URL }}" + + podman push "${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${IMAGE_TAG}" + podman push "${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:production" update-manifest: name: Update Deployment Manifest