name: Docker Image CI on: workflow_dispatch: push: branches: - main jobs: build-and-push: runs-on: ubuntu-latest # 【关键 1】显式指定使用包含 Buildah 的标准镜像 container: image: catthehacker/ubuntu:act-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get Meta id: meta run: | # 你的 Gitea 外部域名 REGISTRY_HOST="gitea.173114.xyz" REPO_LOWER=$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]') SHA_SHORT=$(git rev-parse --short HEAD) echo "REGISTRY_HOST=$REGISTRY_HOST" >> $GITHUB_OUTPUT echo "IMAGE_NAME=$REPO_LOWER" >> $GITHUB_OUTPUT echo "VERSION_SHA=$SHA_SHORT" >> $GITHUB_OUTPUT # 【关键 2】使用 buildah login # 注意:这里必须使用你在上一步生成的 PAT (Secret: GITEA_PACKAGES_TOKEN) - name: Log in to Gitea Registry (Buildah) run: | echo "Logging in to ${{ steps.meta.outputs.REGISTRY_HOST }}..." buildah login \ -u ${{ gitea.actor }} \ -p ${{ secrets.PACKAGES_TOKEN }} \ ${{ steps.meta.outputs.REGISTRY_HOST }} # 【关键 3】使用 buildah build 和 push (无需 Docker Daemon) - name: Build and Push with Buildah env: REGISTRY: ${{ steps.meta.outputs.REGISTRY_HOST }} IMAGE: ${{ steps.meta.outputs.IMAGE_NAME }} TAG_LATEST: latest TAG_SHA: ${{ steps.meta.outputs.VERSION_SHA }} run: | FULL_IMAGE_NAME="$REGISTRY/$IMAGE" echo "Building $FULL_IMAGE_NAME..." # buildah bud = build-using-dockerfile # --layers 开启缓存层加速 buildah bud \ --layers \ --format docker \ -f Dockerfile \ -t "$FULL_IMAGE_NAME:$TAG_LATEST" \ -t "$FULL_IMAGE_NAME:$TAG_SHA" \ . echo "Pushing images..." buildah push "$FULL_IMAGE_NAME:$TAG_LATEST" buildah push "$FULL_IMAGE_NAME:$TAG_SHA"