diff --git a/packages/backend/src/apps/gitea/triggers/index.js b/packages/backend/src/apps/gitea/triggers/index.js index 8304c0d9..62b86bf1 100644 --- a/packages/backend/src/apps/gitea/triggers/index.js +++ b/packages/backend/src/apps/gitea/triggers/index.js @@ -1,5 +1,6 @@ import newIssues from './new-issues/index.js'; +import newPullRequests from './new-pull-requests/index.js'; import newStargazers from './new-stargazers/index.js'; import newWatchers from './new-watchers/index.js'; -export default [newIssues, newStargazers, newWatchers]; +export default [newIssues, newPullRequests, newStargazers, newWatchers]; diff --git a/packages/backend/src/apps/gitea/triggers/new-pull-requests/index.js b/packages/backend/src/apps/gitea/triggers/new-pull-requests/index.js new file mode 100644 index 00000000..f607f8bf --- /dev/null +++ b/packages/backend/src/apps/gitea/triggers/new-pull-requests/index.js @@ -0,0 +1,123 @@ +import defineTrigger from '../../../../helpers/define-trigger.js'; + +export default defineTrigger({ + name: 'New pull requests', + key: 'newPullRequests', + pollInterval: 15, + description: 'Triggers when the user creates a new pull request.', + arguments: [ + { + label: 'Repo', + key: 'repo', + type: 'dropdown', + required: true, + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listRepos', + }, + ], + }, + }, + { + label: 'Which types of pulls should this trigger on?', + key: 'pullType', + type: 'dropdown', + description: '', + required: false, + variables: true, + value: 'all', + options: [ + { + label: 'Closed', + value: 'closed', + }, + { + label: 'Open', + value: 'open', + }, + { + label: 'All', + value: 'all', + }, + ], + }, + { + label: 'Type of Sort?', + key: 'typeOfSort', + type: 'dropdown', + description: '', + required: false, + variables: true, + value: 'all', + options: [ + { + label: 'Oldest', + value: 'oldest', + }, + { + label: 'Recent Update', + value: 'recentupdate', + }, + { + label: 'Least Update', + value: 'leastupdate', + }, + { + label: 'Most Comment', + value: 'mostcomment', + }, + { + label: 'Least Comment', + value: 'leastcomment', + }, + { + label: 'Priority', + value: 'priority', + }, + ], + }, + ], + + async run($) { + const repo = $.step.parameters.repo; + const typeOfSort = $.step.parameters.typeOfSort; + const pullType = $.step.parameters.pullType; + const repoOwner = $.auth.data.repoOwner; + const params = { + page: 1, + limit: 100, + sort: typeOfSort, + state: pullType, + }; + + let totalCount; + let totalRequestedCount; + do { + const { data, headers } = await $.http.get( + `/repos/${repoOwner}/${repo}/pulls`, + { + params, + } + ); + params.page = params.page + 1; + totalCount = Number(headers['x-total-count']); + totalRequestedCount = params.page * params.limit; + + if (data?.length) { + for (const pullRequest of data) { + $.pushTriggerItem({ + raw: pullRequest, + meta: { + internalId: pullRequest.id.toString(), + }, + }); + } + } + } while (totalRequestedCount <= totalCount); + }, +}); diff --git a/packages/docs/pages/apps/gitea/triggers.md b/packages/docs/pages/apps/gitea/triggers.md index 6bbdbcd1..c25407ee 100644 --- a/packages/docs/pages/apps/gitea/triggers.md +++ b/packages/docs/pages/apps/gitea/triggers.md @@ -3,6 +3,8 @@ favicon: /favicons/gitea.svg items: - name: New issues desc: Triggers when a new issue is created. + - name: New pull requests + desc: Triggers when the user creates a new pull request. - name: New stargazers desc: Triggers when a user stars a repository. - name: New watchers