-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
94 lines (81 loc) · 2.82 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const core = require('@actions/core');
const github = require('@actions/github');
const fs = require('fs');
const path = require('path');
const inFile = core.getInput('in-file');
const inDirectory = core.getInput('in-directory');
const outFile = core.getInput('out-file');
const nameRegex = /^[a-zA-Z]([_a-zA-Z0-9]?[a-zA-Z0-9])*$/
try
{
core.info("inFile: " + inFile);
core.info("inDirectory: " + inDirectory);
core.info("outFile: " + outFile);
let outputJson = JSON.constructor();
// Multi-object file
if(typeof inFile === "string" && inFile !== '')
{
if(fs.existsSync(inFile))
{
const fileData = fs.readFileSync(inFile, 'utf8');
outputJson = JSON.parse(fileData);
// Validate object names
let anyFailed = false;
Object.keys(outputJson).forEach(key =>
{
if(!nameRegex.test(key))
{
core.error(`Object name ${key} from ${inFile} is not a valid object name`);
anyFailed = true;
}
});
if(anyFailed)
return;
}
else
core.warning("inDirectory " + inDirectory + " does not exist");
}
// Directory of single-object files
if(typeof inDirectory === "string" && inDirectory !== '')
{
if(fs.existsSync(inDirectory))
{
fs.readdirSync(inDirectory).forEach(filename => {
if (!filename.endsWith(".json"))
return;
const objectName = filename.substring(0, filename.length - ".json".length);
// Validate name usability
if(!nameRegex.test(objectName))
{
core.error(objectName + " is invalid name for an object");
return;
}
// Check for duplicates
if (!outputJson.hasOwnProperty(objectName))
{
core.error(objectName + " is already defined (in " + inFile + ")");
return;
}
const fileData = fs.readFileSync(inDirectory + '/' + filename, {encoding: 'utf8', flag: 'r'});
outputJson[objectName] = JSON.parse(fileData);
});
}
else
core.warning("inDirectory " + inDirectory + " does not exist");
}
// Output file
// Override existing file, create new only if we have data to write
if(!fs.existsSync(outFile) || Object.keys(outputJson).length !== 0)
{
fs.mkdirSync(path.dirname(outFile), { recursive: true });
fs.writeFileSync(
outFile,
JSON.stringify(outputJson, null, null),
{ encoding: 'utf8', flag: 'w' }
);
}
}
catch(error)
{
core.setFailed(error.message);
}