diff --git a/.github/workflows/docker-fork-releases.yml b/.github/workflows/docker-fork-releases.yml new file mode 100644 index 0000000000..51c1a69e93 --- /dev/null +++ b/.github/workflows/docker-fork-releases.yml @@ -0,0 +1,88 @@ +name: Push docker fork images +env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BASE_IMAGE: "ubuntu:20.04" + UPDATER_IMAGE: "dependabot/updater" + UPDATER_IMAGE_MIRROR: "ghcr.io/dependabot/dependabot-updater" +on: + workflow_dispatch: + inputs: + pr: + required: true + type: string + description: PR number + +jobs: + push-fork-image: + name: Build and push fork image + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + env: + TAG: ${{ github.sha }} + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Check if pull request is approved + # The PR must be approved. This is mostly to ensure you've typed the correct PR. + # Note: forks will have a blank review decision without approval. Not NEEDS_REVIEW. + run: | + DECISION=$(gh pr view ${{ github.event.inputs.pr }} --json reviewDecision -t {{.reviewDecision}}) + echo "Review decision is: $DECISION" + [[ $DECISION == "APPROVED" ]] || exit 1 + + - name: Checkout the fork + # This checks out the fork and cherry-picks the changes onto main, creating a new merge SHA tag. + run: | + git config --global user.email "you@example.com" + git config --global user.name "Your Name" + gh pr checkout ${{ github.event.inputs.pr }} --branch docker-branch-release-workflow + git reset main + git add . + git commit -m squashed + PICK=$(git rev-parse HEAD) + git checkout main + git cherry-pick $PICK + echo "TAG=$(git rev-parse HEAD)" >> $GITHUB_ENV + + - name: Build dependabot-core image + env: + DOCKER_BUILDKIT: 1 + run: | + docker build \ + -t "dependabot/dependabot-core:$TAG" \ + --build-arg BUILDKIT_INLINE_CACHE=1 \ + --cache-from ghcr.io/dependabot/dependabot-core \ + . + + - name: Build dependabot-updater image + env: + DOCKER_BUILDKIT: 1 + run: | + docker build \ + -t "$UPDATER_IMAGE:$TAG" \ + --build-arg BUILDKIT_INLINE_CACHE=1 \ + --cache-from "$BASE_IMAGE" \ + --cache-from "$UPDATER_IMAGE_MIRROR" \ + --build-arg OMNIBUS_VERSION=$TAG \ + -f Dockerfile.updater \ + . + + - name: Log in to GHCR + run: | + echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin + + - name: Push fork image + run: | + docker tag "$UPDATER_IMAGE:$TAG" "$UPDATER_IMAGE_MIRROR:$TAG" + docker push "$UPDATER_IMAGE_MIRROR:$TAG" + + - name: Set summary + run: | + echo "generated for PR ${{ github.event.inputs.pr }}" > $GITHUB_STEP_SUMMARY + echo "updater uploaded with tag \`$TAG\`" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "$UPDATER_IMAGE_MIRROR:$TAG" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY