mirror of
https://github.com/docker/metadata-action.git
synced 2024-11-23 04:25:40 +01:00
e44c1fbe6e
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
87 lines
2.1 KiB
TypeScript
87 lines
2.1 KiB
TypeScript
import {parse} from 'csv-parse/sync';
|
|
import * as core from '@actions/core';
|
|
|
|
export interface Image {
|
|
name: string;
|
|
enable: boolean;
|
|
}
|
|
|
|
export function Transform(inputs: string[]): Image[] {
|
|
let images: Image[] = [];
|
|
|
|
// backward compatibility with old format
|
|
if (inputs.length == 1) {
|
|
let newformat = false;
|
|
const fields = parse(inputs[0], {
|
|
relaxColumnCount: true,
|
|
skipEmptyLines: true
|
|
})[0];
|
|
for (const field of fields) {
|
|
const parts = field
|
|
.toString()
|
|
.split('=')
|
|
.map(item => item.trim());
|
|
if (parts.length == 1) {
|
|
images.push({name: parts[0], enable: true});
|
|
} else {
|
|
newformat = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!newformat) {
|
|
return output(images);
|
|
}
|
|
}
|
|
|
|
images = [];
|
|
for (const input of inputs) {
|
|
const image: Image = {name: '', enable: true};
|
|
const fields = parse(input, {
|
|
relaxColumnCount: true,
|
|
skipEmptyLines: true
|
|
})[0];
|
|
for (const field of fields) {
|
|
const parts = field
|
|
.toString()
|
|
.split('=')
|
|
.map(item => item.trim());
|
|
if (parts.length == 1) {
|
|
image.name = parts[0];
|
|
} else {
|
|
const key = parts[0].toLowerCase();
|
|
const value = parts[1];
|
|
switch (key) {
|
|
case 'name': {
|
|
image.name = value;
|
|
break;
|
|
}
|
|
case 'enable': {
|
|
if (!['true', 'false'].includes(value)) {
|
|
throw new Error(`Invalid enable attribute value: ${input}`);
|
|
}
|
|
image.enable = /true/i.test(value);
|
|
break;
|
|
}
|
|
default: {
|
|
throw new Error(`Unknown image attribute: ${input}`);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (image.name.length == 0) {
|
|
throw new Error(`Image name attribute empty: ${input}`);
|
|
}
|
|
images.push(image);
|
|
}
|
|
return output(images);
|
|
}
|
|
|
|
function output(images: Image[]): Image[] {
|
|
core.startGroup(`Processing images input`);
|
|
for (const image of images) {
|
|
core.info(`name=${image.name},enable=${image.enable}`);
|
|
}
|
|
core.endGroup();
|
|
return images;
|
|
}
|