generator-fedhipster
Version:
Spring Boot + Angular/React in one handy generator
177 lines (162 loc) • 6.22 kB
JavaScript
/**
* Copyright 2013-2019 the original author or authors from the JHipster project.
*
* This file is part of the JHipster project, see https://www.jhipster.tech/
* for more information.
*
* Licensed 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.
*/
const shelljs = require('shelljs');
const chalk = require('chalk');
const dockerUtils = require('./docker-utils');
const { getBase64Secret } = require('./utils');
module.exports = {
checkDocker: dockerUtils.checkDocker,
checkImages,
generateJwtSecret,
configureImageNames,
setAppsFolderPaths,
loadConfigs,
loadFromYoRc,
setClusteredApps
};
/**
* Check Images
*/
function checkImages() {
this.log('\nChecking Docker images in applications directories...');
let imagePath = '';
let runCommand = '';
this.warning = false;
this.warningMessage = 'To generate the missing Docker image(s), please run:\n';
this.appsFolders.forEach((appsFolder, index) => {
const appConfig = this.appConfigs[index];
if (appConfig.buildTool === 'maven') {
imagePath = this.destinationPath(`${this.directoryPath + appsFolder}/target/jib-cache`);
runCommand = './mvnw -Pprod verify jib:dockerBuild';
} else {
imagePath = this.destinationPath(`${this.directoryPath + appsFolder}/build/jib-cache`);
runCommand = './gradlew bootJar -Pprod jibDockerBuild';
}
if (shelljs.ls(imagePath).length === 0) {
this.warning = true;
this.warningMessage += ` ${chalk.cyan(runCommand)} in ${this.destinationPath(this.directoryPath + appsFolder)}\n`;
}
});
}
/**
* Generate Jwt Secret
*/
function generateJwtSecret() {
if (this.jwtSecretKey === undefined) {
this.jwtSecretKey = getBase64Secret();
}
}
/**
* Configure Image Names
*/
function configureImageNames() {
for (let i = 0; i < this.appsFolders.length; i++) {
const originalImageName = this.appConfigs[i].baseName.toLowerCase();
const targetImageName = this.dockerRepositoryName ? `${this.dockerRepositoryName}/${originalImageName}` : originalImageName;
this.appConfigs[i].targetImageName = targetImageName;
}
}
/**
* Set Apps Folder Paths
*/
function setAppsFolderPaths() {
if (this.applicationType) return;
this.appsFolderPaths = [];
for (let i = 0; i < this.appsFolders.length; i++) {
const path = this.destinationPath(this.directoryPath + this.appsFolders[i]);
this.appsFolderPaths.push(path);
}
}
/**
* Load config from this.appFolders
*/
function loadConfigs() {
this.appConfigs = [];
this.gatewayNb = 0;
this.monolithicNb = 0;
this.microserviceNb = 0;
this.uaaNb = 0;
// Loading configs
this.debug(`Apps folders: ${this.appsFolders}`);
this.appsFolders.forEach(appFolder => {
const path = this.destinationPath(`${this.directoryPath + appFolder}/.yo-rc.json`);
const fileData = this.fs.readJSON(path);
if (fileData) {
const config = fileData['generator-jhipster'];
if (config.applicationType === 'monolith') {
this.monolithicNb++;
} else if (config.applicationType === 'gateway') {
this.gatewayNb++;
} else if (config.applicationType === 'microservice') {
this.microserviceNb++;
} else if (config.applicationType === 'uaa') {
this.uaaNb++;
}
this.portsToBind = this.monolithicNb + this.gatewayNb;
config.appFolder = appFolder;
this.appConfigs.push(config);
} else {
this.error(`Application '${appFolder}' is not found in the path '${this.directoryPath}'`);
}
});
}
function setClusteredApps() {
for (let i = 0; i < this.appsFolders.length; i++) {
for (let j = 0; j < this.clusteredDbApps.length; j++) {
this.appConfigs[i].clusteredDb = this.appsFolders[i] === this.clusteredDbApps[j];
}
}
}
function loadFromYoRc() {
this.authenticationType = this.config.get('authenticationType');
this.defaultAppsFolders = this.config.get('appsFolders');
this.directoryPath = this.config.get('directoryPath');
this.gatewayType = this.config.get('gatewayType');
this.clusteredDbApps = this.config.get('clusteredDbApps');
this.monitoring = this.config.get('monitoring');
this.consoleOptions = this.config.get('consoleOptions');
this.useKafka = false;
this.useMemcached = false;
this.dockerRepositoryName = this.config.get('dockerRepositoryName');
this.dockerPushCommand = this.config.get('dockerPushCommand');
this.serviceDiscoveryType = this.config.get('serviceDiscoveryType');
this.reactive = this.config.get('reactive');
if (this.serviceDiscoveryType === undefined) {
this.serviceDiscoveryType = 'eureka';
}
this.adminPassword = this.config.get('adminPassword');
this.jwtSecretKey = this.config.get('jwtSecretKey');
if (this.defaultAppsFolders !== undefined) {
this.log('\nFound .yo-rc.json config file...');
}
if (this.regenerate) {
this.appsFolders = this.defaultAppsFolders;
loadConfigs.call(this);
if (this.microserviceNb > 0 || this.gatewayNb > 0 || this.uaaNb > 0) {
this.deploymentApplicationType = 'microservice';
} else {
this.deploymentApplicationType = 'monolith';
}
setClusteredApps.call(this);
if (!this.adminPassword) {
this.adminPassword = 'admin'; // TODO find a better way to do this
this.adminPasswordBase64 = getBase64Secret(this.adminPassword);
}
}
}