import { argv, env, exit } from 'node:process' import { writeFileSync } from 'node:fs' /** * List of all components * @type {Record} */ const components = { 'bindings.azure.blobstorage': { conformance: true, certification: true, requiredSecrets: [ 'AzureBlobStorageAccount', 'AzureBlobStorageAccessKey', 'AzureBlobStorageContainer', 'AzureCertificationTenantId', 'AzureCertificationServicePrincipalClientId', 'AzureCertificationServicePrincipalClientSecret', ], sourcePkg: [ 'bindings/azure/blobstorage', 'common/component/azure/blobstorage', ], }, 'bindings.azure.cosmosdb': { conformance: true, certification: true, requiredSecrets: [ 'AzureCosmosDB', 'AzureCosmosDBMasterKey', 'AzureCosmosDBUrl', 'AzureCosmosDB', 'AzureCosmosDBCollection', 'AzureCertificationTenantId', 'AzureCertificationServicePrincipalClientId', 'AzureCertificationServicePrincipalClientSecret', ], }, 'bindings.azure.eventgrid': { conformance: true, requiredSecrets: [ 'AzureEventGridNgrokToken', 'AzureEventGridAccessKey', 'AzureEventGridTopicEndpoint', 'AzureEventGridScope', 'AzureEventGridClientSecret', 'AzureEventGridClientId', 'AzureEventGridTenantId', 'AzureEventGridSubscriptionId', ], conformanceSetup: 'conformance-bindings.azure.eventgrid-setup.sh', conformanceDestroy: 'conformance-bindings.azure.eventgrid-destroy.sh', }, 'bindings.azure.eventhubs': { conformance: true, certification: true, requiredSecrets: [ 'AzureEventHubsBindingsConnectionString', 'AzureBlobStorageAccount', 'AzureBlobStorageAccessKey', 'AzureEventHubsBindingsHub', 'AzureEventHubsBindingsNamespace', 'AzureEventHubsBindingsConsumerGroup', 'AzureCertificationServicePrincipalClientId', 'AzureCertificationTenantId', 'AzureCertificationServicePrincipalClientSecret', 'AzureResourceGroupName', 'AzureCertificationSubscriptionId', 'AzureEventHubsBindingsContainer', 'AzureIotHubEventHubConnectionString', 'AzureIotHubName', 'AzureIotHubBindingsConsumerGroup', ], sourcePkg: [ 'bindings/azure/eventhubs', 'common/component/azure/eventhubs', ], }, 'bindings.azure.servicebusqueues': { conformance: true, certification: true, requiredSecrets: ['AzureServiceBusConnectionString'], sourcePkg: [ 'bindings/azure/servicebusqueues', 'common/component/azure/servicebus', ], }, 'bindings.azure.storagequeues': { conformance: true, certification: true, requiredSecrets: [ 'AzureBlobStorageAccessKey', 'AzureBlobStorageAccount', 'AzureBlobStorageQueue', ], }, 'bindings.aws.s3': { certification: true, requireAWSCredentials: true, requireTerraform: true, certificationSetup: 'certification-bindings.aws.s3-setup.sh', certificationDestroy: 'certification-bindings.aws.s3-destroy.sh', }, // 'bindings.aws.s3.docker': { // conformance: true, // requireDocker: true, // conformanceSetup: 'docker-compose.sh s3', // }, 'bindings.aws.s3.terraform': { conformance: true, requireAWSCredentials: true, requireTerraform: true, conformanceSetup: 'conformance-bindings.aws.s3.terraform-setup.sh', conformanceDestroy: 'conformance-bindings.aws.s3.terraform-destroy.sh', }, 'bindings.cron': { conformance: true, certification: true, }, 'bindings.dubbo': { certification: true, }, 'bindings.zeebe.command': { certification: true, }, 'bindings.zeebe.jobworker': { certification: true, }, 'bindings.http': { conformance: true, }, 'bindings.influx': { conformance: true, conformanceSetup: 'conformance-bindings.influx-setup.sh', }, 'bindings.kafka': { certification: true, sourcePkg: ['bindings/kafka', 'common/component/kafka'], }, 'bindings.kafka-confluent': { conformance: true, conformanceSetup: 'docker-compose.sh confluent', sourcePkg: ['bindings/kafka', 'common/component/kafka'], }, 'bindings.kafka-wurstmeister': { conformance: true, conformanceSetup: 'docker-compose.sh kafka', sourcePkg: ['bindings/kafka', 'common/component/kafka'], }, 'bindings.kitex': { certification: true, }, 'bindings.kubemq': { conformance: true, conformanceSetup: 'docker-compose.sh kubemq', }, 'bindings.localstorage': { certification: true, }, 'bindings.mqtt3-emqx': { conformance: true, conformanceSetup: 'docker-compose.sh emqx', sourcePkg: ['bindings/mqtt3'], }, 'bindings.mqtt3-mosquitto': { conformance: true, conformanceSetup: 'docker-compose.sh mosquitto', sourcePkg: ['bindings/mqtt3'], }, 'bindings.mqtt3-vernemq': { conformance: true, conformanceSetup: 'docker-compose.sh vernemq', sourcePkg: ['bindings/mqtt3'], }, 'bindings.postgres': { certification: true, }, 'bindings.postgresql.docker': { conformance: true, conformanceSetup: 'docker-compose.sh postgresql', sourcePkg: [ 'bindings/postgresql', 'common/authentication/postgresql', ], }, 'bindings.postgresql.azure': { conformance: true, requiredSecrets: [ 'AzureDBPostgresConnectionString', 'AzureDBPostgresClientId', 'AzureDBPostgresClientSecret', 'AzureDBPostgresTenantId', ], sourcePkg: [ 'bindings/postgresql', 'common/authentication/postgresql', ], }, 'bindings.rabbitmq': { conformance: true, certification: true, conformanceSetup: 'docker-compose.sh rabbitmq', }, 'bindings.redis': { certification: true, sourcePkg: ['bindings/redis', 'common/component/redis'], }, 'bindings.redis.v6': { conformance: true, conformanceSetup: 'docker-compose.sh redisjson redis', sourcePkg: ['bindings/redis', 'common/component/redis'], }, 'bindings.redis.v7': { conformance: true, conformanceSetup: 'docker-compose.sh redis7 redis', sourcePkg: ['bindings/redis', 'common/component/redis'], }, 'configuration.postgres': { certification: true, sourcePkg: [ 'configuration/postgresql', 'common/authentication/postgresql', ], }, 'configuration.postgresql.docker': { conformance: true, conformanceSetup: 'docker-compose.sh postgresql', sourcePkg: [ 'configuration/postgresql', 'common/authentication/postgresql', ], }, 'configuration.postgresql.azure': { conformance: true, requiredSecrets: [ 'AzureDBPostgresConnectionString', 'AzureDBPostgresClientId', 'AzureDBPostgresClientSecret', 'AzureDBPostgresTenantId', ], sourcePkg: [ 'configuration/postgresql', 'common/authentication/postgresql', ], }, 'configuration.redis.v6': { conformance: true, conformanceSetup: 'docker-compose.sh redisjson redis', sourcePkg: ['configuration/redis', 'configuration/redis/internal'], }, 'configuration.redis.v7': { conformance: true, conformanceSetup: 'docker-compose.sh redis7 redis', sourcePkg: ['configuration/redis', 'configuration/redis/internal'], }, 'configuration.redis': { certification: true, sourcePkg: ['configuration/redis', 'configuration/redis/internal'], }, 'crypto.azure.keyvault': { conformance: true, requiredSecrets: [ 'AzureKeyVaultName', 'AzureKeyVaultTenantId', 'AzureKeyVaultServicePrincipalClientId', 'AzureKeyVaultServicePrincipalClientSecret', ], }, 'crypto.localstorage': { conformance: true, }, 'crypto.jwks': { conformance: true, }, 'lock.redis.v6': { conformance: true, conformanceSetup: 'docker-compose.sh redisjson redis', sourcePkg: ['lock/redis', 'common/component/redis'], }, 'lock.redis.v7': { conformance: true, conformanceSetup: 'docker-compose.sh redis7 redis', sourcePkg: ['lock/redis', 'common/component/redis'], }, 'middleware.http.bearer': { certification: true, }, 'middleware.http.ratelimit': { certification: true, }, 'pubsub.aws.snssqs': { certification: true, requireAWSCredentials: true, requireTerraform: true, certificationSetup: 'certification-pubsub.aws.snssqs-setup.sh', certificationDestroy: 'certification-pubsub.aws.snssqs-destroy.sh', }, // 'pubsub.aws.snssqs.docker': { // conformance: true, // requireDocker: true, // conformanceSetup: 'docker-compose.sh snssqs', // sourcePkg: 'pubsub/aws/snssqs', // }, 'pubsub.aws.snssqs.terraform': { conformance: true, requireAWSCredentials: true, requireTerraform: true, conformanceSetup: 'conformance-pubsub.aws.snssqs.terraform-setup.sh', conformanceDestroy: 'conformance-pubsub.aws.snssqs.terraform-destroy.sh', sourcePkg: 'pubsub/aws/snssqs', }, 'pubsub.gcp.pubsub': { certification: true, requireTerraform: true, requireGCPCredentials: true, certificationSetup: 'certification-pubsub.gcp.pubsub-setup.sh', certificationDestroy: 'certification-pubsub.gcp.pubsub-destroy.sh', }, // 'pubsub.gcp.pubsub.docker': { // conformance: true, // conformanceSetup: 'docker-compose.sh gcp-pubsub', // }, 'pubsub.gcp.pubsub.terraform': { conformance: true, requireTerraform: true, requireGCPCredentials: true, conformanceSetup: 'conformance-pubsub.gcp.pubsub.terraform-setup.sh', conformanceDestroy: 'conformance-pubsub.gcp.pubsub.terraform-destroy.sh', }, 'pubsub.azure.eventhubs': { conformance: true, certification: true, requiredSecrets: [ 'AzureEventHubsPubsubTopicActiveConnectionString', 'AzureEventHubsPubsubNamespace', 'AzureEventHubsPubsubConsumerGroup', 'AzureEventHubsPubsubNamespaceConnectionString', 'AzureBlobStorageAccount', 'AzureBlobStorageAccessKey', 'AzureEventHubsPubsubContainer', 'AzureIotHubName', 'AzureIotHubEventHubConnectionString', 'AzureCertificationTenantId', 'AzureCertificationServicePrincipalClientId', 'AzureCertificationServicePrincipalClientSecret', 'AzureResourceGroupName', 'AzureCertificationSubscriptionId', ], sourcePkg: [ 'pubsub/azure/eventhubs', 'common/component/azure/eventhubs', ], }, 'pubsub.azure.servicebus.queues': { conformance: true, requiredSecrets: ['AzureServiceBusConnectionString'], sourcePkg: [ 'pubsub/azure/servicebus/queues', 'common/component/azure/servicebus', ], }, 'pubsub.azure.servicebus.topics': { conformance: true, certification: true, requiredSecrets: [ 'AzureServiceBusConnectionString', 'AzureServiceBusNamespace', 'AzureCertificationTenantId', 'AzureCertificationServicePrincipalClientId', 'AzureCertificationServicePrincipalClientSecret', ], sourcePkg: [ 'pubsub/azure/servicebus/topics', 'common/component/azure/servicebus', ], }, 'pubsub.in-memory': { conformance: true, }, 'pubsub.jetstream': { conformance: true, conformanceSetup: 'docker-compose.sh jetstream', }, 'pubsub.kafka': { certification: true, sourcePkg: ['pubsub/kafka', 'common/component/kafka'], }, 'pubsub.kafka-confluent': { conformance: true, conformanceSetup: 'docker-compose.sh confluent', sourcePkg: ['pubsub/kafka', 'common/component/kafka'], }, 'pubsub.kafka-wurstmeister': { conformance: true, conformanceSetup: 'docker-compose.sh kafka', sourcePkg: ['pubsub/kafka', 'common/component/kafka'], }, 'pubsub.kubemq': { conformance: true, conformanceSetup: 'docker-compose.sh kubemq', }, 'pubsub.mqtt3': { certification: true, }, 'pubsub.mqtt3-emqx': { conformance: true, conformanceSetup: 'docker-compose.sh emqx', sourcePkg: ['pubsub/mqtt3'], }, 'pubsub.mqtt3-vernemq': { conformance: true, conformanceSetup: 'docker-compose.sh vernemq', sourcePkg: ['pubsub/mqtt3'], }, 'pubsub.pulsar': { conformance: true, certification: true, conformanceSetup: 'docker-compose.sh pulsar', }, 'pubsub.rabbitmq': { conformance: true, certification: true, conformanceSetup: 'docker-compose.sh rabbitmq', }, 'pubsub.redis.v6': { conformance: true, conformanceSetup: 'docker-compose.sh redisjson redis', sourcePkg: ['pubsub/redis', 'common/component/redis'], }, // This test is currently disabled due to issues with Redis v7 /*'pubsub.redis.v7': { conformance: true, conformanceSetup: 'docker-compose.sh redis7 redis', },*/ 'pubsub.solace': { conformance: true, conformanceSetup: 'docker-compose.sh solace', }, 'secretstores.azure.keyvault': { certification: true, requiredSecrets: [ 'AzureKeyVaultName', 'AzureKeyVaultTenantId', 'AzureKeyVaultClientId', 'AzureKeyVaultServicePrincipalClientId', 'AzureKeyVaultServicePrincipalClientSecret', 'AzureContainerRegistryName', 'AzureResourceGroupName', ], requiredCerts: ['AzureKeyVaultCert'], }, 'secretstores.azure.keyvault.certificate': { conformance: true, requiredSecrets: [ 'AzureKeyVaultName', 'AzureKeyVaultTenantId', 'AzureKeyVaultClientId', ], requiredCerts: ['AzureKeyVaultCert'], sourcePkg: 'secretstores/azure/keyvault', }, 'secretstores.azure.keyvault.serviceprincipal': { conformance: true, requiredSecrets: [ 'AzureKeyVaultName', 'AzureKeyVaultTenantId', 'AzureKeyVaultServicePrincipalClientId', 'AzureKeyVaultServicePrincipalClientSecret', ], sourcePkg: 'secretstores/azure/keyvault', }, 'secretstores.hashicorp.vault': { conformance: true, certification: true, conformanceSetup: 'docker-compose.sh hashicorp-vault vault', }, 'secretstores.kubernetes': { conformance: true, requireKind: true, conformanceSetup: 'conformance-secretstores.kubernetes-setup.sh', }, 'secretstores.local.env': { conformance: true, certification: true, }, 'secretstores.local.file': { conformance: true, certification: true, }, 'state.aws.dynamodb': { certification: true, requireAWSCredentials: true, requireTerraform: true, certificationSetup: 'certification-state.aws.dynamodb-setup.sh', certificationDestroy: 'certification-state.aws.dynamodb-destroy.sh', }, // 'state.aws.dynamodb.docker': { // conformance: true, // requireDocker: true, // conformanceSetup: 'docker-compose.sh dynamodb', // }, 'state.aws.dynamodb.terraform': { conformance: true, requireAWSCredentials: true, requireTerraform: true, conformanceSetup: 'conformance-state.aws.dynamodb-setup.sh', conformanceDestroy: 'conformance-state.aws.dynamodb-destroy.sh', sourcePkg: 'state/aws/dynamodb', }, 'state.azure.blobstorage.v2': { conformance: true, requiredSecrets: [ 'AzureBlobStorageAccount', 'AzureBlobStorageAccessKey', 'AzureCertificationTenantId', 'AzureCertificationServicePrincipalClientId', 'AzureCertificationServicePrincipalClientSecret', 'AzureBlobStorageContainer', ], sourcePkg: [ 'state/azure/blobstorage', 'common/component/azure/blobstorage', ], }, 'state.azure.blobstorage.v1': { conformance: true, requiredSecrets: [ 'AzureBlobStorageAccount', 'AzureBlobStorageAccessKey', 'AzureCertificationTenantId', 'AzureCertificationServicePrincipalClientId', 'AzureCertificationServicePrincipalClientSecret', 'AzureBlobStorageContainer', ], sourcePkg: [ 'state/azure/blobstorage', 'common/component/azure/blobstorage', ], }, 'state.azure.blobstorage': { certification: true, requiredSecrets: [ 'AzureBlobStorageAccount', 'AzureBlobStorageAccessKey', 'AzureCertificationTenantId', 'AzureCertificationServicePrincipalClientId', 'AzureCertificationServicePrincipalClientSecret', 'AzureBlobStorageContainer', ], sourcePkg: [ 'state/azure/blobstorage', 'common/component/azure/blobstorage', ], }, 'state.azure.cosmosdb': { conformance: true, certification: true, requiredSecrets: [ 'AzureCosmosDBMasterKey', 'AzureCosmosDBUrl', 'AzureCosmosDB', 'AzureCosmosDBCollection', 'AzureCertificationTenantId', 'AzureCertificationServicePrincipalClientId', 'AzureCertificationServicePrincipalClientSecret', ], }, 'state.azure.sql': { conformance: true, requiredSecrets: [ 'AzureResourceGroupName', 'AzureSqlServerName', 'AzureSqlServerConnectionString', ], conformanceSetup: 'conformance-state.azure.sql-setup.sh', conformanceDestroy: 'conformance-state.azure.sql-destroy.sh', }, 'state.azure.tablestorage': { certification: true, requiredSecrets: [ 'AzureBlobStorageAccount', 'AzureBlobStorageAccessKey', 'AzureCertificationTenantId', 'AzureCertificationServicePrincipalClientId', 'AzureCertificationServicePrincipalClientSecret', ], }, 'state.azure.tablestorage.cosmosdb': { conformance: true, requiredSecrets: [ 'AzureCosmosDBTableAPI', 'AzureCosmosDBTableAPIMasterKey', ], sourcePkg: ['state/azure/tablestorage'], }, 'state.azure.tablestorage.storage': { conformance: true, requiredSecrets: [ 'AzureBlobStorageAccessKey', 'AzureBlobStorageAccount', ], sourcePkg: ['state/azure/tablestorage'], }, 'state.cassandra': { conformance: true, certification: true, conformanceSetup: 'docker-compose.sh cassandra', }, 'state.cloudflare.workerskv': { conformance: true, requireCloudflareCredentials: true, nodeJsVersion: '18.x', conformanceSetup: 'conformance-state.cloudflare.workerskv-setup.sh', conformanceDestroy: 'conformance-state.cloudflare.workerskv-destroy.sh', }, 'state.cockroachdb': { conformance: true, certification: true, conformanceSetup: 'docker-compose.sh cockroachdb', sourcePkg: [ 'state/cockroachdb', 'common/component/postgresql', 'common/component/sql', ], }, 'state.etcd.v1': { conformance: true, conformanceSetup: 'docker-compose.sh etcd', }, 'state.etcd.v2': { conformance: true, conformanceSetup: 'docker-compose.sh etcd', }, 'state.in-memory': { conformance: true, }, 'state.memcached': { conformance: true, certification: true, conformanceSetup: 'docker-compose.sh memcached', }, 'state.mongodb': { conformance: true, certification: true, mongoDbVersion: '4.2', }, 'state.mysql': { certification: true, sourcePkg: ['state/mysql', 'common/component/sql'], }, 'state.mysql.mariadb': { conformance: true, conformanceSetup: 'docker-compose.sh mariadb', sourcePkg: ['state/mysql', 'common/component/sql'], }, 'state.mysql.mysql': { conformance: true, conformanceSetup: 'docker-compose.sh mysql', sourcePkg: ['state/mysql', 'common/component/sql'], }, 'state.oracledatabase': { conformance: true, conformanceSetup: 'docker-compose.sh oracledatabase', }, 'state.postgresql': { certification: true, sourcePkg: [ 'state/postgresql', 'common/authentication/postgresql', 'common/component/postgresql', 'common/component/sql', ], }, 'state.postgresql.docker': { conformance: true, conformanceSetup: 'docker-compose.sh postgresql', sourcePkg: [ 'state/postgresql', 'common/authentication/postgresql', 'common/component/postgresql', 'common/component/sql', ], }, 'state.postgresql.azure': { conformance: true, requiredSecrets: [ 'AzureDBPostgresConnectionString', 'AzureDBPostgresClientId', 'AzureDBPostgresClientSecret', 'AzureDBPostgresTenantId', ], sourcePkg: [ 'state/postgresql', 'common/authentication/postgresql', 'common/component/postgresql', 'common/component/sql', ], }, 'state.redis': { certification: true, sourcePkg: ['state/redis', 'common/component/redis'], }, 'state.redis.v6': { conformance: true, conformanceSetup: 'docker-compose.sh redisjson redis', sourcePkg: ['state/redis', 'common/component/redis'], }, 'state.redis.v7': { conformance: true, conformanceSetup: 'docker-compose.sh redis7 redis', sourcePkg: ['state/redis', 'common/component/redis'], }, 'state.rethinkdb': { conformance: true, conformanceSetup: 'docker-compose.sh rethinkdb', }, 'state.sqlite': { conformance: true, certification: true, sourcePkg: ['state/sqlite', 'common/component/sql'], }, 'state.sqlserver': { conformance: true, certification: true, conformanceSetup: 'docker-compose.sh sqlserver', requiredSecrets: ['AzureSqlServerConnectionString'], sourcePkg: ['state/sqlserver', 'common/component/sql'], }, // 'state.gcp.firestore.docker': { // conformance: true, // requireDocker: true, // conformanceSetup: 'docker-compose.sh gcpfirestore', // }, 'state.gcp.firestore.cloud': { conformance: true, requireGCPCredentials: true, conformanceSetup: 'conformance-state.gcp.firestore-setup.sh', }, 'state.gcp.firestore': { certification: true, requireGCPCredentials: true, certificationSetup: 'certification-state.gcp.firestore-setup.sh', }, 'workflows.temporal': { conformance: true, conformanceSetup: 'docker-compose.sh temporal', }, } /** * Type for the objects in the components dictionary * @typedef {Object} ComponentTestProperties * @property {boolean?} conformance If true, enables for conformance tests * @property {boolean?} certification If true, enables for certification tests * @property {string[]?} requiredSecrets Required secrets (if not empty, test becomes "cloud-only") * @property {string[]?} requiredCerts Required certs (if not empty, test becomes "cloud-only") * @property {boolean?} requireAWSCredentials If true, requires AWS credentials and makes the test "cloud-only" * @property {boolean?} requireGCPCredentials If true, requires GCP credentials and makes the test "cloud-only" * @property {boolean?} requireCloudflareCredentials If true, requires Cloudflare credentials and makes the test "cloud-only" * @property {boolean?} requireTerraform If true, requires Terraform * @property {boolean?} requireKind If true, requires KinD * @property {string?} conformanceSetup Setup script for conformance tests * @property {string?} conformanceDestroy Destroy script for conformance tests * @property {string?} certificationSetup Setup script for certification tests * @property {string?} certificationDestroy Destroy script for certification tests * @property {string?} nodeJsVersion If set, installs the specified Node.js version * @property {string?} mongoDbVersion If set, installs the specified MongoDB version * @property {string|string[]?} sourcePkg If set, sets the specified source package */ /** * Test matrix object * @typedef {Object} TestMatrixElement * @property {string} component Component name * @property {string?} required-secrets Required secrets * @property {string?} required-certs Required certs * @property {boolean?} require-aws-credentials Requires AWS credentials * @property {boolean?} require-gcp-credentials Requires GCP credentials * @property {boolean?} require-cloudflare-credentials Requires Cloudflare credentials * @property {boolean?} require-terraform Requires Terraform * @property {boolean?} require-kind Requires KinD * @property {string?} setup-script Setup script * @property {string?} destroy-script Destroy script * @property {string?} nodejs-version Install the specified Node.js version if set * @property {string?} mongodb-version Install the specified MongoDB version if set * @property {string?} source-pkg Source package */ /** * Returns the list of components for the matrix. * @param {'conformance'|'certification'} testKind Kind of test * @param {boolean} enableCloudTests If true, returns components that require secrets or credentials too (which can't be used as part of the regular CI in a PR) * @returns {TestMatrixElement[]} Test matrix object */ function GenerateMatrix(testKind, enableCloudTests) { /** @type {TestMatrixElement[]} */ const res = [] for (const name in components) { const comp = components[name] if (!comp[testKind]) { continue } // Skip cloud-only tests if enableCloudTests is false if (!enableCloudTests) { if ( comp.requiredSecrets?.length || comp.requiredCerts?.length || comp.requireAWSCredentials || comp.requireGCPCredentials || comp.requireCloudflareCredentials ) { continue } } else { // For conformance tests, avoid running Docker and Cloud Tests together. if (comp.conformance && comp.requireDocker) { continue } } if (comp.sourcePkg) { // Ensure it's an array if (!Array.isArray(comp.sourcePkg)) { comp.sourcePkg = [comp.sourcePkg] } } else { // Default is to use the component name, replacing dots with / comp.sourcePkg = [name.replace(/\./g, '/')] } // Add the component to the array res.push({ component: name, 'required-secrets': comp.requiredSecrets?.length ? comp.requiredSecrets.join(',') : undefined, 'required-certs': comp.requiredCerts?.length ? comp.requiredCerts.join(',') : undefined, 'require-aws-credentials': comp.requireAWSCredentials ? 'true' : undefined, 'require-gcp-credentials': comp.requireGCPCredentials ? 'true' : undefined, 'require-cloudflare-credentials': comp.requireCloudflareCredentials ? 'true' : undefined, 'require-terraform': comp.requireTerraform ? 'true' : undefined, 'require-kind': comp.requireKind ? 'true' : undefined, 'setup-script': comp[testKind + 'Setup'] || undefined, 'destroy-script': comp[testKind + 'Destroy'] || undefined, 'nodejs-version': comp.nodeJsVersion || undefined, 'mongodb-version': comp.mongoDbVersion || undefined, 'source-pkg': comp.sourcePkg .map((p) => 'github.com/dapr/components-contrib/' + p) .join(','), }) } return res } // Upon invocation, writes the matrix to the $GITHUB_OUTPUT file if (!env.GITHUB_OUTPUT) { console.error('Missing environmental variable GITHUB_OUTPUT') exit(1) } if (argv.length < 3 || !['conformance', 'certification'].includes(argv[2])) { console.error("First parameter must be 'conformance' or 'certification'") exit(1) } if (argv.length < 4 || !['true', 'false'].includes(argv[3])) { console.error("First parameter must be 'true' or 'false'") exit(1) } const testKind = argv[2] const enableCloudTests = argv[3] == 'true' const matrixObj = GenerateMatrix(testKind, enableCloudTests) console.log('Generated matrix:\n\n' + JSON.stringify(matrixObj, null, ' ')) writeFileSync(env.GITHUB_OUTPUT, 'test-matrix=' + JSON.stringify(matrixObj))