util: opt to escape quotes for input list
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
@@ -69,16 +69,22 @@ describe('getInputList', () => {
|
|||||||
|
|
||||||
it('multiline and ignoring comma correctly', async () => {
|
it('multiline and ignoring comma correctly', async () => {
|
||||||
setInput('cache-from', 'user/app:cache\ntype=local,src=path/to/dir');
|
setInput('cache-from', 'user/app:cache\ntype=local,src=path/to/dir');
|
||||||
const res = Util.getInputList('cache-from', true);
|
const res = Util.getInputList('cache-from', {ignoreComma: true});
|
||||||
expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']);
|
expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('different new lines and ignoring comma correctly', async () => {
|
it('different new lines and ignoring comma correctly', async () => {
|
||||||
setInput('cache-from', 'user/app:cache\r\ntype=local,src=path/to/dir');
|
setInput('cache-from', 'user/app:cache\r\ntype=local,src=path/to/dir');
|
||||||
const res = Util.getInputList('cache-from', true);
|
const res = Util.getInputList('cache-from', {ignoreComma: true});
|
||||||
expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']);
|
expect(res).toEqual(['user/app:cache', 'type=local,src=path/to/dir']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('escape surrounding quotes', async () => {
|
||||||
|
setInput('platforms', 'linux/amd64\n"linux/arm64,linux/arm/v7"');
|
||||||
|
const res = Util.getInputList('platforms', {escapeQuotes: true});
|
||||||
|
expect(res).toEqual(['linux/amd64', 'linux/arm64', 'linux/arm/v7']);
|
||||||
|
});
|
||||||
|
|
||||||
it('multiline values', async () => {
|
it('multiline values', async () => {
|
||||||
setInput(
|
setInput(
|
||||||
'secrets',
|
'secrets',
|
||||||
@@ -88,7 +94,7 @@ bbbbbbb
|
|||||||
ccccccccc"
|
ccccccccc"
|
||||||
FOO=bar`
|
FOO=bar`
|
||||||
);
|
);
|
||||||
const res = Util.getInputList('secrets', true);
|
const res = Util.getInputList('secrets', {ignoreComma: true});
|
||||||
expect(res).toEqual([
|
expect(res).toEqual([
|
||||||
'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789',
|
'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789',
|
||||||
`MYSECRET=aaaaaaaa
|
`MYSECRET=aaaaaaaa
|
||||||
@@ -111,7 +117,7 @@ FOO=bar
|
|||||||
bbbb
|
bbbb
|
||||||
ccc"`
|
ccc"`
|
||||||
);
|
);
|
||||||
const res = Util.getInputList('secrets', true);
|
const res = Util.getInputList('secrets', {ignoreComma: true});
|
||||||
expect(res).toEqual([
|
expect(res).toEqual([
|
||||||
'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789',
|
'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789',
|
||||||
`MYSECRET=aaaaaaaa
|
`MYSECRET=aaaaaaaa
|
||||||
@@ -134,7 +140,7 @@ bbbbbbb
|
|||||||
ccccccccc
|
ccccccccc
|
||||||
FOO=bar`
|
FOO=bar`
|
||||||
);
|
);
|
||||||
const res = Util.getInputList('secrets', true);
|
const res = Util.getInputList('secrets', {ignoreComma: true});
|
||||||
expect(res).toEqual(['GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789', 'MYSECRET=aaaaaaaa', 'bbbbbbb', 'ccccccccc', 'FOO=bar']);
|
expect(res).toEqual(['GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789', 'MYSECRET=aaaaaaaa', 'bbbbbbb', 'ccccccccc', 'FOO=bar']);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -145,7 +151,7 @@ FOO=bar`
|
|||||||
`"GPG_KEY=${pgp}"
|
`"GPG_KEY=${pgp}"
|
||||||
FOO=bar`
|
FOO=bar`
|
||||||
);
|
);
|
||||||
const res = Util.getInputList('secrets', true);
|
const res = Util.getInputList('secrets', {ignoreComma: true});
|
||||||
expect(res).toEqual([`GPG_KEY=${pgp}`, 'FOO=bar']);
|
expect(res).toEqual([`GPG_KEY=${pgp}`, 'FOO=bar']);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -158,7 +164,7 @@ bbbb""bbb
|
|||||||
ccccccccc"
|
ccccccccc"
|
||||||
FOO=bar`
|
FOO=bar`
|
||||||
);
|
);
|
||||||
const res = Util.getInputList('secrets', true);
|
const res = Util.getInputList('secrets', {ignoreComma: true});
|
||||||
expect(res).toEqual([
|
expect(res).toEqual([
|
||||||
'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789',
|
'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789',
|
||||||
`MYSECRET=aaaaaaaa
|
`MYSECRET=aaaaaaaa
|
||||||
|
|||||||
23
src/util.ts
23
src/util.ts
@@ -17,8 +17,13 @@
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import {parse} from 'csv-parse/sync';
|
import {parse} from 'csv-parse/sync';
|
||||||
|
|
||||||
|
export interface InputListOpts {
|
||||||
|
ignoreComma?: boolean;
|
||||||
|
escapeQuotes?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export class Util {
|
export class Util {
|
||||||
public static getInputList(name: string, ignoreComma?: boolean): string[] {
|
public static getInputList(name: string, opts?: InputListOpts): string[] {
|
||||||
const res: Array<string> = [];
|
const res: Array<string> = [];
|
||||||
|
|
||||||
const items = core.getInput(name);
|
const items = core.getInput(name);
|
||||||
@@ -31,18 +36,22 @@ export class Util {
|
|||||||
relaxQuotes: true,
|
relaxQuotes: true,
|
||||||
comment: '#',
|
comment: '#',
|
||||||
relaxColumnCount: true,
|
relaxColumnCount: true,
|
||||||
skipEmptyLines: true
|
skipEmptyLines: true,
|
||||||
|
quote: opts?.escapeQuotes ?? `"`
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const record of records as Array<string[]>) {
|
for (const record of records as Array<string[]>) {
|
||||||
if (record.length == 1) {
|
if (record.length == 1) {
|
||||||
res.push(record[0]);
|
if (opts?.ignoreComma) {
|
||||||
continue;
|
res.push(record[0]);
|
||||||
} else if (!ignoreComma) {
|
} else {
|
||||||
|
res.push(...record[0].split(','));
|
||||||
|
}
|
||||||
|
} else if (!opts?.ignoreComma) {
|
||||||
res.push(...record);
|
res.push(...record);
|
||||||
continue;
|
} else {
|
||||||
|
res.push(record.join(','));
|
||||||
}
|
}
|
||||||
res.push(record.join(','));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.filter(item => item).map(pat => pat.trim());
|
return res.filter(item => item).map(pat => pat.trim());
|
||||||
|
|||||||
Reference in New Issue
Block a user