From c6e0e0349cf77b44fdc0b2312cc631c8d5584d54 Mon Sep 17 00:00:00 2001 From: Untone Date: Wed, 19 Feb 2025 00:36:51 +0300 Subject: [PATCH] fixes --- api/formatters.js | 3 ++- api/gitea.js | 46 +++++++++++++++++++++++++++++++--------------- api/github.js | 44 ++++++++++++++++++++++++++++++-------------- 3 files changed, 63 insertions(+), 30 deletions(-) diff --git a/api/formatters.js b/api/formatters.js index b00136f..a6f4829 100644 --- a/api/formatters.js +++ b/api/formatters.js @@ -6,6 +6,7 @@ */ const getCommitEmoji = (message, stats) => { const msg = message.toLowerCase() + if (msg.includes('merge')) return '📎' if (msg.includes('fix')) return '🔧' if (msg.includes('feat')) return '✨' if (msg.includes('break')) return '💥' @@ -66,7 +67,7 @@ const formatMessage = (data, commits) => { const stats = formatStats(totalStats) return [ - `🔄 [${repoId}](${repoUrl}):[${branch}](${branchUrl}) ${commits.length} new commit${commits.length === 1 ? '' : 's'}`, + `🔄 [${repoId}](${repoUrl}):[${branch}](${branchUrl}) ${commits.length} new commit${Array.from(commits.length.toString()).pop() === '1' ? '' : 's'}`, stats && commits.length > 1 ? `📊 ${stats}` : '', commits.map(commit => formatCommit(commit, repoUrl)).join('\n') ].filter(Boolean).join('\n') diff --git a/api/gitea.js b/api/gitea.js index 0a67838..5dc6422 100644 --- a/api/gitea.js +++ b/api/gitea.js @@ -1,25 +1,41 @@ const { formatMessage } = require('./formatters') /** - * Handle Gitea webhook + * Normalize Gitea webhook payload to common format * @param {Object} payload - Gitea webhook payload * @returns {Object} - Normalized webhook data */ -const normalizeGiteaPayload = (payload) => ({ - repository: { - full_name: payload.repository.full_name, - html_url: payload.repository.html_url || payload.repository.url - }, - ref: payload.ref, - commits: payload.commits.map(commit => ({ - id: commit.id, - message: commit.message, - stats: { - additions: commit.added?.length || 0, - deletions: commit.removed?.length || 0 +const normalizeGiteaPayload = (payload) => { + // Early return if no commits + if (!Array.isArray(payload.commits)) { + return { + repository: { + full_name: payload.repository.full_name, + html_url: payload.repository.html_url || payload.repository.url, + id: payload.repository.id + }, + ref: payload.ref, + commits: [] } - })) -}) + } + + return { + repository: { + full_name: payload.repository.full_name, + html_url: payload.repository.html_url || payload.repository.url, + id: payload.repository.id + }, + ref: payload.ref, + commits: payload.commits.map(commit => ({ + id: commit.id, + message: commit.message, + stats: { + additions: commit.added?.length || 0, + deletions: commit.removed?.length || 0 + } + })) + } +} /** * Handle Gitea webhook diff --git a/api/github.js b/api/github.js index f01bc4b..59e4e55 100644 --- a/api/github.js +++ b/api/github.js @@ -5,21 +5,37 @@ const { formatMessage } = require('./formatters') * @param {Object} payload - GitHub webhook payload * @returns {Object} - Normalized webhook data */ -const normalizeGithubPayload = (payload) => ({ - repository: { - full_name: payload.repository.full_name, - html_url: payload.repository.html_url - }, - ref: payload.ref, - commits: payload.commits.map(commit => ({ - id: commit.id, - message: commit.message, - stats: { - additions: commit.stats?.additions || 0, - deletions: commit.stats?.deletions || 0 +const normalizeGithubPayload = (payload) => { + // Early return if no commits + if (!Array.isArray(payload.commits)) { + return { + repository: { + full_name: payload.repository.full_name, + html_url: payload.repository.html_url, + id: payload.repository.id + }, + ref: payload.ref, + commits: [] } - })) -}) + } + + return { + repository: { + full_name: payload.repository.full_name, + html_url: payload.repository.html_url, + id: payload.repository.id + }, + ref: payload.ref, + commits: payload.commits.map(commit => ({ + id: commit.id, + message: commit.message, + stats: { + additions: commit.stats?.additions || 0, + deletions: commit.stats?.deletions || 0 + } + })) + } +} /** * Handle GitHub webhook