feat: scripts
This commit is contained in:
250
scripts/build-util.js
Normal file
250
scripts/build-util.js
Normal file
@@ -0,0 +1,250 @@
|
||||
#! /usr/bin/env runjs
|
||||
|
||||
var argsEx = require('component-args.js');
|
||||
var jsonEx = require('component-json-ex.js');
|
||||
|
||||
var System = java.lang.System;
|
||||
var OSUtil = Packages.me.hatter.tools.commons.os.OSUtil;
|
||||
|
||||
var jdkPackageBaseURL = 'http://publicbucket-1251781687.coscd.myqcloud.com/';
|
||||
var jdkPackages = [
|
||||
{
|
||||
'jdk': 'jdk-7u80-linux-x64.tar.gz',
|
||||
'sha256': 'bad9a731639655118740bee119139c1ed019737ec802a630dd7ad7aab4309623'
|
||||
}, {
|
||||
'jdk': 'jdk-8u121-linux-x64.tar.gz',
|
||||
'sha256': '97e30203f1aef324a07c94d9d078f5d19bb6c50e638e4492722debca588210bc'
|
||||
}, {
|
||||
'jdk': 'jdk-9.0.4_linux-x64_bin.tar.gz',
|
||||
'sha256': '90c4ea877e816e3440862cfa36341bc87d05373d53389ec0f2d54d4e8c95daa2'
|
||||
}
|
||||
];
|
||||
|
||||
var printHelp = () => {
|
||||
println('build-util.js <FLAGS>');
|
||||
println();
|
||||
println('-h, --help Print help');
|
||||
println(' --init Init build.json');
|
||||
println(' --init-java Init Java config');
|
||||
println(' --list List Java versions');
|
||||
println(' --list-jdks List JDK packages');
|
||||
return;
|
||||
};
|
||||
|
||||
var initBuildJSON = () => {
|
||||
var buildGradle = $$.file('build.gradle');
|
||||
var buildJSON = $$.file('build.json');
|
||||
|
||||
if ((buildGradle.exists()) && (buildJSON.exists())) {
|
||||
xprintln('[ERROR] File build.gradle and build.json exists.');
|
||||
}
|
||||
|
||||
print('Input project name: ');
|
||||
var projectName = System.console().readLine();
|
||||
if (!(projectName)) {
|
||||
xprintln('[ERROR] Project name cannot be empty.');
|
||||
return;
|
||||
}
|
||||
|
||||
print('Select Java(1.6, 1.7, 1.8, 9.0, default 1.8): ');
|
||||
var javaVersion = System.console().readLine();
|
||||
javaVersion = $STR(javaVersion || '1.8');
|
||||
if (!(['1.6', '1.7', '1.8', '9.0'].contains(javaVersion))) {
|
||||
xprintln('[ERROR] Unknow java version: ' + javaVersion);
|
||||
return;
|
||||
}
|
||||
|
||||
print('Select Builder(ant, gradle, maven, default gradle): ');
|
||||
var builder = System.console().readLine();
|
||||
builder = $STR(builder || 'gradle');
|
||||
if (!(['ant', 'gradle', 'maven'].contains(builder))) {
|
||||
xprintln('[ERROR] Unknow builder: ' + builder);
|
||||
return;
|
||||
}
|
||||
|
||||
var builderVersion;
|
||||
if ($STR(builder) == 'ant') {
|
||||
builderVersion = '1.7';
|
||||
} else if ($STR(builder) == 'maven') {
|
||||
print('Select Maven(2.2.1, 3.5.2, default 3.5.2): ');
|
||||
builderVersion = System.console().readLine();
|
||||
builderVersion = $STR(builderVersion || '3.5.2');
|
||||
if (!(['2.2.1', '3.5.2'].contains(builderVersion))) {
|
||||
xprintln('[ERROR] Unknow builder version: ' + builderVersion);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
print('Select Gradle(1.0, 3.1, default 3.1): ');
|
||||
builderVersion = System.console().readLine();
|
||||
builderVersion = $STR(builderVersion || '3.1');
|
||||
if (!(['1.0', '3.1'].contains(builderVersion))) {
|
||||
xprintln('[ERROR] Unknow builder version: ' + builderVersion);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
println('[INFO] Name : ' + projectName);
|
||||
println('[INFO] Java : ' + javaVersion);
|
||||
println('[INFO] Builder : ' + builder + '/' + builderVersion);
|
||||
|
||||
if ($STR(builder) == 'ant') {
|
||||
xprintln('[ERROR] Ant currently is not supported!!!');
|
||||
return;
|
||||
}
|
||||
|
||||
if (($STR(builder) == 'gradle') && (!(buildGradle.exists()))) {
|
||||
xprintln('[INFO] Create file: ' + buildGradle.getName());
|
||||
var buildGradleContent = $$.httpRequest().skipCertCheck().url('https://repo.examp1e.org/attachment/build.gradle').get().string();
|
||||
buildGradleContent = buildGradleContent.replace('//BASE_PROJECT_NAME//', projectName);
|
||||
buildGradleContent = buildGradleContent.replace('//SOURCE_COMPATIBILITY//', javaVersion);
|
||||
buildGradleContent = buildGradleContent.replace('//TARGET_COMPATIBILITY//', javaVersion);
|
||||
buildGradleContent = buildGradleContent.replace('//JAVA_COMPILE//', ((builderVersion == '1.0') ? 'Compile' : 'JavaCompile'));
|
||||
|
||||
print('Use maven repo(Y/N)? ');
|
||||
var useMavenRepo = System.console().readLine();
|
||||
if ($STR(useMavenRepo).toLowerCase() == 'y') {
|
||||
buildGradleContent = buildGradleContent.replace(/\/\/DISABLE_MVN_REPO\/\/ /g, '');
|
||||
}
|
||||
|
||||
$$.rFile(buildGradle).write(buildGradleContent);
|
||||
}
|
||||
if (!(buildJSON.exists())) {
|
||||
xprintln('[INFO] Create file: ' + buildJSON.getName());
|
||||
var bJSON = {
|
||||
'java': javaVersion,
|
||||
'builder': {
|
||||
'name': builder,
|
||||
'version': builderVersion
|
||||
}
|
||||
};
|
||||
$$.rFile(buildJSON).write(jsonEx.prettyJSON(bJSON));
|
||||
}
|
||||
|
||||
if (($STR(builder) == 'gradle')) {
|
||||
print('Need init app(Y/N)? ');
|
||||
var initApp = System.console().readLine();
|
||||
if ($STR(initApp).toLowerCase() == 'y') {
|
||||
$$.shell().inheritIO().commands('runjs', '-u', 'https://repo.examp1e.org/app/build.js', 'initapp').run();
|
||||
}
|
||||
}
|
||||
|
||||
if ($$.file('src').exists()) {
|
||||
print('Need init eclipse(Y/N)? ')
|
||||
var initEclipse = System.console().readLine();
|
||||
if ($STR(initEclipse).toLowerCase() == 'y') {
|
||||
if (($STR(builder) == 'gradle') && $$.file('build.gradle').exists()) {
|
||||
$$.shell().inheritIO().commands('runjs', '-u', 'https://repo.examp1e.org/app/build.js', 'eclipse').run();
|
||||
}
|
||||
if (($STR(builder) == 'maven') && $$.file('pom.xml').exists()) {
|
||||
$$.shell().inheritIO().commands('runjs', '-u', 'https://repo.examp1e.org/app/build.js', 'eclipse:eclipse').run();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var gitignore = $$.file('.gitignore');
|
||||
if (!(gitignore.exists())) {
|
||||
print('Need create .gitignore(Y/N)? ')
|
||||
var createGitIgnore = System.console().readLine();
|
||||
if ($STR(createGitIgnore).toLowerCase() == 'y') {
|
||||
var defaultGitIgnore = [
|
||||
'build',
|
||||
'classes',
|
||||
'.DS_Store',
|
||||
'.gradle',
|
||||
'.classpath',
|
||||
'.project',
|
||||
'.settings'
|
||||
];
|
||||
$$.rFile(gitignore).write(defaultGitIgnore.join('\n'));
|
||||
}
|
||||
}
|
||||
|
||||
xprintln('[SUCCESS] Done!');
|
||||
};
|
||||
|
||||
var getBuildConfigJSON = () => {
|
||||
return $$.file('~', '.jssp', 'config', 'buildconfig.json');
|
||||
};
|
||||
|
||||
var getCurrentJavaHome = () => {
|
||||
var javaHome = $$.prop('java.home');
|
||||
var javaHomeFile = $$.file(javaHome);
|
||||
if ($STR(javaHomeFile.getName()) == 'jre') {
|
||||
if ($$.file(javaHomeFile.getParentFile(), 'bin', 'java').exists()) {
|
||||
javaHome = javaHomeFile.getParentFile().getAbsolutePath();
|
||||
}
|
||||
}
|
||||
return javaHome;
|
||||
};
|
||||
|
||||
var initJavaVersion = () => {
|
||||
var javaVersion = $$.prop('java.version');
|
||||
var javaHome = getCurrentJavaHome();
|
||||
var buildConfig = getBuildConfigJSON();
|
||||
var buildConfigJSON = JSON.parse((buildConfig.exists() && $$.rFile(buildConfig).string()) || '{}');
|
||||
if (buildConfigJSON['java'] && buildConfigJSON['java'][javaVersion]) {
|
||||
xprintln('[WARN] Java config exists.');
|
||||
xprintln('[INFO] Configed JAVA_HOME path: ' + buildConfigJSON['java'][javaVersion]['home']);
|
||||
return;
|
||||
}
|
||||
println('[INFO] Current Java version : ' + javaVersion);
|
||||
println('[INFO] Current JAVA_HOME : ' + javaHome);
|
||||
print('Add Current Java to build config(Y/N)?');
|
||||
var addJava = System.console().readLine();
|
||||
if ($STR(addJava).toLowerCase() == 'y') {
|
||||
buildConfigJSON['java'] = buildConfigJSON['java'] || {};
|
||||
buildConfigJSON['java'][javaVersion] = buildConfigJSON['java'][javaVersion] || {};
|
||||
buildConfigJSON['java'][javaVersion]['home'] = javaHome;
|
||||
buildConfigJSON['java']['versions'] = buildConfigJSON['java']['versions'] || [];
|
||||
buildConfigJSON['java']['versions'].push(javaVersion);
|
||||
|
||||
$$.rFile(buildConfig).write(jsonEx.prettyJSON(buildConfigJSON));
|
||||
}
|
||||
};
|
||||
|
||||
var main = () => {
|
||||
var args = argsEx.parseARGS(['h', 'help', 'init', 'init-java', 'list', 'list-jdks']);
|
||||
|
||||
if (args.flags.flg('init')) {
|
||||
initBuildJSON();
|
||||
} else if (args.flags.flg('init-java')) {
|
||||
if (OSUtil.isMacOS()) {
|
||||
xprintln('[WARN] macOS DO NOT need init java, build.js will use /usr/libexec/java_home.');
|
||||
} else {
|
||||
initJavaVersion();
|
||||
}
|
||||
} else if (args.flags.flg('list-jdks')) {
|
||||
println('Dowload base URL: ' + jdkPackageBaseURL);
|
||||
jdkPackages.forEach((jdk) => {
|
||||
println(' ' + jdk.jdk + repeat(' ', (30 - jdk.jdk.length)) + ' - ' + jdk.sha256);
|
||||
});
|
||||
} else if (args.flags.flg('list')) {
|
||||
if (OSUtil.isMacOS()) {
|
||||
$$.shell().inheritIO().commands('/usr/libexec/java_home', '-V').run();
|
||||
} else {
|
||||
var buildConfig = getBuildConfigJSON();
|
||||
if (!(buildConfig.exists())) {
|
||||
xprintln('[ERROR] build config file not found.');
|
||||
return;
|
||||
}
|
||||
var buildConfigJSON = JSON.parse($$.rFile(buildConfig).string());
|
||||
if (buildConfigJSON['java'] && buildConfigJSON['java']['versions']) {
|
||||
var versions = buildConfigJSON['java']['versions'].sort();
|
||||
println('Matching Java Virtual Machines (' + versions.length + '):');
|
||||
versions.forEach((v) => {
|
||||
println(' ' + v + ': ' + buildConfigJSON['java'][v]['home']);
|
||||
});
|
||||
}
|
||||
println();
|
||||
println(getCurrentJavaHome());
|
||||
}
|
||||
} else {
|
||||
if (!(args.flags.flg('h', 'help'))) {
|
||||
xprintln('[ERROR] Args error!');
|
||||
println();
|
||||
}
|
||||
printHelp();
|
||||
}
|
||||
};
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user