Git Deployment Integration

This page documents how the IntelligenceHub Integrates with git during start-up in order to fetch and layer hub configurations from git. To learn more about Git Backup, see: Git Backup.

All IntelligenceHub start-up Git integration is configured using a JSON file. This file is specified using the environment variable HIGHBYTE_DEPLOYMENT_FILE or java property highbyte.deployment.file. When set, the IntelligenceHub will fetch configuration from one or more Git repositories during start-up. Any errors that occur during configuration are considered critical and will prevent the product from starting.

The deployment settings file can be configured to pull one or many JSON files from Git/Disk, layer the content together, and form a single Deployment settings file that an IntelligenceHub instance is configured with during start-up.

Any secrets stored in the configuration are encrypted/decrypted using the instance json encryption key stored in its certificate store.

Deployment Settings JSON file Schema

typescript
/**
 * Represents the configuration object for a deployment settings.
 */
{
    /**
    * The version of the configuration object, currently 0
    */
    version: 0,

    /**
     * Defines the Git repositories used during deployment. Fragments reference a repository by name using the repoName field.
     */
    repos?: {
        type: "git",                // The type of repository, currently only "git" is supported.
        name: string,               // The name of the repository.
        uri: string,                // The URI of the repository.
        author: string,             // The author of the repository.
        email: string,              // The email address of the repository author.
        /**
         * Authentication scheme
         */
        auth: {
            type: "pass" | "none",  // The type of authentication, either "pass" (password) or "none".
            password?: string,      // The password for authentication.
            username?: string,      // The username for authentication.
        }
    }[],

    /**
     * An array of fragment configurations.
     */
    fragments: {
        details: {
            type: "git" | "file",   // The type of fragment, either "git" or "file".
            deployFile: string,     // The path to the deployment file.
            repoName?: string,      // The optional name of the repository associated with the fragment. This should match the name of a repo defined above.
            ref?: string,           // The optional reference (e.g., branch or tag) in the repository.
        },
        keyPaths: string[]          // JSON Pointer-like string to select a sub-set of elements from the file.
    }[]
}

Passwords or PATs in the deployment settings file can be encrypted using the application cli:

bash
java -jar intelligencehub-runtime.jar encrypt </path/to/settings.json>

The source-controlled JSON deployment file defines all project and instance configuration used by an IntelligenceHub instance. This format is also used by the Git Backup features configured in Application Settings and can be exported using application cli:

bash
java -jar intelligencehub-runtime.jar export [path]

Deployment File JSON High-Level Schema

typescript
/**
 * Describes the high-level elements of the deployment JSON file.
 */
{
    /**
     * Information about the instance that generated the deployment file.
     */
    productInfo: {
        company: string,
        product: string,
        version: string,
        build: string,         
        stage: string,
    },

    /**
     * Licensing information.
     */
    license: {
        signature: string,
        license: string,
    },

    /**
     * Project configuration.
     */
    project: {
        version: number,       
        connections: object[],
        conditions: object[],
        inputs: object[],
        outputs: object[],
        modeling: {
            models: object[],  
            instances: object[],
        },
        pipelines: object[],
        tags: object[],
        namespaces: object[],
        functions: object[],
    },

    /**
     * Network-related configuration.
     */
    network: {
        version: number,
        groups: object[],
        hubs: object[],
    },

    /**
     * Access control configuration.
     */
    accesscontrol: {
        version: number,
        roles: object[],
        user: object[],
        apiKeys: object[],
    },

    /**
     * System-level configuration.
     */
    system: {
        version: number,
        secrets: object[],
        variables: object[],
        certificates: object[],
        settings: object,
    },
}