From e82906fa344beda378c2323af6d3f76543c6638f Mon Sep 17 00:00:00 2001 From: Shaz666 Date: Tue, 21 Apr 2026 23:29:50 -0500 Subject: [PATCH 1/4] feat: Shaz666 add MacPorts version badge Closes #9588 --- services/macports/macports-version.service.js | 43 +++++++++++++++++++ services/macports/macports-version.tester.js | 25 +++++++++++ 2 files changed, 68 insertions(+) create mode 100644 services/macports/macports-version.service.js create mode 100644 services/macports/macports-version.tester.js diff --git a/services/macports/macports-version.service.js b/services/macports/macports-version.service.js new file mode 100644 index 0000000000000..9eb3895bf873a --- /dev/null +++ b/services/macports/macports-version.service.js @@ -0,0 +1,43 @@ +import Joi from 'joi' +import { renderVersionBadge } from '../version.js' +import { BaseJsonService, pathParams } from '../index.js' + +const schema = Joi.object({ + version: Joi.string().required(), +}).required() + +export default class MacportsVersion extends BaseJsonService { + static category = 'version' + + static route = { + base: 'macports/v', + pattern: ':portName', + } + + static openApi = { + '/macports/v/{portName}': { + get: { + summary: 'MacPorts Version', + parameters: pathParams({ + name: 'portName', + example: 'git', + }), + }, + }, + } + + static defaultBadgeData = { label: 'macports' } + + async fetch({ portName }) { + return this._requestJson({ + schema, + url: `https://ports.macports.org/api/v1/ports/${portName}/`, + httpErrors: { 404: 'port not found' }, + }) + } + + async handle({ portName }) { + const { version } = await this.fetch({ portName }) + return renderVersionBadge({ version }) + } +} diff --git a/services/macports/macports-version.tester.js b/services/macports/macports-version.tester.js new file mode 100644 index 0000000000000..a88c85bc45269 --- /dev/null +++ b/services/macports/macports-version.tester.js @@ -0,0 +1,25 @@ +import { isVPlusDottedVersionAtLeastOne } from '../test-validators.js' +import { createServiceTester } from '../tester.js' + +export const t = await createServiceTester() + +t.create('version (valid)') + .get('/git.json') + .intercept(nock => + nock('https://ports.macports.org') + .get('/api/v1/ports/git/') + .reply(200, { version: '2.47.1' }), + ) + .expectBadge({ + label: 'macports', + message: isVPlusDottedVersionAtLeastOne, + }) + +t.create('version (not found)') + .get('/not-a-real-port.json') + .intercept(nock => + nock('https://ports.macports.org') + .get('/api/v1/ports/not-a-real-port/') + .reply(404), + ) + .expectBadge({ label: 'macports', message: 'port not found' }) From 2bbf6968ea04e63b587a55496e66eecad62b1c45 Mon Sep 17 00:00:00 2001 From: Shaz666 Date: Sun, 26 Apr 2026 20:07:47 -0500 Subject: [PATCH 2/4] refactor(macports): switch to non-mocked service tests --- services/macports/macports-version.tester.js | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/services/macports/macports-version.tester.js b/services/macports/macports-version.tester.js index a88c85bc45269..cdbf933212e07 100644 --- a/services/macports/macports-version.tester.js +++ b/services/macports/macports-version.tester.js @@ -3,23 +3,11 @@ import { createServiceTester } from '../tester.js' export const t = await createServiceTester() -t.create('version (valid)') - .get('/git.json') - .intercept(nock => - nock('https://ports.macports.org') - .get('/api/v1/ports/git/') - .reply(200, { version: '2.47.1' }), - ) - .expectBadge({ - label: 'macports', - message: isVPlusDottedVersionAtLeastOne, - }) +t.create('version (valid)').get('/git.json').expectBadge({ + label: 'macports', + message: isVPlusDottedVersionAtLeastOne, +}) t.create('version (not found)') .get('/not-a-real-port.json') - .intercept(nock => - nock('https://ports.macports.org') - .get('/api/v1/ports/not-a-real-port/') - .reply(404), - ) .expectBadge({ label: 'macports', message: 'port not found' }) From 7f4fbb2fa7f140dca920f37fef04a161c1937511 Mon Sep 17 00:00:00 2001 From: Shaz666 Date: Sun, 26 Apr 2026 20:25:01 -0500 Subject: [PATCH 3/4] fix(macports): mock not-found test; MacPorts API times out for invalid ports --- services/macports/macports-version.tester.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/macports/macports-version.tester.js b/services/macports/macports-version.tester.js index cdbf933212e07..7443508ca14a3 100644 --- a/services/macports/macports-version.tester.js +++ b/services/macports/macports-version.tester.js @@ -10,4 +10,9 @@ t.create('version (valid)').get('/git.json').expectBadge({ t.create('version (not found)') .get('/not-a-real-port.json') + .intercept(nock => + nock('https://ports.macports.org') + .get('/api/v1/ports/not-a-real-port/') + .reply(404), + ) .expectBadge({ label: 'macports', message: 'port not found' }) From ae17fac491f5722f4e6b83a64be9cacfdcba72f7 Mon Sep 17 00:00:00 2001 From: Shaz666 Date: Sun, 26 Apr 2026 20:33:24 -0500 Subject: [PATCH 4/4] revert(macports): restore mocked tests; ports.macports.org unreachable from CI --- services/macports/macports-version.tester.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/services/macports/macports-version.tester.js b/services/macports/macports-version.tester.js index 7443508ca14a3..a88c85bc45269 100644 --- a/services/macports/macports-version.tester.js +++ b/services/macports/macports-version.tester.js @@ -3,10 +3,17 @@ import { createServiceTester } from '../tester.js' export const t = await createServiceTester() -t.create('version (valid)').get('/git.json').expectBadge({ - label: 'macports', - message: isVPlusDottedVersionAtLeastOne, -}) +t.create('version (valid)') + .get('/git.json') + .intercept(nock => + nock('https://ports.macports.org') + .get('/api/v1/ports/git/') + .reply(200, { version: '2.47.1' }), + ) + .expectBadge({ + label: 'macports', + message: isVPlusDottedVersionAtLeastOne, + }) t.create('version (not found)') .get('/not-a-real-port.json')