diff --git a/docs/commands.md b/docs/commands.md index c711368a..694639fa 100644 --- a/docs/commands.md +++ b/docs/commands.md @@ -50,7 +50,10 @@ function setSecret(secret: string): void {} Now, future logs containing BAR will be masked. E.g. running `echo "Hello FOO BAR World"` will now print `Hello FOO **** World`. -**WARNING** The add-mask and setSecret commands only support single line secrets. To register a multiline secrets you must register each line individually otherwise it will not be masked. +**WARNING** The add-mask command only supports single line secrets. To register +a multiline secret you must register each line individually otherwise it will +not be masked, if you use `@actions/core >= 1.11.0` `setSecret` will do this +for you. **WARNING** Do **not** mask short values if you can avoid it, it could render your output unreadable (and future steps' output as well). For example, if you mask the letter `l`, running `echo "Hello FOO BAR World"` will now print `He*********o FOO BAR Wor****d` diff --git a/packages/core/__tests__/core.test.ts b/packages/core/__tests__/core.test.ts index 5011fcc8..d73a2a06 100644 --- a/packages/core/__tests__/core.test.ts +++ b/packages/core/__tests__/core.test.ts @@ -164,6 +164,15 @@ describe('@actions/core', () => { assertWriteCalls([`::add-mask::secret val${os.EOL}`]) }) + it('setSecret splits multi line secrets into multiple commands', () => { + core.setSecret('first\nsecond\r\nthird') + assertWriteCalls([ + `::add-mask::first${os.EOL}`, + `::add-mask::second${os.EOL}`, + `::add-mask::third${os.EOL}` + ]) + }) + it('prependPath produces the correct commands and sets the env', () => { const command = 'PATH' createFileCommandFile(command) diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index 1e8d940a..8cd5ad8d 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -97,7 +97,11 @@ export function exportVariable(name: string, val: any): void { * @param secret value of the secret */ export function setSecret(secret: string): void { - issueCommand('add-mask', {}, secret) + secret.split(/\r?\n|\r/).forEach(part => { + if (part) { + issueCommand('add-mask', {}, part) + } + }) } /**