From 231a48fa87323ae9923f597129c87bb53efdf9b4 Mon Sep 17 00:00:00 2001 From: jNullj <15849761+jNullj@users.noreply.github.com> Date: Sun, 9 Mar 2025 18:23:39 +0200 Subject: [PATCH] [sourceforge] add repo param to last commit service (#10935) * [sourceforge] add repo param to last commit service some sourceforge projects have multiple repositories, so we need to specify the repository to use for the last commit service. * [sourceforge] add redirect for old project param only URLs --- ...ourceforge-last-commit-redirect.service.js | 15 ++++++++++ ...sourceforge-last-commit-redirect.tester.js | 6 ++++ .../sourceforge-last-commit.service.js | 30 ++++++++++++------- .../sourceforge-last-commit.tester.js | 14 +++++++-- 4 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 services/sourceforge/sourceforge-last-commit-redirect.service.js create mode 100644 services/sourceforge/sourceforge-last-commit-redirect.tester.js diff --git a/services/sourceforge/sourceforge-last-commit-redirect.service.js b/services/sourceforge/sourceforge-last-commit-redirect.service.js new file mode 100644 index 0000000000..b08627250e --- /dev/null +++ b/services/sourceforge/sourceforge-last-commit-redirect.service.js @@ -0,0 +1,15 @@ +import { redirector } from '../index.js' + +export default redirector({ + // SourceForge last commit service used to only have project name as a parameter + // and the repository name was always `git`. + // The service was later updated to have the repository name as a parameter. + // This redirector is used to keep the old URLs working. + category: 'activity', + route: { + base: 'sourceforge/last-commit', + pattern: ':project', + }, + transformPath: ({ project }) => `/sourceforge/last-commit/${project}/git`, + dateAdded: new Date('2025-03-08'), +}) diff --git a/services/sourceforge/sourceforge-last-commit-redirect.tester.js b/services/sourceforge/sourceforge-last-commit-redirect.tester.js new file mode 100644 index 0000000000..b8d5b4f66c --- /dev/null +++ b/services/sourceforge/sourceforge-last-commit-redirect.tester.js @@ -0,0 +1,6 @@ +import { createServiceTester } from '../tester.js' +export const t = await createServiceTester() + +t.create('last commit (redirect)') + .get('/guitarix.json') + .expectRedirect('/sourceforge/last-commit/guitarix/git.json') diff --git a/services/sourceforge/sourceforge-last-commit.service.js b/services/sourceforge/sourceforge-last-commit.service.js index 91d25bfe6c..fd7dc766c3 100644 --- a/services/sourceforge/sourceforge-last-commit.service.js +++ b/services/sourceforge/sourceforge-last-commit.service.js @@ -17,35 +17,43 @@ export default class SourceforgeLastCommit extends BaseJsonService { static route = { base: 'sourceforge/last-commit', - pattern: ':project', + pattern: ':project/:repo', } static openApi = { - '/sourceforge/last-commit/{project}': { + '/sourceforge/last-commit/{project}/{repo}': { get: { summary: 'SourceForge Last Commit', - parameters: pathParams({ - name: 'project', - example: 'guitarix', - }), + parameters: pathParams( + { + name: 'project', + example: 'guitarix', + }, + { + name: 'repo', + example: 'git', + description: + 'The repository name, usually `git` but might be different.', + }, + ), }, }, } static defaultBadgeData = { label: 'last commit' } - async fetch({ project }) { + async fetch({ project, repo }) { return this._requestJson({ - url: `https://sourceforge.net/rest/p/${project}/git/commits`, + url: `https://sourceforge.net/rest/p/${project}/${repo}/commits`, schema, httpErrors: { - 404: 'project not found', + 404: 'project or repo not found', }, }) } - async handle({ project }) { - const body = await this.fetch({ project }) + async handle({ project, repo }) { + const body = await this.fetch({ project, repo }) return renderDateBadge(body.commits[0].committed_date) } } diff --git a/services/sourceforge/sourceforge-last-commit.tester.js b/services/sourceforge/sourceforge-last-commit.tester.js index 8a4487c6e3..94bee37039 100644 --- a/services/sourceforge/sourceforge-last-commit.tester.js +++ b/services/sourceforge/sourceforge-last-commit.tester.js @@ -3,9 +3,17 @@ import { createServiceTester } from '../tester.js' export const t = await createServiceTester() t.create('last commit') - .get('/guitarix.json') + .get('/guitarix/git.json') + .expectBadge({ label: 'last commit', message: isFormattedDate }) + +t.create('last commit (non default repo)') + .get('/opencamera/code.json') .expectBadge({ label: 'last commit', message: isFormattedDate }) t.create('last commit (project not found)') - .get('/that-doesnt-exist.json') - .expectBadge({ label: 'last commit', message: 'project not found' }) + .get('/that-doesnt-exist/fake.json') + .expectBadge({ label: 'last commit', message: 'project or repo not found' }) + +t.create('last commit (repo not found)') + .get('/guitarix/fake-repo.json') + .expectBadge({ label: 'last commit', message: 'project or repo not found' }) -- GitLab