Skip to content

Commit

Permalink
Merge pull request #1065 from gchq/feature/default-v2-enabled
Browse files Browse the repository at this point in the history
Enable v2 API by default
  • Loading branch information
a3957273 authored Feb 5, 2024
2 parents 2be27a6 + a3acc80 commit c28a727
Show file tree
Hide file tree
Showing 15 changed files with 150 additions and 152 deletions.
6 changes: 0 additions & 6 deletions .github/workflows/build.js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -466,9 +466,6 @@ jobs:
accessKey: 'minioadmin',
secretKey: 'minioadmin',
},
experimental: {
v2: true,
},
smtp: {
auth: {
Expand Down Expand Up @@ -586,9 +583,6 @@ jobs:
accessKey: 'minioadmin',
secretKey: 'minioadmin',
},
experimental: {
v2: true,
},
smtp: {
auth: {
Expand Down
2 changes: 0 additions & 2 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,6 @@ openshift-deploy:
enabled: "true"
text: "BAILO DEVELOPMENT"
colour: "#2B71C7"
experimental:
v2: true
# Bailo
image:
frontendRepository: "$FRONTEND_REPO"
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
[![Stargazers][stars-shield]][stars-url] [![Issues][issues-shield]][issues-url]
[![License][license-shield]][license-url]

> Bailo is still in development and we have not yet completed all of the features we want it to have. See the roadmap
> for what we plan to build.
> **NOTE: `main` branch now tracks `v2` by default. To access the original Bailo, see the `v1` branch. `v1` is in the
> process of being removed from this project, see [migration]() for more information.**
<!-- PROJECT LOGO -->
<br />
Expand Down
6 changes: 1 addition & 5 deletions backend/config/beta.cjs
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
module.exports = {
experimental: {
v2: true,
},
}
module.exports = {}
4 changes: 0 additions & 4 deletions backend/config/default.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -219,10 +219,6 @@ module.exports = {
maxModelSizeGB: 50,
},

experimental: {
v2: false,
},

connectors: {
authentication: {
kind: 'silly',
Expand Down
4 changes: 1 addition & 3 deletions backend/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,7 @@ createSchemaIndexes()

// lazily add default schemas
addDefaultSchemas()
if (config.experimental.v2) {
addDefaultSchemasv2()
}
addDefaultSchemasv2()

await Promise.all([processUploads(), processDeployments()])

Expand Down
226 changes: 117 additions & 109 deletions backend/src/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ import { getUiConfig as getUiConfigV2 } from './routes/v2/uiConfig/getUiConfig.j
import { deleteUserToken } from './routes/v2/user/deleteUserToken.js'
import { getUserTokens } from './routes/v2/user/getUserTokens.js'
import { postUserToken } from './routes/v2/user/postUserToken.js'
import logger, { expressErrorHandler, expressLogger } from './utils/logger.js'
import { expressErrorHandler, expressLogger } from './utils/logger.js'
import { getUser } from './utils/user.js'
import config from './utils/v2/config.js'

Expand All @@ -122,6 +122,9 @@ if (config.oauth.enabled) {
}),
}),
)
}

