diff --git a/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap b/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap new file mode 100644 index 000000000000..f9b601084b32 --- /dev/null +++ b/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap @@ -0,0 +1,894 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`generator - github-build-matrix with angular should match matrix value 1`] = ` +"{ + "include": [ + { + "job-name": "ng-default (n[0]/j[3])", + "sample": "ng-default", + "os": "ubuntu-latest", + "node-version": "[0]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "ng-default", + "app-sample": "ng-default", + "entity": "sqlfull", + "sonar-analyse": "true", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-default-additional (n[0]/j[0])", + "sample": "ng-default-additional", + "os": "ubuntu-latest", + "node-version": "[0]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "ng-default-additional", + "entity": "none", + "app-sample": "ng-default", + "jdl-entity": "*", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-mysql-es-noi18n-mapsid (n[2]/j[0])", + "sample": "ng-mysql-es-noi18n-mapsid", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "ng-mysql-es-noi18n-mapsid", + "app-sample": "ng-mysql-es-noi18n-mapsid", + "entity": "sql", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-mongodb-kafka-cucumber (n[2]/j[2])", + "sample": "ng-mongodb-kafka-cucumber", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "ng-mongodb-kafka-cucumber", + "app-sample": "ng-mongodb-kafka-cucumber", + "entity": "mongodb", + "generatorOptions": { + "defaultEnvironment": "dev" + }, + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-h2mem-ws-nol2 (n[0]/j[2])", + "sample": "ng-h2mem-ws-nol2", + "os": "ubuntu-latest", + "node-version": "[0]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "ng-h2mem-ws-nol2", + "app-sample": "ng-h2mem-ws-nol2", + "entity": "sql", + "generatorOptions": { + "defaultEnvironment": "dev" + }, + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-gradle-fr (n[2]/j[3])", + "sample": "ng-gradle-fr", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "ng-gradle-fr", + "app-sample": "ng-gradle-fr", + "entity": "sql", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-gradle-mariadb-oauth2-infinispan (n[2]/j[3])", + "sample": "ng-gradle-mariadb-oauth2-infinispan", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "ng-gradle-mariadb-oauth2-infinispan", + "app-sample": "ng-gradle-mariadb-oauth2-infinispan", + "entity": "sql", + "generatorOptions": { + "defaultEnvironment": "dev" + }, + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-gradle-h2disk-ws-nocache (n[2]/j[3])", + "sample": "ng-gradle-h2disk-ws-nocache", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "ng-gradle-h2disk-ws-nocache", + "app-sample": "ng-gradle-h2disk-ws-nocache", + "entity": "sql", + "generatorOptions": { + "defaultEnvironment": "dev", + "defaultPackaging": "war" + }, + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-webflux-mongodb (n[2]/j[2])", + "sample": "ng-webflux-mongodb", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "ng-webflux-mongodb", + "app-sample": "webflux-mongodb", + "entity": "mongodb", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-webflux-gradle-mongodb-oauth2 (n[2]/j[2])", + "sample": "ng-webflux-gradle-mongodb-oauth2", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "ng-webflux-gradle-mongodb-oauth2", + "app-sample": "webflux-mongodb-oauth2", + "entity": "mongodb", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-webflux-psql-default (n[2]/j[3])", + "sample": "ng-webflux-psql-default", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "ng-webflux-psql-default", + "app-sample": "webflux-psql", + "entity": "sql", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-webflux-psql-additional (n[2]/j[3])", + "sample": "ng-webflux-psql-additional", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "ng-webflux-psql-additional", + "jdl-samples": "webflux-psql,custom-domain", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ng-webflux-gradle-session-h2mem-es (n[1]/j[1])", + "sample": "ng-webflux-gradle-session-h2mem-es", + "os": "ubuntu-latest", + "node-version": "[1]", + "java-version": "[1]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "ng-webflux-gradle-session-h2mem-es", + "app-sample": "webflux-gradle-session-h2mem-es", + "generatorOptions": { + "defaultEnvironment": "dev" + }, + "entity": "sqllight", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ms-ng-oauth2-mongodb-caffeine (n[1]/j[1])", + "sample": "ms-ng-oauth2-mongodb-caffeine", + "os": "ubuntu-latest", + "node-version": "[1]", + "java-version": "[1]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "ms-ng-oauth2-mongodb-caffeine", + "jdl-samples": "ms-ng-oauth2-mongodb-caffeine", + "generatorOptions": { + "workspaces": true, + "experimental": true, + "monorepository": true + }, + "workspaces": "true", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "mf-ng-eureka-jwt-psql-ehcache (n[0]/j[0])", + "sample": "mf-ng-eureka-jwt-psql-ehcache", + "os": "ubuntu-latest", + "node-version": "[0]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "mf-ng-eureka-jwt-psql-ehcache", + "jdl-samples": "mf-ng-eureka-jwt-psql-ehcache", + "generatorOptions": { + "workspaces": true, + "monorepository": true + }, + "workspaces": "true", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ms-mf-ng-consul-oauth2-neo4j (n[0]/j[0])", + "sample": "ms-mf-ng-consul-oauth2-neo4j", + "os": "ubuntu-latest", + "node-version": "[0]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "ms-mf-ng-consul-oauth2-neo4j", + "jdl-samples": "ms-mf-ng-consul-oauth2-neo4j", + "generatorOptions": { + "workspaces": true, + "monorepository": true + }, + "workspaces": "true", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + } + ] +}" +`; + +exports[`generator - github-build-matrix with devserver should match matrix value 1`] = ` +"{ + "include": [ + { + "job-name": "ng-default", + "sample": "samples/ng-default", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "args": "--sample-yorc-folder --entities-sample sqllight" + }, + { + "job-name": "react-default", + "sample": "samples/react-default", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "args": "--sample-yorc-folder --entities-sample sqllight" + }, + { + "job-name": "vue-default", + "sample": "samples/vue-default", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "args": "--sample-yorc-folder --entities-sample sqllight" + } + ] +}" +`; + +exports[`generator - github-build-matrix with docker-compose-integration should match matrix value 1`] = ` +"{ + "include": [ + { + "job-name": "cassandra-maven-jwt", + "sample": "cassandra-maven-jwt", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n databaseType cassandra\\n buildTool maven\\n authenticationType jwt\\n }\\n}" + }, + { + "job-name": "cassandra-reactive(true)-gradle-elasticsearch-oauth2-consul-kafka", + "sample": "cassandra-reactive(true)-gradle-elasticsearch-oauth2-consul-kafka", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n databaseType cassandra\\n reactive true\\n buildTool gradle\\n searchEngine elasticsearch\\n authenticationType oauth2\\n serviceDiscoveryType consul\\n messageBroker kafka\\n }\\n}" + }, + { + "job-name": "mongodb-maven-jwt-kafka", + "sample": "mongodb-maven-jwt-kafka", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n databaseType mongodb\\n buildTool maven\\n authenticationType jwt\\n messageBroker kafka\\n }\\n}" + }, + { + "job-name": "mongodb-reactive(true)-gradle-elasticsearch-oauth2-consul", + "sample": "mongodb-reactive(true)-gradle-elasticsearch-oauth2-consul", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n databaseType mongodb\\n reactive true\\n buildTool gradle\\n searchEngine elasticsearch\\n authenticationType oauth2\\n serviceDiscoveryType consul\\n }\\n}" + }, + { + "job-name": "neo4j-maven-jwt-eureka", + "sample": "neo4j-maven-jwt-eureka", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n databaseType neo4j\\n buildTool maven\\n authenticationType jwt\\n serviceDiscoveryType eureka\\n }\\n}" + }, + { + "job-name": "neo4j-reactive(true)-gradle-elasticsearch-oauth2-eureka-kafka", + "sample": "neo4j-reactive(true)-gradle-elasticsearch-oauth2-eureka-kafka", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n databaseType neo4j\\n reactive true\\n buildTool gradle\\n searchEngine elasticsearch\\n authenticationType oauth2\\n serviceDiscoveryType eureka\\n messageBroker kafka\\n }\\n}" + }, + { + "job-name": "postgresql-cacheProvider(no)-maven-jwt-eureka-kafka", + "sample": "postgresql-cacheProvider(no)-maven-jwt-eureka-kafka", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n prodDatabaseType postgresql\\n cacheProvider no\\n buildTool maven\\n authenticationType jwt\\n serviceDiscoveryType eureka\\n messageBroker kafka\\n }\\n}" + }, + { + "job-name": "mysql-memcached-gradle-elasticsearch-oauth2-eureka", + "sample": "mysql-memcached-gradle-elasticsearch-oauth2-eureka", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n prodDatabaseType mysql\\n cacheProvider memcached\\n buildTool gradle\\n searchEngine elasticsearch\\n authenticationType oauth2\\n serviceDiscoveryType eureka\\n }\\n}" + }, + { + "job-name": "mariadb-redis-maven-jwt-consul", + "sample": "mariadb-redis-maven-jwt-consul", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n prodDatabaseType mariadb\\n cacheProvider redis\\n buildTool maven\\n authenticationType jwt\\n serviceDiscoveryType consul\\n }\\n}" + }, + { + "job-name": "postgresql-reactive(true)-gradle-elasticsearch-oauth2-kafka", + "sample": "postgresql-reactive(true)-gradle-elasticsearch-oauth2-kafka", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n prodDatabaseType postgresql\\n reactive true\\n buildTool gradle\\n searchEngine elasticsearch\\n authenticationType oauth2\\n messageBroker kafka\\n }\\n}" + }, + { + "job-name": "mysql-reactive(true)-maven-jwt-consul-kafka", + "sample": "mysql-reactive(true)-maven-jwt-consul-kafka", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n prodDatabaseType mysql\\n reactive true\\n buildTool maven\\n authenticationType jwt\\n serviceDiscoveryType consul\\n messageBroker kafka\\n }\\n}" + }, + { + "job-name": "mariadb-reactive(true)-gradle-elasticsearch-oauth2", + "sample": "mariadb-reactive(true)-gradle-elasticsearch-oauth2", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n prodDatabaseType mariadb\\n reactive true\\n buildTool gradle\\n searchEngine elasticsearch\\n authenticationType oauth2\\n }\\n}" + }, + { + "job-name": "h2", + "sample": "h2", + "os": "ubuntu-latest", + "node-version": "NODE-VERSION", + "java-version": "JAVA-VERSION", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "cmd-e2e": "npm run ci:e2e:dev", + "args": "jdl", + "jdl": "application {\\n config {\\n testFrameworks [cypress]\\n devDatabaseType h2Disk\\n }\\n}" + } + ] +}" +`; + +exports[`generator - github-build-matrix with react should match matrix value 1`] = ` +"{ + "include": [ + { + "job-name": "react-default (n[2]/j[2])", + "sample": "react-default", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "react-default", + "app-sample": "react-default", + "entity": "sqlfull", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "react-maven-h2mem-memcached (n[2]/j[0])", + "sample": "react-maven-h2mem-memcached", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "react-maven-h2mem-memcached", + "app-sample": "react-maven-h2mem-memcached", + "entity": "sql", + "generatorOptions": { + "defaultEnvironment": "dev" + }, + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "react-gradle-mysql-es-noi18n-mapsid (n[0]/j[3])", + "sample": "react-gradle-mysql-es-noi18n-mapsid", + "os": "ubuntu-latest", + "node-version": "[0]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "react-gradle-mysql-es-noi18n-mapsid", + "app-sample": "react-gradle-mysql-es-noi18n-mapsid", + "entity": "sql", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "react-gradle-cassandra-session-redis (n[2]/j[0])", + "sample": "react-gradle-cassandra-session-redis", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "react-gradle-cassandra-session-redis", + "app-sample": "react-gradle-cassandra-session-redis", + "entity": "cassandra", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ms-react-consul-jwt-cassandra-redis (n[2]/j[1])", + "sample": "ms-react-consul-jwt-cassandra-redis", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[1]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "ms-react-consul-jwt-cassandra-redis", + "jdl-samples": "ms-react-consul-jwt-cassandra-redis", + "generatorOptions": { + "workspaces": true, + "monorepository": true + }, + "workspaces": "true", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ms-mf-react-eureka-oauth2-mariadb-infinispan (n[1]/j[0])", + "sample": "ms-mf-react-eureka-oauth2-mariadb-infinispan", + "os": "ubuntu-latest", + "node-version": "[1]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "ms-mf-react-eureka-oauth2-mariadb-infinispan", + "jdl-samples": "ms-mf-react-eureka-oauth2-mariadb-infinispan", + "generatorOptions": { + "workspaces": true, + "monorepository": true + }, + "workspaces": "true", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + } + ] +}" +`; + +exports[`generator - github-build-matrix with vue should match matrix value 1`] = ` +"{ + "include": [ + { + "job-name": "vue-default (n[0]/j[2])", + "sample": "vue-default", + "os": "ubuntu-latest", + "node-version": "[0]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "vue-default", + "app-sample": "vue-default", + "entity": "sqlfull", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "vue-default-additional (n[2]/j[2])", + "sample": "vue-default-additional", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "vue-default-additional", + "app-sample": "vue-default", + "entity": "none", + "jdl-entity": "custom-id", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "vue-noi18n-mysql-ws-oauth2 (n[2]/j[2])", + "sample": "vue-noi18n-mysql-ws-oauth2", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "vue-noi18n-mysql-ws-oauth2", + "app-sample": "vue-noi18n-ws-oauth2", + "entity": "sqlfull", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "vue-fulli18n-mysql-es (n[2]/j[3])", + "sample": "vue-fulli18n-mysql-es", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "vue-fulli18n-mysql-es", + "app-sample": "vue-fulli18n-es", + "entity": "sql", + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "vue-gradle-h2mem-ws-session (n[0]/j[0])", + "sample": "vue-gradle-h2mem-ws-session", + "os": "ubuntu-latest", + "node-version": "[0]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "vue-gradle-h2mem-ws-session", + "app-sample": "vue-gradle-ws-session", + "entity": "sql", + "generatorOptions": { + "defaultEnvironment": "dev" + }, + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "vue-h2disk-ws-theme (n[2]/j[1])", + "sample": "vue-h2disk-ws-theme", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[1]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "vue-h2disk-ws-theme", + "app-sample": "vue-ws-theme", + "entity": "sql", + "generatorOptions": { + "defaultEnvironment": "dev" + }, + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "vue-session-cassandra-fr (n[0]/j[1])", + "sample": "vue-session-cassandra-fr", + "os": "ubuntu-latest", + "node-version": "[0]", + "java-version": "[1]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "name": "vue-session-cassandra-fr", + "app-sample": "vue-session-cassandra-fr", + "entity": "cassandra", + "generatorOptions": { + "defaultEnvironment": "dev" + }, + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "ms-mf-vue-consul-oauth2-mysql-memcached (n[2]/j[2])", + "sample": "ms-mf-vue-consul-oauth2-mysql-memcached", + "os": "ubuntu-latest", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "false", + "gradle-cache": true, + "name": "ms-mf-vue-consul-oauth2-mysql-memcached", + "jdl-samples": "ms-mf-vue-consul-oauth2-mysql-memcached", + "generatorOptions": { + "workspaces": true, + "monorepository": true + }, + "workspaces": "true", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + }, + { + "job-name": "stack-vue-no-db (n[1]/j[3])", + "sample": "stack-vue-no-db", + "os": "ubuntu-latest", + "node-version": "[1]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", + "default-environment": "prod", + "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", + "skip-backend-tests": "false", + "skip-frontend-tests": "backend tests only", + "gradle-cache": true, + "name": "stack-vue-no-db", + "jdl-samples": "stack-vue-no-db", + "generatorOptions": { + "workspaces": true, + "monorepository": true + }, + "workspaces": "true", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" + } + ] +}" +`; diff --git a/.blueprint/github-build-matrix/command.ts b/.blueprint/github-build-matrix/command.ts index bac3888949d8..efdd9ae20330 100644 --- a/.blueprint/github-build-matrix/command.ts +++ b/.blueprint/github-build-matrix/command.ts @@ -1,5 +1,8 @@ import type { JHipsterCommandDefinition } from '../../generators/index.js'; +export const workflowChoices = ['angular', 'devserver', 'react', 'docker-compose-integration', 'vue'] as const; +export const eventNameChoices = ['push', 'pull_request', 'daily'] as const; + export default { configs: { workflow: { @@ -8,7 +11,14 @@ export default { type: String, }, scope: 'generator', - choices: ['testcontainers', 'dev-server'], + choices: workflowChoices, + }, + eventName: { + cli: { + type: String, + }, + scope: 'generator', + choices: eventNameChoices, }, }, } as const satisfies JHipsterCommandDefinition; diff --git a/.blueprint/github-build-matrix/generator.spec.ts b/.blueprint/github-build-matrix/generator.spec.ts new file mode 100644 index 000000000000..afcc62a4896c --- /dev/null +++ b/.blueprint/github-build-matrix/generator.spec.ts @@ -0,0 +1,30 @@ +import { basename, dirname, join } from 'path'; +import { fileURLToPath } from 'url'; +import { before, describe, expect, it } from 'esmocha'; +import { defaultHelpers as helpers, runResult } from '../../lib/testing/index.js'; +import { shouldSupportFeatures } from '../../test/support/index.js'; +import Generator from './generator.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const generator = basename(__dirname); + +describe(`generator - ${generator}`, () => { + shouldSupportFeatures(Generator); + + for (const workflow of ['angular', 'devserver', 'react', 'docker-compose-integration', 'vue']) { + describe(`with ${workflow}`, () => { + before(async () => { + await helpers.runJHipster(join(__dirname, 'index.ts'), { useEnvironmentBuilder: true }).withArguments(workflow); + }); + + it('should set workflow value', () => { + expect((runResult.generator as any).workflow).toBe(workflow); + }); + it('should match matrix value', () => { + expect((runResult.generator as any).matrix).toMatchSnapshot(); + }); + }); + } +}); diff --git a/.blueprint/github-build-matrix/generator.ts b/.blueprint/github-build-matrix/generator.ts index 133f132dd80f..b93f3d7e4876 100644 --- a/.blueprint/github-build-matrix/generator.ts +++ b/.blueprint/github-build-matrix/generator.ts @@ -1,12 +1,37 @@ +import { readFile } from 'node:fs/promises'; +import { join } from 'node:path'; import BaseGenerator from '../../generators/base/index.js'; -import { setGithubTaskOutput } from '../../lib/testing/index.js'; +import { getGithubOutputFile, setGithubTaskOutput } from '../../lib/testing/index.js'; +import { getPackageRoot } from '../../lib/index.js'; +import { BUILD_JHIPSTER_BOM, JHIPSTER_BOM_BRANCH, JHIPSTER_BOM_CICD_VERSION } from '../../test-integration/integration-test-constants.js'; +import type { GitHubMatrix, GitHubMatrixRecord } from './support/github-ci-matrix.js'; import { convertToGitHubMatrix } from './support/github-ci-matrix.js'; import { dockerComposeMatrix } from './samples/docker-compose-integration.js'; import { getGitChanges } from './support/git-changes.js'; import { devServerMatrix } from './samples/dev-server.js'; +import type { eventNameChoices, workflowChoices } from './command.js'; + +type JHipsterGitHubMatrix = GitHubMatrix & { + name: string; + 'app-sample'?: string; + 'build-jhipster-bom'?: boolean; + 'gradle-cache'?: boolean; + 'jhipster-bom-cicd-version'?: string; + 'jhipster-bom-branch'?: string; + 'sonar-analyse'?: 'true' | 'false'; + workspaces?: 'true' | 'false'; + 'skip-frontend-tests'?: 'true' | 'false'; + 'skip-backend-tests'?: 'true' | 'false'; +}; + +type JHipsterGitHubInputMatrix = JHipsterGitHubMatrix & { + generatorOptions: Record; +}; export default class extends BaseGenerator { - workflow; + workflow!: (typeof workflowChoices)[number]; + eventName?: (typeof eventNameChoices)[number]; + matrix!: string; constructor(args, opts, features) { super(args, opts, { queueCommandTasks: true, ...features, jhipsterBootstrap: false }); @@ -15,23 +40,73 @@ export default class extends BaseGenerator { get [BaseGenerator.WRITING]() { return this.asWritingTaskGroup({ async buildMatrix() { + // Push events requires a base commit for diff. Diff cannot be checked by @~1 if PR was merged with a rebase. + const useChanges = this.eventName === 'pull_request'; + const changes = await getGitChanges({ allTrue: !useChanges }); + const { base, common, devBlueprint, client, e2e, java, workspaces } = changes; + const hasWorkflowChanges = changes[`${this.workflow}Workflow`]; + + let matrix: GitHubMatrixRecord = {}; + let randomEnvironment = false; if (this.workflow === 'docker-compose-integration') { - setGithubTaskOutput('matrix', JSON.stringify(convertToGitHubMatrix(dockerComposeMatrix), null, 2)); - } else if (this.workflow === 'dev-server') { - const { devBlueprint, devserverCi, client, angular, react, vue } = await getGitChanges(); - const matrix = {}; - if (devBlueprint || devserverCi || client || angular) { - Object.assign(matrix, devServerMatrix.angular); - } - if (devBlueprint || devserverCi || client || react) { - Object.assign(matrix, devServerMatrix.react); + matrix = dockerComposeMatrix; + } else if (this.workflow === 'devserver') { + if (devBlueprint || hasWorkflowChanges || client) { + matrix = { ...devServerMatrix.angular, ...devServerMatrix.react, ...devServerMatrix.vue }; + } else { + for (const client of ['angular', 'react', 'vue']) { + if (changes[client]) { + Object.assign(matrix, devServerMatrix[client]); + } + } } - if (devBlueprint || devserverCi || client || vue) { - Object.assign(matrix, devServerMatrix.vue); + } else if (['angular', 'react', 'vue'].includes(this.workflow)) { + const hasClientFrameworkChanges = changes[this.workflow]; + const enableAllTests = base || common || hasWorkflowChanges || devBlueprint; + const enableBackendTests = enableAllTests || java; + const enableFrontendTests = enableAllTests || client || hasClientFrameworkChanges; + const enableE2eTests = enableBackendTests || enableFrontendTests || e2e || workspaces; + const enableAnyTest = enableE2eTests; + + randomEnvironment = true; + if (enableAnyTest) { + const content = await readFile(join(getPackageRoot(), `test-integration/workflow-samples/${this.workflow}.json`)); + const parsed: { include: JHipsterGitHubInputMatrix[] } = JSON.parse(content.toString()); + matrix = Object.fromEntries( + parsed.include.map((sample): [string, JHipsterGitHubMatrix] => { + const { 'job-name': jobName = sample.name, 'sonar-analyse': sonarAnalyse, generatorOptions } = sample; + const enableSonar = sonarAnalyse === 'true'; + const workspaces = generatorOptions?.workspaces ? 'true' : 'false'; + if (enableSonar && workspaces === 'true') { + throw new Error('Sonar is not supported with workspaces'); + } + return [ + jobName, + { + // Force tests if sonar is enabled + 'skip-backend-tests': `${!(enableBackendTests || enableSonar)}`, + // Force tests if sonar is enabled + 'skip-frontend-tests': `${!(enableFrontendTests || enableSonar)}`, + 'gradle-cache': generatorOptions?.workspaces || jobName.includes('gradle') ? true : undefined, + ...sample, + sample: jobName, + workspaces, + 'build-jhipster-bom': BUILD_JHIPSTER_BOM, + 'jhipster-bom-branch': BUILD_JHIPSTER_BOM ? JHIPSTER_BOM_BRANCH : undefined, + 'jhipster-bom-cicd-version': BUILD_JHIPSTER_BOM ? JHIPSTER_BOM_CICD_VERSION : undefined, + }, + ]; + }), + ); } - const githubMatrix = convertToGitHubMatrix(matrix); - setGithubTaskOutput('matrix', JSON.stringify(githubMatrix, null, 2)); - setGithubTaskOutput('empty-matrix', githubMatrix.include.length === 0); + } + + const { useVersionPlaceholders } = this; + this.matrix = JSON.stringify(convertToGitHubMatrix(matrix, { randomEnvironment, useVersionPlaceholders }), null, 2); + const githubOutputFile = getGithubOutputFile(); + this.log.info('matrix', this.matrix); + if (githubOutputFile) { + setGithubTaskOutput('matrix', this.matrix); } }, }); diff --git a/.blueprint/github-build-matrix/support/git-changes.ts b/.blueprint/github-build-matrix/support/git-changes.ts index f3e3fea6809d..e121b29d844d 100644 --- a/.blueprint/github-build-matrix/support/git-changes.ts +++ b/.blueprint/github-build-matrix/support/git-changes.ts @@ -2,25 +2,38 @@ import { fileURLToPath } from 'url'; import { minimatch } from 'minimatch'; import { simpleGit } from 'simple-git'; -export const getGitChanges = async () => { - const git = simpleGit({ baseDir: fileURLToPath(new URL('../../', import.meta.url).href) }); - const summary = await git.diffSummary({ '@~1': null }); - const files = summary.files.map(({ file }) => file); - const hasPatternChanges = (pattern: string) => files.some(file => minimatch(file, pattern, { dot: true })); +export const getGitChanges = async (options: { allTrue?: boolean } = {}) => { + let hasPatternChanges; + if (options.allTrue) { + hasPatternChanges = () => true; + } else { + const git = simpleGit({ baseDir: fileURLToPath(new URL('../../', import.meta.url).href) }); + const summary = await git.diffSummary({ '@~1': null }); + const files = summary.files.map(({ file }) => file); + hasPatternChanges = (pattern: string) => files.some(file => minimatch(file, pattern, { dot: true })); + } + + const hasClientWorkflowChanges = (client: 'angular' | 'react' | 'vue') => + hasPatternChanges(`.github/workflows/${client}.yml`) || hasPatternChanges(`test-integration/workflow-samples/${client}.json`); return { - files, + hasPatternChanges, + angular: hasPatternChanges('generators/angular/**'), + angularWorkflow: hasClientWorkflowChanges('angular'), base: hasPatternChanges('lib/**') || hasPatternChanges('generators/*') || hasPatternChanges('generators/{base*,bootstrap*,git,jdl,project-name}/**'), + ci: hasPatternChanges('.github/{actions,workflows}/**'), devBlueprint: hasPatternChanges('.blueprint/**'), - ci: hasPatternChanges('.github/{actions,workflows}/**') || hasPatternChanges('generators/{docker-compose,kubernetes*,workspaces}/**'), - devserverCi: hasPatternChanges('.github/workflows/devserver.yml'), - common: hasPatternChanges('generators/{app,common,cypress,docker,languages}/**'), + devserverWorkflow: hasPatternChanges('.github/workflows/devserver.yml'), + common: hasPatternChanges('generators/{app,common,docker,languages}/**'), client: hasPatternChanges('generators/{client,init,javascript}/**'), - angular: hasPatternChanges('generators/angular/**'), + e2e: hasPatternChanges('generators/cypress/**'), + java: hasPatternChanges('generators/{cucumber,feign-client,gatling,gradle,java,liquibase,maven,server,spring*}/**'), react: hasPatternChanges('generators/react/**'), + reactWorkflow: hasClientWorkflowChanges('react'), + workspaces: hasPatternChanges('generators/{docker-compose,kubernetes*,workspaces}/**'), vue: hasPatternChanges('generators/vue/**'), - java: hasPatternChanges('generators/{cucumber,feign-client,gatling,gradle,java,liquibase,maven,server,spring*}/**'), + vueWorkflow: hasClientWorkflowChanges('vue'), }; }; diff --git a/.blueprint/github-build-matrix/support/github-ci-matrix.ts b/.blueprint/github-build-matrix/support/github-ci-matrix.ts index fed1eb16f19a..47dd81bad38c 100644 --- a/.blueprint/github-build-matrix/support/github-ci-matrix.ts +++ b/.blueprint/github-build-matrix/support/github-ci-matrix.ts @@ -1,40 +1,83 @@ +import { createHash } from 'node:crypto'; +import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; import { RECOMMENDED_JAVA_VERSION, RECOMMENDED_NODE_VERSION } from '../../../generators/index.js'; +import { getPackageRoot } from '../../../lib/index.js'; +import { JAVA_COMPATIBLE_VERSIONS, JAVA_VERSION, NODE_VERSION } from '../../../generators/generator-constants.js'; -type GitHubMatrix = { +export type GitHubMatrix = { os: string; 'node-version': string; 'java-version': string; 'default-environment': string; 'job-name': string; sample: string; - args: string; + args?: string; + 'jwt-secret-key'?: string; }; -type GitHubMatrixOutput = { +export type GitHubMatrixRecord = Record> & { disabled?: boolean }>; + +export type GitHubMatrixOutput = { include: GitHubMatrix[]; }; +const NPM_VERSION = JSON.parse(readFileSync(join(getPackageRoot(), 'generators/common/resources/package.json'), 'utf-8')).devDependencies + .npm; + export const defaultEnvironment = { os: 'ubuntu-latest', 'node-version': RECOMMENDED_NODE_VERSION, 'java-version': RECOMMENDED_JAVA_VERSION, + 'npm-version': NPM_VERSION, 'default-environment': 'prod', + 'jwt-secret-key': + 'ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=', }; export const defaultEnvironmentMatrix = { os: ['ubuntu-latest'], 'node-version': [RECOMMENDED_NODE_VERSION], 'java-version': [RECOMMENDED_JAVA_VERSION], + 'npm-version': [NPM_VERSION], 'default-environment': ['prod'], }; -export const convertToGitHubMatrix = (matrix: Record): GitHubMatrixOutput => { +const randomReproducibleValue = (seed: string, choices: Choice[], options?: { useVersionPlaceholders?: boolean }): Choice => { + const { useVersionPlaceholders } = options ?? {}; + const index = createHash('shake256', { outputLength: 1 }).update(seed, 'utf8').digest('binary').charCodeAt(0) % choices.length; + if (useVersionPlaceholders) { + return `[${index}]` as any; + } + return choices[index]; +}; + +const randomEnvironmentMatrix = (key: string, options: { useVersionPlaceholders?: boolean }) => { + const { useVersionPlaceholders } = options; + const javaVersion = randomReproducibleValue(`java-${key}`, [JAVA_VERSION, ...JAVA_COMPATIBLE_VERSIONS], { useVersionPlaceholders }); + const nodeVersion = randomReproducibleValue(`node-${key}`, [NODE_VERSION, '18', '20'], { useVersionPlaceholders }); + return { + 'job-name': `${key} (n${nodeVersion}/j${javaVersion})`, + 'java-version': javaVersion, + 'node-version': nodeVersion, + }; +}; + +export const convertToGitHubMatrix = ( + matrix: GitHubMatrixRecord, + options?: { randomEnvironment?: boolean; useVersionPlaceholders?: boolean }, +): GitHubMatrixOutput => { + const { randomEnvironment, useVersionPlaceholders } = options ?? {}; return { - include: Object.entries(matrix).map(([key, value]) => ({ - 'job-name': key, - sample: key, - ...defaultEnvironment, - ...value, - })), + include: Object.entries(matrix) + .filter(([_key, value]) => !value.disabled) + .map(([key, value]) => ({ + 'job-name': key, + sample: key, + ...defaultEnvironment, + ...(useVersionPlaceholders ? { 'java-version': 'JAVA-VERSION', 'node-version': 'NODE-VERSION', 'npm-version': 'NPM-VERSION' } : {}), + ...value, + ...(randomEnvironment ? randomEnvironmentMatrix(key, { useVersionPlaceholders }) : {}), + })), }; }; diff --git a/.github/workflows/angular.yml b/.github/workflows/angular.yml index 3ec6c5c3d0fd..f48bd19ac855 100644 --- a/.github/workflows/angular.yml +++ b/.github/workflows/angular.yml @@ -51,13 +51,11 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 2 - - name: 'Build matrix' - id: build - uses: ./.github/actions/build-matrix - with: - workflow-samples-file: angular + - run: npm ci --ignore-scripts + - id: build + run: bin/jhipster.cjs github-build-matrix angular --event-name ${{ github.event_name }} applications: - name: ${{ matrix.name }} (n${{ matrix.node }}/j${{ matrix.java }}) + name: ${{ matrix.job-name }} runs-on: ${{ matrix.os || 'ubuntu-20.04' }} needs: build-matrix defaults: @@ -74,12 +72,12 @@ jobs: !contains(github.event.pull_request.title, '[ci skip]') && github.event.action != 'closed' && !contains(github.event.pull_request.labels.*.name, 'pr: skip-ci') && - needs.build-matrix.outputs.workflow-angular == 'true' + fromJson(needs.build-matrix.outputs.matrix).include[0] != null timeout-minutes: 50 strategy: fail-fast: false # Matrix available at https://github.com/jhipster/generator-jhipster/tree/main/test-integration/workflow-samples/ - matrix: ${{fromJson(needs.build-matrix.outputs.matrix)}} + matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }} steps: #---------------------------------------------------------------------- # Install all tools and check configuration @@ -91,8 +89,8 @@ jobs: fetch-depth: 2 - uses: jhipster/actions/setup-runner@v0 with: - node-version: ${{ matrix.node }} - java-version: ${{ matrix.java }} + node-version: ${{ matrix.node-version }} + java-version: ${{ matrix.java-version }} npm-version: ${{ matrix.npm-version }} maven-cache: true gradle-cache: ${{ matrix.gradle-cache }} @@ -103,7 +101,7 @@ jobs: - run: npm ci --ignore-scripts working-directory: ${{ github.workspace }}/generator-jhipster - name: 'GENERATION: project' - run: jhipster.cjs generate-sample ${{ matrix.name }} --skip-jhipster-dependencies --skip-checks --skip-install --no-insight + run: jhipster.cjs generate-sample ${{ matrix.sample }} --skip-jhipster-dependencies --skip-checks --skip-install --no-insight env: JHI_FOLDER_APP: ${{ github.workspace }}/app JHIPSTER_DEPENDENCIES_VERSION: ${{ matrix.jhipster-bom-cicd-version }} @@ -119,7 +117,7 @@ jobs: !contains(github.event.pull_request.labels.*.name, 'pr: disable-compare') with: generator-path: generator-jhipster - cmd: jhipster.cjs generate-sample ${{ matrix.name }} --skip-jhipster-dependencies --skip-checks --skip-install --no-insight + cmd: jhipster.cjs generate-sample ${{ matrix.sample }} --skip-jhipster-dependencies --skip-checks --skip-install --no-insight env: # generate-sample uses JHI_FOLDER_APP to generate the application. JHI_FOLDER_APP: ${{ github.workspace }}/base/app @@ -134,13 +132,13 @@ jobs: jhipster-bom-ref: ${{ matrix.jhipster-bom-branch }} - name: 'TESTS: backend' id: backend - if: steps.compare.outputs.equals != 'true' && matrix.skip-backend-tests != 'true' && (matrix.sonar-analyse == 'true' || needs.build-matrix.outputs.server != 'false') + if: steps.compare.outputs.equals != 'true' && matrix.skip-backend-tests != 'true' run: npm run ci:backend:test continue-on-error: ${{matrix.continue-on-backend-tests-error || false}} timeout-minutes: 15 # Run npm install for workspaces only, as it is done in packaging for non-workspaces - name: 'PREPARE: npm install' - if: matrix.workspaces == 'true' && steps.compare.outputs.equals != 'true' + if: steps.compare.outputs.equals != 'true' && matrix.workspaces == 'true' run: npm install timeout-minutes: 7 - name: 'TESTS: packaging' @@ -150,7 +148,7 @@ jobs: timeout-minutes: 12 - name: 'TESTS: frontend' id: frontend - if: steps.compare.outputs.equals != 'true' && matrix.skip-frontend-tests != 'true' && (matrix.sonar-analyse == 'true' || needs.build-matrix.outputs.client != 'false') + if: steps.compare.outputs.equals != 'true' && matrix.skip-frontend-tests != 'true' run: npm run ci:frontend:test timeout-minutes: 15 - name: 'TESTS: Start docker compose containers for e2e tests' @@ -166,7 +164,7 @@ jobs: uses: actions/upload-artifact@v4 if: always() && (steps.backend.outcome == 'failure' || steps.e2e.outcome == 'failure' || steps.frontend.outcome == 'failure' || steps.packaging.outcome == 'failure') with: - name: app-${{ matrix.name }} + name: app-${{ matrix.sample }} include-hidden-files: true path: | ${{ github.workspace }}/app/**/* @@ -181,13 +179,13 @@ jobs: uses: actions/upload-artifact@v4 if: always() && steps.backend.outcome == 'failure' with: - name: log-${{ matrix.name }} + name: log-${{ matrix.sample }} path: ${{ github.workspace }}/app/**/test-results/**/*.xml - name: 'E2E: Store failure screenshots' uses: actions/upload-artifact@v4 if: always() && steps.e2e.outcome == 'failure' with: - name: screenshots-${{ matrix.name }} + name: screenshots-${{ matrix.sample }} path: ${{ github.workspace }}/app/**/cypress/screenshots - name: Dump docker logs if: always() @@ -196,13 +194,7 @@ jobs: if: >- github.event_name == 'push' && github.repository == 'jhipster/generator-jhipster' && - matrix.sonar-analyse == 'true' && - steps.compare.outputs.equals != 'true' && - matrix.workspaces != 'true' && - matrix.skip-frontend-tests != 'true' && - needs.build-matrix.outputs.client != 'false' && - matrix.skip-backend-tests != 'true' && - needs.build-matrix.outputs.server != 'false' + matrix.sonar-analyse == 'true' run: | ./mvnw -ntp --batch-mode initialize org.jacoco:jacoco-maven-plugin:prepare-agent sonar:sonar \ -Dsonar.host.url=https://sonarcloud.io \ @@ -218,7 +210,7 @@ jobs: steps.compare.outputs.equals != 'true' uses: ./generator-jhipster/.github/actions/sonar with: - sonar-project-key: ${{ matrix.name }} + sonar-project-key: ${{ matrix.sample }} application-dir: ${{ github.workspace }}/app docker-compose-file: ${{ github.workspace }}/generator-jhipster/test-integration/sonar-pr/docker-compose.yml comment-token: ${{ secrets.PAT_PR_ISSUES_TOKEN }} diff --git a/.github/workflows/devserver.yml b/.github/workflows/devserver.yml index 195100939663..62976ef7cba6 100644 --- a/.github/workflows/devserver.yml +++ b/.github/workflows/devserver.yml @@ -52,7 +52,7 @@ jobs: fetch-depth: 2 - run: npm ci --ignore-scripts - id: build - run: bin/jhipster.cjs github-build-matrix dev-server + run: bin/jhipster.cjs github-build-matrix devserver --event-name ${{ github.event_name }} applications: name: ${{ matrix.job-name }} needs: build-matrix @@ -63,8 +63,8 @@ jobs: timeout-minutes: 40 strategy: fail-fast: false - matrix: ${{fromJson(needs.build-matrix.outputs.matrix)}} - if: needs.build-matrix.outputs.empty-matrix != 'true' + matrix: ${{ fromJson(needs.build-matrix.outputs.matrix) }} + if: fromJson(needs.build-matrix.outputs.matrix).include[0] != null steps: #---------------------------------------------------------------------- # Install all tools and check configuration diff --git a/.github/workflows/docker-compose-integration.yml b/.github/workflows/docker-compose-integration.yml index ca1175f8ae40..f7898d5564d5 100644 --- a/.github/workflows/docker-compose-integration.yml +++ b/.github/workflows/docker-compose-integration.yml @@ -44,7 +44,7 @@ jobs: node-version: '20' - run: npm ci --ignore-scripts - id: build - run: bin/jhipster.cjs github-build-matrix docker-compose-integration + run: bin/jhipster.cjs github-build-matrix docker-compose-integration --event-name ${{ github.event_name }} applications: name: ${{ matrix.job-name }} needs: build-matrix diff --git a/lib/testing/github.ts b/lib/testing/github.ts index eea0e4b548f8..2dd19d1e7c05 100644 --- a/lib/testing/github.ts +++ b/lib/testing/github.ts @@ -12,11 +12,16 @@ export const parseIssue = (issue: string): undefined | { owner: string; reposito return undefined; }; +export const getGithubOutputFile = (): string | undefined => { + const filePath = process.env.GITHUB_OUTPUT; + return filePath && existsSync(filePath) ? filePath : undefined; +}; + export const setGithubTaskOutput = (name: string, value: string | boolean | number) => { const delimiter = `delimiter_${randomUUID()}`; const output = `${name}<<${delimiter}${EOL}${value}${EOL}${delimiter}${EOL}`; - const filePath = process.env.GITHUB_OUTPUT; - if (filePath && existsSync(filePath)) { + const filePath = getGithubOutputFile(); + if (filePath) { appendFileSync(filePath, output, { encoding: 'utf8' }); } else { // eslint-disable-next-line no-console diff --git a/lib/testing/helpers.ts b/lib/testing/helpers.ts index 3800ef52c204..8c6a00934427 100644 --- a/lib/testing/helpers.ts +++ b/lib/testing/helpers.ts @@ -459,7 +459,7 @@ class JHipsterTest extends YeomanTest { settings: RunContextSettings | RunJHipster | undefined, envOptions?: BaseEnvironmentOptions | undefined, ): JHipsterRunContext { - if (!isAbsolute(jhipsterGenerator)) { + if (!isAbsolute(jhipsterGenerator) && !jhipsterGenerator.startsWith('@')) { jhipsterGenerator = toJHipsterNamespace(jhipsterGenerator); } const isRunJHipster = (opt: any): opt is RunJHipster | undefined => @@ -467,7 +467,12 @@ class JHipsterTest extends YeomanTest { if (isRunJHipster(settings)) { const { useEnvironmentBuilder, ...otherOptions } = settings ?? {}; if (useEnvironmentBuilder) { - return this.run(jhipsterGenerator, undefined, { createEnv: createEnvBuilderEnvironment }); + return this.run(jhipsterGenerator, undefined, { + createEnv: async (...args) => { + const builder = await EnvironmentBuilder.create(...args).prepare(); + return builder.getEnvironment(); + }, + }); } // If not using EnvironmentBuilder, use the default JHipster generators lookup. return this.run(jhipsterGenerator).withJHipsterGenerators(otherOptions); diff --git a/package.json b/package.json index 1968e9bacd15..5dcc0a05a385 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "prettier:check": "prettier --check \"{,**/}*.{js,ts,cjs,mjs,cts,mts,json,md,yml,java}\"", "prettier:format": "prettier --write \"{,**/}*.{js,ts,cjs,mjs,cts,mts,json,md,yml,java}\"", "pretest": "npm run lint && npm run check-types", - "test": "npm run mocha-test test generators cli", + "test": "npm run mocha-test test generators cli .blueprint", "update-snapshot": "esmocha --no-insight --no-parallel --update-snapshot --", "update-snapshots": "esmocha lib/jdl generators cli --update-snapshot --no-insight --forbid-only" },