From 8954ded19b7ee9294dafdd424adf4820e8c200d6 Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Sat, 29 Aug 2020 17:15:26 +0200 Subject: [PATCH] Ignore comma sep for CSV inputs type Signed-off-by: CrazyMax --- README.md | 18 ++++++++++++++---- __tests__/context.test.ts | 14 ++++++++++++++ dist/index.js | 12 +++++++----- src/context.ts | 12 +++++++----- 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index eda2c79..d17bbaa 100644 --- a/README.md +++ b/README.md @@ -324,11 +324,11 @@ Following inputs can be used as `step.with` keys | `platforms` | List | List of [target platforms](https://github.com/docker/buildx#---platformvaluevalue) for build | | `load` | Bool | [Load](https://github.com/docker/buildx#--load) is a shorthand for `--output=type=docker` (default `false`) | | `push` | Bool | [Push](https://github.com/docker/buildx#--push) is a shorthand for `--output=type=registry` (default `false`) | -| `outputs` | List | List of [output destinations](https://github.com/docker/buildx#-o---outputpath-typetypekeyvalue) (format: `type=local,dest=path`) | -| `cache-from` | List | List of [external cache sources](https://github.com/docker/buildx#--cache-fromnametypetypekeyvalue) (eg. `user/app:cache`, `type=local,src=path/to/dir`) | -| `cache-to` | List | List of [cache export destinations](https://github.com/docker/buildx#--cache-tonametypetypekeyvalue) (eg. `user/app:cache`, `type=local,dest=path/to/dir`) | +| `outputs` | CSV | List of [output destinations](https://github.com/docker/buildx#-o---outputpath-typetypekeyvalue) (format: `type=local,dest=path`) | +| `cache-from` | CSV | List of [external cache sources](https://github.com/docker/buildx#--cache-fromnametypetypekeyvalue) (eg. `user/app:cache`, `type=local,src=path/to/dir`) | +| `cache-to` | CSV | List of [cache export destinations](https://github.com/docker/buildx#--cache-tonametypetypekeyvalue) (eg. `user/app:cache`, `type=local,dest=path/to/dir`) | -> List type can be a comma or newline-delimited string +> `List` type can be a comma or newline-delimited string > ```yaml > tags: name/app:latest,name/app:1.0.0 > ``` @@ -338,6 +338,16 @@ Following inputs can be used as `step.with` keys > name/app:1.0.0 > ``` +> `CSV` type must be a newline-delimited string +> ```yaml +> cache-from: user/app:cache +> ``` +> ```yaml +> cache-from: | +> user/app:cache +> type=local,src=path/to/dir +> ``` + ### outputs Following outputs are available diff --git a/__tests__/context.test.ts b/__tests__/context.test.ts index dd147f1..a86fee5 100644 --- a/__tests__/context.test.ts +++ b/__tests__/context.test.ts @@ -35,6 +35,20 @@ describe('getInputList', () => { console.log(res); expect(res).toEqual(['bar', 'baz', 'bat']); }); + + it('handles multiple lines and ignoring comma correctly', async () => { + setInput('cache-from', 'user/app:cache\ntype=local,src=path/to/dir'); + const res = await context.getInputList('cache-from', true); + console.log(res); + expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']); + }); + + it('handles different new lines and ignoring comma correctly', async () => { + setInput('cache-from', 'user/app:cache\r\ntype=local,src=path/to/dir'); + const res = await context.getInputList('cache-from', true); + console.log(res); + expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']); + }); }); describe('asyncForEach', () => { diff --git a/dist/index.js b/dist/index.js index b278c58..23bb0a1 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3566,9 +3566,9 @@ function getInputs() { platforms: yield getInputList('platforms'), load: /true/i.test(core.getInput('load')), push: /true/i.test(core.getInput('push')), - outputs: yield getInputList('outputs'), - cacheFrom: yield getInputList('cache-from'), - cacheTo: yield getInputList('cache-to') + outputs: yield getInputList('outputs', true), + cacheFrom: yield getInputList('cache-from', true), + cacheTo: yield getInputList('cache-to', true) }; }); } @@ -3640,13 +3640,15 @@ function getCommonArgs(inputs) { return args; }); } -function getInputList(name) { +function getInputList(name, ignoreComma) { return __awaiter(this, void 0, void 0, function* () { const items = core.getInput(name); if (items == '') { return []; } - return items.split(/\r?\n/).reduce((acc, line) => acc.concat(line.split(',')).map(pat => pat.trim()), []); + return items + .split(/\r?\n/) + .reduce((acc, line) => acc.concat(!ignoreComma ? line.split(',') : line).map(pat => pat.trim()), []); }); } exports.getInputList = getInputList; diff --git a/src/context.ts b/src/context.ts index cb4ae46..79eea24 100644 --- a/src/context.ts +++ b/src/context.ts @@ -41,9 +41,9 @@ export async function getInputs(): Promise { platforms: await getInputList('platforms'), load: /true/i.test(core.getInput('load')), push: /true/i.test(core.getInput('push')), - outputs: await getInputList('outputs'), - cacheFrom: await getInputList('cache-from'), - cacheTo: await getInputList('cache-to') + outputs: await getInputList('outputs', true), + cacheFrom: await getInputList('cache-from', true), + cacheTo: await getInputList('cache-to', true) }; } @@ -110,12 +110,14 @@ async function getCommonArgs(inputs: Inputs): Promise> { return args; } -export async function getInputList(name: string): Promise { +export async function getInputList(name: string, ignoreComma?: boolean): Promise { const items = core.getInput(name); if (items == '') { return []; } - return items.split(/\r?\n/).reduce((acc, line) => acc.concat(line.split(',')).map(pat => pat.trim()), []); + return items + .split(/\r?\n/) + .reduce((acc, line) => acc.concat(!ignoreComma ? line.split(',') : line).map(pat => pat.trim()), []); } export const asyncForEach = async (array, callback) => {