Copier template for bootstrapping worai graph sync projects with the current WordLift SDK v8 cloud-flow contract.
Use this repository when you need a new graph sync project with the WordLift runtime contract, GitHub Actions workflow, profile scaffolding, and local examples already aligned.
This template gives you:
- a validated Copier question contract in
copier.yml - a runtime config template in
worai.toml.jinja - profile scaffolding under
profiles/ - a generated GitHub Actions workflow based on
.github/workflows/graph-sync.yml - example local runtime code in
src/acme_kg/postprocessors/youtube.pyandsrc/acme_kg/enrichment/youtube.py - smoke coverage and maintenance tests for the template itself
Generate from the local checkout:
copier copy . ../my-graph-projectGenerate from GitHub:
copier copy gh:wordlift/graph-sync-template my-graph-projectFor offline or automation-friendly generation, skip API-key validation explicitly:
copier copy --data validate_api_key=false gh:wordlift/graph-sync-template my-graph-projectapi_keysource_typewith one of:urls,sitemap,google_sheets
urls:urlssitemap:sitemap_url, optionalsitemap_url_patterngoogle_sheets:sheets_url,sheets_name,sheets_service_account
overwrite = truematerialization_backend = "worph"canonical_id_strategy = "dependency_graph"concurrency = 4ingest_loader = "web_scrape_api"ingest_timeout_ms = 120000google_search_console = falseprofiles = ["default"]default_profile = "default"validate_api_key = true
During copier copy, the template:
- validates the WordLift API key against
/accounts/meby default - derives the runtime package name from the returned
dataset_uri - renames the local runtime package from
acme_kgto<dataset>_graph_sync - writes secrets to a local
.envinstead of tracked config - sets generated
pyproject.toml[project].namefrom the destination directory name - scaffolds
profiles/<profile>/mappings,templates, andpostprocessors - removes
.copier-answers.ymland excludescopier.ymlfrom generated output
If validation is skipped or the API is unreachable, the fallback package name is acme_graph_sync.
Generated projects include:
worai.toml.github/workflows/graph-sync.yml.envprofiles/<profile>/mappingsprofiles/<profile>/templatesprofiles/<profile>/postprocessors
Generated projects do not include template-maintenance assets such as:
copier.yml.github/workflows/template-smoke.ymltests/test_runtime_assets.pytests/test_template_smoke.pytests/test_youtube_runtime.py
The template is aligned to the SDK v8 cloud-flow contract:
wordlift-sdk>=8.0.16,<9.0.0lxml>=5.4.0(required by the bundled YouTube postprocessor example)- explicit
ingest_source - explicit
ingest_loader - explicit
ingest_timeout_ms - no legacy
web_page_import_modeorweb_page_import_timeoutfallback keys
Static entity templates in generated projects must follow these constraints:
- one static template file defines exactly one subject node
- no blank nodes
- explicit IRIs only
schema:urlandschema:sameAsmust be URL literals- filenames use depth prefixes such as
10_,20_,30_ - exported root IRIs in
exports.toml(.j2)remain stable and unhashed
Default scaffold examples:
profiles/default/templates/20_organization.ttl.j2profiles/default/templates/20_website.ttl.j2profiles/default/templates/40_organization_postal_address.ttl.j2
This repository uses:
- Python
3.12 uvfor dependency managementpytestfor verification
Install dependencies:
uv sync --devRun the template-maintenance test suite:
uv run pytest -qRun the render smoke check:
uv run scripts/smoke_render_template.sh-
deploy release [major|minor|patch](default:patch)scripts/deploy_release.sh [major|minor|patch]- bumps version, refreshes dependencies and lockfile, requires docs/spec updates, then commits, tags, and pushes (including tags)
-
upgrade projectscripts/upgrade_project.sh- updates
wordlift-sdkto latest, updates.github/workflows/graph-sync.ymlto latestwordlift/graph-synctag, then runsdeploy release patch
docs/INDEX.mddocs/QUICKSTART.mddocs/TEMPLATE_SETUP.mddocs/WORAI_TOML_EXAMPLES.mddocs/STATE_OF_ART.mdspecs/INDEX.mdspecs/graph-sync/overview.mdspecs/graph-sync/agent-working-agreement.md
The template-maintenance workflow lives in .github/workflows/template-smoke.yml. It:
- installs dependencies with
uv - runs
uv run pytest -q - runs
uv run scripts/smoke_render_template.sh
Generated projects receive .github/workflows/graph-sync.yml, which exposes profile-based manual dispatch and reusable workflow inputs.
