diff --git a/.changeset/light-bulldogs-guess.md b/.changeset/light-bulldogs-guess.md new file mode 100644 index 0000000000..d7b5a5aef5 --- /dev/null +++ b/.changeset/light-bulldogs-guess.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Allow the `backend.listen.port` config to be both a number or a string. diff --git a/packages/backend-common/config.d.ts b/packages/backend-common/config.d.ts index 8a6c6d1209..3e21235c63 100644 --- a/packages/backend-common/config.d.ts +++ b/packages/backend-common/config.d.ts @@ -29,7 +29,7 @@ export interface Config { /** Address of the interface that the backend should bind to. */ address?: string; /** Port that the backend should listen to. */ - port?: number; + port?: string | number; }; /** HTTPS configuration for the backend. If omitted the backend will serve HTTP */ diff --git a/packages/backend-common/src/service/lib/config.ts b/packages/backend-common/src/service/lib/config.ts index 541170b704..ea1a2b0887 100644 --- a/packages/backend-common/src/service/lib/config.ts +++ b/packages/backend-common/src/service/lib/config.ts @@ -18,7 +18,7 @@ import { Config } from '@backstage/config'; import { CorsOptions } from 'cors'; export type BaseOptions = { - listenPort?: number; + listenPort?: string | number; listenHost?: string; }; @@ -89,8 +89,19 @@ export function readBaseOptions(config: Config): BaseOptions { }); } + const port = config.getOptional('listen.port'); + if ( + typeof port !== 'undefined' && + typeof port !== 'number' && + typeof port !== 'string' + ) { + throw new Error( + `Invalid type in config for key 'backend.listen.post', got ${typeof port}, wanted string or number`, + ); + } + return removeUnknown({ - listenPort: config.getOptionalNumber('listen.port'), + listenPort: port, listenHost: config.getOptionalString('listen.host'), baseUrl: config.getOptionalString('baseUrl'), });