@mondaydotcomorg/dockerfile-registry-sdk

Node.js SDK for fetching Dockerfiles from the dockerfile-registry. Provides a CLI and programmatic API with smart routing between template-based and service-specific Dockerfiles.
Features
- Smart routing - Automatically chooses between template and service override Dockerfiles based on configuration
- Zero runtime dependencies - Uses only Node.js built-in modules
- CLI + programmatic API - Use from the command line or import in your code
- TypeScript-first - Full type definitions included
- Dry-run mode - Resolve tags without downloading
Requirements
- Node.js >= 20
- A GitHub token ā resolved from the first available source:
--token CLI flag / token option
GITHUB_TOKEN environment variable
GH_TOKEN environment variable
gh auth token from the GitHub CLI (run gh auth login once)
Installation
npm install -g @mondaydotcomorg/dockerfile-registry-sdk
npx @mondaydotcomorg/dockerfile-registry-sdk
yarn add @mondaydotcomorg/dockerfile-registry-sdk
How It Works
The SDK automatically chooses the right fetching strategy:
- With
.dockerrc.json: Routes to template-based Dockerfiles (language templates)
- Without
.dockerrc.json or empty config: Routes to service-specific overrides
Configuration
Create a .dockerrc.json file for template-based Dockerfiles:
{
"version": "1",
"language": "node",
"baseVersion": "22",
"serviceRepoType": "standalone",
"dockerfileTag": "stable"
}
version | Config schema version (currently "1") |
language | Language runtime: node, go, or python |
baseVersion | Base version (e.g., "22" for Node.js 22.x, or "22.14" for a specific version) |
serviceRepoType | Repository type: standalone or monorepo |
dockerfileTag | Tag suffix: stable (default) or latest ā composes into {repoType}-{lang}-{ver}-{tag} |
For service-specific overrides, omit the config file and pass --service-name. If no --service-name is provided, the SDK falls back to the name field from package.json.
CLI Usage
export GITHUB_TOKEN=your_token
dockerfile-registry-sdk
dockerfile-registry-sdk -s harmony
dockerfile-registry-sdk ./build
dockerfile-registry-sdk -n
dockerfile-registry-sdk -F
dockerfile-registry-sdk --json
dockerfile-registry-sdk -v
dockerfile-registry-sdk -f path/to/.dockerrc.json
dockerfile-registry-sdk --token ghp_xxx
CLI Options
-f, --config-file <path> | Path to .dockerrc.json (default: .dockerrc.json) |
-s, --service-name <name> | Service name for override fetch |
-r, --repo <owner/repo> | GitHub repository (default: DaPulse/dockerfile-registry) |
-n, --dry-run | Resolve tag without downloading |
-F, --force | Overwrite existing Dockerfile |
-v, --verbose | Enable verbose logging |
--token <token> | GitHub token (falls back to GITHUB_TOKEN, GH_TOKEN, or gh auth token) |
--json | Output result as JSON |
-h, --help | Show help message |
Environment Variables
GITHUB_TOKEN / GH_TOKEN: GitHub token for downloading releases. If neither is set, the SDK falls back to gh auth token from the GitHub CLI.
DOCKERRC_JSON: Inline JSON config instead of reading from file (CI override pattern)
Programmatic API
import {
fetchDockerfile,
fetchTemplateDockerfile,
fetchServiceOverrideDockerfile,
} from '@mondaydotcomorg/dockerfile-registry-sdk';
const result = await fetchDockerfile({
token: process.env.GITHUB_TOKEN,
});
const result = await fetchTemplateDockerfile({
config: {
version: '1',
language: 'node',
baseVersion: '22',
serviceRepoType: 'standalone',
dockerfileTag: 'stable',
},
token: process.env.GITHUB_TOKEN,
outputDir: './build',
});
const result = await fetchServiceOverrideDockerfile({
serviceName: 'harmony',
token: process.env.GITHUB_TOKEN,
});
const { tag } = await fetchDockerfile({ dryRun: true });
Types
interface FetchOptions {
configFile?: string;
config?: Partial<DockerrcConfig>;
serviceName?: string;
repo?: string;
outputDir?: string;
token?: string;
dryRun?: boolean;
force?: boolean;
verbose?: boolean;
}
interface FetchResult {
tag: string;
files: string[];
outputDir: string;
}
CI Integration
steps:
- name: Fetch Dockerfile
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npx @mondaydotcomorg/dockerfile-registry-sdk
- name: Build Docker image
run: docker build -t myapp .
Tag Resolution
Template-based Dockerfiles
The SDK computes the release tag from your .dockerrc.json:
language: node, baseVersion: 22, tag: stable | standalone-node-22-stable |
language: go, baseVersion: 1, tag: stable | standalone-go-1-stable |
language: python, baseVersion: 3, tag: stable | standalone-python-3-stable |
language: node, baseVersion: 22, dockerfileTag: latest | standalone-node-22-latest |
Service Override Dockerfiles
The tag is based on the service name:
harmony | service-override-harmony-latest |
chronos | service-override-chronos-latest |
my-service | service-override-my-service-latest |
Error Handling
The SDK exports typed error classes, each with a distinct exit code:
ConfigError | 1 | Invalid or missing configuration |
AuthError | 2 | Missing or invalid GitHub token |
DownloadError | 3 | Release not found or download failure |
import { ConfigError, AuthError, DownloadError } from '@mondaydotcomorg/dockerfile-registry-sdk';
try {
await fetchDockerfile({ token });
} catch (err) {
if (err instanceof ConfigError) {
} else if (err instanceof AuthError) {
} else if (err instanceof DownloadError) {
}
}
License
Internal use only.