ecosystem-ci-trigger.yml 2.8 KB

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