From dcbb438e5f167ff5a503bc428405554460a12fda Mon Sep 17 00:00:00 2001 From: Mathias Geat Date: Mon, 1 Aug 2022 11:19:37 +0200 Subject: [PATCH 1/3] feat(techdocs-cli): Allow passing docker extra args to @techdocs/cli serve and serve:mkdocs Signed-off-by: Mathias Geat --- docs/features/techdocs/cli.md | 2 ++ packages/techdocs-cli/src/commands/index.ts | 8 +++++ .../techdocs-cli/src/commands/serve/mkdocs.ts | 1 + .../techdocs-cli/src/commands/serve/serve.ts | 1 + .../techdocs-cli/src/lib/mkdocsServer.test.ts | 33 +++++++++++++++++++ packages/techdocs-cli/src/lib/mkdocsServer.ts | 2 ++ 6 files changed, 47 insertions(+) diff --git a/docs/features/techdocs/cli.md b/docs/features/techdocs/cli.md index 52c389975e..dc89f1718b 100644 --- a/docs/features/techdocs/cli.md +++ b/docs/features/techdocs/cli.md @@ -83,6 +83,8 @@ Serve a documentation project locally in a Backstage app-like environment Options: -i, --docker-image The mkdocs docker container to use (default: "spotify/techdocs") --docker-entrypoint Override the image entrypoint + --docker-option Extra options to pass to the docker run command, e.g. "--add-host=internal.host:192.168.11.12" + (can be added multiple times). --no-docker Do not use Docker, use MkDocs executable in current user environment. --mkdocs-port Port for MkDocs server to use (default: "8000") -v --verbose Enable verbose output. (default: false) diff --git a/packages/techdocs-cli/src/commands/index.ts b/packages/techdocs-cli/src/commands/index.ts index 68e8f88c0b..03772d09d7 100644 --- a/packages/techdocs-cli/src/commands/index.ts +++ b/packages/techdocs-cli/src/commands/index.ts @@ -215,6 +215,10 @@ export function registerCommands(program: Command) { '--docker-entrypoint ', 'Override the image entrypoint', ) + .option( + '--docker-option ', + 'Extra options to pass to the docker run command, e.g. "--add-host=internal.host:192.168.11.12" (can be added multiple times).', + ) .option( '--no-docker', 'Do not use Docker, run `mkdocs serve` in current user environment.', @@ -237,6 +241,10 @@ export function registerCommands(program: Command) { '--docker-entrypoint ', 'Override the image entrypoint', ) + .option( + '--docker-option ', + 'Extra options to pass to the docker run command, e.g. "--add-host=internal.host:192.168.11.12" (can be added multiple times).', + ) .option( '--no-docker', 'Do not use Docker, use MkDocs executable in current user environment.', diff --git a/packages/techdocs-cli/src/commands/serve/mkdocs.ts b/packages/techdocs-cli/src/commands/serve/mkdocs.ts index 511df00a17..9cc0aef3be 100644 --- a/packages/techdocs-cli/src/commands/serve/mkdocs.ts +++ b/packages/techdocs-cli/src/commands/serve/mkdocs.ts @@ -62,6 +62,7 @@ export default async function serveMkdocs(opts: OptionValues) { port: opts.port, dockerImage: opts.dockerImage, dockerEntrypoint: opts.dockerEntrypoint, + dockerOptions: opts.dockerOption, useDocker: opts.docker, stdoutLogFunc: logFunc, stderrLogFunc: logFunc, diff --git a/packages/techdocs-cli/src/commands/serve/serve.ts b/packages/techdocs-cli/src/commands/serve/serve.ts index 454e9ffa55..68d0bbb277 100644 --- a/packages/techdocs-cli/src/commands/serve/serve.ts +++ b/packages/techdocs-cli/src/commands/serve/serve.ts @@ -93,6 +93,7 @@ export default async function serve(opts: OptionValues) { port: opts.mkdocsPort, dockerImage: opts.dockerImage, dockerEntrypoint: opts.dockerEntrypoint, + dockerOptions: opts.dockerOption, useDocker: opts.docker, stdoutLogFunc: mkdocsLogFunc, stderrLogFunc: mkdocsLogFunc, diff --git a/packages/techdocs-cli/src/lib/mkdocsServer.test.ts b/packages/techdocs-cli/src/lib/mkdocsServer.test.ts index 0167dec12b..8484c4e242 100644 --- a/packages/techdocs-cli/src/lib/mkdocsServer.test.ts +++ b/packages/techdocs-cli/src/lib/mkdocsServer.test.ts @@ -64,6 +64,39 @@ describe('runMkdocsServer', () => { expect.objectContaining({}), ); }); + + it('should accept custom docker options', async () => { + await runMkdocsServer({ + dockerOptions: [ + '--add-host=internal.host:192.168.11.12', + '--name', + 'my-techdocs-container', + ], + }); + + expect(run).toHaveBeenCalledWith( + 'docker', + expect.arrayContaining([ + 'run', + '--rm', + '-w', + '/content', + '-v', + `${process.cwd()}:/content`, + '-p', + '8000:8000', + '-it', + '--add-host=internal.host:192.168.11.12', + '--name', + 'my-techdocs-container', + 'spotify/techdocs', + 'serve', + '--dev-addr', + '0.0.0.0:8000', + ]), + expect.objectContaining({}), + ); + }); }); describe('mkdocs', () => { diff --git a/packages/techdocs-cli/src/lib/mkdocsServer.ts b/packages/techdocs-cli/src/lib/mkdocsServer.ts index c0b0cec498..5ca7e47573 100644 --- a/packages/techdocs-cli/src/lib/mkdocsServer.ts +++ b/packages/techdocs-cli/src/lib/mkdocsServer.ts @@ -22,6 +22,7 @@ export const runMkdocsServer = async (options: { useDocker?: boolean; dockerImage?: string; dockerEntrypoint?: string; + dockerOptions?: string[]; stdoutLogFunc?: LogFunc; stderrLogFunc?: LogFunc; }): Promise => { @@ -45,6 +46,7 @@ export const runMkdocsServer = async (options: { ...(options.dockerEntrypoint ? ['--entrypoint', options.dockerEntrypoint] : []), + ...(options.dockerOptions || []), dockerImage, 'serve', '--dev-addr', From 855952db536488e7eab99ae720ac8aca6e9d13e4 Mon Sep 17 00:00:00 2001 From: Mathias Geat Date: Mon, 1 Aug 2022 11:34:52 +0200 Subject: [PATCH 2/3] feat(techdocs-cli): Add changeset for serve --docker-option Signed-off-by: Mathias Geat --- .changeset/weak-shrimps-deny.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/weak-shrimps-deny.md diff --git a/.changeset/weak-shrimps-deny.md b/.changeset/weak-shrimps-deny.md new file mode 100644 index 0000000000..38b5ca1a8a --- /dev/null +++ b/.changeset/weak-shrimps-deny.md @@ -0,0 +1,5 @@ +--- +'@techdocs/cli': minor +--- + +Added CLI option `--docker-option` to allow passing additional options to the `docker run` command executed my `serve` and `serve:mkdocs`. From 163bfaebd8eb743f9eb1ceb0ef7a3cacaff6fc9d Mon Sep 17 00:00:00 2001 From: Mathias Geat Date: Mon, 1 Aug 2022 13:20:16 +0200 Subject: [PATCH 3/3] feat(techdocs-cli): Add new --docker-option to cli-report for techdocs-cli Signed-off-by: Mathias Geat --- packages/techdocs-cli/cli-report.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/techdocs-cli/cli-report.md b/packages/techdocs-cli/cli-report.md index 64b5e9c090..cf5b2caf0f 100644 --- a/packages/techdocs-cli/cli-report.md +++ b/packages/techdocs-cli/cli-report.md @@ -96,6 +96,7 @@ Usage: techdocs-cli serve [options] Options: -i, --docker-image --docker-entrypoint + --docker-option --no-docker --mkdocs-port -v --verbose @@ -110,6 +111,7 @@ Usage: techdocs-cli serve:mkdocs [options] Options: -i, --docker-image --docker-entrypoint + --docker-option --no-docker -p, --port -v --verbose