deprecate [wheelmap] service (#10538)
* deprecate [wheelmap] service * remove app.json
This commit is contained in:
5
.github/actions/service-tests/action.yml
vendored
5
.github/actions/service-tests/action.yml
vendored
@@ -36,10 +36,6 @@ inputs:
|
|||||||
description: 'The SERVICETESTS_TWITCH_CLIENT_SECRET secret'
|
description: 'The SERVICETESTS_TWITCH_CLIENT_SECRET secret'
|
||||||
required: false
|
required: false
|
||||||
default: ''
|
default: ''
|
||||||
wheelmap-token:
|
|
||||||
description: 'The SERVICETESTS_WHEELMAP_TOKEN secret'
|
|
||||||
required: false
|
|
||||||
default: ''
|
|
||||||
youtube-api-key:
|
youtube-api-key:
|
||||||
description: 'The SERVICETESTS_YOUTUBE_API_KEY secret'
|
description: 'The SERVICETESTS_YOUTUBE_API_KEY secret'
|
||||||
required: false
|
required: false
|
||||||
@@ -75,7 +71,6 @@ runs:
|
|||||||
SL_INSIGHT_API_TOKEN: '${{ inputs.sl-insight-api-token }}'
|
SL_INSIGHT_API_TOKEN: '${{ inputs.sl-insight-api-token }}'
|
||||||
TWITCH_CLIENT_ID: '${{ inputs.twitch-client-id }}'
|
TWITCH_CLIENT_ID: '${{ inputs.twitch-client-id }}'
|
||||||
TWITCH_CLIENT_SECRET: '${{ inputs.twitch-client-secret }}'
|
TWITCH_CLIENT_SECRET: '${{ inputs.twitch-client-secret }}'
|
||||||
WHEELMAP_TOKEN: '${{ inputs.wheelmap-token }}'
|
|
||||||
YOUTUBE_API_KEY: '${{ inputs.youtube-api-key }}'
|
YOUTUBE_API_KEY: '${{ inputs.youtube-api-key }}'
|
||||||
|
|
||||||
- name: Write Markdown Summary
|
- name: Write Markdown Summary
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ jobs:
|
|||||||
SL_INSIGHT_API_TOKEN: '${{ secrets.SERVICETESTS_SL_INSIGHT_API_TOKEN }}'
|
SL_INSIGHT_API_TOKEN: '${{ secrets.SERVICETESTS_SL_INSIGHT_API_TOKEN }}'
|
||||||
TWITCH_CLIENT_ID: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_ID }}'
|
TWITCH_CLIENT_ID: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_ID }}'
|
||||||
TWITCH_CLIENT_SECRET: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_SECRET }}'
|
TWITCH_CLIENT_SECRET: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_SECRET }}'
|
||||||
WHEELMAP_TOKEN: '${{ secrets.SERVICETESTS_WHEELMAP_TOKEN }}'
|
|
||||||
YOUTUBE_API_KEY: '${{ secrets.SERVICETESTS_YOUTUBE_API_KEY }}'
|
YOUTUBE_API_KEY: '${{ secrets.SERVICETESTS_YOUTUBE_API_KEY }}'
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
|||||||
1
.github/workflows/daily-tests.yml
vendored
1
.github/workflows/daily-tests.yml
vendored
@@ -61,7 +61,6 @@ jobs:
|
|||||||
SL_INSIGHT_API_TOKEN: '${{ secrets.SERVICETESTS_SL_INSIGHT_API_TOKEN }}'
|
SL_INSIGHT_API_TOKEN: '${{ secrets.SERVICETESTS_SL_INSIGHT_API_TOKEN }}'
|
||||||
TWITCH_CLIENT_ID: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_ID }}'
|
TWITCH_CLIENT_ID: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_ID }}'
|
||||||
TWITCH_CLIENT_SECRET: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_SECRET }}'
|
TWITCH_CLIENT_SECRET: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_SECRET }}'
|
||||||
WHEELMAP_TOKEN: '${{ secrets.SERVICETESTS_WHEELMAP_TOKEN }}'
|
|
||||||
YOUTUBE_API_KEY: '${{ secrets.SERVICETESTS_YOUTUBE_API_KEY }}'
|
YOUTUBE_API_KEY: '${{ secrets.SERVICETESTS_YOUTUBE_API_KEY }}'
|
||||||
|
|
||||||
- name: Write Service Tests Markdown Summary
|
- name: Write Service Tests Markdown Summary
|
||||||
|
|||||||
1
.github/workflows/deploy-review-app.yml
vendored
1
.github/workflows/deploy-review-app.yml
vendored
@@ -40,5 +40,4 @@ jobs:
|
|||||||
SL_INSIGHT_USER_UUID=${{ secrets.SERVICETESTS_SL_INSIGHT_API_TOKEN }}
|
SL_INSIGHT_USER_UUID=${{ secrets.SERVICETESTS_SL_INSIGHT_API_TOKEN }}
|
||||||
TWITCH_CLIENT_ID=${{ secrets.SERVICETESTS_TWITCH_CLIENT_ID }}
|
TWITCH_CLIENT_ID=${{ secrets.SERVICETESTS_TWITCH_CLIENT_ID }}
|
||||||
TWITCH_CLIENT_SECRET=${{ secrets.SERVICETESTS_TWITCH_CLIENT_SECRET }}
|
TWITCH_CLIENT_SECRET=${{ secrets.SERVICETESTS_TWITCH_CLIENT_SECRET }}
|
||||||
WHEELMAP_TOKEN=${{ secrets.SERVICETESTS_WHEELMAP_TOKEN }}
|
|
||||||
YOUTUBE_API_KEY=${{ secrets.SERVICETESTS_YOUTUBE_API_KEY }}
|
YOUTUBE_API_KEY=${{ secrets.SERVICETESTS_YOUTUBE_API_KEY }}
|
||||||
|
|||||||
1
.github/workflows/test-services-22.yml
vendored
1
.github/workflows/test-services-22.yml
vendored
@@ -34,7 +34,6 @@ jobs:
|
|||||||
sl-insight-api-token: '${{ secrets.SERVICETESTS_SL_INSIGHT_API_TOKEN }}'
|
sl-insight-api-token: '${{ secrets.SERVICETESTS_SL_INSIGHT_API_TOKEN }}'
|
||||||
twitch-client-id: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_ID }}'
|
twitch-client-id: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_ID }}'
|
||||||
twitch-client-secret: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_SECRET }}'
|
twitch-client-secret: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_SECRET }}'
|
||||||
wheelmap-token: '${{ secrets.SERVICETESTS_WHEELMAP_TOKEN }}'
|
|
||||||
youtube-api-key: '${{ secrets.SERVICETESTS_YOUTUBE_API_KEY }}'
|
youtube-api-key: '${{ secrets.SERVICETESTS_YOUTUBE_API_KEY }}'
|
||||||
|
|
||||||
- name: Service tests (triggered from fork)
|
- name: Service tests (triggered from fork)
|
||||||
|
|||||||
1
.github/workflows/test-services.yml
vendored
1
.github/workflows/test-services.yml
vendored
@@ -32,7 +32,6 @@ jobs:
|
|||||||
sl-insight-api-token: '${{ secrets.SERVICETESTS_SL_INSIGHT_API_TOKEN }}'
|
sl-insight-api-token: '${{ secrets.SERVICETESTS_SL_INSIGHT_API_TOKEN }}'
|
||||||
twitch-client-id: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_ID }}'
|
twitch-client-id: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_ID }}'
|
||||||
twitch-client-secret: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_SECRET }}'
|
twitch-client-secret: '${{ secrets.SERVICETESTS_TWITCH_CLIENT_SECRET }}'
|
||||||
wheelmap-token: '${{ secrets.SERVICETESTS_WHEELMAP_TOKEN }}'
|
|
||||||
youtube-api-key: '${{ secrets.SERVICETESTS_YOUTUBE_API_KEY }}'
|
youtube-api-key: '${{ secrets.SERVICETESTS_YOUTUBE_API_KEY }}'
|
||||||
|
|
||||||
- name: Service tests (triggered from fork)
|
- name: Service tests (triggered from fork)
|
||||||
|
|||||||
56
app.json
56
app.json
@@ -1,56 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Shields",
|
|
||||||
"description": "Concise, consistent, and legible badges in SVG and raster format.",
|
|
||||||
"keywords": ["badge", "github", "svg", "status"],
|
|
||||||
"website": "https://shields.io/",
|
|
||||||
"repository": "https://github.com/badges/shields",
|
|
||||||
"logo": "https://shields.io/favicon.png",
|
|
||||||
"env": {
|
|
||||||
"CYPRESS_INSTALL_BINARY": {
|
|
||||||
"description": "Disable the cypress binary installation",
|
|
||||||
"value": "0",
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"HUSKY_SKIP_INSTALL": {
|
|
||||||
"description": "Skip the husky git hook setup",
|
|
||||||
"value": "1",
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"WHEELMAP_TOKEN": {
|
|
||||||
"description": "Configure the token to be used for the Wheelmap service.",
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"GH_TOKEN": {
|
|
||||||
"description": "Configure the token to be used for the GitHub services.",
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"TWITCH_CLIENT_ID": {
|
|
||||||
"description": "Configure the client id to be used for the Twitch service.",
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"TWITCH_CLIENT_SECRET": {
|
|
||||||
"description": "Configure the client secret to be used for the Twitch service.",
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"WEBLATE_API_KEY": {
|
|
||||||
"description": "Configure the API key to be used for the Weblate service.",
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"METRICS_INFLUX_ENABLED": {
|
|
||||||
"description": "Disable influx metrics",
|
|
||||||
"value": "false",
|
|
||||||
"required": false
|
|
||||||
},
|
|
||||||
"REQUIRE_CLOUDFLARE": {
|
|
||||||
"description": "Allow direct traffic",
|
|
||||||
"value": "false",
|
|
||||||
"required": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"formation": {
|
|
||||||
"web": {
|
|
||||||
"quantity": 1,
|
|
||||||
"size": "free"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -114,7 +114,6 @@ private:
|
|||||||
teamcity_pass: 'TEAMCITY_PASS'
|
teamcity_pass: 'TEAMCITY_PASS'
|
||||||
twitch_client_id: 'TWITCH_CLIENT_ID'
|
twitch_client_id: 'TWITCH_CLIENT_ID'
|
||||||
twitch_client_secret: 'TWITCH_CLIENT_SECRET'
|
twitch_client_secret: 'TWITCH_CLIENT_SECRET'
|
||||||
wheelmap_token: 'WHEELMAP_TOKEN'
|
|
||||||
influx_username: 'INFLUX_USERNAME'
|
influx_username: 'INFLUX_USERNAME'
|
||||||
influx_password: 'INFLUX_PASSWORD'
|
influx_password: 'INFLUX_PASSWORD'
|
||||||
weblate_api_key: 'WEBLATE_API_KEY'
|
weblate_api_key: 'WEBLATE_API_KEY'
|
||||||
|
|||||||
@@ -203,7 +203,6 @@ const privateConfigSchema = Joi.object({
|
|||||||
teamcity_pass: Joi.string(),
|
teamcity_pass: Joi.string(),
|
||||||
twitch_client_id: Joi.string(),
|
twitch_client_id: Joi.string(),
|
||||||
twitch_client_secret: Joi.string(),
|
twitch_client_secret: Joi.string(),
|
||||||
wheelmap_token: Joi.string(),
|
|
||||||
influx_username: Joi.string(),
|
influx_username: Joi.string(),
|
||||||
influx_password: Joi.string(),
|
influx_password: Joi.string(),
|
||||||
weblate_api_key: Joi.string(),
|
weblate_api_key: Joi.string(),
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ Production hosting is managed by the Shields ops team:
|
|||||||
| YouTube | Account owner | @PyvesB |
|
| YouTube | Account owner | @PyvesB |
|
||||||
| GitLab | Account owner | @calebcartwright |
|
| GitLab | Account owner | @calebcartwright |
|
||||||
| GitLab | Account access | @calebcartwright, @chris48s, @paulmelnikow, @PyvesB |
|
| GitLab | Account access | @calebcartwright, @chris48s, @paulmelnikow, @PyvesB |
|
||||||
| OpenStreetMap (for Wheelmap) | Account owner | @paulmelnikow |
|
|
||||||
| DNS | Account owner | @olivierlacan |
|
| DNS | Account owner | @olivierlacan |
|
||||||
| DNS | Read-only account access | @espadrine, @paulmelnikow, @chris48s |
|
| DNS | Read-only account access | @espadrine, @paulmelnikow, @chris48s |
|
||||||
| Sentry | Error reports | @espadrine, @paulmelnikow |
|
| Sentry | Error reports | @espadrine, @paulmelnikow |
|
||||||
|
|||||||
@@ -351,16 +351,6 @@ You can find your Weblate API key in your profile under
|
|||||||
[weblate authentication]: https://docs.weblate.org/en/latest/api.html#authentication-and-generic-parameters
|
[weblate authentication]: https://docs.weblate.org/en/latest/api.html#authentication-and-generic-parameters
|
||||||
[weblate api key location]: https://hosted.weblate.org/accounts/profile/#api
|
[weblate api key location]: https://hosted.weblate.org/accounts/profile/#api
|
||||||
|
|
||||||
### Wheelmap
|
|
||||||
|
|
||||||
- `WHEELMAP_TOKEN` (yml: `private.wheelmap_token`)
|
|
||||||
|
|
||||||
The wheelmap API requires authentication. To obtain a token,
|
|
||||||
Create an account, [sign in][wheelmap token] and use the _Authentication Token_
|
|
||||||
displayed on your profile page.
|
|
||||||
|
|
||||||
[wheelmap token]: http://classic.wheelmap.org/en/users/sign_in
|
|
||||||
|
|
||||||
### YouTube
|
### YouTube
|
||||||
|
|
||||||
- `YOUTUBE_API_KEY` (yml: `private.youtube_api_key`)
|
- `YOUTUBE_API_KEY` (yml: `private.youtube_api_key`)
|
||||||
|
|||||||
@@ -1,71 +1,11 @@
|
|||||||
import Joi from 'joi'
|
import { deprecatedService } from '../index.js'
|
||||||
import { BaseJsonService, pathParams } from '../index.js'
|
|
||||||
|
|
||||||
const schema = Joi.object({
|
export const Wheelmap = deprecatedService({
|
||||||
node: Joi.object({
|
category: 'other',
|
||||||
wheelchair: Joi.string().required(),
|
route: {
|
||||||
}).required(),
|
|
||||||
}).required()
|
|
||||||
|
|
||||||
export default class Wheelmap extends BaseJsonService {
|
|
||||||
static category = 'other'
|
|
||||||
|
|
||||||
static route = {
|
|
||||||
base: 'wheelmap/a',
|
base: 'wheelmap/a',
|
||||||
pattern: ':nodeId(-?[0-9]+)',
|
pattern: ':nodeId',
|
||||||
}
|
},
|
||||||
|
label: 'wheelmap',
|
||||||
static auth = {
|
dateAdded: new Date('2024-09-14'),
|
||||||
passKey: 'wheelmap_token',
|
})
|
||||||
authorizedOrigins: ['https://wheelmap.org'],
|
|
||||||
isRequired: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
static openApi = {
|
|
||||||
'/wheelmap/a/{nodeId}': {
|
|
||||||
get: {
|
|
||||||
summary: 'Wheelmap',
|
|
||||||
parameters: pathParams({
|
|
||||||
name: 'nodeId',
|
|
||||||
example: '26699541',
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
static defaultBadgeData = { label: 'accessibility' }
|
|
||||||
|
|
||||||
static render({ accessibility }) {
|
|
||||||
let color
|
|
||||||
if (accessibility === 'yes') {
|
|
||||||
color = 'brightgreen'
|
|
||||||
} else if (accessibility === 'limited') {
|
|
||||||
color = 'yellow'
|
|
||||||
} else if (accessibility === 'no') {
|
|
||||||
color = 'red'
|
|
||||||
}
|
|
||||||
return { message: accessibility, color }
|
|
||||||
}
|
|
||||||
|
|
||||||
async fetch({ nodeId }) {
|
|
||||||
return this._requestJson(
|
|
||||||
this.authHelper.withQueryStringAuth(
|
|
||||||
{ passKey: 'api_key' },
|
|
||||||
{
|
|
||||||
schema,
|
|
||||||
url: `https://wheelmap.org/api/nodes/${nodeId}`,
|
|
||||||
httpErrors: {
|
|
||||||
401: 'invalid token',
|
|
||||||
404: 'node not found',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
async handle({ nodeId }) {
|
|
||||||
const json = await this.fetch({ nodeId })
|
|
||||||
const accessibility = json.node.wheelchair
|
|
||||||
return this.constructor.render({ accessibility })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
import { expect } from 'chai'
|
|
||||||
import nock from 'nock'
|
|
||||||
import { cleanUpNockAfterEach, defaultContext } from '../test-helpers.js'
|
|
||||||
import Wheelmap from './wheelmap.service.js'
|
|
||||||
|
|
||||||
describe('Wheelmap', function () {
|
|
||||||
cleanUpNockAfterEach()
|
|
||||||
|
|
||||||
const token = 'abc123'
|
|
||||||
const config = { private: { wheelmap_token: token } }
|
|
||||||
|
|
||||||
function createMock({ nodeId, wheelchair }) {
|
|
||||||
const scope = nock('https://wheelmap.org')
|
|
||||||
.get(`/api/nodes/${nodeId}`)
|
|
||||||
.query({ api_key: token })
|
|
||||||
|
|
||||||
if (wheelchair) {
|
|
||||||
return scope.reply(200, { node: { wheelchair } })
|
|
||||||
} else {
|
|
||||||
return scope.reply(404)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
it('node with accessibility', async function () {
|
|
||||||
const nodeId = '26699541'
|
|
||||||
const scope = createMock({ nodeId, wheelchair: 'yes' })
|
|
||||||
expect(
|
|
||||||
await Wheelmap.invoke(defaultContext, config, { nodeId }),
|
|
||||||
).to.deep.equal({ message: 'yes', color: 'brightgreen' })
|
|
||||||
scope.done()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('node with limited accessibility', async function () {
|
|
||||||
const nodeId = '2034868974'
|
|
||||||
const scope = createMock({ nodeId, wheelchair: 'limited' })
|
|
||||||
expect(
|
|
||||||
await Wheelmap.invoke(defaultContext, config, { nodeId }),
|
|
||||||
).to.deep.equal({ message: 'limited', color: 'yellow' })
|
|
||||||
scope.done()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('node without accessibility', async function () {
|
|
||||||
const nodeId = '-147495158'
|
|
||||||
const scope = createMock({ nodeId, wheelchair: 'no' })
|
|
||||||
expect(
|
|
||||||
await Wheelmap.invoke(defaultContext, config, { nodeId }),
|
|
||||||
).to.deep.equal({ message: 'no', color: 'red' })
|
|
||||||
scope.done()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('node not found', async function () {
|
|
||||||
const nodeId = '0'
|
|
||||||
const scope = createMock({ nodeId })
|
|
||||||
expect(
|
|
||||||
await Wheelmap.invoke(defaultContext, config, { nodeId }),
|
|
||||||
).to.deep.equal({ message: 'node not found', color: 'red', isError: true })
|
|
||||||
scope.done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -1,44 +1,10 @@
|
|||||||
import { createServiceTester } from '../tester.js'
|
import { ServiceTester } from '../tester.js'
|
||||||
import { noToken } from '../test-helpers.js'
|
export const t = new ServiceTester({
|
||||||
import _noWheelmapToken from './wheelmap.service.js'
|
id: 'Wheelmap',
|
||||||
export const t = await createServiceTester()
|
title: 'Wheelmap',
|
||||||
const noWheelmapToken = noToken(_noWheelmapToken)
|
pathPrefix: '/wheelmap/a',
|
||||||
|
})
|
||||||
|
|
||||||
t.create('node with accessibility')
|
t.create('wheelmap (deprecated)')
|
||||||
.skipWhen(noWheelmapToken)
|
|
||||||
.get('/26699541.json')
|
.get('/26699541.json')
|
||||||
.timeout(7500)
|
.expectBadge({ label: 'wheelmap', message: 'no longer available' })
|
||||||
.expectBadge({
|
|
||||||
label: 'accessibility',
|
|
||||||
message: 'yes',
|
|
||||||
color: 'brightgreen',
|
|
||||||
})
|
|
||||||
|
|
||||||
t.create('node with limited accessibility')
|
|
||||||
.skipWhen(noWheelmapToken)
|
|
||||||
.get('/2034868974.json')
|
|
||||||
.timeout(7500)
|
|
||||||
.expectBadge({
|
|
||||||
label: 'accessibility',
|
|
||||||
message: 'limited',
|
|
||||||
color: 'yellow',
|
|
||||||
})
|
|
||||||
|
|
||||||
t.create('node without accessibility')
|
|
||||||
.skipWhen(noWheelmapToken)
|
|
||||||
.get('/-147495158.json')
|
|
||||||
.timeout(7500)
|
|
||||||
.expectBadge({
|
|
||||||
label: 'accessibility',
|
|
||||||
message: 'no',
|
|
||||||
color: 'red',
|
|
||||||
})
|
|
||||||
|
|
||||||
t.create('node not found')
|
|
||||||
.skipWhen(noWheelmapToken)
|
|
||||||
.get('/0.json')
|
|
||||||
.timeout(7500)
|
|
||||||
.expectBadge({
|
|
||||||
label: 'accessibility',
|
|
||||||
message: 'node not found',
|
|
||||||
})
|
|
||||||
|
|||||||
Reference in New Issue
Block a user