From 93fdc05529b4bf474a07754f54f03166fda8a1ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Tue, 30 Apr 2024 15:45:53 +0200 Subject: [PATCH] feat(gitea): add create issue action --- .../apps/gitea/actions/create-issue/index.js | 102 ++++++++++++++++++ .../backend/src/apps/gitea/actions/index.js | 3 + .../gitea/dynamic-data/list-labels/index.js | 4 +- packages/backend/src/apps/gitea/index.js | 2 + packages/docs/pages/.vitepress/config.js | 1 + packages/docs/pages/apps/gitea/actions.md | 12 +++ 6 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/gitea/actions/create-issue/index.js create mode 100644 packages/backend/src/apps/gitea/actions/index.js create mode 100644 packages/docs/pages/apps/gitea/actions.md diff --git a/packages/backend/src/apps/gitea/actions/create-issue/index.js b/packages/backend/src/apps/gitea/actions/create-issue/index.js new file mode 100644 index 00000000..54258f3e --- /dev/null +++ b/packages/backend/src/apps/gitea/actions/create-issue/index.js @@ -0,0 +1,102 @@ +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Create issue', + key: 'createIssue', + description: 'Creates a new issue.', + arguments: [ + { + label: 'Repo', + key: 'repo', + type: 'dropdown', + required: true, + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listRepos', + }, + ], + }, + }, + { + label: 'Title', + key: 'title', + type: 'string', + required: true, + variables: true, + }, + { + label: 'Body', + key: 'body', + type: 'string', + required: true, + variables: true, + }, + { + label: 'Labels', + key: 'labels', + type: 'dynamic', + required: false, + fields: [ + { + label: 'Label', + key: 'label', + type: 'dropdown', + description: 'Only trigger on issues when this label is added.', + required: false, + variables: true, + dependsOn: ['parameters.repo'], + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listLabels', + }, + { + name: 'parameters.repo', + value: '{parameters.repo}', + }, + { + name: 'parameters.showLabelId', + value: 'true', + }, + ], + }, + }, + ], + }, + ], + + async run($) { + const repoOwner = $.auth.data.repoOwner; + const repo = $.step.parameters.repo; + const title = $.step.parameters.title; + const issueBody = $.step.parameters.body; + const allLabels = $.step.parameters.labels; + const formattedAllLabels = allLabels + .filter((label) => label.label !== '') + .map((label) => label.label); + + const body = { + title, + body: issueBody, + }; + + if (formattedAllLabels.length) { + body.labels = formattedAllLabels; + } + + const response = await $.http.post( + `/repos/${repoOwner}/${repo}/issues`, + body + ); + + $.setActionItem({ raw: response.data }); + }, +}); diff --git a/packages/backend/src/apps/gitea/actions/index.js b/packages/backend/src/apps/gitea/actions/index.js new file mode 100644 index 00000000..095990d0 --- /dev/null +++ b/packages/backend/src/apps/gitea/actions/index.js @@ -0,0 +1,3 @@ +import createIssue from './create-issue/index.js'; + +export default [createIssue]; diff --git a/packages/backend/src/apps/gitea/dynamic-data/list-labels/index.js b/packages/backend/src/apps/gitea/dynamic-data/list-labels/index.js index 4c950f16..1589e282 100644 --- a/packages/backend/src/apps/gitea/dynamic-data/list-labels/index.js +++ b/packages/backend/src/apps/gitea/dynamic-data/list-labels/index.js @@ -8,6 +8,7 @@ export default { }; const repoOwner = $.auth.data.repoOwner; const repo = $.step.parameters.repo; + const showLabelId = $.step.parameters.showLabelId === 'true'; const params = { page: 1, @@ -27,8 +28,9 @@ export default { if (data?.length) { for (const label of data) { + const value = showLabelId ? label.id : label.name; labels.data.push({ - value: label.name, + value, name: label.name, }); } diff --git a/packages/backend/src/apps/gitea/index.js b/packages/backend/src/apps/gitea/index.js index 2e53a1c8..e4e15c38 100644 --- a/packages/backend/src/apps/gitea/index.js +++ b/packages/backend/src/apps/gitea/index.js @@ -4,6 +4,7 @@ import auth from './auth/index.js'; import setBaseUrl from './common/set-base-url.js'; import triggers from './triggers/index.js'; import dynamicData from './dynamic-data/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Gitea', @@ -18,4 +19,5 @@ export default defineApp({ auth, triggers, dynamicData, + actions, }); diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index 713e5522..7b96d003 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -128,6 +128,7 @@ export default defineConfig({ collapsed: true, items: [ { text: 'Triggers', link: '/apps/gitea/triggers' }, + { text: 'Actions', link: '/apps/gitea/actions' }, { text: 'Connection', link: '/apps/gitea/connection' }, ], }, diff --git a/packages/docs/pages/apps/gitea/actions.md b/packages/docs/pages/apps/gitea/actions.md new file mode 100644 index 00000000..2c701d01 --- /dev/null +++ b/packages/docs/pages/apps/gitea/actions.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/gitea.svg +items: + - name: Create issue + desc: Creates a new issue. +--- + + + +