name: Build ci-python image # Baut das ci-python-Image und pusht es in die Gitea-Container-Registry. # Tags: :latest (mitlaufend) + : (unveränderlich, zum Pinnen in Workflows). # # **Ohne Docker-Daemon** (devops #419). Seit dem Umzug der internen Zone (#410) # reicht kein Runner mehr den Docker-Socket in den Job - wer ihn hat, ist root # auf dem Wirt. Kaniko braucht ihn nicht: Es fuehrt die RUN-Schritte direkt in # seinem eigenen Container aus und schreibt die Schichten selbst. Buildah ging # nicht, es braucht fuer RUN einen User-Namespace, und den verweigert der # Job-Container ohne Zusatzrechte. # # Kaniko laeuft als **Docker-Schritt** (`uses: docker://`), nicht als # Job-Container: act_runner haelt einen Job-Container mit /bin/sleep am Leben, # und das Kaniko-Image hat sleep nur unter /busybox. Der Docker-Schritt startet # mit dem Einstiegspunkt des Images und bekommt den Arbeitsbereich eingehaengt. # # Image: der gepflegte Fork osscontainertools/kaniko. Das Projekt von Google ist # seit Mai 2025 archiviert. Per Digest gepinnt; auffrischen mit # docker buildx imagetools inspect ghcr.io/osscontainertools/kaniko:debug # # **Kein Schicht-Cache, mit Absicht.** Der woechentliche Lauf ist fuer # Sicherheits-Updates da. Mit Cache kaeme `apt-get update` nie neu zum Zug - # die Zeile aendert sich nicht, also gaelte die alte Schicht. Ohne Cache dauert # der Bau unter einer Minute. # # Secrets: REGISTRY_USER (Gitea-User) + REGISTRY_TOKEN (PAT, Scope package:write). on: push: branches: [main] paths: - 'python/Dockerfile' - '.gitea/workflows/build-ci-python.yml' schedule: - cron: '0 3 * * 1' # wöchentlicher Rebuild für Basis-Sicherheitsupdates workflow_dispatch: env: REGISTRY: gitea.inmedias.it IMAGE: sko/ci-python jobs: build: runs-on: inmedias-zone steps: - uses: actions/checkout@v4 # Kaniko liest die Zugangsdaten aus $DOCKER_CONFIG/config.json. Der # Docker-Schritt sieht vom Job-Container nur den Arbeitsbereich, also # muss die Datei dort liegen - ausserhalb von python/, damit sie nicht # im Build-Kontext landet. - name: Registry-Zugang fuer Kaniko env: REGISTRY_USER: ${{ secrets.REGISTRY_USER }} REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} run: | mkdir -p .kaniko-docker auth=$(printf '%s:%s' "$REGISTRY_USER" "$REGISTRY_TOKEN" | base64 -w0) printf '{"auths":{"%s":{"auth":"%s"}}}' "$REGISTRY" "$auth" > .kaniko-docker/config.json - name: Build & push uses: docker://ghcr.io/osscontainertools/kaniko:debug@sha256:7ab44d0131c3051b6dea128067e258c7afb5c4815082a93b9cf6c624f2140bf0 env: DOCKER_CONFIG: ${{ github.workspace }}/.kaniko-docker with: args: >- --context=dir://${{ github.workspace }}/python --dockerfile=${{ github.workspace }}/python/Dockerfile --destination=${{ env.REGISTRY }}/${{ env.IMAGE }}:latest --destination=${{ env.REGISTRY }}/${{ env.IMAGE }}:${{ github.sha }} - name: Registry-Zugang entfernen if: always() run: rm -rf .kaniko-docker