if (config.oauth.enabled) {
server.use(parser.urlencoded({ extended: true }))
server.use(grant.default.express(config.oauth.grant))

Expand All @@ -139,13 +142,10 @@ if (config.oauth.enabled) {

server.use('/api/v1', getUser)
server.use('/api/v1', expressLogger)

if (config.experimental.v2) {
server.use('/api/v2', expressLoggerV2)
const middlewareConfigs = authentication.authenticationMiddleware()
for (const middlewareConf of middlewareConfigs) {
server.use(middlewareConf?.path || '/', middlewareConf.middleware)
}
server.use('/api/v2', expressLoggerV2)
const middlewareConfigs = authentication.authenticationMiddleware()
for (const middlewareConf of middlewareConfigs) {
server.use(middlewareConf?.path || '/', middlewareConf.middleware)
}

// V1 APIs
Expand Down Expand Up @@ -210,106 +210,114 @@ server.get('/api/v1/admin/logs/approval/:approvalId', ...getItemLogs)
/**
** V2 API **
*/

if (config.experimental.v2) {
logger.info('Using experimental V2 endpoints')

server.post('/api/v2/models', ...postModel)
server.get('/api/v2/models/search', ...getModelsSearch)
// server.post('/api/v2/models/import', ...postModelImport)

server.get('/api/v2/model/:modelId', ...getModel)
server.patch('/api/v2/model/:modelId', ...patchModel)

server.get('/api/v2/model/:modelId/model-card/:version', ...getModelCard)
server.get('/api/v2/model/:modelId/model-card-revisions', ...getModelCardRevisions)
server.put('/api/v2/model/:modelId/model-cards', ...putModelCard)

// *server.get('/api/v2/template/models', ...getModelTemplates)
// *server.post('/api/v2/model/:modelId/setup/from-template', ...postFromTemplate)
// *server.post('/api/v2/model/:modelId/setup/from-existing', ...postFromExisting)
server.post('/api/v2/model/:modelId/setup/from-schema', ...postFromSchema)

server.post('/api/v2/model/:modelId/releases', ...postRelease)
server.get('/api/v2/model/:modelId/releases', ...getReleases)
server.get('/api/v2/model/:modelId/release/:semver', ...getRelease)
server.get('/api/v2/model/:modelId/release/:semver/file/:fileName/download', ...getDownloadFile)
// This is a temporary workaround to split out the URL to disable authorisation.
server.get('/api/v2/token/model/:modelId/release/:semver/file/:fileName/download', ...getDownloadFile)
server.put('/api/v2/model/:modelId/release/:semver', ...putRelease)
server.post('/api/v2/model/:modelId/release/:semver/comment', ...postReleaseComment)
server.delete('/api/v2/model/:modelId/release/:semver', ...deleteRelease)
server.post('/api/v2/model/:modelId/release/:semver/review', ...postReleaseReviewResponse)

server.post('/api/v2/model/:modelId/access-requests', ...postAccessRequest)
server.get('/api/v2/model/:modelId/access-requests', getModelAccessRequests)
server.get('/api/v2/model/:modelId/access-request/:accessRequestId', ...getAccessRequest)
server.delete('/api/v2/model/:modelId/access-request/:accessRequestId', ...deleteAccessRequest)
server.patch('/api/v2/model/:modelId/access-request/:accessRequestId', ...patchAccessRequest)
server.post('/api/v2/model/:modelId/access-request/:accessRequestId/comment', ...postAccessRequestComment)
server.post('/api/v2/model/:modelId/access-request/:accessRequestId/review', ...postAccessRequestReviewResponse)

server.get('/api/v2/model/:modelId/files', ...getFiles)
server.get('/api/v2/model/:modelId/file/:fileId/download', ...getDownloadFile)
// This is a temporary workaround to split out the URL to disable authorisation.
server.get('/api/v2/token/model/:modelId/file/:fileId/download', ...getDownloadFile)
server.post('/api/v2/model/:modelId/files/upload/simple', ...postSimpleUpload)
server.post('/api/v2/model/:modelId/files/upload/multipart/start', ...postStartMultipartUpload)
server.post('/api/v2/model/:modelId/files/upload/multipart/finish', ...postFinishMultipartUpload)
server.delete('/api/v2/model/:modelId/file/:fileId', ...deleteFile)

server.post('/api/v2/model/:modelId/webhooks', ...postWebhook)
server.get('/api/v2/model/:modelId/webhooks', ...getWebhooks)
server.put('/api/v2/model/:modelId/webhook/:webhookId', ...putWebhook)
server.delete('/api/v2/model/:modelId/webhook/:webhookId', ...deleteWebhook)

server.get('/api/v2/model/:modelId/images', ...getImages)
// *server.delete('/api/v2/model/:modelId/images/:imageId', ...deleteImage)

// *server.get('/api/v2/model/:modelId/release/:semver/file/:fileCode/list', ...getModelFileList)
// *server.get('/api/v2/model/:modelId/release/:semver/file/:fileCode/raw', ...getModelFileRaw)

server.get('/api/v2/schemas', ...getSchemasV2)
server.get('/api/v2/schema/:schemaId', ...getSchemaV2)
server.post('/api/v2/schemas', ...postSchemaV2)

server.get('/api/v2/reviews', ...getReviews)

server.get('/api/v2/model/:modelId/roles', ...getModelRoles)
server.get('/api/v2/model/:modelId/roles/mine', ...getModelCurrentUserRoles)

server.post('/api/v2/teams', ...postTeam)
server.get('/api/v2/teams', ...getTeams)
server.get('/api/v2/teams/mine', ...getTeams)

server.get('/api/v2/team/:teamId', ...getTeam)
server.patch('/api/v2/team/:teamId', ...patchTeam)

// server.post('/api/v2/teams/:teamId/members', ...postTeamMember)
// server.get('/api/v2/teams/:teamId/members', ...getTeamMembers)
// server.delete('/api/v2/teams/:teamId/members/:memberId', ...deleteTeamMember)
// server.patch('/api/v2/teams/:teamId/members/:memberId', ...patchTeamMember)

// server.get('/api/v2/teams/:teamId/roles/:memberId', ...getTeamMemberRoles)

server.get('/api/v2/entities', ...getEntities)
server.get('/api/v2/entities/me', ...getCurrentUser)
server.get('/api/v2/entity/:dn/lookup', ...getEntityLookup)

server.get('/api/v2/config/ui', ...getUiConfigV2)

server.post('/api/v2/user/tokens', ...postUserToken)
server.get('/api/v2/user/tokens', ...getUserTokens)
// server.get('/api/v2/user/:userId/token/:tokenId', ...getUserToken)
server.delete('/api/v2/user/token/:accessKey', ...deleteUserToken)

server.get('/api/v2/specification', ...getSpecificationV2)
} else {
logger.info('Not using experimental V2 endpoints')
}
server.post('/api/v2/models', ...postModel)
server.get('/api/v2/models/search', ...getModelsSearch)
// server.post('/api/v2/models/import', ...postModelImport)

server.get('/api/v2/model/:modelId', ...getModel)
server.patch('/api/v2/model/:modelId', ...patchModel)

server.get('/api/v2/model/:modelId/model-card/:version', ...getModelCard)
server.get('/api/v2/model/:modelId/model-card-revisions', ...getModelCardRevisions)
server.put('/api/v2/model/:modelId/model-cards', ...putModelCard)

// *server.get('/api/v2/template/models', ...getModelTemplates)
// *server.post('/api/v2/model/:modelId/setup/from-template', ...postFromTemplate)
// *server.post('/api/v2/model/:modelId/setup/from-existing', ...postFromExisting)
server.post('/api/v2/model/:modelId/setup/from-schema', ...postFromSchema)

server.post('/api/v2/model/:modelId/releases', ...postRelease)
server.get('/api/v2/model/:modelId/releases', ...getReleases)
server.get('/api/v2/model/:modelId/release/:semver', ...getRelease)
server.get('/api/v2/model/:modelId/release/:semver/file/:fileName/download', ...getDownloadFile)
// This is a temporary workaround to split out the URL to disable authorisation.
server.get('/api/v2/token/model/:modelId/release/:semver/file/:fileName/download', ...getDownloadFile)
server.put('/api/v2/model/:modelId/release/:semver', ...putRelease)
server.post('/api/v2/model/:modelId/release/:semver/comment', ...postReleaseComment)
server.delete('/api/v2/model/:modelId/release/:semver', ...deleteRelease)
server.post('/api/v2/model/:modelId/release/:semver/review', ...postReleaseReviewResponse)

server.post('/api/v2/model/:modelId/access-requests', ...postAccessRequest)
server.get('/api/v2/model/:modelId/access-requests', getModelAccessRequests)
server.get('/api/v2/model/:modelId/access-request/:accessRequestId', ...getAccessRequest)
server.delete('/api/v2/model/:modelId/access-request/:accessRequestId', ...deleteAccessRequest)
server.patch('/api/v2/model/:modelId/access-request/:accessRequestId', ...patchAccessRequest)
server.post('/api/v2/model/:modelId/access-request/:accessRequestId/comment', ...postAccessRequestComment)
server.post('/api/v2/model/:modelId/access-request/:accessRequestId/review', ...postAccessRequestReviewResponse)

server.get('/api/v2/model/:modelId/files', ...getFiles)
server.get('/api/v2/model/:modelId/file/:fileId/download', ...getDownloadFile)
// This is a temporary workaround to split out the URL to disable authorisation.
server.get('/api/v2/token/model/:modelId/file/:fileId/download', ...getDownloadFile)
server.post('/api/v2/model/:modelId/files/upload/simple', ...postSimpleUpload)
server.post('/api/v2/model/:modelId/files/upload/multipart/start', ...postStartMultipartUpload)
server.post('/api/v2/model/:modelId/files/upload/multipart/finish', ...postFinishMultipartUpload)
server.delete('/api/v2/model/:modelId/file/:fileId', ...deleteFile)
server.post('/api/v2/model/:modelId/releases', ...postRelease)
server.get('/api/v2/model/:modelId/releases', ...getReleases)
server.get('/api/v2/model/:modelId/release/:semver', ...getRelease)
server.get('/api/v2/model/:modelId/release/:semver/file/:fileName/download', ...getDownloadFile)
// This is a temporary workaround to split out the URL to disable authorisation.
server.get('/api/v2/token/model/:modelId/release/:semver/file/:fileName/download', ...getDownloadFile)
server.put('/api/v2/model/:modelId/release/:semver', ...putRelease)
server.post('/api/v2/model/:modelId/release/:semver/comment', ...postReleaseComment)
server.delete('/api/v2/model/:modelId/release/:semver', ...deleteRelease)
server.post('/api/v2/model/:modelId/release/:semver/review', ...postReleaseReviewResponse)

server.post('/api/v2/model/:modelId/webhooks', ...postWebhook)
server.get('/api/v2/model/:modelId/webhooks', ...getWebhooks)
server.put('/api/v2/model/:modelId/webhook/:webhookId', ...putWebhook)
server.delete('/api/v2/model/:modelId/webhook/:webhookId', ...deleteWebhook)

server.get('/api/v2/model/:modelId/images', ...getImages)
// *server.delete('/api/v2/model/:modelId/images/:imageId', ...deleteImage)
server.get('/api/v2/model/:modelId/files', ...getFiles)
server.get('/api/v2/model/:modelId/file/:fileId/download', ...getDownloadFile)
// This is a temporary workaround to split out the URL to disable authorisation.
server.get('/api/v2/token/model/:modelId/file/:fileId/download', ...getDownloadFile)
server.post('/api/v2/model/:modelId/files/upload/simple', ...postSimpleUpload)
server.post('/api/v2/model/:modelId/files/upload/multipart/start', ...postStartMultipartUpload)
server.post('/api/v2/model/:modelId/files/upload/multipart/finish', ...postFinishMultipartUpload)
server.delete('/api/v2/model/:modelId/file/:fileId', ...deleteFile)

// *server.get('/api/v2/model/:modelId/release/:semver/file/:fileCode/list', ...getModelFileList)
// *server.get('/api/v2/model/:modelId/release/:semver/file/:fileCode/raw', ...getModelFileRaw)

server.get('/api/v2/schemas', ...getSchemasV2)
server.get('/api/v2/schema/:schemaId', ...getSchemaV2)
server.post('/api/v2/schemas', ...postSchemaV2)

server.get('/api/v2/reviews', ...getReviews)

server.get('/api/v2/model/:modelId/roles', ...getModelRoles)
server.get('/api/v2/model/:modelId/roles/mine', ...getModelCurrentUserRoles)

server.post('/api/v2/teams', ...postTeam)
server.get('/api/v2/teams', ...getTeams)
server.get('/api/v2/teams/mine', ...getTeams)

server.get('/api/v2/team/:teamId', ...getTeam)
server.patch('/api/v2/team/:teamId', ...patchTeam)

// server.post('/api/v2/teams/:teamId/members', ...postTeamMember)
// server.get('/api/v2/teams/:teamId/members', ...getTeamMembers)
// server.delete('/api/v2/teams/:teamId/members/:memberId', ...deleteTeamMember)
// server.patch('/api/v2/teams/:teamId/members/:memberId', ...patchTeamMember)

// server.get('/api/v2/teams/:teamId/roles/:memberId', ...getTeamMemberRoles)

server.get('/api/v2/entities', ...getEntities)
server.get('/api/v2/entities/me', ...getCurrentUser)
server.get('/api/v2/entity/:dn/lookup', ...getEntityLookup)

server.get('/api/v2/config/ui', ...getUiConfigV2)

server.post('/api/v2/user/tokens', ...postUserToken)
server.get('/api/v2/user/tokens', ...getUserTokens)
// server.get('/api/v2/user/:userId/token/:tokenId', ...getUserToken)
server.delete('/api/v2/user/token/:accessKey', ...deleteUserToken)

server.get('/api/v2/specification', ...getSpecificationV2)

server.use('/api/v1', expressErrorHandler)

if (config.experimental.v2) {
server.use('/api/v2', expressErrorHandlerV2)
}
server.use('/api/v2', expressErrorHandlerV2)
3 changes: 0 additions & 3 deletions backend/src/utils/__mocks__/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,6 @@ const config = {
uploads: 'uploads',
},
},
experimental: {
v2: true,
},
oauth: {
enabled: false,
},
Expand Down
6 changes: 0 additions & 6 deletions backend/src/utils/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,10 +150,6 @@ export interface Config {
//max model size is calculated in gigabytes
maxModelSizeGB: number
}

experimental: {
v2: boolean
}
}

const config: Config = {
Expand Down Expand Up @@ -231,8 +227,6 @@ const config: Config = {
session: _config.get('session'),

ui: _config.get('ui'),

experimental: _config.get('experimental'),
}

export default config
3 changes: 0 additions & 3 deletions backend/src/utils/test/testUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,6 @@ vi.mock('../../utils/config.js', () => {
uploads: 'uploads',
},
},
experimental: {
v2: false,
},
oauth: {
enabled: false,
},
Expand Down
2 changes: 1 addition & 1 deletion backend/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"compilerOptions": {
"target": "es2017",
"module": "esnext",
"moduleResolution": "node16",
"moduleResolution": "NodeNext",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
Expand Down
3 changes: 2 additions & 1 deletion frontend/lint-staged.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ const buildEslintCommand = (filenames) =>
.join(' --file ')}`

const config = {
'**/*.{ts,tsx,md,mdx}': [buildEslintCommand, 'prettier --check'],
'**/*.{ts,tsx,md}': [buildEslintCommand],
'**/*.{ts,tsx,md,mdx}': ['prettier --check'],
}

export default config
Loading

0 comments on commit c28a727

Please sign in to comment.