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 0000000000000000000000000000000000000000..b08627250efb9a4b676c2452901a36b756434f25 --- /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 0000000000000000000000000000000000000000..b8d5b4f66c2674dd5848ad2207878181db77ad84 --- /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 91d25bfe6c33c6978e20aa238e829dceeead823b..fd7dc766c38b8d72f2a9b21570ef3ea706b29047 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 8a4487c6e37cf9303c8838c0ca85d8f1b2605730..94bee370396fc03f86f560f044ce613e707321fd 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' })