@grnsft/if 0.3.1 → 0.3.3-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.commitlintrc.js +3 -0
- package/.release-it.json +18 -0
- package/CONTRIBUTING.md +82 -1
- package/README.md +34 -23
- package/build/builtins/export-csv-raw.js +5 -5
- package/build/builtins/export-csv.js +17 -7
- package/build/builtins/export-log.js +26 -2
- package/build/builtins/export-yaml.js +3 -3
- package/build/builtins/group-by.js +20 -5
- package/build/builtins/time-sync.js +2 -1
- package/build/config/config.d.ts +3 -3
- package/build/config/config.js +23 -27
- package/build/config/strings.d.ts +1 -0
- package/build/config/strings.js +9 -5
- package/build/index.js +24 -15
- package/build/lib/compute.js +8 -8
- package/build/lib/environment.d.ts +5 -0
- package/build/lib/environment.js +69 -0
- package/build/lib/exhaust.d.ts +2 -1
- package/build/lib/exhaust.js +11 -9
- package/build/lib/initialize.d.ts +2 -2
- package/build/lib/initialize.js +5 -5
- package/build/lib/load.d.ts +1 -29
- package/build/lib/load.js +6 -7
- package/build/lib/parameterize.d.ts +2 -1
- package/build/lib/parameterize.js +4 -4
- package/build/types/compute.d.ts +2 -2
- package/build/types/compute.js +1 -1
- package/build/types/environment.d.ts +18 -0
- package/build/types/environment.js +3 -0
- package/build/types/manifest.d.ts +1 -0
- package/build/types/manifest.js +1 -1
- package/build/types/process-args.d.ts +13 -1
- package/build/types/process-args.js +1 -1
- package/build/util/aggregation-helper.js +4 -4
- package/build/util/args.d.ts +3 -5
- package/build/util/args.js +14 -10
- package/build/util/errors.d.ts +1 -1
- package/build/util/errors.js +4 -5
- package/build/util/helpers.d.ts +8 -2
- package/build/util/helpers.js +19 -15
- package/build/util/os-checker.d.ts +7 -0
- package/build/util/os-checker.js +97 -0
- package/build/util/validations.d.ts +90 -4
- package/build/util/validations.js +14 -2
- package/github-processes.md +168 -0
- package/{examples/manifests/pipeline-demo-2.yml → manifests/bugs/aggregation-error-wrong-metric.yml} +18 -39
- package/manifests/bugs/azure-importer-ignoring-defaults.yml +61 -0
- package/manifests/bugs/azure-importer-incorrect-calculation.yml +56 -0
- package/manifests/bugs/initialize-error-no-config.yml +27 -0
- package/manifests/bugs/initialize-error-no-path.yml +28 -0
- package/manifests/bugs/initialize-error-no-plugins.yml +23 -0
- package/manifests/bugs/input-error-missing-duration.yml +21 -0
- package/manifests/bugs/pipeline-error-naming-mismatch.yml +28 -0
- package/manifests/bugs/pipeline-error-uninitialized-plugin.yml +29 -0
- package/{examples/manifests/pipeline-teads-sci.yml → manifests/bugs/pipeline-ordering-error.yml} +15 -15
- package/{examples/manifests → manifests/examples}/basic.yml +3 -2
- package/{examples/manifests → manifests/examples}/generics.yml +16 -16
- package/{examples/manifests/asim-demo.yml → manifests/examples/mock-cpu-util-to-carbon.yml} +3 -7
- package/{examples/manifests → manifests/examples}/nesting.yml +19 -18
- package/{examples/manifests/pipeline-demo-1.yml → manifests/examples/pipeline-teads-sci.yml} +10 -13
- package/{examples/manifests/pipeline-demo.yml → manifests/examples/pipeline-with-aggregate.yml} +12 -12
- package/{examples/manifests → manifests/examples}/pipeline-with-mocks.yml +26 -25
- package/manifests/features/aggregate-horizontal.yml +44 -0
- package/manifests/features/aggregate-vertical.yml +44 -0
- package/manifests/features/aggregate.yml +44 -0
- package/manifests/integrations/mock-obs-groupby.yml +39 -0
- package/manifests/integrations/mock-obs-time-sync.yml +65 -0
- package/manifests/plugins/cloud-metadata/failure-invalid-vendor.yaml +21 -0
- package/{examples/manifests/cim.yml → manifests/plugins/cloud-metadata/success.yml} +3 -2
- package/manifests/plugins/coefficient/failure-invalid-config-input-param.yml +24 -0
- package/{examples/manifests/coefficient.yml → manifests/plugins/coefficient/success.yml} +2 -1
- package/manifests/plugins/divide/failure-invalid-config-denominator.yml +39 -0
- package/manifests/plugins/divide/success.yml +39 -0
- package/manifests/plugins/groupby/failure-invalid-config-group.yml +47 -0
- package/{examples/manifests/group-by.yml → manifests/plugins/groupby/success.yml} +24 -23
- package/manifests/plugins/mock-observations/failure-invalid-config-cpu-range.yml +34 -0
- package/{examples/manifests/mock-observation.yml → manifests/plugins/mock-observations/success.yml} +2 -1
- package/manifests/plugins/multiply/failure-input-parameter-is-missing.yml +24 -0
- package/{examples/manifests/multiply.yml → manifests/plugins/multiply/success.yml} +3 -2
- package/manifests/plugins/regex/failure-missing-input-param.yml +24 -0
- package/{examples/manifests/regex.yml → manifests/plugins/regex/success.yml} +3 -2
- package/manifests/plugins/sci/failure-invalid-config-value.yml +28 -0
- package/{examples/manifests/sci.yml → manifests/plugins/sci/success.yml} +3 -2
- package/manifests/plugins/sci-m/failure-invalid-default-emission-value.yml +24 -0
- package/{examples/manifests/sci-m.yml → manifests/plugins/sci-m/success.yml} +2 -1
- package/manifests/plugins/shell/failure-invalid-command.yml +21 -0
- package/{examples/manifests/shell.yml → manifests/plugins/shell/success.yml} +3 -2
- package/manifests/plugins/sum/failure-missing-input-param.yml +24 -0
- package/{examples/manifests/sum.yml → manifests/plugins/sum/success.yml} +3 -2
- package/manifests/plugins/tdp-finder/failure-missing-input-param.yml +18 -0
- package/{examples/manifests/tdp-finder.yml → manifests/plugins/tdp-finder/success.yml} +2 -1
- package/manifests/plugins/time-sync/failure-config-start-later-end.yml +34 -0
- package/{examples/manifests/time-sync.yml → manifests/plugins/time-sync/success.yml} +4 -2
- package/package.json +4 -2
- package/src/builtins/README.md +40 -44
- package/examples/manifests/azure-importer.yml +0 -24
- package/examples/manifests/basic-demo.yml +0 -70
- package/examples/manifests/boavizta-cloud.yml +0 -20
- package/examples/manifests/boavizta-pipeline.yml +0 -85
- package/examples/manifests/boavizta.yml +0 -26
- package/examples/manifests/ccf.yml +0 -20
- package/examples/manifests/cloud-metadata.yml +0 -41
- package/examples/manifests/co2js.yml +0 -30
- package/examples/manifests/csv-export.yml +0 -34
- package/examples/manifests/e-mem.yml +0 -21
- package/examples/manifests/e-net.yml +0 -22
- package/examples/manifests/nesting-demo.yml +0 -89
- package/examples/manifests/pipeline-with-generics.yml +0 -147
- package/examples/manifests/sci-e.yml +0 -19
- package/examples/manifests/sci-o.yml +0 -26
- package/examples/manifests/teads-aws.yml +0 -22
- package/examples/manifests/teads-curve.yml +0 -20
- package/examples/manifests/watt-time.yml +0 -42
- /package/{examples/manifests/divide.yml → manifests/integrations/cloud-metadata-divide-boavizta.yml} +0 -0
package/build/util/helpers.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.mergeObjects = exports.andHandle = void 0;
|
|
3
|
+
exports.execPromise = exports.mergeObjects = exports.andHandle = void 0;
|
|
4
|
+
const node_child_process_1 = require("node:child_process");
|
|
5
|
+
const node_util_1 = require("node:util");
|
|
4
6
|
const errors_1 = require("./errors");
|
|
5
|
-
const config_1 = require("../config");
|
|
6
7
|
const logger_1 = require("./logger");
|
|
8
|
+
const config_1 = require("../config");
|
|
7
9
|
const { ISSUE_TEMPLATE } = config_1.STRINGS;
|
|
8
10
|
/**
|
|
9
11
|
* Impact engine error handler. Logs errors and appends issue template if error is unknown.
|
|
@@ -17,21 +19,23 @@ const andHandle = (error) => {
|
|
|
17
19
|
};
|
|
18
20
|
exports.andHandle = andHandle;
|
|
19
21
|
/**
|
|
20
|
-
*
|
|
22
|
+
* Append entries from defaults which are missing from inputs.
|
|
21
23
|
*/
|
|
22
|
-
const mergeObjects = (
|
|
23
|
-
const merged =
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (!keys1.includes(key2)) {
|
|
31
|
-
merged[key2] = object2[key2];
|
|
24
|
+
const mergeObjects = (defaults, input) => {
|
|
25
|
+
const merged = structuredClone(input);
|
|
26
|
+
for (const key in defaults) {
|
|
27
|
+
if (!(key in input)) {
|
|
28
|
+
merged[key] = defaults[key];
|
|
29
|
+
}
|
|
30
|
+
if (merged[key] === undefined || merged[key] === null) {
|
|
31
|
+
merged[key] = defaults[key];
|
|
32
32
|
}
|
|
33
|
-
}
|
|
33
|
+
}
|
|
34
34
|
return merged;
|
|
35
35
|
};
|
|
36
36
|
exports.mergeObjects = mergeObjects;
|
|
37
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Promise version of Node's `exec` from `child-process`.
|
|
39
|
+
*/
|
|
40
|
+
exports.execPromise = (0, node_util_1.promisify)(node_child_process_1.exec);
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQXdDO0FBQ3hDLHlDQUFvQztBQUVwQyxxQ0FBZ0M7QUFDaEMscUNBQWdDO0FBRWhDLHNDQUFrQztBQUVsQyxNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUVqQzs7R0FFRztBQUNJLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7SUFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFNLENBQUMsQ0FBQztJQUV4QyxlQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQyxlQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQzdCO0FBQ0gsQ0FBQyxDQUFDO0FBUlcsUUFBQSxTQUFTLGFBUXBCO0FBRUY7O0dBRUc7QUFDSSxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQWEsRUFBRSxLQUFVLEVBQUUsRUFBRTtJQUN4RCxNQUFNLE1BQU0sR0FBd0IsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNELEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDckQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QjtLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBZFcsUUFBQSxZQUFZLGdCQWN2QjtBQUVGOztHQUVHO0FBQ1UsUUFBQSxXQUFXLEdBQUcsSUFBQSxxQkFBUyxFQUFDLHlCQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXhlY30gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7cHJvbWlzaWZ5fSBmcm9tICdub2RlOnV0aWwnO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4vbG9nZ2VyJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuLi9jb25maWcnO1xuXG5jb25zdCB7SVNTVUVfVEVNUExBVEV9ID0gU1RSSU5HUztcblxuLyoqXG4gKiBJbXBhY3QgZW5naW5lIGVycm9yIGhhbmRsZXIuIExvZ3MgZXJyb3JzIGFuZCBhcHBlbmRzIGlzc3VlIHRlbXBsYXRlIGlmIGVycm9yIGlzIHVua25vd24uXG4gKi9cbmV4cG9ydCBjb25zdCBhbmRIYW5kbGUgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gIGNvbnN0IGtub3duRXJyb3JzID0gT2JqZWN0LmtleXMoRVJST1JTKTtcblxuICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuXG4gIGlmICgha25vd25FcnJvcnMuaW5jbHVkZXMoZXJyb3IubmFtZSkpIHtcbiAgICBsb2dnZXIud2FybihJU1NVRV9URU1QTEFURSk7XG4gIH1cbn07XG5cbi8qKlxuICogQXBwZW5kIGVudHJpZXMgZnJvbSBkZWZhdWx0cyB3aGljaCBhcmUgbWlzc2luZyBmcm9tIGlucHV0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IG1lcmdlT2JqZWN0cyA9IChkZWZhdWx0czogYW55LCBpbnB1dDogYW55KSA9PiB7XG4gIGNvbnN0IG1lcmdlZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHN0cnVjdHVyZWRDbG9uZShpbnB1dCk7XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdHMpIHtcbiAgICBpZiAoIShrZXkgaW4gaW5wdXQpKSB7XG4gICAgICBtZXJnZWRba2V5XSA9IGRlZmF1bHRzW2tleV07XG4gICAgfVxuXG4gICAgaWYgKG1lcmdlZFtrZXldID09PSB1bmRlZmluZWQgfHwgbWVyZ2VkW2tleV0gPT09IG51bGwpIHtcbiAgICAgIG1lcmdlZFtrZXldID0gZGVmYXVsdHNba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkO1xufTtcblxuLyoqXG4gKiBQcm9taXNlIHZlcnNpb24gb2YgTm9kZSdzIGBleGVjYCBmcm9tIGBjaGlsZC1wcm9jZXNzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4ZWNQcm9taXNlID0gcHJvbWlzaWZ5KGV4ZWMpO1xuIl19
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.osInfo = void 0;
|
|
4
|
+
const os_1 = require("os");
|
|
5
|
+
const helpers_1 = require("./helpers");
|
|
6
|
+
/**
|
|
7
|
+
* Executes `lsb_release -a` command in terminal.
|
|
8
|
+
*
|
|
9
|
+
* ```
|
|
10
|
+
* Distributor ID: Ubuntu
|
|
11
|
+
* Description: Ubuntu 22.04.4 LTS
|
|
12
|
+
* Release: 22.04
|
|
13
|
+
* Codename: jammy
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Parses os and os-version from the response.
|
|
17
|
+
*/
|
|
18
|
+
const getLinuxInfo = async () => {
|
|
19
|
+
const { stdout } = await (0, helpers_1.execPromise)('lsb_release -a');
|
|
20
|
+
const parseLinuxVersion = (lsbReleaseResponse) => {
|
|
21
|
+
const regex = /Distributor ID: ([^\n]+)\nDescription: +([^ ]+) +([^ ]+) +(.+)\n/;
|
|
22
|
+
const match = lsbReleaseResponse.match(regex);
|
|
23
|
+
return {
|
|
24
|
+
os: match ? match[1] : (0, os_1.platform)(),
|
|
25
|
+
'os-version': match ? `${match[3]} ${match[4]}` : (0, os_1.release)(),
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
return parseLinuxVersion(stdout);
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Executes in CMD `systeminfo | findstr /B /C:"OS Name" /B /C:"OS Version"` command.
|
|
32
|
+
*
|
|
33
|
+
* ```
|
|
34
|
+
* OS Name: Microsoft Windows 11 Enterprise
|
|
35
|
+
* OS Version: 10.0.22631 N/A Build 22631
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* Parses os and os-version from the response.
|
|
39
|
+
*/
|
|
40
|
+
const getWindowsInfo = async () => {
|
|
41
|
+
const { stdout } = await (0, helpers_1.execPromise)('systeminfo | findstr /B /C:"OS Name" /B /C:"OS Version"');
|
|
42
|
+
const parseWindowsInfo = (systemInfoResponse) => {
|
|
43
|
+
const regex = /OS Name:\s+([^\n]+)\nOS Version:\s+([\d.]+)\s+(N\/A\s+Build\s+(\d+))/;
|
|
44
|
+
const match = systemInfoResponse.match(regex);
|
|
45
|
+
return {
|
|
46
|
+
os: match ? match[1] : (0, os_1.platform)(),
|
|
47
|
+
'os-version': match ? `${match[2]} ${match[3]}` : (0, os_1.release)(),
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
return parseWindowsInfo(stdout);
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Executes `sw_vers` command in terminal.
|
|
54
|
+
*
|
|
55
|
+
* ```
|
|
56
|
+
* ProductName: macOS
|
|
57
|
+
* ProductVersion: 14.3.1
|
|
58
|
+
* BuildVersion: 23D60
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* Parses os and os version from the response.
|
|
62
|
+
*/
|
|
63
|
+
const getMacVersion = async () => {
|
|
64
|
+
const { stdout } = await (0, helpers_1.execPromise)('sw_vers');
|
|
65
|
+
const parseMacInfo = (swVersResponse) => {
|
|
66
|
+
const productNameRegex = /ProductName:\s*(.+)/;
|
|
67
|
+
const productVersionRegex = /ProductVersion:\s*(.+)/;
|
|
68
|
+
const nameMatch = swVersResponse.match(productNameRegex);
|
|
69
|
+
const versionMatch = swVersResponse.match(productVersionRegex);
|
|
70
|
+
return {
|
|
71
|
+
os: nameMatch ? nameMatch[1].trim() : (0, os_1.platform)(),
|
|
72
|
+
'os-version': versionMatch ? versionMatch[1].trim() : (0, os_1.release)(),
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
return parseMacInfo(stdout);
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Finds operating system information like name and version.
|
|
79
|
+
*/
|
|
80
|
+
const osInfo = async () => {
|
|
81
|
+
const osKind = (0, os_1.platform)();
|
|
82
|
+
switch (osKind) {
|
|
83
|
+
case 'darwin':
|
|
84
|
+
return getMacVersion();
|
|
85
|
+
case 'linux':
|
|
86
|
+
return getLinuxInfo();
|
|
87
|
+
case 'win32':
|
|
88
|
+
return getWindowsInfo();
|
|
89
|
+
default:
|
|
90
|
+
return {
|
|
91
|
+
os: osKind,
|
|
92
|
+
'os-version': (0, os_1.release)(),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
exports.osInfo = osInfo;
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3MtY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL29zLWNoZWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQXFDO0FBRXJDLHVDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sWUFBWSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQzlCLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxNQUFNLElBQUEscUJBQVcsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXJELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxrQkFBMEIsRUFBRSxFQUFFO1FBQ3ZELE1BQU0sS0FBSyxHQUNULGtFQUFrRSxDQUFDO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QyxPQUFPO1lBQ0wsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGFBQVEsR0FBRTtZQUNqQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBQSxZQUFPLEdBQUU7U0FDNUQsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDaEMsTUFBTSxFQUFDLE1BQU0sRUFBQyxHQUFHLE1BQU0sSUFBQSxxQkFBVyxFQUNoQyx5REFBeUQsQ0FDMUQsQ0FBQztJQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxrQkFBMEIsRUFBRSxFQUFFO1FBQ3RELE1BQU0sS0FBSyxHQUNULHNFQUFzRSxDQUFDO1FBQ3pFLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5QyxPQUFPO1lBQ0wsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGFBQVEsR0FBRTtZQUNqQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBQSxZQUFPLEdBQUU7U0FDNUQsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sYUFBYSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQy9CLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxNQUFNLElBQUEscUJBQVcsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUU5QyxNQUFNLFlBQVksR0FBRyxDQUFDLGNBQXNCLEVBQUUsRUFBRTtRQUM5QyxNQUFNLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDO1FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7UUFFckQsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUvRCxPQUFPO1lBQ0wsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFBLGFBQVEsR0FBRTtZQUNoRCxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUEsWUFBTyxHQUFFO1NBQ2hFLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNJLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUEsYUFBUSxHQUFFLENBQUM7SUFFMUIsUUFBUSxNQUFNLEVBQUU7UUFDZCxLQUFLLFFBQVE7WUFDWCxPQUFPLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLEtBQUssT0FBTztZQUNWLE9BQU8sWUFBWSxFQUFFLENBQUM7UUFDeEIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxjQUFjLEVBQUUsQ0FBQztRQUMxQjtZQUNFLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLE1BQU07Z0JBQ1YsWUFBWSxFQUFFLElBQUEsWUFBTyxHQUFFO2FBQ3hCLENBQUM7S0FDTDtBQUNILENBQUMsQ0FBQztBQWhCVyxRQUFBLE1BQU0sVUFnQmpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZWxlYXNlLCBwbGF0Zm9ybX0gZnJvbSAnb3MnO1xuXG5pbXBvcnQge2V4ZWNQcm9taXNlfSBmcm9tICcuL2hlbHBlcnMnO1xuXG4vKipcbiAqIEV4ZWN1dGVzIGBsc2JfcmVsZWFzZSAtYWAgY29tbWFuZCBpbiB0ZXJtaW5hbC5cbiAqXG4gKiBgYGBcbiAqIERpc3RyaWJ1dG9yIElEOiBVYnVudHVcbiAqIERlc2NyaXB0aW9uOiAgICBVYnVudHUgMjIuMDQuNCBMVFNcbiAqIFJlbGVhc2U6ICAgICAgICAyMi4wNFxuICogQ29kZW5hbWU6ICAgICAgIGphbW15XG4gKiBgYGBcbiAqXG4gKiBQYXJzZXMgb3MgYW5kIG9zLXZlcnNpb24gZnJvbSB0aGUgcmVzcG9uc2UuXG4gKi9cbmNvbnN0IGdldExpbnV4SW5mbyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjUHJvbWlzZSgnbHNiX3JlbGVhc2UgLWEnKTtcblxuICBjb25zdCBwYXJzZUxpbnV4VmVyc2lvbiA9IChsc2JSZWxlYXNlUmVzcG9uc2U6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlZ2V4ID1cbiAgICAgIC9EaXN0cmlidXRvciBJRDogKFteXFxuXSspXFxuRGVzY3JpcHRpb246ICsoW14gXSspICsoW14gXSspICsoLispXFxuLztcbiAgICBjb25zdCBtYXRjaCA9IGxzYlJlbGVhc2VSZXNwb25zZS5tYXRjaChyZWdleCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3M6IG1hdGNoID8gbWF0Y2hbMV0gOiBwbGF0Zm9ybSgpLFxuICAgICAgJ29zLXZlcnNpb24nOiBtYXRjaCA/IGAke21hdGNoWzNdfSAke21hdGNoWzRdfWAgOiByZWxlYXNlKCksXG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gcGFyc2VMaW51eFZlcnNpb24oc3Rkb3V0KTtcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgaW4gQ01EIGBzeXN0ZW1pbmZvIHwgZmluZHN0ciAvQiAvQzpcIk9TIE5hbWVcIiAvQiAvQzpcIk9TIFZlcnNpb25cImAgY29tbWFuZC5cbiAqXG4gKiBgYGBcbiAqIE9TIE5hbWU6ICAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdCBXaW5kb3dzIDExIEVudGVycHJpc2VcbiAqIE9TIFZlcnNpb246ICAgICAgICAgICAgICAgIDEwLjAuMjI2MzEgTi9BIEJ1aWxkIDIyNjMxXG4gKiBgYGBcbiAqXG4gKiBQYXJzZXMgb3MgYW5kIG9zLXZlcnNpb24gZnJvbSB0aGUgcmVzcG9uc2UuXG4gKi9cbmNvbnN0IGdldFdpbmRvd3NJbmZvID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWNQcm9taXNlKFxuICAgICdzeXN0ZW1pbmZvIHwgZmluZHN0ciAvQiAvQzpcIk9TIE5hbWVcIiAvQiAvQzpcIk9TIFZlcnNpb25cIidcbiAgKTtcblxuICBjb25zdCBwYXJzZVdpbmRvd3NJbmZvID0gKHN5c3RlbUluZm9SZXNwb25zZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVnZXggPVxuICAgICAgL09TIE5hbWU6XFxzKyhbXlxcbl0rKVxcbk9TIFZlcnNpb246XFxzKyhbXFxkLl0rKVxccysoTlxcL0FcXHMrQnVpbGRcXHMrKFxcZCspKS87XG4gICAgY29uc3QgbWF0Y2ggPSBzeXN0ZW1JbmZvUmVzcG9uc2UubWF0Y2gocmVnZXgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9zOiBtYXRjaCA/IG1hdGNoWzFdIDogcGxhdGZvcm0oKSxcbiAgICAgICdvcy12ZXJzaW9uJzogbWF0Y2ggPyBgJHttYXRjaFsyXX0gJHttYXRjaFszXX1gIDogcmVsZWFzZSgpLFxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIHBhcnNlV2luZG93c0luZm8oc3Rkb3V0KTtcbn07XG5cbi8qKlxuICogRXhlY3V0ZXMgYHN3X3ZlcnNgIGNvbW1hbmQgaW4gdGVybWluYWwuXG4gKlxuICogYGBgXG4gKiBQcm9kdWN0TmFtZTogICAgICBtYWNPU1xuICogUHJvZHVjdFZlcnNpb246ICAgMTQuMy4xXG4gKiBCdWlsZFZlcnNpb246ICAgICAyM0Q2MFxuICogYGBgXG4gKlxuICogUGFyc2VzIG9zIGFuZCBvcyB2ZXJzaW9uIGZyb20gdGhlIHJlc3BvbnNlLlxuICovXG5jb25zdCBnZXRNYWNWZXJzaW9uID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWNQcm9taXNlKCdzd192ZXJzJyk7XG5cbiAgY29uc3QgcGFyc2VNYWNJbmZvID0gKHN3VmVyc1Jlc3BvbnNlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0TmFtZVJlZ2V4ID0gL1Byb2R1Y3ROYW1lOlxccyooLispLztcbiAgICBjb25zdCBwcm9kdWN0VmVyc2lvblJlZ2V4ID0gL1Byb2R1Y3RWZXJzaW9uOlxccyooLispLztcblxuICAgIGNvbnN0IG5hbWVNYXRjaCA9IHN3VmVyc1Jlc3BvbnNlLm1hdGNoKHByb2R1Y3ROYW1lUmVnZXgpO1xuICAgIGNvbnN0IHZlcnNpb25NYXRjaCA9IHN3VmVyc1Jlc3BvbnNlLm1hdGNoKHByb2R1Y3RWZXJzaW9uUmVnZXgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9zOiBuYW1lTWF0Y2ggPyBuYW1lTWF0Y2hbMV0udHJpbSgpIDogcGxhdGZvcm0oKSxcbiAgICAgICdvcy12ZXJzaW9uJzogdmVyc2lvbk1hdGNoID8gdmVyc2lvbk1hdGNoWzFdLnRyaW0oKSA6IHJlbGVhc2UoKSxcbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBwYXJzZU1hY0luZm8oc3Rkb3V0KTtcbn07XG5cbi8qKlxuICogRmluZHMgb3BlcmF0aW5nIHN5c3RlbSBpbmZvcm1hdGlvbiBsaWtlIG5hbWUgYW5kIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBvc0luZm8gPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IG9zS2luZCA9IHBsYXRmb3JtKCk7XG5cbiAgc3dpdGNoIChvc0tpbmQpIHtcbiAgICBjYXNlICdkYXJ3aW4nOlxuICAgICAgcmV0dXJuIGdldE1hY1ZlcnNpb24oKTtcbiAgICBjYXNlICdsaW51eCc6XG4gICAgICByZXR1cm4gZ2V0TGludXhJbmZvKCk7XG4gICAgY2FzZSAnd2luMzInOlxuICAgICAgcmV0dXJuIGdldFdpbmRvd3NJbmZvKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9zOiBvc0tpbmQsXG4gICAgICAgICdvcy12ZXJzaW9uJzogcmVsZWFzZSgpLFxuICAgICAgfTtcbiAgfVxufTtcbiJdfQ==
|
|
@@ -74,8 +74,58 @@ export declare const manifestSchema: z.ZodObject<{
|
|
|
74
74
|
}>;
|
|
75
75
|
outputs?: string[] | undefined;
|
|
76
76
|
}>;
|
|
77
|
+
execution: z.ZodObject<{
|
|
78
|
+
command: z.ZodString;
|
|
79
|
+
environment: z.ZodObject<{
|
|
80
|
+
'if-version': z.ZodString;
|
|
81
|
+
os: z.ZodString;
|
|
82
|
+
'os-version': z.ZodString;
|
|
83
|
+
'node-version': z.ZodString;
|
|
84
|
+
'date-time': z.ZodString;
|
|
85
|
+
dependencies: z.ZodArray<z.ZodString, "many">;
|
|
86
|
+
}, "strip", z.ZodTypeAny, {
|
|
87
|
+
'if-version': string;
|
|
88
|
+
os: string;
|
|
89
|
+
'os-version': string;
|
|
90
|
+
'node-version': string;
|
|
91
|
+
'date-time': string;
|
|
92
|
+
dependencies: string[];
|
|
93
|
+
}, {
|
|
94
|
+
'if-version': string;
|
|
95
|
+
os: string;
|
|
96
|
+
'os-version': string;
|
|
97
|
+
'node-version': string;
|
|
98
|
+
'date-time': string;
|
|
99
|
+
dependencies: string[];
|
|
100
|
+
}>;
|
|
101
|
+
status: z.ZodString;
|
|
102
|
+
error: z.ZodOptional<z.ZodString>;
|
|
103
|
+
}, "strip", z.ZodTypeAny, {
|
|
104
|
+
status: string;
|
|
105
|
+
command: string;
|
|
106
|
+
environment: {
|
|
107
|
+
'if-version': string;
|
|
108
|
+
os: string;
|
|
109
|
+
'os-version': string;
|
|
110
|
+
'node-version': string;
|
|
111
|
+
'date-time': string;
|
|
112
|
+
dependencies: string[];
|
|
113
|
+
};
|
|
114
|
+
error?: string | undefined;
|
|
115
|
+
}, {
|
|
116
|
+
status: string;
|
|
117
|
+
command: string;
|
|
118
|
+
environment: {
|
|
119
|
+
'if-version': string;
|
|
120
|
+
os: string;
|
|
121
|
+
'os-version': string;
|
|
122
|
+
'node-version': string;
|
|
123
|
+
'date-time': string;
|
|
124
|
+
dependencies: string[];
|
|
125
|
+
};
|
|
126
|
+
error?: string | undefined;
|
|
127
|
+
}>;
|
|
77
128
|
tree: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
78
|
-
'if-version': z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
79
129
|
}, "strip", z.ZodTypeAny, {
|
|
80
130
|
name: string;
|
|
81
131
|
initialize: {
|
|
@@ -86,6 +136,19 @@ export declare const manifestSchema: z.ZodObject<{
|
|
|
86
136
|
}>;
|
|
87
137
|
outputs?: string[] | undefined;
|
|
88
138
|
};
|
|
139
|
+
execution: {
|
|
140
|
+
status: string;
|
|
141
|
+
command: string;
|
|
142
|
+
environment: {
|
|
143
|
+
'if-version': string;
|
|
144
|
+
os: string;
|
|
145
|
+
'os-version': string;
|
|
146
|
+
'node-version': string;
|
|
147
|
+
'date-time': string;
|
|
148
|
+
dependencies: string[];
|
|
149
|
+
};
|
|
150
|
+
error?: string | undefined;
|
|
151
|
+
};
|
|
89
152
|
tree: Record<string, any>;
|
|
90
153
|
description?: string | null | undefined;
|
|
91
154
|
tags?: {
|
|
@@ -103,7 +166,6 @@ export declare const manifestSchema: z.ZodObject<{
|
|
|
103
166
|
aggregation: "sum" | "none" | "avg";
|
|
104
167
|
unit: string;
|
|
105
168
|
}[] | null | undefined;
|
|
106
|
-
'if-version'?: string | null | undefined;
|
|
107
169
|
}, {
|
|
108
170
|
name: string;
|
|
109
171
|
initialize: {
|
|
@@ -114,6 +176,19 @@ export declare const manifestSchema: z.ZodObject<{
|
|
|
114
176
|
}>;
|
|
115
177
|
outputs?: string[] | undefined;
|
|
116
178
|
};
|
|
179
|
+
execution: {
|
|
180
|
+
status: string;
|
|
181
|
+
command: string;
|
|
182
|
+
environment: {
|
|
183
|
+
'if-version': string;
|
|
184
|
+
os: string;
|
|
185
|
+
'os-version': string;
|
|
186
|
+
'node-version': string;
|
|
187
|
+
'date-time': string;
|
|
188
|
+
dependencies: string[];
|
|
189
|
+
};
|
|
190
|
+
error?: string | undefined;
|
|
191
|
+
};
|
|
117
192
|
tree: Record<string, any>;
|
|
118
193
|
description?: string | null | undefined;
|
|
119
194
|
tags?: {
|
|
@@ -131,7 +206,6 @@ export declare const manifestSchema: z.ZodObject<{
|
|
|
131
206
|
aggregation: "sum" | "none" | "avg";
|
|
132
207
|
unit: string;
|
|
133
208
|
}[] | null | undefined;
|
|
134
|
-
'if-version'?: string | null | undefined;
|
|
135
209
|
}>;
|
|
136
210
|
/**
|
|
137
211
|
* Validates given `manifest` object to match pattern.
|
|
@@ -146,6 +220,19 @@ export declare const validateManifest: (manifest: any) => {
|
|
|
146
220
|
}>;
|
|
147
221
|
outputs?: string[] | undefined;
|
|
148
222
|
};
|
|
223
|
+
execution: {
|
|
224
|
+
status: string;
|
|
225
|
+
command: string;
|
|
226
|
+
environment: {
|
|
227
|
+
'if-version': string;
|
|
228
|
+
os: string;
|
|
229
|
+
'os-version': string;
|
|
230
|
+
'node-version': string;
|
|
231
|
+
'date-time': string;
|
|
232
|
+
dependencies: string[];
|
|
233
|
+
};
|
|
234
|
+
error?: string | undefined;
|
|
235
|
+
};
|
|
149
236
|
tree: Record<string, any>;
|
|
150
237
|
description?: string | null | undefined;
|
|
151
238
|
tags?: {
|
|
@@ -163,7 +250,6 @@ export declare const validateManifest: (manifest: any) => {
|
|
|
163
250
|
aggregation: "sum" | "none" | "avg";
|
|
164
251
|
unit: string;
|
|
165
252
|
}[] | null | undefined;
|
|
166
|
-
'if-version'?: string | null | undefined;
|
|
167
253
|
};
|
|
168
254
|
/**
|
|
169
255
|
* Validates given `object` with given `schema`.
|
|
@@ -44,8 +44,20 @@ exports.manifestSchema = zod_1.z.object({
|
|
|
44
44
|
})),
|
|
45
45
|
outputs: zod_1.z.array(zod_1.z.string()).optional(),
|
|
46
46
|
}),
|
|
47
|
+
execution: zod_1.z.object({
|
|
48
|
+
command: zod_1.z.string(),
|
|
49
|
+
environment: zod_1.z.object({
|
|
50
|
+
'if-version': zod_1.z.string(),
|
|
51
|
+
os: zod_1.z.string(),
|
|
52
|
+
'os-version': zod_1.z.string(),
|
|
53
|
+
'node-version': zod_1.z.string(),
|
|
54
|
+
'date-time': zod_1.z.string(),
|
|
55
|
+
dependencies: zod_1.z.array(zod_1.z.string()),
|
|
56
|
+
}),
|
|
57
|
+
status: zod_1.z.string(),
|
|
58
|
+
error: zod_1.z.string().optional(),
|
|
59
|
+
}),
|
|
47
60
|
tree: zod_1.z.record(zod_1.z.string(), zod_1.z.any()),
|
|
48
|
-
'if-version': zod_1.z.string().optional().nullable(),
|
|
49
61
|
});
|
|
50
62
|
/**
|
|
51
63
|
* Validates given `manifest` object to match pattern.
|
|
@@ -78,4 +90,4 @@ const prettifyErrorMessage = (issues) => {
|
|
|
78
90
|
return `"${fullPath}" parameter is ${message.toLowerCase()}. Error code: ${code}.`;
|
|
79
91
|
});
|
|
80
92
|
};
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC92YWxpZGF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBMkM7QUFFM0MscUNBQWdDO0FBRWhDLHNEQUF5RDtBQUN6RCxvREFBc0Q7QUFFdEQsTUFBTSxFQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFDLEdBQUcsZUFBTSxDQUFDO0FBRS9EOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sQ0FBQztRQUNOLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzVDLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzNDLENBQUM7U0FDRCxRQUFRLEVBQUU7U0FDVixRQUFRLEVBQUU7SUFDYixXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxpQ0FBbUIsQ0FBQztLQUNsQyxDQUFDO1NBQ0QsUUFBUSxFQUFFO1NBQ1YsUUFBUSxFQUFFO0lBQ2IsTUFBTSxFQUFFLE9BQUM7U0FDTixLQUFLLENBQ0osT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2hCLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ3ZCLFdBQVcsRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLDhCQUFpQixDQUFDO1FBQ3RDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0tBQ2pCLENBQUMsQ0FDSDtTQUNBLFFBQVEsRUFBRTtTQUNWLFFBQVEsRUFBRTtJQUNiLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDO1FBQ25CLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxDQUNmLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFDVixPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ1AsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7WUFDbEIsZUFBZSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtTQUMxRCxDQUFDLENBQ0g7UUFDRCxPQUFPLEVBQUUsT0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7S0FDeEMsQ0FBQztJQUNGLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ25CLFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3BCLFlBQVksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3hCLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1lBQ2QsWUFBWSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7WUFDeEIsY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7WUFDdkIsWUFBWSxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2xDLENBQUM7UUFDRixNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtRQUNsQixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtLQUM3QixDQUFDO0lBQ0YsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNwQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNJLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUNoRCxJQUFBLGdCQUFRLEVBQUMsc0JBQWMsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQURqRCxRQUFBLGdCQUFnQixvQkFDaUM7QUFFOUQ7O0dBRUc7QUFDSSxNQUFNLFFBQVEsR0FBRyxDQUN0QixNQUFvQixFQUNwQixNQUFXLEVBQ1gsbUJBQXFDLG9CQUFvQixFQUN6RCxFQUFFO0lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWxELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7UUFDN0IsTUFBTSxJQUFJLGdCQUFnQixDQUN4QixvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQ3JELENBQUM7S0FDSDtJQUVELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQWRXLFFBQUEsUUFBUSxZQWNuQjtBQUVGOztHQUVHO0FBQ0gsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO0lBQzlDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdkMsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBZSxFQUFFLEVBQUU7UUFDekMsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzlDLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNyQixPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7U0FDekQ7UUFFRCxPQUFPLElBQUksUUFBUSxrQkFBa0IsT0FBTyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsSUFBSSxHQUFHLENBQUM7SUFDckYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1pvZElzc3VlLCBab2RTY2hlbWEsIHp9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RVJST1JTfSBmcm9tICcuL2Vycm9ycyc7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fTUVUSE9EU30gZnJvbSAnLi4vdHlwZXMvYWdncmVnYXRpb24nO1xuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnLi4vdHlwZXMvcGFyYW1ldGVycyc7XG5cbmNvbnN0IHtNYW5pZmVzdFZhbGlkYXRpb25FcnJvciwgSW5wdXRWYWxpZGF0aW9uRXJyb3J9ID0gRVJST1JTO1xuXG4vKipcbiAqIFZhbGlkYXRpb24gc2NoZW1hIGZvciBtYW5pZmVzdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBtYW5pZmVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICB0YWdzOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBraW5kOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxcbiAgICAgIGNvbXBsZXhpdHk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgICAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKClcbiAgICAubnVsbGFibGUoKSxcbiAgYWdncmVnYXRpb246IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIG1ldHJpY3M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgICB0eXBlOiB6LmVudW0oQUdHUkVHQVRJT05fTUVUSE9EUyksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKVxuICAgIC5udWxsYWJsZSgpLFxuICBwYXJhbXM6IHpcbiAgICAuYXJyYXkoXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLFxuICAgICAgICBhZ2dyZWdhdGlvbjogei5lbnVtKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICAgICAgdW5pdDogei5zdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5vcHRpb25hbCgpXG4gICAgLm51bGxhYmxlKCksXG4gIGluaXRpYWxpemU6IHoub2JqZWN0KHtcbiAgICBwbHVnaW5zOiB6LnJlY29yZChcbiAgICAgIHouc3RyaW5nKCksXG4gICAgICB6Lm9iamVjdCh7XG4gICAgICAgIHBhdGg6IHouc3RyaW5nKCksXG4gICAgICAgIG1ldGhvZDogei5zdHJpbmcoKSxcbiAgICAgICAgJ2dsb2JhbC1jb25maWcnOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgfSlcbiAgICApLFxuICAgIG91dHB1dHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgfSksXG4gIGV4ZWN1dGlvbjogei5vYmplY3Qoe1xuICAgIGNvbW1hbmQ6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHoub2JqZWN0KHtcbiAgICAgICdpZi12ZXJzaW9uJzogei5zdHJpbmcoKSxcbiAgICAgIG9zOiB6LnN0cmluZygpLFxuICAgICAgJ29zLXZlcnNpb24nOiB6LnN0cmluZygpLFxuICAgICAgJ25vZGUtdmVyc2lvbic6IHouc3RyaW5nKCksXG4gICAgICAnZGF0ZS10aW1lJzogei5zdHJpbmcoKSxcbiAgICAgIGRlcGVuZGVuY2llczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICB9KSxcbiAgICBzdGF0dXM6IHouc3RyaW5nKCksXG4gICAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4gIHRyZWU6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxufSk7XG5cbi8qKlxuICogVmFsaWRhdGVzIGdpdmVuIGBtYW5pZmVzdGAgb2JqZWN0IHRvIG1hdGNoIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1hbmlmZXN0ID0gKG1hbmlmZXN0OiBhbnkpID0+XG4gIHZhbGlkYXRlKG1hbmlmZXN0U2NoZW1hLCBtYW5pZmVzdCwgTWFuaWZlc3RWYWxpZGF0aW9uRXJyb3IpO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBnaXZlbiBgb2JqZWN0YCB3aXRoIGdpdmVuIGBzY2hlbWFgLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGUgPSA8VD4oXG4gIHNjaGVtYTogWm9kU2NoZW1hPFQ+LFxuICBvYmplY3Q6IGFueSxcbiAgZXJyb3JDb25zdHJ1Y3RvcjogRXJyb3JDb25zdHJ1Y3RvciA9IElucHV0VmFsaWRhdGlvbkVycm9yXG4pID0+IHtcbiAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHNjaGVtYS5zYWZlUGFyc2Uob2JqZWN0KTtcblxuICBpZiAoIXZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBlcnJvckNvbnN0cnVjdG9yKFxuICAgICAgcHJldHRpZnlFcnJvck1lc3NhZ2UodmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5kYXRhO1xufTtcblxuLyoqXG4gKiBCZWF1dGlmeSBlcnJvciBtZXNzYWdlIGZyb20gem9kIGlzc3VlLlxuICovXG5jb25zdCBwcmV0dGlmeUVycm9yTWVzc2FnZSA9IChpc3N1ZXM6IHN0cmluZykgPT4ge1xuICBjb25zdCBpc3N1ZXNBcnJheSA9IEpTT04ucGFyc2UoaXNzdWVzKTtcblxuICByZXR1cm4gaXNzdWVzQXJyYXkubWFwKChpc3N1ZTogWm9kSXNzdWUpID0+IHtcbiAgICBjb25zdCB7Y29kZSwgcGF0aCwgbWVzc2FnZX0gPSBpc3N1ZTtcbiAgICBjb25zdCBmbGF0dGVuUGF0aCA9IHBhdGgubWFwKHBhcnQgPT5cbiAgICAgIHR5cGVvZiBwYXJ0ID09PSAnbnVtYmVyJyA/IGBbJHtwYXJ0fV1gIDogcGFydFxuICAgICk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBmbGF0dGVuUGF0aC5qb2luKCcuJyk7XG5cbiAgICBpZiAoY29kZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgIHJldHVybiBgJHttZXNzYWdlLnRvTG93ZXJDYXNlKCl9LiBFcnJvciBjb2RlOiAke2NvZGV9LmA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcIiR7ZnVsbFBhdGh9XCIgcGFyYW1ldGVyIGlzICR7bWVzc2FnZS50b0xvd2VyQ2FzZSgpfS4gRXJyb3IgY29kZTogJHtjb2RlfS5gO1xuICB9KTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
|
|
2
|
+
## IF Repositories
|
|
3
|
+
|
|
4
|
+
- [`if`](https://github.com/Green-Software-Foundation/if)
|
|
5
|
+
- source code for the IF
|
|
6
|
+
- [`if-plugins`](https://github.com/Green-Software-Foundation/if-plugins)
|
|
7
|
+
- source code for standard library of plugins
|
|
8
|
+
- IF core team commit to maintaining these plugins
|
|
9
|
+
- [`if-unofficial-plugins`](https://github.com/Green-Software-Foundation/if-unofficial-plugins)
|
|
10
|
+
- source code for plugins relying on third-party data/APIs
|
|
11
|
+
- intended to be deprecated and removed in mid-term future
|
|
12
|
+
- plugins in this repo should be handed over to relevant organizations to maintain
|
|
13
|
+
- [`if-plugin-template`](https://github.com/Green-Software-Foundation/if-plugin-template)
|
|
14
|
+
- template for new plugins
|
|
15
|
+
- intended for builders to bootstrap IF-compatible plugin development
|
|
16
|
+
- [`if-standards`](https://github.com/Green-Software-Foundation/if-standards)
|
|
17
|
+
- not currently used, but intended to be the home of params.ts
|
|
18
|
+
- will have a dedicated discussion board and governance to set IF standards
|
|
19
|
+
- [`if-exhaust plugins`](https://github.com/Green-Software-Foundation/if-exhaust-plugins)
|
|
20
|
+
- not currently used
|
|
21
|
+
- intended to become a separate repo just for exhaust plugins
|
|
22
|
+
- requires strict rules from if
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## Branch names and purposes
|
|
26
|
+
|
|
27
|
+
Our main repositories all have two branches: `main` and `release`.
|
|
28
|
+
Here are the rules applied to each branch:
|
|
29
|
+
|
|
30
|
+
### `if`, `if-plugins`, `if-unofficial-plugins` and `if-exhaust-plugins`
|
|
31
|
+
|
|
32
|
+
#### `main`
|
|
33
|
+
- target branch for PRs
|
|
34
|
+
- PRs can be merged into `main` with two core team reviews, one being QA
|
|
35
|
+
- `main` regularly advances ahead of the `release` branch
|
|
36
|
+
- merged into `release` periodically, only after full QA approval
|
|
37
|
+
- pushing directly to `main` is forbidden - all changes are by PR
|
|
38
|
+
- PRs will not be merged if they do not pass CI/CD
|
|
39
|
+
|
|
40
|
+
#### `release`
|
|
41
|
+
|
|
42
|
+
- release is our stable branch
|
|
43
|
+
- it is protected and only merged into when we have a fully QA-approved `main` state that we want to release
|
|
44
|
+
- npm packages are released using `release` branch
|
|
45
|
+
- PRs into `release` are forbidden except to update tests, README, Github config, CI/CD or release config.
|
|
46
|
+
- Pushing directly to `release` is forbidden
|
|
47
|
+
- `release` should always satisfy a basic set of regression and scenario tests
|
|
48
|
+
- merging `main` into `release` requires that all automated tests pass and two core team members have approved, one being QA.
|
|
49
|
+
|
|
50
|
+
### `if-plugin-template`
|
|
51
|
+
|
|
52
|
+
- we only maintain a single branch: `main`
|
|
53
|
+
- PRs to `main` can be merged after one approval from core team
|
|
54
|
+
- Pushing directly to `main` is possible but discouraged
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
### `if-docs`
|
|
58
|
+
|
|
59
|
+
- we only maintain a single branch - `main`
|
|
60
|
+
- PRs to `main` can be merged after one approval from core team
|
|
61
|
+
- Pushing directly to `main` is possible but discouraged
|
|
62
|
+
|
|
63
|
+
### When can we break our rules?
|
|
64
|
+
|
|
65
|
+
- `release` branches have the strictest rules. We should never override the process outlined above for `release` branches in any repository.
|
|
66
|
+
- On `main` we can be slightly more flexible. It is acceptable to skip QA for PRs that only change typos, documentation or comments. Any changes to source code or tests should be QA approved before merge.
|
|
67
|
+
- In emergency scenarios where an urgent hotfix is required it might be required to skip QA review on `main` branches - this should only happen with QA authorization so QA can retroactively test as soon as possible.
|
|
68
|
+
|
|
69
|
+
### How to create a release
|
|
70
|
+
|
|
71
|
+
Creating a release of `if`, `if-plugins` or `if-unofficial-plugins` is achieved by following these steps:
|
|
72
|
+
|
|
73
|
+
1) core team member creates a tagged release on `main`
|
|
74
|
+
2) new tagged release triggers automatic commit to be pushed to `main` that updates package and lock files that include new version numbers
|
|
75
|
+
3) `main` branch is manually merged into `release` by core team member
|
|
76
|
+
4) merging into release triggers automatic new release to be created on npm
|
|
77
|
+
|
|
78
|
+
We use [semantic versioning](https://semver.org/) to number our releases.
|
|
79
|
+
## DCO
|
|
80
|
+
|
|
81
|
+
We require contributors to conform to the DCO agreement on our repositories. This means either signing commits or explicitly adding a DCO commit message. This ensures all contributors agree to the conditions imposed by our licenses and adhere to our expected practices. The DCO must be satisfied in order to PRs to be merged.
|
|
82
|
+
|
|
83
|
+
## Commits
|
|
84
|
+
|
|
85
|
+
Commits are expected to conform to the [conventional-commits](https://www.conventionalcommits.org/en/v1.0.0/) syntax.
|
|
86
|
+
Commits are expected to be signed and have descriptive commit messages.
|
|
87
|
+
We might ask people to provide new messages in some circumstances or to break their PRs into smaller logical units.
|
|
88
|
+
|
|
89
|
+
## PR triage
|
|
90
|
+
|
|
91
|
+
We run a weekly PR triage call on Thursdays. The most important outcome of this call is to examine open PRs and issues across all the IF repositories and determine which ones include changes that we might want to merge. This initial sift for changes that are or are not aligned with our goals for the IF should be prioritized above technical comments and fixes.
|
|
92
|
+
|
|
93
|
+
Some reasons why a PR might not pass triage:
|
|
94
|
+
|
|
95
|
+
- changes are not aligned with our vision for IF
|
|
96
|
+
- we do not see a strong reason for making a change
|
|
97
|
+
- changes are obviously technically incorrect
|
|
98
|
+
- changes are too large to properly review (e.g. covering too many files)
|
|
99
|
+
- too many changes are made in too few commits
|
|
100
|
+
- commit messages are ambiguous
|
|
101
|
+
- PR description is too short, vague or imprecise
|
|
102
|
+
- PR would for some other reason take too long for core team to assess
|
|
103
|
+
- PR makes changes that do not conform to our license
|
|
104
|
+
- PR makes use of a third-party API or dataset in an illegitimate way (e.g. exposing data that should be paywalled)
|
|
105
|
+
|
|
106
|
+
After a PR has passed triage, it can be assigned to a core team member to review. Developer review precedes QA review. Community PRs (PRs raised from outside the core team) will *always* go through a full QA vetting procedure before being merged.
|
|
107
|
+
|
|
108
|
+
We intend to respond to new PRs and issues within 3 days of the ticket being opened, even if only with a brief message thanking the OP and explaining the triage process.
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
## Labels
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
//review status labels
|
|
115
|
+
awaiting-triage
|
|
116
|
+
triage-pass
|
|
117
|
+
awaiting-review
|
|
118
|
+
review-pass
|
|
119
|
+
awaiting-qa
|
|
120
|
+
qa-pass
|
|
121
|
+
changes-needed
|
|
122
|
+
|
|
123
|
+
//change type labels
|
|
124
|
+
fix
|
|
125
|
+
feature
|
|
126
|
+
docs
|
|
127
|
+
package
|
|
128
|
+
other
|
|
129
|
+
|
|
130
|
+
// size labels
|
|
131
|
+
small
|
|
132
|
+
medium
|
|
133
|
+
large
|
|
134
|
+
|
|
135
|
+
// priority labels
|
|
136
|
+
high-priority
|
|
137
|
+
med-priority
|
|
138
|
+
low-priority
|
|
139
|
+
|
|
140
|
+
//delay explanation labels
|
|
141
|
+
abandoned
|
|
142
|
+
blocked
|
|
143
|
+
backlogged
|
|
144
|
+
|
|
145
|
+
// other labels
|
|
146
|
+
project-management
|
|
147
|
+
agenda
|
|
148
|
+
discussion
|
|
149
|
+
help-wanted
|
|
150
|
+
good-first-issue
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Each PR is expected to have one label from each category (except `other`) assigned to it at all times.
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
## Releases
|
|
157
|
+
|
|
158
|
+
We aim to release fortnightly, every other Tuesday. We release npm packages for `if`, `if-plugins`, `if-unofficial-plugins`, and `if-plugin-template`.
|
|
159
|
+
|
|
160
|
+
## Hotfixes
|
|
161
|
+
|
|
162
|
+
We will hotfix by raising PRs into `release` when necessary. These PRs require sign-off by a core developer and our QA engineer.
|
|
163
|
+
|
|
164
|
+
If more than two hotfixes are required on a particular release, the team will call a spike meeting to determine the causes of the bugs, identify any changes required to our QA process and determine next steps for fixing the release.
|
|
165
|
+
|
|
166
|
+
Hotfixes on release can be merged back into `main` when they have been fully QA tested.
|
|
167
|
+
|
|
168
|
+
We intend for hotfixes to be as infrequent as possible.
|