ui/deployment/prebuild.js (174 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF 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. * */ yaml = require('js-yaml'); fs = require('fs'); mustache = require('mustache'); console.log('Pre-Build started.'); let branchName = 'dev'; let programArgs = process.argv; // If build config is not valid, use "dev" if (programArgs.length <= 2) { console.log('No build config specified. Using default config for dev.'); branchName = 'dev'; } else { branchName = programArgs[2].trim(); console.log('Build config specified. Using config for ' + branchName); } // Check if Config-File for current Branch exists, otherwise use "def" if (!fs.existsSync(`deployment/${branchName}/config.yml`)) { console.log( `Could not find config for ${branchName}. Using config for dev.`, ); branchName = 'dev'; } // Read Config-File and check if it is valid let config = {}; try { config = yaml.load( fs.readFileSync(`deployment/${branchName}/config.yml`, 'utf8'), ); } catch (error) { console.log('Invalid Config-File. Pre-Build failed.'); process.exit(1); } // Read Modules-File and check if it is valid let modules = {}; try { modules = yaml.load(fs.readFileSync('deployment/modules.yml', 'utf8')); } catch (error) { console.log('Invalid Modules-File. Pre-Build failed.'); process.exit(1); } // Add active Modules to Template-Variable let modulesActive = { modulesActive: [] }; for (let module of config.modules) { modulesActive['modulesActive'].push({ module: module, componentImport: modules[module]['componentImport'], moduleName: modules[module]['moduleName'], component: modules[module]['component'], componentPath: modules[module]['componentPath'], path: modules[module]['path'], link: modules[module]['link'], pageNames: modules[module]['pageNames'], privileges: modules[module]['privileges'], url: modules[module]['url'], title: modules[module]['title'], icon: modules[module]['icon'], admin: modules[module]['admin'], description: modules[module]['description'], showStatusBox: modules[module]['showStatusBox'], statusBox: modules[module]['statusBox'], }); console.log('Active Angular Module: ' + module); } // Create necessary JavaScript-Files from Template and move to respective Directory fs.writeFileSync( 'src/app/app.module.ts', mustache.render( fs.readFileSync('deployment/app.module.mst', 'utf8').toString(), modulesActive, ), ); fs.writeFileSync( 'src/app/home/home.service.ts', mustache.render( fs.readFileSync('deployment/home.service.mst', 'utf8').toString(), modulesActive, ), ); fs.writeFileSync( 'src/app/app-routing.module.ts', mustache.render( fs.readFileSync('deployment/app-routing.module.mst', 'utf8').toString(), modulesActive, ), ); fs.writeFileSync( 'src/app/core/components/base-navigation.component.ts', mustache.render( fs .readFileSync('deployment/base-navigation.component.mst', 'utf8') .toString(), modulesActive, ), ); fs.writeFileSync( 'src/app/app-overview/apps.ts', fs.readFileSync('deployment/apps.ts'), ); fs.writeFileSync( 'src/app/services/app.constants.ts', fs.readFileSync('deployment/app-constants.ts', 'utf8'), ); // Move Images fs.writeFileSync( 'src/assets/img/sp/logo.png', fs.readFileSync(config['login']['logo']), ); console.log('Moved: logo.png'); fs.writeFileSync( 'src/assets/img/sp/logo-navigation.png', fs.readFileSync(config['login']['logo-navigation']), ); console.log('Moved: sp-logo-navigation.png'); fs.writeFileSync( 'src/assets/img/favicon/favicon-96x96.png', fs.readFileSync(config['login']['favicon']), ); console.log('Moved: favicon'); fs.writeFileSync( 'src/scss/_variables.scss', fs.readFileSync('deployment/_variables.scss', 'utf8'), ); console.log('Moved: styling variables file'); fs.writeFileSync( 'src/proxy.conf.json', fs.readFileSync('deployment/proxy.conf.json', 'utf8'), ); console.log('Moved: webpack dev config'); if (process.env.THEME_LOC !== undefined) { console.log(`Using custom-provided theme ${process.env.THEME_LOC}`); fs.writeFileSync( 'src/scss/_variables.scss', fs.readFileSync(process.env.THEME_LOC, 'utf8'), ); } if (process.env.LOGO_HEADER_LOC !== undefined) { console.log( `Using custom-provided header logo ${process.env.LOGO_HEADER_LOC}`, ); fs.writeFileSync( 'src/assets/img/sp/logo.png', fs.readFileSync(process.env.LOGO_HEADER_LOC), ); } if (process.env.LOGO_NAV_LOC !== undefined) { console.log( `Using custom-provided navbar logo ${process.env.LOGO_NAV_LOC}`, ); fs.writeFileSync( 'src/assets/img/sp/logo-navigation.png', fs.readFileSync(process.env.LOGO_NAV_LOC), ); } if (process.env.FAVICON_LOC !== undefined) { console.log(`Using custom-provided favicon ${process.env.FAVICON_LOC}`); fs.writeFileSync( 'src/assets/img/favicon/favicon-96x96.png', fs.readFileSync(process.env.FAVICON_LOC), ); } if (process.env.CONSTANTS_FILE !== undefined) { console.log( `Using custom-provided constants file ${process.env.CONSTANTS_FILE}`, ); fs.writeFileSync( 'src/app/services/app.constants.ts', fs.readFileSync(process.env.CONSTANTS_FILE, 'utf8'), ); } console.log('Moving translations from deployment/i18n to assets/i18n'); const sourceDir = 'deployment/i18n'; const destDir = 'src/assets/i18n'; if (!fs.existsSync(destDir)) { fs.mkdirSync(destDir, { recursive: true }); } fs.readdirSync(sourceDir).forEach(file => { fs.writeFileSync( `${destDir}/${file}`, fs.readFileSync(`${sourceDir}/${file}`, 'utf8'), ); }); console.log('Pre-Build finished.');