diff --git a/.github/workflows/pr-debug-publish.yaml b/.github/workflows/pr-debug-publish.yaml new file mode 100644 index 00000000..7a3c5e16 --- /dev/null +++ b/.github/workflows/pr-debug-publish.yaml @@ -0,0 +1,146 @@ +name: Produce PR dev images (on Request) + +on: + workflow_dispatch: + inputs: + pr_number: + description: 'Pull Request Number to build image for' + required: true + type: number + +concurrency: + group: prs-${{ github.event.inputs.pr_number }} + cancel-in-progress: true + +env: + GHCR_REGISTRY: ghcr.io + REGISTRY: docker.io + IMAGE_NAME: ${{ github.repository }} + YQ_VERSION: v4.44.3 + GH_TOKEN: ${{ github.token }} + +jobs: + push-dev-images: + name: Build and push helm-locker & Helm-Project-Operator images + runs-on: ${{ github.repository == 'rancher/prometheus-federator' && format('runs-on,image=ubuntu22-full-x64,runner=4cpu-linux-x64,run-id={1}', github.run_id) || 'ubuntu-latest' }} + permissions: + contents: read + packages: write + attestations: write + id-token: write + pull-requests: write + steps: + # Checkout the code at the head of the specified PR + - name: Checkout the repository + uses: actions/checkout@v3 + - name: Get Pull Request Head SHA + id: get_head_sha + run: | + pr_number=${{ github.event.inputs.pr_number }} + echo "Fetching details for PR #$pr_number" + pr_response=$(gh api repos/${{ github.repository }}/pulls/$pr_number) + head_sha=$(echo "$pr_response" | jq -r '.head.sha') + echo "::set-output name=head_sha::$head_sha" + - name: Checkout PR Head + uses: actions/checkout@v3 + with: + ref: ${{ steps.get_head_sha.outputs.head_sha }} + # Proceed to build images + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.GHCR_REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for helm-locker image + id: meta-helm-locker + uses: docker/metadata-action@v5 + with: + images: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}/helm-locker + tags: | + type=sha,prefix=pr-${{ github.event.inputs.pr_number }}- + type=raw,value=pr-${{ github.event.inputs.pr_number }} + - name: Build and push helm-locker image + id: push + uses: docker/build-push-action@v5 + with: + context: . + file: ./package/Dockerfile-helm-locker + push: true + tags: ${{ steps.meta-helm-locker.outputs.tags }} + labels: ${{ steps.meta-helm-locker.outputs.labels }} + platforms : linux/amd64,linux/arm64 + - name: Extract metadata (tags, labels) for Helm-Project-Operator image + id: meta-helm-project-operator + uses: docker/metadata-action@v5 + with: + images: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }}/helm-project-operator + tags: | + type=sha,prefix=pr-${{ github.event.inputs.pr_number }}- + type=raw,value=pr-${{ github.event.inputs.pr_number }} + - name: Build Helm-Project-Operator image + uses: docker/build-push-action@v5 + with: + context: . + file: ./package/Dockerfile-helm-project-operator + push: true + tags: ${{ steps.meta-helm-project-operator.outputs.tags }} + labels: ${{ steps.meta-helm-project-operator.outputs.labels }} + platforms: linux/amd64,linux/arm64 + - name: Extract metadata (tags, labels) for Prometheus Federator image + id: meta-prometheus-federator + uses: docker/metadata-action@v5 + with: + images: ${{ env.GHCR_REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=sha,prefix=pr-${{ github.event.inputs.pr_number }}- + type=raw,value=pr-${{ github.event.inputs.pr_number }} + - name: Build Prometheus Federator image + uses: docker/build-push-action@v5 + with: + context: . + file: ./package/Dockerfile-prometheus-federator + push: true + tags: ${{ steps.meta-prometheus-federator.outputs.tags }} + labels: ${{ steps.meta-prometheus-federator.outputs.labels }} + platforms: linux/amd64,linux/arm64 + + - name: Comment on PR with image details + uses: actions/github-script@v6 + env: + meta-helm-locker: ${{ steps.meta-helm-locker.outputs.tags }} + meta-helm-project-operator: ${{ steps.meta-helm-project-operator.outputs.tags }} + meta-prometheus-federator: ${{ steps.meta-prometheus-federator.outputs.tags }} + with: + script: | + const prNumber = context.payload.inputs.pr_number; + const images = [ + { + name: 'Helm Locker', + key: 'meta-helm-locker', + url: `https://github.com/${{ github.repository }}/pkgs/container/prometheus-federator%2Fhelm-locker` + }, + { + name: 'Helm Project Operator', + key: 'meta-helm-project-operator', + url: `https://${process.env.GHCR_REGISTRY}/${{ github.repository }}/pkgs/container/prometheus-federator%2Fhelm-project-operator` + }, + { + name: 'Prometheus Federator', + key: 'meta-prometheus-federator', + url: `https://${process.env.GHCR_REGISTRY}/${{ github.repository }}/pkgs/container/prometheus-federator` + } + ]; + + const commentBody = images + .map(image => `- **${image.name}**: [Link to image](${image.url}):\n Tags: \`${process.env[image.key]}\``) + .join('\n\n');1 + + github.rest.issues.createComment({ + issue_number: prNumber, + owner: context.repo.owner, + repo: context.repo.repo, + body: `### Images built for PR #${prNumber}:\n\n${commentBody}` + }); \ No newline at end of file