ecosystem-ci-trigger.yml 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. name: ecosystem-ci trigger
  2. on:
  3. issue_comment:
  4. types: [created]
  5. permissions:
  6. contents: read
  7. issues: write
  8. pull-requests: read
  9. jobs:
  10. trigger:
  11. runs-on: ubuntu-latest
  12. if: github.repository == 'vuejs/core' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/ecosystem-ci run')
  13. steps:
  14. - name: Check user permission
  15. uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
  16. with:
  17. script: |
  18. const user = context.payload.sender.login
  19. console.log(`Validate user: ${user}`)
  20. let isVuejsMember = false
  21. try {
  22. const { status } = await github.rest.orgs.checkMembershipForUser({
  23. org: 'vuejs',
  24. username: user
  25. });
  26. isVuejsMember = (status === 204)
  27. } catch (e) {}
  28. if (isVuejsMember) {
  29. console.log('Allowed')
  30. await github.rest.reactions.createForIssueComment({
  31. owner: context.repo.owner,
  32. repo: context.repo.repo,
  33. comment_id: context.payload.comment.id,
  34. content: '+1',
  35. })
  36. } else {
  37. console.log('Not allowed')
  38. await github.rest.reactions.createForIssueComment({
  39. owner: context.repo.owner,
  40. repo: context.repo.repo,
  41. comment_id: context.payload.comment.id,
  42. content: '-1',
  43. })
  44. throw new Error('not allowed')
  45. }
  46. - name: Get PR info
  47. uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
  48. id: get-pr-data
  49. with:
  50. script: |
  51. console.log(`Get PR info: ${context.repo.owner}/${context.repo.repo}#${context.issue.number}`)
  52. const { data: pr } = await github.rest.pulls.get({
  53. owner: context.repo.owner,
  54. repo: context.repo.repo,
  55. pull_number: context.issue.number
  56. })
  57. return {
  58. num: context.issue.number,
  59. branchName: pr.head.ref,
  60. repo: pr.head.repo.full_name,
  61. commit: pr.head.sha
  62. }
  63. - name: Trigger run
  64. uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
  65. id: trigger
  66. env:
  67. COMMENT: ${{ github.event.comment.body }}
  68. with:
  69. github-token: ${{ secrets.ECOSYSTEM_CI_ACCESS_TOKEN }}
  70. result-encoding: string
  71. script: |
  72. const comment = process.env.COMMENT.trim()
  73. const prData = ${{ steps.get-pr-data.outputs.result }}
  74. const suite = comment.replace(/^\/ecosystem-ci run/, '').trim()
  75. await github.rest.actions.createWorkflowDispatch({
  76. owner: context.repo.owner,
  77. repo: 'ecosystem-ci',
  78. workflow_id: 'ecosystem-ci-from-pr.yml',
  79. ref: 'main',
  80. inputs: {
  81. prNumber: '' + prData.num,
  82. branchName: prData.branchName,
  83. repo: prData.repo,
  84. suite: suite === '' ? '-' : suite,
  85. commit: prData.commit
  86. }
  87. })