diff --git a/.github/workflows/pr-command.yml b/.github/workflows/pr-command.yml new file mode 100644 index 0000000000..4f30aeb64c --- /dev/null +++ b/.github/workflows/pr-command.yml @@ -0,0 +1,92 @@ +name: PR Command + +concurrency: + group: ci-${{ github.run_id }} + cancel-in-progress: true + +on: + issue_comment: + types: [created] + +jobs: + create-command: + runs-on: ubuntu-latest + if: ${{ github.event.issue.pull_request && startsWith(github.event.comment.body, '/build_test') }} + steps: + - name: Command handler for building and testing + id: command + uses: xt0rted/slash-command-action@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + command: build_test + reaction: "true" + reaction-type: "+1" + allow-edits: "false" + permission-level: write + + code-analysis: + uses: ./.github/workflows/ci-code-analysis.yml + with: + checkout-repo: ${{ github.event.pull_request.head.repo.full_name }} + checkout-ref: ${{ github.event.pull_request.head.ref }} + secrets: inherit + if: github.repository_owner == 'cryostatio' && contains(github.event.pull_request.labels.*.name, 'safe-to-test') && github.event.issue.pull_request && startsWith(github.event.comment.body, '/build_test') + + build-and-test: + strategy: + matrix: + arch: [amd64, arm64] + uses: ./.github/workflows/ci-build-image.yml + with: + build-arch: ${{ matrix.arch }} + checkout-repo: ${{ github.event.pull_request.head.repo.full_name }} + checkout-ref: ${{ github.event.pull_request.head.ref }} + skip-itests: ${{ matrix.arch != 'amd64' }} + secrets: inherit + if: github.repository_owner == 'cryostatio' && contains(github.event.pull_request.labels.*.name, 'safe-to-test') && github.event.issue.pull_request && startsWith(github.event.comment.body, '/build_test') + + push-to-ghcr: + runs-on: ubuntu-latest + strategy: + matrix: + arch: [amd64, arm64] + needs: [code-analysis, build-and-test] + if: always() && github.repository_owner == 'cryostatio' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/build_test') + steps: + - name: Fail if needs-triage label applied + if: ${{ contains(github.event.pull_request.labels.*.name, 'needs-triage') }} + run: exit 1 + - name: Fail if safe-to-test label NOT applied + if: ${{ !contains(github.event.pull_request.labels.*.name, 'safe-to-test') }} + run: exit 1 + - uses: actions/download-artifact@v3 + with: + name: cryostat-${{ matrix.arch }} + if: github.repository_owner == 'cryostatio' + - name: Load cryostat image + run: podman load -i cryostat-${{ matrix.arch }}.tar + if: github.repository_owner == 'cryostatio' + - name: Tag cryostat image + run: podman tag cryostat ghcr.io/${{ github.repository_owner }}/cryostat:pr-${{ github.event.number }}-${{ github.event.pull_request.head.sha }}-linux-${{ matrix.arch }} + if: github.repository_owner == 'cryostatio' + - name: Push PR test image to ghcr.io + id: push-to-ghcr + uses: redhat-actions/push-to-registry@v2 + with: + image: cryostat + tags: pr-${{ github.event.number }}-${{ github.event.pull_request.head.sha }}-linux-${{ matrix.arch }} + registry: ghcr.io/${{ github.repository_owner }} + username: ${{ github.event.pull_request.user.login }} + password: ${{ secrets.GHCR_PR_TOKEN }} + if: github.repository_owner == 'cryostatio' + - name: Comment test image link + uses: thollander/actions-comment-pull-request@v1 + with: + message: |- + Test image available: + ``` + $ CRYOSTAT_IMAGE=${{ steps.push-to-ghcr.outputs.registry-path }} sh smoketest.sh + ``` + '${{ github.workflow }}: ${${{ job.status }}' === 'success' ? 'succeeded ✅' : 'failed ❌'} + url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}' + if: github.repository_owner == 'cryostatio' \ No newline at end of file