Adding a new tool¶
Checklist to onboard a new <tool>-bin repo onto the edapack build system.
Create the repo with the standard layout:
build-inputs.yaml ivpm.yaml # lists edapack-common as a dependency scripts/build.sh # sources packages/edapack-common/scripts/build-common.sh scripts/skill-manifest.yaml scripts/export.envrc # PATH_add bin skills/<tool>/SKILL.md (+ references/, examples/) .github/workflows/ci.yml # thin caller of the reusable workflow
Declare inputs in
build-inputs.yaml(see Authoring build-inputs.yaml): the core source and every tracked dependency, each with apolicy. And addedapack-commontoivpm.yamlso the shared scripts are fetched intopackages/edapack-common:dep-sets: - name: default-dev deps: - name: edapack-common url: https://github.com/edapack/edapack-common.git
Write
scripts/build.sh— do the tool-specific configure/build, then call the shared tail:source "$EC_COMMON/scripts/build-common.sh" ec_init_dirs src="$(ec_clone_input <core> <repo> "$EC_CORE_REF")" # ... tool-specific build into $release_root ... ec_finalize_release "$SRC_DIR" "$release_root" "$CANDIDATE_JSON" ec_make_tarball "$release_root" "<tool>-${EC_IMAGE_NAME}-${EC_VERSION}.tar.gz"
Add the thin
ci.yml:on: schedule: [{ cron: "0 12 * * 0" }] workflow_dispatch: inputs: core_ref: { type: string } input_overrides: { type: string, default: "{}" } force: { type: boolean, default: false } prerelease: { type: boolean, default: true } push: jobs: build: uses: edapack/edapack-common/.github/workflows/build-release.yml@v1 with: package: <tool>-bin images: '["manylinux_2_28_x86_64","manylinux_2_34_x86_64"]' core_ref: ${{ inputs.core_ref }} input_overrides: ${{ inputs.input_overrides || '{}' }} force: ${{ inputs.force || false }} prerelease: ${{ inputs.prerelease || true }}
Validate locally:
scripts/local-build.sh ../<tool>-binproduces a tarball indist/withmanifest.json,skills/, andexport.envrc, and leaves no root-owned files (find ../<tool>-bin -uid 0is empty).Run the acceptance gate (see the plan’s test §3.6): manifest valid, change-gate skip/publish, pinned build, skills+envrc present.