Skip to main content

types

PipeCraft Type Definitions

This module contains the core TypeScript interfaces and types used throughout PipeCraft. These types define the configuration schema, context objects, and domain specifications for generating CI/CD pipelines with trunk-based development workflows.

Interfaces

DomainConfig

Defined in: types/index.ts:27

Configuration for a single domain (monorepo workspace) in a PipeCraft project.

Domains enable path-based change detection in monorepo architectures, allowing different parts of the codebase to be tested and deployed independently.

Example

const apiDomain: DomainConfig = {
paths: ['packages/api/**', 'libs/shared/**'],
description: 'Backend API services',
testable: true,
deployable: true
}

Properties

deployable?
optional deployable: boolean;

Defined in: types/index.ts:71

Whether this domain should be deployed. If true, generates deployment jobs for this domain.

Default
false
Deprecated

Use prefixes: ['deploy'] instead for more flexibility

description
description: string;

Defined in: types/index.ts:38

Human-readable description of the domain's purpose. Used in workflow comments and documentation.

paths
paths: string[];

Defined in: types/index.ts:32

Glob patterns matching files in this domain. Changes to these paths will trigger domain-specific jobs.

prefixes?
optional prefixes: string[];

Defined in: types/index.ts:55

Job prefixes to generate for this domain. Each prefix generates a customizable placeholder job named {prefix}-{domain}.

For example, with domain 'core' and prefixes: ['test', 'deploy', 'lint']:

  • test-core (runs when core/ changes)
  • deploy-core (runs when core/ changes)
  • lint-core (runs when core/ changes)

These are placeholder jobs where you add your own logic in the custom jobs section. Prefixes provide more flexibility than the boolean flags (testable, deployable, etc).

Examples
['test', 'deploy', 'remote-test']
['lint', 'build', 'test', 'deploy', 'e2e']
remoteTestable?
optional remoteTestable: boolean;

Defined in: types/index.ts:79

Whether this domain should be tested remotely after deployment. If true, generates remote test jobs for this domain.

Default
false
Deprecated

Use prefixes: ['remote-test'] instead for more flexibility

testable?
optional testable: boolean;

Defined in: types/index.ts:63

Whether this domain has tests that should be run. If true, generates test jobs for this domain.

Default
false
Deprecated

Use prefixes: ['test'] instead for more flexibility


PipecraftConfig

Defined in: types/index.ts:113

Complete PipeCraft configuration schema.

This is the main configuration interface loaded from .pipecraftrc (YAML or JSON), .pipecraftrc.json (legacy), or the pipecraft key in package.json. It defines the entire CI/CD pipeline behavior including branch flow, merge strategies, domain configuration, versioning, and automated actions.

Example

const config: PipecraftConfig = {
ciProvider: 'github',
mergeStrategy: 'fast-forward',
requireConventionalCommits: true,
initialBranch: 'develop',
finalBranch: 'main',
branchFlow: ['develop', 'staging', 'main'],
autoMerge: { staging: true },
semver: {
bumpRules: { feat: 'minor', fix: 'patch', breaking: 'major' }
},
actions: {
onDevelopMerge: ['runTests'],
onStagingMerge: ['runTests', 'calculateVersion']
},
domains: {
api: { paths: ['packages/api/**'], description: 'API', testable: true }
}
}

Properties

actionSourceMode?
optional actionSourceMode: "local" | "remote" | "source";

Defined in: types/index.ts:246

