-
Notifications
You must be signed in to change notification settings - Fork 868
/
cli.js
107 lines (93 loc) · 3.02 KB
/
cli.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
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*
* Any modifications Copyright OpenSearch Contributors. See
* GitHub history for details.
*/
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import { readFileSync, writeFileSync } from 'fs';
import { resolve } from 'path';
import getopts from 'getopts';
import dedent from 'dedent';
import { REPO_ROOT } from '@osd/utils';
import { ToolingLog, pickLevelFromFlags } from '@osd/dev-utils';
import { generateNoticeFromSource } from './generate_notice_from_source';
const unknownFlags = [];
const opts = getopts(process.argv.slice(2), {
boolean: ['help', 'validate', 'verbose', 'debug'],
unknown(flag) {
unknownFlags.push(flag);
},
});
const log = new ToolingLog({
level: pickLevelFromFlags(opts),
writeTo: process.stdout,
});
if (unknownFlags.length) {
log.error(`Unknown flags ${unknownFlags.map((f) => `"${f}"`).join(',')}`);
process.exitCode = 1;
opts.help = true;
}
if (opts.help) {
process.stdout.write(
'\n' +
dedent`
Generate or validate NOTICE.txt.
Entries are collected by finding all multi-line comments that start
with a "@notice" tag and copying their text content into NOTICE.txt.
Options:
--help Show this help info
--validate Don't write the NOTICE.txt, just fail if updates would have been made
--verbose Set logging level to verbose
--debug Set logging level to debug
` +
'\n\n'
);
process.exit();
}
(async function run() {
const path = resolve(REPO_ROOT, 'NOTICE.txt');
const newContent = await generateNoticeFromSource({
productName: 'OpenSearch (https://opensearch.org/)',
directory: REPO_ROOT,
log,
});
const currentContent = readFileSync(path, 'utf8');
if (currentContent === newContent) {
log.success('NOTICE.txt is up to date');
return;
}
if (!opts.validate) {
log.success('Wrote notice text to NOTICE.txt');
writeFileSync(path, newContent, 'utf8');
return;
}
log.error(
'NOTICE.txt is out of date, run `node scripts/notice` to update and commit the results.'
);
process.exit(1);
})().catch((error) => {
log.error(error);
process.exit(1);
});