| 
40 | 40 |         uses: actions/setup-python@v4  | 
41 | 41 |         with:  | 
42 | 42 |           python-version: ${{ matrix.python }}  | 
 | 43 | +      - name: Install system deps for duplicity build  | 
 | 44 | +        run: |  | 
 | 45 | +          sudo apt-get update  | 
 | 46 | +          sudo apt-get install -y librsync-dev  | 
43 | 47 |       - name: Generate cache key CACHE  | 
44 | 48 |         run:  | 
45 | 49 |           echo "CACHE=${{ secrets.CACHE_DATE }} ${{ runner.os }} $(python -VV |  | 
 | 
59 | 63 |       # Run tests  | 
60 | 64 |       - run: poetry run pytest --prebuild  | 
61 | 65 |   build-push:  | 
 | 66 | +    permissions:  | 
 | 67 | +      contents: read  | 
 | 68 | +      packages: write  | 
 | 69 | +      pull-requests: write  | 
62 | 70 |     runs-on: ubuntu-24.04  | 
63 | 71 |     services:  | 
64 | 72 |       registry:  | 
@@ -98,11 +106,50 @@ jobs:  | 
98 | 106 |       - name: Compute image name  | 
99 | 107 |         id: image_name_compute  | 
100 | 108 |         run: |  | 
 | 109 | +          owner="${GITHUB_REPOSITORY_OWNER,,}"  | 
 | 110 | +          repo="${GITHUB_REPOSITORY#*/}"  | 
101 | 111 |           if [ "${{ matrix.target }}" = "base" ]; then  | 
102 |  | -            echo "::set-output name=image_name::${{ env.DOCKER_IMAGE_NAME }}"  | 
 | 112 | +            echo "image_name=${owner}/${repo}" >> "$GITHUB_OUTPUT"  | 
103 | 113 |           else  | 
104 |  | -            echo "::set-output name=image_name::${{ env.DOCKER_IMAGE_NAME }}-${{ matrix.target }}"  | 
 | 114 | +            echo "image_name=${owner}/${repo}-${{ matrix.target }}" >> "$GITHUB_OUTPUT"  | 
105 | 115 |           fi  | 
 | 116 | +      - name: Docker meta for PR test image  | 
 | 117 | +        if: ${{ github.event_name == 'pull_request' }}  | 
 | 118 | +        id: docker_meta_pr  | 
 | 119 | +        uses: docker/metadata-action@v5  | 
 | 120 | +        with:  | 
 | 121 | +          images: ghcr.io/${{ steps.image_name_compute.outputs.image_name }}  | 
 | 122 | +          tags: |  | 
 | 123 | +            type=raw,value=test-pr${{ github.event.number }}  | 
 | 124 | +
  | 
 | 125 | +      - name: Login to GHCR for PR (same-repo only)  | 
 | 126 | +        if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository }}  | 
 | 127 | +        uses: docker/login-action@v3  | 
 | 128 | +        with:  | 
 | 129 | +          registry: ghcr.io  | 
 | 130 | +          username: ${{ secrets.BOT_LOGIN }}  | 
 | 131 | +          password: ${{ secrets.BOT_TOKEN }}  | 
 | 132 | + | 
 | 133 | +      - name: Build & push PR test image (GHCR)  | 
 | 134 | +        if:  | 
 | 135 | +          ${{ github.event_name == 'pull_request' &&  | 
 | 136 | +          github.event.pull_request.head.repo.full_name == github.repository }}  | 
 | 137 | +        uses: docker/build-push-action@v5  | 
 | 138 | +        with:  | 
 | 139 | +          context: .  | 
 | 140 | +          file: ./Dockerfile  | 
 | 141 | +          platforms: |  | 
 | 142 | +            linux/amd64  | 
 | 143 | +            linux/arm64/v8  | 
 | 144 | +          target: ${{ matrix.target }}  | 
 | 145 | +          push: true  | 
 | 146 | +          load: false  | 
 | 147 | +          cache-from: type=local,src=/tmp/.buildx-cache  | 
 | 148 | +          cache-to: type=local,dest=/tmp/.buildx-cache,mode=max  | 
 | 149 | +          labels: ${{ steps.docker_meta_pr.outputs.labels }}  | 
 | 150 | +          tags: ${{ steps.docker_meta_pr.outputs.tags }}  | 
 | 151 | + | 
 | 152 | + | 
106 | 153 |       - name: Docker meta for local images  | 
107 | 154 |         id: docker_meta_local  | 
108 | 155 |         uses: docker/metadata-action@v5  | 
@@ -168,3 +215,23 @@ jobs:  | 
168 | 215 |           labels: ${{ steps.docker_meta_public.outputs.labels }}  | 
169 | 216 |           tags: ${{ steps.docker_meta_public.outputs.tags }}  | 
170 | 217 |           target: ${{ matrix.target }}  | 
 | 218 | + | 
 | 219 | +  commentless-summary:  | 
 | 220 | +    if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository }}  | 
 | 221 | +    runs-on: ubuntu-24.04  | 
 | 222 | +    needs: build-push  | 
 | 223 | +    steps:  | 
 | 224 | +      - name: Write to job summary  | 
 | 225 | +        run: |  | 
 | 226 | +          {  | 
 | 227 | +            echo "## Test images pushed to GHCR"  | 
 | 228 | +            for t in base docker docker-s3 postgres postgres-s3 postgres-multi s3; do  | 
 | 229 | +              if [ "$t" = base ]; then  | 
 | 230 | +                img="ghcr.io/${GITHUB_REPOSITORY_OWNER,,}/${GITHUB_REPOSITORY#*/}"  | 
 | 231 | +              else  | 
 | 232 | +                img="ghcr.io/${GITHUB_REPOSITORY_OWNER,,}/${GITHUB_REPOSITORY#*/}-$t"  | 
 | 233 | +              fi  | 
 | 234 | +              echo "- **$t** → \`$img:test-pr${{ github.event.number }}\`"  | 
 | 235 | +            done  | 
 | 236 | +          } >> "$GITHUB_STEP_SUMMARY"  | 
 | 237 | +
  | 
0 commit comments