name: Pull Request Workflow on: pull_request: types: [opened, synchronize, reopened] env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: build-and-test: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build images run: make build env: DOCKER_BUILDKIT: 1 - name: Tag and push images run: | PR_NUMBER=${{ github.event.pull_request.number }} BRANCH_NAME="test-pr${PR_NUMBER}" git checkout -b ${BRANCH_NAME} git push origin ${BRANCH_NAME} # Tag images with PR number for image in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep ${IMAGE_NAME}); do docker tag ${image} ${image}-pr${PR_NUMBER} docker push ${image}-pr${PR_NUMBER} done - name: Run tests run: make test cleanup: needs: build-and-test if: github.event.action == 'closed' runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Delete PR-tagged images run: | PR_NUMBER=${{ github.event.pull_request.number }} for image in $(docker images --format "{{.Repository}}:{{.Tag}}" | grep ${IMAGE_NAME} | grep "pr${PR_NUMBER}"); do docker rmi ${image} docker push ${image} --delete done