887 lines
30 KiB
JavaScript
887 lines
30 KiB
JavaScript
import { argv, env, exit } from 'node:process'
|
|
import { writeFileSync } from 'node:fs'
|
|
|
|
/**
|
|
* List of all components
|
|
* @type {Record<string,ComponentTestProperties>}
|
|
*/
|
|
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))
|