How workflows should reference PipeCraft actions.

  • 'local': Actions copied to ./.github/actions/ (default, full control)
  • 'remote': Reference published marketplace actions (e.g., pipecraft-lab/pipecraft/actions/detect-changes@v1)
  • 'source': Use ./actions/ from repo root (internal use only, for PipeCraft's own CI)
Default
'local'
Example
// User repos (local mode)
actionSourceMode: 'local'
// Generates: uses: ./.github/actions/detect-changes

// User repos (remote mode)
actionSourceMode: 'remote'
actionVersion: 'v1.2.3'
// Generates: uses: pipecraft-lab/pipecraft/actions/detect-changes@v1.2.3

// PipeCraft repo only (source mode)
actionSourceMode: 'source'
// Generates: uses: ./actions/detect-changes
actionVersion?
optional actionVersion: string;

Defined in: types/index.ts:255

Version/tag to use when actionSourceMode is 'remote'. Pins workflows to a specific marketplace action version.

Example
'v1.2.3', 'v1', 'main'
Default
'v1'
autoMerge?
optional autoMerge: boolean | Record<string, boolean>;

Defined in: types/index.ts:162

Auto-merge configuration for branch promotions.

  • boolean: Enable/disable auto-merge for all branches
  • Record: Per-branch auto-merge settings (e.g., { staging: true, main: false })

When enabled, PRs are automatically merged after checks pass.

Default
false
branchFlow
branchFlow: string[];

Defined in: types/index.ts:152

Ordered list of branches in the promotion flow from initial to final. Must start with initialBranch and end with finalBranch.

Example
['develop', 'staging', 'main']
ciProvider
ciProvider: "github" | "gitlab";

Defined in: types/index.ts:118

CI/CD provider platform. Currently 'github' is fully supported, 'gitlab' support is planned.

domains
domains: Record<string, DomainConfig>;

Defined in: types/index.ts:208

Domain definitions for monorepo path-based change detection. Each domain represents a logical part of the codebase with its own test and deployment requirements.

finalBranch
finalBranch: string;

Defined in: types/index.ts:144

The final production branch (typically 'main' or 'master'). This is the last branch in the promotion flow.

initialBranch
initialBranch: string;

Defined in: types/index.ts:138

The first branch in the promotion flow (typically 'develop' or 'dev'). All feature branches merge into this branch.

mergeMethod?
optional mergeMethod: 
| "merge"
| "auto"
| "squash"
| "rebase"
| Record<string, "merge" | "auto" | "squash" | "rebase">;

Defined in: types/index.ts:174

Git merge method for auto-merge operations.

  • 'auto': Use fast-forward when possible, merge otherwise
  • 'merge': Always create merge commit
  • 'squash': Squash all commits into one
  • 'rebase': Rebase and fast-forward

Can be set globally or per-branch.

Default
'auto'
mergeStrategy
mergeStrategy: "fast-forward" | "merge";

Defined in: types/index.ts:125

Git merge strategy for branch promotions.

  • 'fast-forward': Requires linear history, fails if branches diverged
  • 'merge': Creates merge commits
nx?
optional nx: object;

Defined in: types/index.ts:271

Nx monorepo integration configuration. When enabled, PipeCraft generates workflows that leverage Nx's dependency graph and affected detection for intelligent change-based testing.

baseRef?
optional baseRef: string;

Base git reference for affected detection. Used in nx affected --base=<baseRef>.

Default
'origin/main'
enableCache?
optional enableCache: boolean;

Whether to include Nx cache management in workflows. Speeds up subsequent runs by caching build outputs.

Default
true
enabled
enabled: boolean;

Whether Nx integration is enabled for this project. Auto-detected if nx.json exists in project root.

tasks
tasks: string[];

Ordered list of Nx tasks to run sequentially. Tasks are executed using nx affected --target=<task>.

Example
['lint', 'test', 'build', 'e2e']
Example
nx: {
enabled: true,
tasks: ['lint', 'test', 'build', 'integration-test'],
baseRef: 'origin/main'
}
packageManager?
optional packageManager: "npm" | "yarn" | "pnpm";

Defined in: types/index.ts:220

Package manager used for dependency installation. Auto-detected during init based on lockfile presence.

  • 'npm': Uses npm (with package-lock.json)
  • 'yarn': Uses yarn (with yarn.lock)
  • 'pnpm': Uses pnpm (with pnpm-lock.yaml)
Default
'npm'
rebuild?
optional rebuild: object;

Defined in: types/index.ts:307

Idempotency and rebuild configuration. Controls when workflows should be regenerated based on config/template changes.

cacheFile
cacheFile: string;

Path to cache file storing previous config hash.

enabled
enabled: boolean;

Whether idempotency checking is enabled. If true, workflows are only regenerated when config or templates change.

forceRegenerate
forceRegenerate: boolean;

Force regeneration even if hash matches. Useful for debugging or manual overrides.

hashAlgorithm
hashAlgorithm: "md5" | "sha1" | "sha256";

Hashing algorithm for detecting config changes.

ignorePatterns
ignorePatterns: string[];

Patterns to ignore when calculating config hash.

skipIfUnchanged
skipIfUnchanged: boolean;

Skip regeneration if config hash hasn't changed.

watchMode
watchMode: boolean;

Enable watch mode for automatic regeneration on config changes.

requireConventionalCommits
requireConventionalCommits: boolean;

Defined in: types/index.ts:132

Whether to enforce conventional commit message format. If true, commit messages must follow the Conventional Commits specification.

See

https://www.conventionalcommits.org/

semver
semver: object;

Defined in: types/index.ts:196

Semantic versioning configuration. Maps conventional commit types to version bump levels.

bumpRules
bumpRules: Record<string, string>;

Mapping of commit types to semver bump levels (major, minor, patch).

Example
semver: {
bumpRules: {
feat: 'minor', // New features bump minor version
fix: 'patch', // Bug fixes bump patch version
breaking: 'major' // Breaking changes bump major version
}
}
versioning?
optional versioning: object;

Defined in: types/index.ts:350

Version management configuration using release-it. Enables automatic version bumping, tagging, and changelog generation.

autoPush
autoPush: boolean;

Automatically push tags to remote after creation.

autoTag
autoTag: boolean;

Automatically create git tags for new versions.

bumpRules
bumpRules: Record<string, string>;

Mapping of commit types to version bump levels.

changelog
changelog: boolean;

Generate CHANGELOG.md from conventional commits.

conventionalCommits
conventionalCommits: boolean;

Use conventional commits for version calculation.

enabled
enabled: boolean;

Whether version management is enabled.

releaseItConfig
releaseItConfig: string;

Path to release-it configuration file.