UNPKG

generator-begcode

Version:

Spring Boot + Angular/React/Vue in one handy generator

152 lines (151 loc) 6.46 kB
import chalk from 'chalk'; import { kebabCase, intersection } from 'lodash-es'; const includesValue = (prop, values) => answers => answers[prop] && intersection(answers[prop], values).length > 0; const command = { options: {}, configs: { ciCd: { argument: { type: Array, }, prompt: { type: 'checkbox', message: 'What CI/CD pipeline do you want to generate?', }, choices: [ { name: 'GitHub Actions', value: 'github' }, { name: 'Jenkins pipeline', value: 'jenkins' }, { name: 'GitLab CI', value: 'gitlab' }, { name: 'Azure Pipelines', value: 'azure' }, { name: 'Travis CI', value: 'travis' }, { name: 'CircleCI', value: 'circle' }, ], scope: 'generator', }, ciCdIntegrations: { prompt: { type: 'checkbox', message: 'What tasks/integrations do you want to include ?', }, choices: [ { name: `Deploy your application to an ${chalk.yellow('*Artifactory*')}`, value: 'deploy' }, { name: `Analyze your code with ${chalk.yellow('*Sonar*')}`, value: 'sonar' }, { name: `Build and publish a ${chalk.yellow('*Docker*')} image`, value: 'publishDocker' }, { name: `${chalk.yellow('*Snyk*')}: dependency scanning for security vulnerabilities (requires SNYK_TOKEN)`, value: 'snyk', }, { name: `Deploy to ${chalk.yellow('*Heroku*')} (requires HEROKU_API_KEY set on CI service)`, value: 'heroku', }, { name: `Would you like to enable the ${chalk.yellow('*Cypress Dashboard*')} (requires both CYPRESS_PROJECT_ID and CYPRESS_RECORD_KEY set on CI service)`, value: 'cypressDashboard', }, ], scope: 'generator', }, insideDocker: { prompt: { when: includesValue('ciCd', ['jenkins', 'gitlab']), type: 'confirm', message: 'Would you like to perform the build in a Docker container ?', default: false, }, scope: 'generator', }, sendBuildToGitlab: { prompt: { when: includesValue('ciCd', ['jenkins']), type: 'confirm', message: 'Would you like to send build status to GitLab ?', default: false, }, scope: 'generator', }, artifactorySnapshotsId: { prompt: { when: includesValue('ciCdIntegrations', ['deploy']), type: 'input', message: `${chalk.yellow('*Artifactory*')}: what is the ID of distributionManagement for snapshots ?`, }, default: 'snapshots', scope: 'generator', }, artifactorySnapshotsUrl: { prompt: { when: includesValue('ciCdIntegrations', ['deploy']), type: 'input', message: `${chalk.yellow('*Artifactory*')}: what is the URL of distributionManagement for snapshots ?`, }, default: 'http://artifactory:8081/artifactory/libs-snapshot', scope: 'generator', }, artifactoryReleasesId: { prompt: { when: includesValue('ciCdIntegrations', ['deploy']), type: 'input', message: `${chalk.yellow('*Artifactory*')}: what is the ID of distributionManagement for releases ?`, }, default: 'releases', scope: 'generator', }, artifactoryReleasesUrl: { prompt: { when: includesValue('ciCdIntegrations', ['deploy']), type: 'input', message: `${chalk.yellow('*Artifactory*')}: what is the URL of distributionManagement for releases ?`, }, default: 'http://artifactory:8081/artifactory/libs-release', scope: 'generator', }, sonarName: { prompt: { when: answers => includesValue('ciCd', ['jenkins'])(answers) && includesValue('ciCdIntegrations', ['sonar'])(answers), type: 'input', message: `${chalk.yellow('*Sonar*')}: what is the name of the Sonar server ?`, }, default: 'sonar', scope: 'generator', }, sonarUrl: { prompt: { when: answers => includesValue('ciCd', ['jenkins', 'github', 'gitlab', 'travis'])(answers) && includesValue('ciCdIntegrations', ['sonar'])(answers), type: 'input', message: `${chalk.yellow('*Sonar*')}: what is the URL of the Sonar server ?`, }, default: 'https://sonarcloud.io', scope: 'generator', }, sonarOrga: { prompt: { when: answers => includesValue('ciCd', ['jenkins', 'github', 'gitlab', 'travis'])(answers) && includesValue('ciCdIntegrations', ['sonar'])(answers), type: 'input', message: `${chalk.yellow('*Sonar*')}: what is the Organization of the Sonar server ?`, }, scope: 'generator', }, dockerImage: { prompt: ({ jhipsterConfigWithDefaults: config }) => ({ when: answers => includesValue('ciCd', ['github'])(answers) && includesValue('ciCdIntegrations', ['publishDocker'])(answers), type: 'input', message: `${chalk.yellow('*Docker*')}: what is the name of the image ?`, default: () => `jhipster/${config.dasherizedBaseName}`, }), scope: 'generator', }, herokuAppName: { prompt: { when: includesValue('ciCdIntegrations', ['heroku']), type: 'input', message: `${chalk.yellow('*Heroku*')}: name of your Heroku Application ?`, }, scope: 'generator', default: config => kebabCase(config.jhipsterConfigWithDefaults.baseName), }, }, }; export default command;