From 520e20664664a6b228e857412047093044e0413b Mon Sep 17 00:00:00 2001 From: Marcelo Shima Date: Fri, 18 Oct 2024 11:23:34 -0300 Subject: [PATCH 1/3] add workflows support to github-build-matrix --- .../__snapshots__/generator.spec.ts.snap | 801 ++++++++++++++++++ .blueprint/github-build-matrix/command.ts | 12 +- .../github-build-matrix/generator.spec.ts | 30 + .blueprint/github-build-matrix/generator.ts | 102 ++- .../support/git-changes.ts | 35 +- .../support/github-ci-matrix.ts | 53 +- .github/workflows/angular.yml | 44 +- .github/workflows/devserver.yml | 6 +- .../workflows/docker-compose-integration.yml | 2 +- lib/testing/github.ts | 9 +- lib/testing/helpers.ts | 9 +- package.json | 2 +- 12 files changed, 1032 insertions(+), 73 deletions(-) create mode 100644 .blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap create mode 100644 .blueprint/github-build-matrix/generator.spec.ts 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..1a6f95501438 --- /dev/null +++ b/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap @@ -0,0 +1,801 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`generator - github-build-matrix with angular should match matrix value 1`] = ` +"{ + "include": [ + { + "job-name": "ng-default (n20.18.0/j22)", + "sample": "ng-default", + "os": "ubuntu-latest", + "node-version": "20.18.0", + "java-version": "22", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-default-additional (n20.18.0/j17)", + "sample": "ng-default-additional", + "os": "ubuntu-latest", + "node-version": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-mysql-es-noi18n-mapsid (n20/j17)", + "sample": "ng-mysql-es-noi18n-mapsid", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-mongodb-kafka-cucumber (n20/j21)", + "sample": "ng-mongodb-kafka-cucumber", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "21", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-h2mem-ws-nol2 (n20.18.0/j21)", + "sample": "ng-h2mem-ws-nol2", + "os": "ubuntu-latest", + "node-version": "20.18.0", + "java-version": "21", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-gradle-fr (n20/j22)", + "sample": "ng-gradle-fr", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "22", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-gradle-mariadb-oauth2-infinispan (n20/j22)", + "sample": "ng-gradle-mariadb-oauth2-infinispan", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "22", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-gradle-h2disk-ws-nocache (n20/j22)", + "sample": "ng-gradle-h2disk-ws-nocache", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "22", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-webflux-mongodb (n20/j21)", + "sample": "ng-webflux-mongodb", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "21", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-webflux-gradle-mongodb-oauth2 (n20/j21)", + "sample": "ng-webflux-gradle-mongodb-oauth2", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "21", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-webflux-psql-default (n20/j22)", + "sample": "ng-webflux-psql-default", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "22", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-webflux-psql-additional (n20/j22)", + "sample": "ng-webflux-psql-additional", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "22", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ng-webflux-gradle-session-h2mem-es (n18/j17)", + "sample": "ng-webflux-gradle-session-h2mem-es", + "os": "ubuntu-latest", + "node-version": "18", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ms-ng-oauth2-mongodb-caffeine (n18/j17)", + "sample": "ms-ng-oauth2-mongodb-caffeine", + "os": "ubuntu-latest", + "node-version": "18", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "mf-ng-eureka-jwt-psql-ehcache (n20.18.0/j17)", + "sample": "mf-ng-eureka-jwt-psql-ehcache", + "os": "ubuntu-latest", + "node-version": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ms-mf-ng-consul-oauth2-neo4j (n20.18.0/j17)", + "sample": "ms-mf-ng-consul-oauth2-neo4j", + "os": "ubuntu-latest", + "node-version": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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" + } + ] +}" +`; + +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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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 (n20/j21)", + "sample": "react-default", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "21", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "react-maven-h2mem-memcached (n20/j17)", + "sample": "react-maven-h2mem-memcached", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "react-gradle-mysql-es-noi18n-mapsid (n20.18.0/j22)", + "sample": "react-gradle-mysql-es-noi18n-mapsid", + "os": "ubuntu-latest", + "node-version": "20.18.0", + "java-version": "22", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "react-gradle-cassandra-session-redis (n20/j17)", + "sample": "react-gradle-cassandra-session-redis", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ms-react-consul-jwt-cassandra-redis (n20/j17)", + "sample": "ms-react-consul-jwt-cassandra-redis", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ms-mf-react-eureka-oauth2-mariadb-infinispan (n18/j17)", + "sample": "ms-mf-react-eureka-oauth2-mariadb-infinispan", + "os": "ubuntu-latest", + "node-version": "18", + "java-version": "17", + "npm-version": "10.9.0", + "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" + } + ] +}" +`; + +exports[`generator - github-build-matrix with vue should match matrix value 1`] = ` +"{ + "include": [ + { + "job-name": "vue-default (n20.18.0/j21)", + "sample": "vue-default", + "os": "ubuntu-latest", + "node-version": "20.18.0", + "java-version": "21", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "vue-default-additional (n20/j21)", + "sample": "vue-default-additional", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "21", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "vue-noi18n-mysql-ws-oauth2 (n20/j21)", + "sample": "vue-noi18n-mysql-ws-oauth2", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "21", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "vue-fulli18n-mysql-es (n20/j22)", + "sample": "vue-fulli18n-mysql-es", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "22", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "vue-gradle-h2mem-ws-session (n20.18.0/j17)", + "sample": "vue-gradle-h2mem-ws-session", + "os": "ubuntu-latest", + "node-version": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "vue-h2disk-ws-theme (n20/j17)", + "sample": "vue-h2disk-ws-theme", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "vue-session-cassandra-fr (n20.18.0/j17)", + "sample": "vue-session-cassandra-fr", + "os": "ubuntu-latest", + "node-version": "20.18.0", + "java-version": "17", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "ms-mf-vue-consul-oauth2-mysql-memcached (n20/j21)", + "sample": "ms-mf-vue-consul-oauth2-mysql-memcached", + "os": "ubuntu-latest", + "node-version": "20", + "java-version": "21", + "npm-version": "10.9.0", + "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" + }, + { + "job-name": "stack-vue-no-db (n18/j22)", + "sample": "stack-vue-no-db", + "os": "ubuntu-latest", + "node-version": "18", + "java-version": "22", + "npm-version": "10.9.0", + "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" + } + ] +}" +`; 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..59c37ee65e87 100644 --- a/.blueprint/github-build-matrix/generator.ts +++ b/.blueprint/github-build-matrix/generator.ts @@ -1,12 +1,36 @@ +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 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 +39,69 @@ 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, + }, + ]; + }), + ); } - const githubMatrix = convertToGitHubMatrix(matrix); - setGithubTaskOutput('matrix', JSON.stringify(githubMatrix, null, 2)); - setGithubTaskOutput('empty-matrix', githubMatrix.include.length === 0); + } + + this.matrix = JSON.stringify(convertToGitHubMatrix(matrix, { randomEnvironment }), 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..f17d95087783 100644 --- a/.blueprint/github-build-matrix/support/github-ci-matrix.ts +++ b/.blueprint/github-build-matrix/support/github-ci-matrix.ts @@ -1,40 +1,73 @@ +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[]): Choice => { + return choices[createHash('shake256', { outputLength: 1 }).update(seed, 'utf8').digest('binary').charCodeAt(0) % choices.length]; +}; + +const randomEnvironmentMatrix = (key: string) => { + const javaVersion = randomReproducibleValue(`java-${key}`, [JAVA_VERSION, ...JAVA_COMPATIBLE_VERSIONS]); + const nodeVersion = randomReproducibleValue(`node-${key}`, [NODE_VERSION, '18', '20']); + return { + 'job-name': `${key} (n${nodeVersion}/j${javaVersion})`, + 'java-version': javaVersion, + 'node-version': nodeVersion, + }; +}; + +export const convertToGitHubMatrix = (matrix: GitHubMatrixRecord, options?: { randomEnvironment?: boolean }): GitHubMatrixOutput => { + const { randomEnvironment } = 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, + ...value, + ...(randomEnvironment ? randomEnvironmentMatrix(key) : {}), + })), }; }; 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 8d08701bdf9e..4b0aa0b67f2b 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" }, From 27b1b5af60b8dd2817d232aa7ef5b50ee0315bb8 Mon Sep 17 00:00:00 2001 From: Marcelo Shima Date: Fri, 18 Oct 2024 22:05:58 -0300 Subject: [PATCH 2/3] configure jhipster bom in github-build-matrix --- .../__snapshots__/generator.spec.ts.snap | 155 ++++++++++++++---- .blueprint/github-build-matrix/generator.ts | 4 + 2 files changed, 128 insertions(+), 31 deletions(-) diff --git a/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap b/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap index 1a6f95501438..47500645c047 100644 --- a/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap +++ b/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap @@ -18,7 +18,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "app-sample": "ng-default", "entity": "sqlfull", "sonar-analyse": "true", - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "ng-default-additional (n20.18.0/j17)", @@ -35,7 +38,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "entity": "none", "app-sample": "ng-default", "jdl-entity": "*", - "workspaces": "false" + "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 (n20/j17)", @@ -51,7 +57,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "name": "ng-mysql-es-noi18n-mapsid", "app-sample": "ng-mysql-es-noi18n-mapsid", "entity": "sql", - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "ng-mongodb-kafka-cucumber (n20/j21)", @@ -70,7 +79,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "generatorOptions": { "defaultEnvironment": "dev" }, - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "ng-h2mem-ws-nol2 (n20.18.0/j21)", @@ -89,7 +101,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "generatorOptions": { "defaultEnvironment": "dev" }, - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "ng-gradle-fr (n20/j22)", @@ -106,7 +121,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "name": "ng-gradle-fr", "app-sample": "ng-gradle-fr", "entity": "sql", - "workspaces": "false" + "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 (n20/j22)", @@ -126,7 +144,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "generatorOptions": { "defaultEnvironment": "dev" }, - "workspaces": "false" + "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 (n20/j22)", @@ -147,7 +168,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "defaultEnvironment": "dev", "defaultPackaging": "war" }, - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "ng-webflux-mongodb (n20/j21)", @@ -163,7 +187,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "name": "ng-webflux-mongodb", "app-sample": "webflux-mongodb", "entity": "mongodb", - "workspaces": "false" + "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 (n20/j21)", @@ -180,7 +207,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "name": "ng-webflux-gradle-mongodb-oauth2", "app-sample": "webflux-mongodb-oauth2", "entity": "mongodb", - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "ng-webflux-psql-default (n20/j22)", @@ -196,7 +226,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "name": "ng-webflux-psql-default", "app-sample": "webflux-psql", "entity": "sql", - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "ng-webflux-psql-additional (n20/j22)", @@ -211,7 +244,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "skip-frontend-tests": "false", "name": "ng-webflux-psql-additional", "jdl-samples": "webflux-psql,custom-domain", - "workspaces": "false" + "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 (n18/j17)", @@ -231,7 +267,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "defaultEnvironment": "dev" }, "entity": "sqllight", - "workspaces": "false" + "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 (n18/j17)", @@ -252,7 +291,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "experimental": true, "monorepository": true }, - "workspaces": "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 (n20.18.0/j17)", @@ -272,7 +314,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "workspaces": true, "monorepository": true }, - "workspaces": "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 (n20.18.0/j17)", @@ -292,7 +337,10 @@ exports[`generator - github-build-matrix with angular should match matrix value "workspaces": true, "monorepository": true }, - "workspaces": "true" + "workspaces": "true", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" } ] }" @@ -531,7 +579,10 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "name": "react-default", "app-sample": "react-default", "entity": "sqlfull", - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "react-maven-h2mem-memcached (n20/j17)", @@ -550,7 +601,10 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "generatorOptions": { "defaultEnvironment": "dev" }, - "workspaces": "false" + "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 (n20.18.0/j22)", @@ -567,7 +621,10 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "name": "react-gradle-mysql-es-noi18n-mapsid", "app-sample": "react-gradle-mysql-es-noi18n-mapsid", "entity": "sql", - "workspaces": "false" + "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 (n20/j17)", @@ -584,7 +641,10 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "name": "react-gradle-cassandra-session-redis", "app-sample": "react-gradle-cassandra-session-redis", "entity": "cassandra", - "workspaces": "false" + "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 (n20/j17)", @@ -604,7 +664,10 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "workspaces": true, "monorepository": true }, - "workspaces": "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 (n18/j17)", @@ -624,7 +687,10 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "workspaces": true, "monorepository": true }, - "workspaces": "true" + "workspaces": "true", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" } ] }" @@ -647,7 +713,10 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "name": "vue-default", "app-sample": "vue-default", "entity": "sqlfull", - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "vue-default-additional (n20/j21)", @@ -664,7 +733,10 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "app-sample": "vue-default", "entity": "none", "jdl-entity": "custom-id", - "workspaces": "false" + "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 (n20/j21)", @@ -680,7 +752,10 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "name": "vue-noi18n-mysql-ws-oauth2", "app-sample": "vue-noi18n-ws-oauth2", "entity": "sqlfull", - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "vue-fulli18n-mysql-es (n20/j22)", @@ -696,7 +771,10 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "name": "vue-fulli18n-mysql-es", "app-sample": "vue-fulli18n-es", "entity": "sql", - "workspaces": "false" + "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 (n20.18.0/j17)", @@ -716,7 +794,10 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "generatorOptions": { "defaultEnvironment": "dev" }, - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "vue-h2disk-ws-theme (n20/j17)", @@ -735,7 +816,10 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "generatorOptions": { "defaultEnvironment": "dev" }, - "workspaces": "false" + "workspaces": "false", + "build-jhipster-bom": true, + "jhipster-bom-branch": "main", + "jhipster-bom-cicd-version": "0.0.0-CICD" }, { "job-name": "vue-session-cassandra-fr (n20.18.0/j17)", @@ -754,7 +838,10 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "generatorOptions": { "defaultEnvironment": "dev" }, - "workspaces": "false" + "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 (n20/j21)", @@ -774,7 +861,10 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "workspaces": true, "monorepository": true }, - "workspaces": "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 (n18/j22)", @@ -794,7 +884,10 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "workspaces": true, "monorepository": true }, - "workspaces": "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/generator.ts b/.blueprint/github-build-matrix/generator.ts index 59c37ee65e87..1176146f466f 100644 --- a/.blueprint/github-build-matrix/generator.ts +++ b/.blueprint/github-build-matrix/generator.ts @@ -3,6 +3,7 @@ import { join } from 'node:path'; import BaseGenerator from '../../generators/base/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'; @@ -90,6 +91,9 @@ export default class extends BaseGenerator { ...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, }, ]; }), From fb03a0f5cf47dff1eeae4450723be65bff90fd62 Mon Sep 17 00:00:00 2001 From: Marcelo Shima Date: Fri, 18 Oct 2024 22:42:54 -0300 Subject: [PATCH 3/3] github-ci-matrix: use placeholders in tests --- .../__snapshots__/generator.spec.ts.snap | 344 +++++++++--------- .blueprint/github-build-matrix/generator.ts | 3 +- .../support/github-ci-matrix.ts | 26 +- 3 files changed, 192 insertions(+), 181 deletions(-) diff --git a/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap b/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap index 47500645c047..f9b601084b32 100644 --- a/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap +++ b/.blueprint/github-build-matrix/__snapshots__/generator.spec.ts.snap @@ -4,12 +4,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "{ "include": [ { - "job-name": "ng-default (n20.18.0/j22)", + "job-name": "ng-default (n[0]/j[3])", "sample": "ng-default", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "22", - "npm-version": "10.9.0", + "node-version": "[0]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -24,12 +24,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-default-additional (n20.18.0/j17)", + "job-name": "ng-default-additional (n[0]/j[0])", "sample": "ng-default-additional", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[0]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -44,12 +44,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-mysql-es-noi18n-mapsid (n20/j17)", + "job-name": "ng-mysql-es-noi18n-mapsid (n[2]/j[0])", "sample": "ng-mysql-es-noi18n-mapsid", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -63,12 +63,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-mongodb-kafka-cucumber (n20/j21)", + "job-name": "ng-mongodb-kafka-cucumber (n[2]/j[2])", "sample": "ng-mongodb-kafka-cucumber", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "21", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -85,12 +85,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-h2mem-ws-nol2 (n20.18.0/j21)", + "job-name": "ng-h2mem-ws-nol2 (n[0]/j[2])", "sample": "ng-h2mem-ws-nol2", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "21", - "npm-version": "10.9.0", + "node-version": "[0]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -107,12 +107,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-gradle-fr (n20/j22)", + "job-name": "ng-gradle-fr (n[2]/j[3])", "sample": "ng-gradle-fr", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "22", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -127,12 +127,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-gradle-mariadb-oauth2-infinispan (n20/j22)", + "job-name": "ng-gradle-mariadb-oauth2-infinispan (n[2]/j[3])", "sample": "ng-gradle-mariadb-oauth2-infinispan", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "22", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -150,12 +150,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-gradle-h2disk-ws-nocache (n20/j22)", + "job-name": "ng-gradle-h2disk-ws-nocache (n[2]/j[3])", "sample": "ng-gradle-h2disk-ws-nocache", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "22", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -174,12 +174,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-webflux-mongodb (n20/j21)", + "job-name": "ng-webflux-mongodb (n[2]/j[2])", "sample": "ng-webflux-mongodb", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "21", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -193,12 +193,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-webflux-gradle-mongodb-oauth2 (n20/j21)", + "job-name": "ng-webflux-gradle-mongodb-oauth2 (n[2]/j[2])", "sample": "ng-webflux-gradle-mongodb-oauth2", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "21", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -213,12 +213,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-webflux-psql-default (n20/j22)", + "job-name": "ng-webflux-psql-default (n[2]/j[3])", "sample": "ng-webflux-psql-default", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "22", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -232,12 +232,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-webflux-psql-additional (n20/j22)", + "job-name": "ng-webflux-psql-additional (n[2]/j[3])", "sample": "ng-webflux-psql-additional", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "22", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -250,12 +250,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ng-webflux-gradle-session-h2mem-es (n18/j17)", + "job-name": "ng-webflux-gradle-session-h2mem-es (n[1]/j[1])", "sample": "ng-webflux-gradle-session-h2mem-es", "os": "ubuntu-latest", - "node-version": "18", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[1]", + "java-version": "[1]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -273,12 +273,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ms-ng-oauth2-mongodb-caffeine (n18/j17)", + "job-name": "ms-ng-oauth2-mongodb-caffeine (n[1]/j[1])", "sample": "ms-ng-oauth2-mongodb-caffeine", "os": "ubuntu-latest", - "node-version": "18", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[1]", + "java-version": "[1]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -297,12 +297,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "mf-ng-eureka-jwt-psql-ehcache (n20.18.0/j17)", + "job-name": "mf-ng-eureka-jwt-psql-ehcache (n[0]/j[0])", "sample": "mf-ng-eureka-jwt-psql-ehcache", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[0]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -320,12 +320,12 @@ exports[`generator - github-build-matrix with angular should match matrix value "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ms-mf-ng-consul-oauth2-neo4j (n20.18.0/j17)", + "job-name": "ms-mf-ng-consul-oauth2-neo4j (n[0]/j[0])", "sample": "ms-mf-ng-consul-oauth2-neo4j", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[0]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -353,9 +353,9 @@ exports[`generator - github-build-matrix with devserver should match matrix valu "job-name": "ng-default", "sample": "samples/ng-default", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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" @@ -364,9 +364,9 @@ exports[`generator - github-build-matrix with devserver should match matrix valu "job-name": "react-default", "sample": "samples/react-default", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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" @@ -375,9 +375,9 @@ exports[`generator - github-build-matrix with devserver should match matrix valu "job-name": "vue-default", "sample": "samples/vue-default", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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" @@ -393,9 +393,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "cassandra-maven-jwt", "sample": "cassandra-maven-jwt", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -406,9 +406,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "cassandra-reactive(true)-gradle-elasticsearch-oauth2-consul-kafka", "sample": "cassandra-reactive(true)-gradle-elasticsearch-oauth2-consul-kafka", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -419,9 +419,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "mongodb-maven-jwt-kafka", "sample": "mongodb-maven-jwt-kafka", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -432,9 +432,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "mongodb-reactive(true)-gradle-elasticsearch-oauth2-consul", "sample": "mongodb-reactive(true)-gradle-elasticsearch-oauth2-consul", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -445,9 +445,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "neo4j-maven-jwt-eureka", "sample": "neo4j-maven-jwt-eureka", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -458,9 +458,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "neo4j-reactive(true)-gradle-elasticsearch-oauth2-eureka-kafka", "sample": "neo4j-reactive(true)-gradle-elasticsearch-oauth2-eureka-kafka", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -471,9 +471,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "postgresql-cacheProvider(no)-maven-jwt-eureka-kafka", "sample": "postgresql-cacheProvider(no)-maven-jwt-eureka-kafka", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -484,9 +484,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "mysql-memcached-gradle-elasticsearch-oauth2-eureka", "sample": "mysql-memcached-gradle-elasticsearch-oauth2-eureka", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -497,9 +497,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "mariadb-redis-maven-jwt-consul", "sample": "mariadb-redis-maven-jwt-consul", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -510,9 +510,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "postgresql-reactive(true)-gradle-elasticsearch-oauth2-kafka", "sample": "postgresql-reactive(true)-gradle-elasticsearch-oauth2-kafka", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -523,9 +523,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "mysql-reactive(true)-maven-jwt-consul-kafka", "sample": "mysql-reactive(true)-maven-jwt-consul-kafka", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -536,9 +536,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "mariadb-reactive(true)-gradle-elasticsearch-oauth2", "sample": "mariadb-reactive(true)-gradle-elasticsearch-oauth2", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -549,9 +549,9 @@ exports[`generator - github-build-matrix with docker-compose-integration should "job-name": "h2", "sample": "h2", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "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", @@ -566,12 +566,12 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "{ "include": [ { - "job-name": "react-default (n20/j21)", + "job-name": "react-default (n[2]/j[2])", "sample": "react-default", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "21", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -585,12 +585,12 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "react-maven-h2mem-memcached (n20/j17)", + "job-name": "react-maven-h2mem-memcached (n[2]/j[0])", "sample": "react-maven-h2mem-memcached", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -607,12 +607,12 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "react-gradle-mysql-es-noi18n-mapsid (n20.18.0/j22)", + "job-name": "react-gradle-mysql-es-noi18n-mapsid (n[0]/j[3])", "sample": "react-gradle-mysql-es-noi18n-mapsid", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "22", - "npm-version": "10.9.0", + "node-version": "[0]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -627,12 +627,12 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "react-gradle-cassandra-session-redis (n20/j17)", + "job-name": "react-gradle-cassandra-session-redis (n[2]/j[0])", "sample": "react-gradle-cassandra-session-redis", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -647,12 +647,12 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ms-react-consul-jwt-cassandra-redis (n20/j17)", + "job-name": "ms-react-consul-jwt-cassandra-redis (n[2]/j[1])", "sample": "ms-react-consul-jwt-cassandra-redis", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[1]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -670,12 +670,12 @@ exports[`generator - github-build-matrix with react should match matrix value 1` "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ms-mf-react-eureka-oauth2-mariadb-infinispan (n18/j17)", + "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": "18", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[1]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -700,12 +700,12 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "{ "include": [ { - "job-name": "vue-default (n20.18.0/j21)", + "job-name": "vue-default (n[0]/j[2])", "sample": "vue-default", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "21", - "npm-version": "10.9.0", + "node-version": "[0]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -719,12 +719,12 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "vue-default-additional (n20/j21)", + "job-name": "vue-default-additional (n[2]/j[2])", "sample": "vue-default-additional", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "21", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -739,12 +739,12 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "vue-noi18n-mysql-ws-oauth2 (n20/j21)", + "job-name": "vue-noi18n-mysql-ws-oauth2 (n[2]/j[2])", "sample": "vue-noi18n-mysql-ws-oauth2", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "21", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -758,12 +758,12 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "vue-fulli18n-mysql-es (n20/j22)", + "job-name": "vue-fulli18n-mysql-es (n[2]/j[3])", "sample": "vue-fulli18n-mysql-es", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "22", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -777,12 +777,12 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "vue-gradle-h2mem-ws-session (n20.18.0/j17)", + "job-name": "vue-gradle-h2mem-ws-session (n[0]/j[0])", "sample": "vue-gradle-h2mem-ws-session", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[0]", + "java-version": "[0]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -800,12 +800,12 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "vue-h2disk-ws-theme (n20/j17)", + "job-name": "vue-h2disk-ws-theme (n[2]/j[1])", "sample": "vue-h2disk-ws-theme", "os": "ubuntu-latest", - "node-version": "20", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[1]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -822,12 +822,12 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "vue-session-cassandra-fr (n20.18.0/j17)", + "job-name": "vue-session-cassandra-fr (n[0]/j[1])", "sample": "vue-session-cassandra-fr", "os": "ubuntu-latest", - "node-version": "20.18.0", - "java-version": "17", - "npm-version": "10.9.0", + "node-version": "[0]", + "java-version": "[1]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -844,12 +844,12 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "ms-mf-vue-consul-oauth2-mysql-memcached (n20/j21)", + "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": "20", - "java-version": "21", - "npm-version": "10.9.0", + "node-version": "[2]", + "java-version": "[2]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", @@ -867,12 +867,12 @@ exports[`generator - github-build-matrix with vue should match matrix value 1`] "jhipster-bom-cicd-version": "0.0.0-CICD" }, { - "job-name": "stack-vue-no-db (n18/j22)", + "job-name": "stack-vue-no-db (n[1]/j[3])", "sample": "stack-vue-no-db", "os": "ubuntu-latest", - "node-version": "18", - "java-version": "22", - "npm-version": "10.9.0", + "node-version": "[1]", + "java-version": "[3]", + "npm-version": "NPM-VERSION", "default-environment": "prod", "jwt-secret-key": "ZjY4MTM4YjI5YzMwZjhjYjI2OTNkNTRjMWQ5Y2Q0Y2YwOWNmZTE2NzRmYzU3NTMwM2NjOTE3MTllOTM3MWRkMzcyYTljMjVmNmQ0Y2MxOTUzODc0MDhhMTlkMDIxMzI2YzQzZDM2ZDE3MmQ3NjVkODk3OTVmYzljYTQyZDNmMTQ=", "skip-backend-tests": "false", diff --git a/.blueprint/github-build-matrix/generator.ts b/.blueprint/github-build-matrix/generator.ts index 1176146f466f..b93f3d7e4876 100644 --- a/.blueprint/github-build-matrix/generator.ts +++ b/.blueprint/github-build-matrix/generator.ts @@ -101,7 +101,8 @@ export default class extends BaseGenerator { } } - this.matrix = JSON.stringify(convertToGitHubMatrix(matrix, { randomEnvironment }), null, 2); + const { useVersionPlaceholders } = this; + this.matrix = JSON.stringify(convertToGitHubMatrix(matrix, { randomEnvironment, useVersionPlaceholders }), null, 2); const githubOutputFile = getGithubOutputFile(); this.log.info('matrix', this.matrix); if (githubOutputFile) { diff --git a/.blueprint/github-build-matrix/support/github-ci-matrix.ts b/.blueprint/github-build-matrix/support/github-ci-matrix.ts index f17d95087783..47dd81bad38c 100644 --- a/.blueprint/github-build-matrix/support/github-ci-matrix.ts +++ b/.blueprint/github-build-matrix/support/github-ci-matrix.ts @@ -43,13 +43,19 @@ export const defaultEnvironmentMatrix = { 'default-environment': ['prod'], }; -const randomReproducibleValue = (seed: string, choices: Choice[]): Choice => { - return choices[createHash('shake256', { outputLength: 1 }).update(seed, 'utf8').digest('binary').charCodeAt(0) % choices.length]; +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) => { - const javaVersion = randomReproducibleValue(`java-${key}`, [JAVA_VERSION, ...JAVA_COMPATIBLE_VERSIONS]); - const nodeVersion = randomReproducibleValue(`node-${key}`, [NODE_VERSION, '18', '20']); +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, @@ -57,8 +63,11 @@ const randomEnvironmentMatrix = (key: string) => { }; }; -export const convertToGitHubMatrix = (matrix: GitHubMatrixRecord, options?: { randomEnvironment?: boolean }): GitHubMatrixOutput => { - const { randomEnvironment } = options ?? {}; +export const convertToGitHubMatrix = ( + matrix: GitHubMatrixRecord, + options?: { randomEnvironment?: boolean; useVersionPlaceholders?: boolean }, +): GitHubMatrixOutput => { + const { randomEnvironment, useVersionPlaceholders } = options ?? {}; return { include: Object.entries(matrix) .filter(([_key, value]) => !value.disabled) @@ -66,8 +75,9 @@ export const convertToGitHubMatrix = (matrix: GitHubMatrixRecord, options?: { ra 'job-name': key, sample: key, ...defaultEnvironment, + ...(useVersionPlaceholders ? { 'java-version': 'JAVA-VERSION', 'node-version': 'NODE-VERSION', 'npm-version': 'NPM-VERSION' } : {}), ...value, - ...(randomEnvironment ? randomEnvironmentMatrix(key) : {}), + ...(randomEnvironment ? randomEnvironmentMatrix(key, { useVersionPlaceholders }) : {}), })), }; };