mirror of
https://github.com/1Password/onepassword-operator.git
synced 2025-10-29 18:59:40 +00:00
Trigger e2e tests on both maintainer creates PR and dispatch event
This commit is contained in:
80
.github/workflows/test-e2e.yml
vendored
80
.github/workflows/test-e2e.yml
vendored
@@ -14,30 +14,90 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
paths-ignore: *ignore_paths
|
paths-ignore: *ignore_paths
|
||||||
|
repository_dispatch:
|
||||||
|
types: [ ok-to-test-command ]
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: e2e-${{ github.event.pull_request.head.ref }}
|
group: ${{ github.event_name == 'pull_request' && format('e2e-{0}', github.event.pull_request.head.ref) || format('e2e-{0}', github.event.client_payload.pull_request.head.ref) }}
|
||||||
cancel-in-progress: true # cancel previous job runs for the same branch
|
cancel-in-progress: true # cancel previous job runs for the same branch
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check-external-pr:
|
check-external-pr:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event_name == 'pull_request'
|
outputs:
|
||||||
|
condition: ${{ steps.check.outputs.condition }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check if PR is from external contributor
|
- name: Check if PR is from external contributor
|
||||||
|
id: check
|
||||||
run: |
|
run: |
|
||||||
if [ "${{ github.event.pull_request.head.repo.full_name }}" != "${{ github.repository }}" ]; then
|
echo "Event name: ${{ github.event_name }}"
|
||||||
echo "❌ External PR detected. This workflow requires approval from a maintainer."
|
echo "Repository: ${{ github.repository }}"
|
||||||
echo "Please ask a maintainer to run '/ok-to-test' command to trigger the fork workflow."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "✅ Internal PR detected. Proceeding with tests."
|
|
||||||
|
|
||||||
run-e2e-tests:
|
if [ "${{ github.event_name }}" == "pull_request" ]; then
|
||||||
|
# For pull_request events, check if PR is from external fork
|
||||||
|
echo "PR head repo: ${{ github.event.pull_request.head.repo.full_name }}"
|
||||||
|
if [ "${{ github.event.pull_request.head.repo.full_name }}" != "${{ github.repository }}" ]; then
|
||||||
|
echo "condition=skip" >> $GITHUB_OUTPUT
|
||||||
|
echo "Setting condition=skip (external fork PR creation)"
|
||||||
|
else
|
||||||
|
echo "condition=pr-creation-maintainer" >> $GITHUB_OUTPUT
|
||||||
|
echo "Setting condition=pr-creation-maintainer (internal PR creation)"
|
||||||
|
fi
|
||||||
|
elif [ "${{ github.event_name }}" == "repository_dispatch" ]; then
|
||||||
|
# For repository_dispatch events (ok-to-test), check if sha matches
|
||||||
|
SHA_PARAM="${{ github.event.client_payload.slash_command.args.named.sha }}"
|
||||||
|
PR_HEAD_SHA="${{ github.event.client_payload.pull_request.head.sha }}"
|
||||||
|
|
||||||
|
echo "Checking dispatch event conditions..."
|
||||||
|
echo "SHA from command: $SHA_PARAM"
|
||||||
|
echo "PR head SHA: $PR_HEAD_SHA"
|
||||||
|
|
||||||
|
if [ -n "$SHA_PARAM" ] && [[ "$PR_HEAD_SHA" == *"$SHA_PARAM"* ]]; then
|
||||||
|
echo "condition=dispatch-event" >> $GITHUB_OUTPUT
|
||||||
|
echo "Setting condition=dispatch-event (sha matches)"
|
||||||
|
else
|
||||||
|
echo "condition=skip" >> $GITHUB_OUTPUT
|
||||||
|
echo "Setting condition=skip (sha does not match or empty)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Unknown event type
|
||||||
|
echo "condition=skip" >> $GITHUB_OUTPUT
|
||||||
|
echo "Setting condition=skip (unknown event type: ${{ github.event_name }})"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run tests for:
|
||||||
|
# 1. Internal PRs on pull_request events
|
||||||
|
# 2. External PRs on repository_dispatch (ok-to-test) events
|
||||||
|
e2e-test:
|
||||||
needs: check-external-pr
|
needs: check-external-pr
|
||||||
if: always() && (needs.check-external-pr.result == 'success' || github.event_name != 'pull_request')
|
if: |
|
||||||
|
(needs.check-external-pr.outputs.condition == 'pr-creation-maintainer')
|
||||||
|
||
|
||||||
|
(needs.check-external-pr.outputs.condition == 'dispatch-event')
|
||||||
uses: ./.github/workflows/e2e-tests.yml
|
uses: ./.github/workflows/e2e-tests.yml
|
||||||
secrets:
|
secrets:
|
||||||
OP_CONNECT_CREDENTIALS: ${{ secrets.OP_CONNECT_CREDENTIALS }}
|
OP_CONNECT_CREDENTIALS: ${{ secrets.OP_CONNECT_CREDENTIALS }}
|
||||||
OP_CONNECT_TOKEN: ${{ secrets.OP_CONNECT_TOKEN }}
|
OP_CONNECT_TOKEN: ${{ secrets.OP_CONNECT_TOKEN }}
|
||||||
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
|
OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
|
||||||
|
|
||||||
|
comment-pr:
|
||||||
|
needs: [check-external-pr, e2e-test]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: always() && needs.check-external-pr.outputs.condition == 'dispatch-event'
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- name: Create URL to the run output
|
||||||
|
id: vars
|
||||||
|
run: echo "run-url=https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create comment on PR
|
||||||
|
uses: peter-evans/create-or-update-comment@v5
|
||||||
|
with:
|
||||||
|
issue-number: ${{ github.event.client_payload.pull_request.number }}
|
||||||
|
body: |
|
||||||
|
${{ needs.e2e-test.result == 'success' && '✅ E2E tests passed.' || needs.e2e-test.result == 'failure' && '❌ E2E tests failed.' || '⚠️ E2E tests completed.' }}
|
||||||
|
|
||||||
|
[View test run output][1]
|
||||||
|
|
||||||
|
[1]: ${{ steps.vars.outputs.run-url }}
|
||||||
|
|||||||
Reference in New Issue
Block a user