ecosystem-ci-trigger.yml 3.0 KB

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