mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-04-26 16:27:19 +00:00
81 lines
2.7 KiB
JavaScript
81 lines
2.7 KiB
JavaScript
// @ts-check
|
|
|
|
(async () => {
|
|
|
|
const DEFAULT_VERSION = 'nightly'; // '0.3.7-alpha.preview';
|
|
|
|
const os = require('os');
|
|
const path = require('path');
|
|
const { v4 } = require('uuid');
|
|
const shell = require('shelljs');
|
|
shell.env.PATH = `${shell.env.PATH}${path.delimiter}${path.join(__dirname, '..', 'node_modules', '.bin')}`;
|
|
const yargs = require('yargs')
|
|
.option('cli-version', {
|
|
alias: 'cv',
|
|
default: DEFAULT_VERSION,
|
|
choices: [
|
|
// 'latest', // TODO: How do we get the source for `latest`. Currently, `latest` is the `0.3.7-alpha.preview`.
|
|
'nightly'
|
|
],
|
|
describe: `The version of the 'arduino-cli' to download. Specify either an existing version or use 'nightly'. Defaults to ${DEFAULT_VERSION}.`
|
|
})
|
|
.version(false).parse();
|
|
|
|
const version = yargs['cli-version'];
|
|
if (version !== 'nightly') {
|
|
shell.echo(`Only 'nightly' version is supported.`);
|
|
shell.exit(1);
|
|
}
|
|
const repository = path.join(os.tmpdir(), `${v4()}-arduino-cli`);
|
|
if (shell.mkdir('-p', repository).code !== 0) {
|
|
shell.exit(1);
|
|
}
|
|
|
|
if (shell.exec(`git clone https://github.com/arduino/arduino-cli.git ${repository}`).code !== 0) {
|
|
shell.exit(1);
|
|
}
|
|
if (version !== 'nightly') {
|
|
if (shell.exec(`git -C ${repository} checkout tags/${version} -b ${version}`).code !== 0) {
|
|
shell.exit(1);
|
|
}
|
|
}
|
|
shell.echo('Generating TS/JS API from:');
|
|
if (shell.exec(`git -C ${repository} rev-parse --abbrev-ref HEAD`).code !== 0) {
|
|
shell.exit(1);
|
|
}
|
|
if (shell.exec(`git -C ${repository} rev-parse --short HEAD`).code !== 0) {
|
|
shell.exit(1);
|
|
}
|
|
|
|
const pluginExec = shell.which('grpc_tools_node_protoc_plugin');
|
|
if (!pluginExec || pluginExec.code !== 0) {
|
|
shell.exit(1);
|
|
}
|
|
const plugin = pluginExec.stdout.trim();
|
|
|
|
const rpc = path.join(repository, 'rpc');
|
|
const out = path.join(__dirname, '..', 'src', 'node', 'cli-protocol');
|
|
// Generate JS code from the `.proto` files.
|
|
if (shell.exec(`grpc_tools_node_protoc \
|
|
--js_out=import_style=commonjs,binary:${out} \
|
|
--grpc_out=${out} \
|
|
--plugin=protoc-gen-grpc=${plugin} \
|
|
-I ${rpc} \
|
|
${path.join(rpc, '/**/*.proto')}`).code !== 0) {
|
|
shell.exit(1);
|
|
}
|
|
|
|
// Generate the `.d.ts` files for JS.
|
|
if (shell.exec(`protoc \
|
|
--plugin=protoc-gen-ts=${path.resolve(__dirname, '..', 'node_modules', '.bin', 'protoc-gen-ts')} \
|
|
--ts_out=${out} \
|
|
-I ${rpc} \
|
|
${path.join(rpc, '/**/*.proto')}`).code !== 0) {
|
|
shell.exit(1);
|
|
}
|
|
|
|
const { patch } = require('./patch-grpc-js');
|
|
patch([out])
|
|
shell.echo('Done.');
|
|
|
|
})(); |