1111 branches :
1212 - main
1313
14+ pull_request :
15+ types : [opened, synchronize]
16+
1417
1518jobs :
1619 comment-on-pr :
@@ -19,73 +22,42 @@ jobs:
1922 pull-requests : write
2023
2124 steps :
22- # NOTE: The following checks may not be accurate depending on Org or Repo settings.
23- - name : Check user and potential secret access
25+ - uses : actions/checkout@v4
26+
27+ # We cannot check if the user has access to secrets from this workflow.
28+ # However, if they user has access to secrets, the integration-tests.yml workflow will
29+ # write a message. Wait and check if the message is present.
30+ # This can fail if the worker pool is out of capacity and the integration-tests.yml workflow
31+ # runs after this workflow.
32+ - name : Wait for 30 seconds
33+ run : sleep 30
34+ shell : bash
35+
36+ - name : Check for integration tests comment
2437 id : check-secrets-access
2538 env :
26- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
39+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
40+ PR_NUMBER : ${{ github.event.pull_request.number }}
2741 run : |
28- USER_LOGIN="${{ github.event.pull_request.user.login }}"
29- REPO_OWNER="${{ github.repository_owner }}"
30- REPO_NAME=" ${{ github.event. repository.name }}"
42+ comment_found=$(gh pr view $PR_NUMBER --json comments \
43+ --jq '.comments[].body | select(startswith("<!-- INTEGRATION_TESTS -->"))' \
44+ --repo ${{ github.repository }})
3145
32- echo "Pull request opened by: $USER_LOGIN"
33-
34- # Check if PR is from a fork
35- IS_FORK=$([[ "${{ github.event.pull_request.head.repo.full_name }}" != "${{ github.repository }}" ]] && echo "true" || echo "false")
36-
37- HAS_ACCESS="false"
38-
39- # Check user's permission level on the repository
40- USER_PERMISSION=$(gh api repos/$REPO_OWNER/$REPO_NAME/collaborators/$USER_LOGIN/permission --jq '.permission')
41-
42- if [[ "$USER_PERMISSION" == "admin" || "$USER_PERMISSION" == "write" ]]; then
43- HAS_ACCESS="true"
44- elif [[ "$USER_PERMISSION" == "read" ]]; then
45- # For read access, we need to check if the user has been explicitly granted secret access
46- # This information is not directly available via API, so we'll make an assumption
47- # that read access does not imply secret access
48- HAS_ACCESS="false"
49- fi
50-
51- # Check if repo owner is an organization
52- IS_ORG=$(gh api users/$REPO_OWNER --jq '.type == "Organization"')
53-
54- if [[ "$IS_ORG" == "true" && "$HAS_ACCESS" == "false" ]]; then
55- # Check if user is a member of any team with write or admin access to the repo
56- TEAMS_WITH_ACCESS=$(gh api repos/$REPO_OWNER/$REPO_NAME/teams --jq '.[] | select(.permission == "push" or .permission == "admin") | .slug')
57- for team in $TEAMS_WITH_ACCESS; do
58- IS_TEAM_MEMBER=$(gh api orgs/$REPO_OWNER/teams/$team/memberships/$USER_LOGIN --silent && echo "true" || echo "false")
59- if [[ "$IS_TEAM_MEMBER" == "true" ]]; then
60- HAS_ACCESS="true"
61- break
62- fi
63- done
64- fi
65-
66- # If it's a fork, set HAS_ACCESS to false regardless of other checks
67- if [[ "$IS_FORK" == "true" ]]; then
68- HAS_ACCESS="false"
69- fi
70-
71- echo "has_secrets_access=$HAS_ACCESS" >> $GITHUB_OUTPUT
72- if [[ "$HAS_ACCESS" == "true" ]]; then
73- echo "User $USER_LOGIN likely has access to secrets"
46+ if [ -n "$comment_found" ]; then
47+ echo "has_secrets_access=true" >> $GITHUB_OUTPUT
7448 else
75- echo "User $USER_LOGIN likely does not have access to secrets"
49+ echo "has_secrets_access=false" >> $GITHUB_OUTPUT
7650 fi
7751
78-
79- - uses : actions/checkout@v4
80-
52+ # If not found, write a comment for manual execution
8153 - name : Delete old comments
8254 if : steps.check-secrets-access.outputs.has_secrets_access != 'true'
8355 env :
8456 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
8557 run : |
8658 # Delete previous comment if it exists
8759 previous_comment_ids=$(gh api "repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" \
88- --jq '.[] | select(.body | startswith("<!-- INTEGRATION_TESTS -->")) | .id')
60+ --jq '.[] | select(.body | startswith("<!-- INTEGRATION_TESTS_MANUAL -->")) | .id')
8961 echo "Previous comment IDs: $previous_comment_ids"
9062 # Iterate over each comment ID and delete the comment
9163 if [ ! -z "$previous_comment_ids" ]; then
10274 COMMIT_SHA : ${{ github.event.pull_request.head.sha }}
10375 run : |
10476 gh pr comment ${{ github.event.pull_request.number }} --body \
105- "<!-- INTEGRATION_TESTS -->
77+ "<!-- INTEGRATION_TESTS_MANUAL -->
10678 Run integration tests manually:
10779 [go/deco-tests-run/sdk-java](https://go/deco-tests-run/sdk-java)
10880
0 commit comments