Reusable Workflow Reference
The shared reusable workflow entrypoint is:
.github/workflows/aleph-rootfs-build-publish-deploy.yml
Its purpose is to give consumer repositories a ready-made GitHub Actions job for:
- checking out the caller repository
- checking out
relay-button - installing the shared workspace
- building a RootFS image through the Aleph Rootfs Runner
- optionally publishing that RootFS to IPFS and Aleph
- exporting manifest and image outputs back to the caller workflow
Current Status
This workflow is real and usable today for the RootFS build/publish part of the pipeline.
It is not yet the full end-to-end Aleph deployment workflow.
Specifically:
- RootFS build is implemented
- RootFS publish is implemented
- manifest export is implemented
- artifact upload is implemented
- VM deploy inside this reusable workflow is still intentionally not wired
If deploy_vm=true is passed today, the workflow fails fast on purpose and
tells the caller to use the shared deploy action separately.
This limitation applies to the shared reusable workflow in relay-button
itself. Consumer repositories such as
universal-connectivity may still layer their own VM deployment workflow on
top of the shared RootFS stage.
Inputs
Current supported inputs:
profileRequired profile identifier such asuc-go-peer.publishWhether to upload the built RootFS to IPFS and publish an AlephSTOREmessage.deploy_vmReserved for future shared deployment wiring. Not implemented yet.rootfs_versionOptional explicit version override for the generated RootFS manifest.rootfs_contract_pathPath to the RootFS contract inside the caller repository.rootfs_driverRootFS build driver preference such asauto.project_checkout_pathCheckout path used for the caller repository.tooling_checkout_pathCheckout path used forrelay-button.tooling_repositoryRepository that contains the shared tooling source.tooling_refRef of the shared tooling repository to checkout.
Secrets
ALEPH_PRIVATE_KEYRequired only whenpublish=true.
Outputs
The workflow currently exports:
rootfs_versionrootfs_manifest_jsonrootfs_manifest_pathrootfs_manifest_copy_target_pathrootfs_manifest_versioned_pathrootfs_image_pathrootfs_execution_moderootfs_cidrootfs_item_hashrootfs_source_size_bytesrootfs_manifest_cidrootfs_manifest_gateway_urlrootfs_manifest_artifact_urlrootfs_manifest_artifact_api_zip_url
These outputs let a caller workflow continue with repo-specific steps such as:
- site publish or republish
- VM deployment through a separate action
- probe execution
- retention cleanup
What The Workflow Actually Does
At a high level, the workflow:
- checks out the caller repository
- checks out
relay-button - installs
pnpmand Node - installs the shared workspace dependencies
- validates input combinations
- installs system packages needed for RootFS builds
- runs
packages/node/src/rootfs-runner.ts - validates published RootFS outputs when
publish=true - exports the generated manifest JSON
- publishes the generated manifest JSON to IPFS only when
publish=true - uploads the resulting workspace artifacts
- resolves the uploaded manifest artifact URLs and prints them in the job summary
Manifest Artifact URLs
When the workflow uploads the generated RootFS manifest bundle, it also:
- exposes
rootfs_manifest_artifact_urlas a reusable workflow output - exposes
rootfs_manifest_artifact_api_zip_urlas a reusable workflow output - prints the GitHub artifact links in the workflow summary together with the manifest paths
When publish=true, the workflow also:
- requires the RootFS publisher to emit both
rootfs_cidandrootfs_item_hash - publishes the final manifest JSON itself to IPFS
- exposes
rootfs_manifest_cidas a reusable workflow output - exposes
rootfs_manifest_gateway_urlas a reusable workflow output - prints the RootFS CID, Aleph item hash, manifest IPFS CID, and Aleph gateway URL in the workflow summary
When publish=false, no RootFS CID or Aleph STORE item hash is expected, and the manifest JSON is kept as a GitHub Actions artifact only. Those artifact URLs follow GitHub artifact retention and access rules.
Validation Rules
The workflow currently enforces:
deploy_vm=trueis rejected because that stage is not wired yetpublish=truerequiresALEPH_PRIVATE_KEY
This is intentional. The workflow is designed to be honest about what it owns today instead of pretending to be a full deploy pipeline already.
Recommended Usage
Use this workflow when:
- you want shared RootFS build and publish behavior
- your consumer repo still wants to keep its own orchestration around deploy, site publishing, probing, or retention
Do not use it yet as the only deploy entrypoint if you expect:
- VM deployment
- site publishing
- domain linking
- retention cleanup
inside the same reusable workflow call.
Relationship To The Package-Based Approach
This repo also supports a package-based integration model where consumer repos
install @le-space/node and call the Aleph runners directly from their own
workflows.
That package-based approach is still the more flexible option when:
- the consumer repo is public and the shared repo is private
- the consumer wants to keep its own workflow layout
- only part of the pipeline should be centralized
The reusable workflow is best understood as a shared RootFS stage, not yet a complete shared deployment system.
Site Publish Consumers
When a consumer repository uses @le-space/node directly for site publishing,
the upload step is handled in Node by runSiteMode(...). The caller still
needs Aleph CLI access for pin and domain commands, but it no longer needs a
separate Python static-site upload helper chain.