Adding automation scripts
Use postDeploy and preUndeploy scripts to automate configurations for Composable Commerce and external systems.
Overview
It is common for any integration to require the creation of specific resources during the deployment lifecycle in the Composable Commerce API, such as Types, API Extensions, or Subscriptions.
You can define scripts in connect.yaml
that run on different deployment stages, which allows Connect to create and modify those resources.
JavaScript/TypeScript
postDeploy
postDeploy
runs after a successful deployment of the Connect application and is useful when you need to set up an API Extension or Subscription required to trigger your Connector endpoint.
postDeploy
has access to extra environment variables depending on the application type.
Environment variable | Application type | Description |
---|---|---|
CONNECT_PROVIDER | All | The Cloud provider of the Connect Deployment. Should be used when setting up a Subscription in the Composable Commerce API. Supported values are AZURE or GCP . |
CONNECT_SERVICE_URL | Service | The public URL of the Connect application, should be used when setting up an API Extension in the Composable Commerce API. |
CONNECT_GCP_PROJECT_ID | Event | Google Cloud Platform (GCP) project ID. Should be used when setting up a Subscription in the Composable Commerce API. |
CONNECT_GCP_TOPIC_NAME | Event | GCP Pub/Sub topic name. Should be used when setting up a Subscription in the Composable Commerce API . |
CONNECT_AZURE_CONNECTION_STRING | Event | Azure Service Bus connectionString . Should be used when setting up a Subscription in the Composable Commerce API. |
preUndeploy
preUndeploy
runs before the Connector is undeployed and is useful when deleting unused resources from the Composable Commerce API.
Example service application
# connect.yaml# ...applicationType: servicescripts:postDeploy: node post-deploy.jspreUndeploy: node pre-undeploy.js# ...
// post-deploy.jsasync function run() {try {const EXTENSION_KEY = 'myconnector-extension-key';const serviceUrl = process.env.CONNECT_SERVICE_URL;// ...const result = await apiRoot.extensions().post({body: {key: EXTENSION_KEY,destination: {type: 'HTTP',url: serviceUrl,},triggers: [{resourceTypeId: 'cart',actions: ['Update'],},],},}).execute();} catch (error) {process.stderr.write(`Post-deploy failed: ${error.message}\n`);process.exitCode = 1;}}run();
// pre-undeploy.jsasync function run() {try {const EXTENSION_KEY = 'myconnector-extension-key';const serviceUrl = process.env.CONNECT_SERVICE_URL;// ...const result = await apiRoot.extensions().delete({body: {key: EXTENSION_KEY,},}).execute();} catch (error) {process.stderr.write(`Post-deploy failed: ${error.message}\n`);process.exitCode = 1;}}run();
Example event application
# connect.yaml# ...applicationType: eventscripts:postDeploy: node post-deploy.jspreUndeploy: node pre-undeploy.js# ...
// post-deploy.jsasync function run() {try {const connectProvider = process.env.CONNECT_PROVIDER;switch (connectProvider) {case 'AZURE': {await createAzureServiceBusSubscription();break;}default: {await createGcpPubSubSubscription();}}} catch (error) {process.stderr.write(`Post-deploy failed: ${error.message}\n`);process.exitCode = 1;}}async function createGcpPubSubSubscription() {const SUBSCRIPTION_KEY = 'myconnector-subscription-key';const topicName = process.env.CONNECT_GCP_TOPIC_NAME;const projectId = process.env.CONNECT_GCP_PROJECT_ID;// ...const result = await apiRoot.subscriptions().post({body: {key: SUBSCRIPTION_KEY,destination: {type: 'GoogleCloudPubSub',topic: topicName,projectId,},messages: [{resourceTypeId: 'customer',types: ['CustomerCreated'],},],},}).execute();}async function createAzureServiceBusSubscription() {const SUBSCRIPTION_KEY = 'myconnector-subscription-key';const connectionString = process.env.CONNECT_AZURE_CONNECTION_STRING;// ...const result = await apiRoot.subscriptions().post({body: {key: SUBSCRIPTION_KEY,destination: {type: 'AzureServiceBus',connectionString: connectionString,},messages: [{resourceTypeId: 'customer',types: ['CustomerCreated'],},],},}).execute();}run();
// pre-undeploy.jsasync function run() {try {const SUBSCRIPTION_KEY = 'myconnector-subscription-key';// ...const result = await apiRoot.subscriptions().delete({ body: { key: SUBSCRIPTION_KEY } }).execute();} catch (error) {process.stderr.write(`Post-deploy failed: ${error.message}\n`);process.exitCode = 1;}}run();