Config
The configuration variables, along with their respective values, are specified within YAML files located in the config/
directory. These variables are easily customizable to align with specific business use cases.
Config structure
The default directory structure is outlined as follows
├── config
│ ├── custom-environment-variables.yaml
│ ├── default.yaml
├
├── .env
File naming and Load order
The configuration files under config/
directory can have specific naming conventions and load order. Please refer File name and Load order for more information.
Environment variables
Environment variables in Godspeed are essential for securely managing configuration details like API keys, database URLs, and other sensitive information. Godspeed allows two primary ways to configure and access these variables.
Note: For sensitive information such as secrets or passwords, it is recommended to use environment variables in this way to avoid hardcoding values directly in your configuration files.
Configuration Setup for Environment Variables
Environment variables can be set up using:
- Define variables in
config/custom-environment-variables.yaml
. - Set values in
.env
or useexport
in the terminal. - Access variables using
<% config.variable_path %>
in yaml andctx.config
in typeScript workflows.
Step 1: Define Environment Variables in YAML Configuration
In the config/custom-environment-variables.yaml
file, specify the environment variables you want to use across your project. This YAML file maps environment variables to meaningful keys, which you’ll use in your code.
Example custom-environment-variables.yaml
:
my_datasource:
base_url: MY_DATASOURCE_BASE_URL
api_key: MY_DATASOURCE_API_KEY
api_token: MY_DATASOURCE_API_TOKEN
kafka:
brokers:
__name: KAFKA_BROKERS
__format: json
client_id: KAFKA_CLIENT_ID
jwt:
issuer: JWT_ISS
audience: JWT_AUD
secretOrKey: JWT_SECRET
prisma_secret: PRISMA_SECRET
Step 2: Set Environment Variable Values
After defining environment variable keys in custom-environment-variables.yaml
, you can provide actual values in two ways:
Define in
.env
file:Open
.env
file and assign values to each variable specified incustom-environment-variables.yaml
.Example
.env
file:MY_DATASOURCE_BASE_URL=https://httpbin.org/
MY_DATASOURCE_API_KEY=your_api_key_here
MY_DATASOURCE_API_TOKEN=your_api_token_here
KAFKA_BROKERS=["localhost:9092"]
KAFKA_CLIENT_ID=my-kafka-client
JWT_ISS=https://your-issuer.com
JWT_AUD=https://your-audience.com
JWT_SECRET=your_jwt_secret
PRISMA_SECRET=your_prisma_secret
Set values directly in the environment: You can export these variables temporarily to environment by following the below syntax, based on the environment you are using:
- For shell/git bash, use
export
command as:$ export MY_DATASOURCE_BASE_URL=https://httpbin.org
$ export JWT_SECRET=mysecret
$ export JWT_ISS= mycompany - For windows powershell
$env:JWT_SECRET="mysecret"
$env:JWT_ISS="mycompany"
- For shell/git bash, use
Step 3: Access Environment Variables in Your Project
Once environment variables are set up, they can be accessed in Godspeed Project as:
In Yaml Files: Use the templating syntax
<% config.variable_path %>
to access the variable.Example:
datasource:
base_url: <% config.my_datasource.base_url %>In TypeScript/JavaScript files: Use
ctx.config
to access values within your TypeScript workflows.Example TypeScript Workflow:
import { GSContext, GSStatus } from "@godspeedsystems/core";
export default async function myWorkflow(ctx: GSContext, args: any) {
const apiKey = ctx.config.my_datasource.api_key;
const apiUrl = ctx.config.my_datasource.base_url;
if (!apiKey || !apiUrl) {
throw new GSStatus(false, 500, undefined, "Missing configuration variables");
}
// Use apiKey and apiUrl in your logic
console.log("API Key:", apiKey);
console.log("API URL:", apiUrl);
return new GSStatus(true, 200, undefined, { message: "Environment variables accessed successfully" });
}This setup provides a secure, centralized way to manage sensitive configuration data, making it easy to change values without modifying the source code.
Static variables
The static variables as well as their values are defined in yaml files under config/
directory. These variables can be replaced as per the business use cases. The default directory structure is given as below:
├── config
│ ├── default.yaml
Any configuration which includes secrets or passwords is recommended to be defined using environment variables only. Avoid using static variables for secrets and passwords.
default.yaml
This file contains some predefined variables. Below is a sample file which defines the static variables used in Godspeed.
log:
redact: # ['a.b.c', 'a.b.*', 'req.headers', 'mobileNumber'] #pino redact rules. Default null.
level: debug #by default info
sync: true #By default sync is false. For debugging, keep it true. For performance keep it false.
timestamp: stdTimeFunctions.isoTime #Pino date formats
bindings: # should pid and hostname be enabled in pino log bindings.
pid: false
hostname: true
defaults:
lang: coffee #default language of inline scripting e.g. js/coffee
on_error:
continue: false # default behavior of on_error.continue property
server_url: https://api.example.com:8443/v1/api
httpbin: # sample api datasource url
base_url: https://httpbin.org
Here, defaults
key has the variables which are used by the framework for default values in workflow DSL.
1. lang - By default, the framework sets it to js
. Check default language for more information.
2. on_error.continue - By default, the framework sets it to false
. Check on_error for more information.