Skip to main content

Custom-scaffold engine for data-product-forge — install, plug in any scaffold bundle (Python plugin or YAML/Jinja), generate a complete project from your contract

Project description

data-product-forge-custom-scaffold

The custom-scaffold engine for data-product-forge. Install it alongside the CLI, plug in any scaffold bundle, and generate a complete project from your contract.

pip install data-product-forge data-product-forge-custom-scaffold

This pulls data-product-forge-sdk transitively (import path: fluid_sdk). Requires Python >=3.10.

Then in any fluid contract:

extensions:
  customScaffold:
    libraries:
      - id: ci
        source: { kind: git, url: "https://github.com/example/my-bundle", ref: "v1.0" }
    patterns:
      - use: ci:basic
fluid generate custom-scaffold
# ✓ 3 files written, 0 failed
#   README.md
#   .gitlab-ci.yml
#   docs/runbook.md

Deterministic, idempotent, atomic.


What this engine does

This is the runtime for data-product-forge's custom-scaffold feature:

  1. Discovers itself with the CLI via Python entry-points (just pip install).
  2. Resolves bundles from path (local), git (clone into cache), or entrypoint (installed Python plugin).
  3. Validates the extensions.customScaffold block in your contract.
  4. Renders each pattern through Jinja2.
  5. Writes the generated files atomically with path-traversal protection.
  6. Copies the bundle's static/ directory verbatim alongside rendered templates (for binary fixtures, sample data, pre-rendered files).

What's in the contract

extensions:
  customScaffold:
    libraries:
      - id: ci                                          # local alias
        source:
          kind: git                                     # path | git
          url: "https://github.com/example/ci-bundle"
          ref: "v1.0"
          subdir: "scaffold"                            # optional
          auth: { secret_ref: GITHUB_TOKEN }            # optional
    patterns:
      - use: ci:gitlab-ci                               # <library-id>:<pattern-name>
        variables:
          parentCiTemplateRef: "my-org/ci-templates@main"

Source kinds

Kind What it does When to use
path Reads a local directory. Relative paths anchor to the contract's directory. Bundle development; private monorepos that vendor bundles.
git git clone into the cache. Shared bundles distributed via a git repo.
entrypoint Loads a Python CustomScaffold subclass registered via fluid_build.custom_scaffolds entry-point. Bundles that need full programmatic control (external API calls, complex conditionals).

Auth via auth.secret_ref (env-var name, never persisted).

Note: explicit npm and pypi source kinds (auto-fetch from registry) are not in v0. For pip-installable Python plugins, use kind: entrypoint after pip install-ing the plugin package. Git covers most YAML/Jinja distribution today. File an issue if you need direct-from-registry npm/pypi fetch.

Bundle authoring

Two paths — pick whichever fits:

A. YAML + Jinja bundle (no Python)

Drop a directory like this:

my-bundle/
├── fluid-scaffold.yaml         ← manifest
├── templates/
│   ├── README.md.j2            ← Jinja templates
│   └── .gitlab-ci.yml.j2
└── static/                      ← optional — copied verbatim
    └── docs/
        └── runbook.md

The engine's built-in TemplatedCustomScaffold reads the manifest, renders the templates, and copies static/ verbatim.

→ See docs/walkthrough/build-a-yaml-bundle.md for the step-by-step.

B. Python plugin bundle

Subclass fluid_sdk.CustomScaffold directly. Full programmatic control.

→ See the SDK walkthrough.

CLI surface

fluid generate custom-scaffold [OPTIONS]

  -c, --contract PATH    Path to contract.fluid.yaml (default: ./contract.fluid.yaml)
  -o, --output PATH      Output root (default: cwd)
      --dry-run          Plan only  print the file list, write nothing.
      --pattern USE      Restrict to specific patterns (repeatable)
      --lib ID           Restrict to specific library ids (repeatable)
      --json             Emit JSON instead of human output

Exit codes:

Code Meaning
0 success
1 bad CLI args / contract not found
2 engine error (resolution, plan, or apply failed)
3 at least one apply() action failed

Documentation

Doc What's inside
docs/getting-started/ 5-min: install, run against a fixture bundle, see the output
docs/walkthrough/build-a-yaml-bundle.md 15-min: author your own YAML/Jinja bundle from scratch
docs/walkthrough/from-git-bundle.md 5-min: consume a public bundle straight from a git repo
docs/reference/manifest-format.md Full fluid-scaffold.yaml reference

License

Apache-2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

data_product_forge_custom_scaffold-0.2.0.tar.gz (37.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file data_product_forge_custom_scaffold-0.2.0.tar.gz.

File metadata

File hashes

Hashes for data_product_forge_custom_scaffold-0.2.0.tar.gz
Algorithm Hash digest
SHA256 9da053c1d8d1715254c18416634e8b5ea0dd2a8f5427c20480c920b95a39a9d5
MD5 a36b20cb4e04a8a40d7a429f024894b6
BLAKE2b-256 89d863e802b967ba7e89df3ec4f813ab87b717dbd54cff6f84d7165d2d151ee5

See more details on using hashes here.

Provenance

The following attestation bundles were made for data_product_forge_custom_scaffold-0.2.0.tar.gz:

Publisher: release.yml on Agenticstiger/data-product-forge-custom-scaffold

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file data_product_forge_custom_scaffold-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for data_product_forge_custom_scaffold-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c0df4437983fe85a0a236e6b2331af7ee32cceae92e69e70e9b16d1abed3bd84
MD5 9bf5e6461c15bca56ec7588e15b2757e
BLAKE2b-256 7c6fa93fbc3f96d83d790215b9602f03c696f46279f069d7b3d9e3aea93af91f

See more details on using hashes here.

Provenance

The following attestation bundles were made for data_product_forge_custom_scaffold-0.2.0-py3-none-any.whl:

Publisher: release.yml on Agenticstiger/data-product-forge-custom-scaffold

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page