Deploy from GitHub
This path takes a small Node.js worker from your own GitHub repository to an inspectable Liskov Application. It uses retained Manifest V5 with GitHub source import: an organization admin binds your repository to the Application, and every build attests that it came from exactly that source.
You start from the checked
retained V5 starter.
It makes one harmless GET request to https://example.com/, records the
result in managed logs, and stops. It needs no variable or secret.
Steps 1–5 spend nothing: installing, building, validating, creating the Application, binding its source, and running the GitHub workflow create no job and reserve no Service Credits. Publishing in step 6 is the mutation: it commits an effective policy and starts a deployment that draws on your organization's already-available Service Credits. Customer checkout and new Service Credit issuance are release-gated, so there is no supported way to add funds first. A green workflow is a built artifact, not a running Application.
Before you begin
Complete Set up Liskov. You need:
- a GitHub repository with a
mainbranch you can push to; - the
adminrole in your Liskov organization, or an admin who will run the source binding in step 4 (a maintainer cannot bind or retarget source); - Node.js 22 or later, and pnpm
10.33.0(the starter pins it throughpackageManager;corepack enableprovides it); and - enough already-available Service Credits for the starter's per-job spend before you reach step 6.
Repository checks take as long as your project build. Processor acceptance and runtime startup are external waits with no fixed duration.
1. Install the CLI
Use @proof-computer/proof-cli-liskov 0.14.0. It contains the retained V5
authoring, policy, and application source-binding verbs this path uses:
npm install --global @proof-computer/proof-cli
proof plugins install @proof-computer/proof-cli-liskov@0.14.0
proof liskov login
proof liskov whoami
whoami shows the organization your commands act on, as
Name (ORGANIZATION_ID, slug, role …). If you belong to more than one
organization, select the intended one with proof liskov organization use.
Then keep that organization's ID, not its slug: the workflow needs it.
2. Copy the starter into your repository
The starter directory is a complete repository root: source, tests, package and lock file, TypeScript configuration, manifest, and workflow caller. Copy it into your repository, then move the workflow caller to where GitHub runs it:
git clone --depth 1 https://github.com/proof-computer/docs.git liskov-docs
cp -R liskov-docs/examples/liskov-v1/retained-v5-starter/. YOUR_REPOSITORY/
cd YOUR_REPOSITORY
mkdir -p .github/workflows
mv liskov.yml .github/workflows/liskov.yml
Do not push yet. The workflow must not run before the Application and its source binding exist (step 4).
The files you now have are the same ones the
Manifest V5 guide
explains: src/index.ts bootstraps @proof-computer/liskov-runtime
v0.3.32, and .liskov/application-manifest.json is a once-mode V5 document
with a 60-second schedule, a managed-custody per-job spend, logs enabled, and
state.mode: off.
3. Build and validate locally
From the repository root, install the exact lock, test, and build:
pnpm install --frozen-lockfile
pnpm typecheck
pnpm test
pnpm build
test -s dist/bundle.js
Then validate the manifest with the released CLI:
proof liskov application manifest validate \
--file .liskov/application-manifest.json \
--json
Validation is read-only. A valid document reports "valid": true and
"schemaVersion": 5. Keep the 60s schedule duration: the schema parses
shorter values, but the Acurast marketplace refuses a job below its 60-second
provider minimum, so schema acceptance alone does not prove that a schedule
can launch.
4. Create the Application and bind its source
Run both commands before the first push to main that contains the
workflow. The workflow's first build must find the binding; a local build does
not create one. Replace OWNER/REPO with your repository.
Create the Application from identity alone. This writes no draft and spends nothing:
proof liskov application create hello-liskov \
--repository OWNER/REPO \
--json
Bind the exact source the Application may publish from. This requires the
organization admin role. The first binding is revision 1:
proof liskov application source-binding set hello-liskov \
--repository OWNER/REPO \
--allowed-ref refs/heads/main \
--workflow-identity OWNER/REPO/.github/workflows/liskov.yml@refs/heads/main \
--manifest-path .liskov/application-manifest.json \
--reason "first binding" \
--yes --json
The workflow's app-id is hello-liskov, matching the Application created
above. If you choose another Application id, change it in all three places:
the manifest's applicationId, the workflow's app-id, and these commands.
5. Push and let the workflow build
First replace YOUR_ORGANIZATION_ID in .github/workflows/liskov.yml with
the organization ID from step 1. Then commit the starter and push it to the
bound ref:
git add .
git commit -m "Add the Liskov retained V5 starter"
git push origin main
The workflow calls:
uses: proof-computer/liskov-github-actions/.github/workflows/acurast-app.yml@v2
The moving v2 tag contains the retained V5 source binding, first released in
v1.2.4. The called workflow installs, typechecks, tests, and builds;
uploads the bundle through the Liskov IPFS service without a spend-capable
credential; and attests the
artifact digest, source commit and ref, and workflow identity to Liskov. It
publishes nothing and deploys nothing.
When the run succeeds, record two values from it: the artifact digest, printed
in the run log as Artifact sha256:, and the commit the run built.
6. Publish from the attested build
Stop here if the organization does not already have enough available Service Credits. Read the binding values publication must repeat:
proof liskov application source-binding show hello-liskov --json
Then publish the exact document the run attested. Every value must match what was bound and attested, or the publication is refused before anything is spent:
proof liskov application policy publish hello-liskov \
--file .liskov/application-manifest.json \
--artifact-digest sha256:ARTIFACT_DIGEST_FROM_THE_RUN \
--source-commit COMMIT_THE_RUN_ATTESTED \
--source-ref refs/heads/main \
--workflow-identity OWNER/REPO/.github/workflows/liskov.yml@refs/heads/main \
--binding-revision 1 \
--revocation-epoch 0 \
--expected-pointer-version 0 \
--yes --json
Nothing is sent without --yes. --binding-revision and --revocation-epoch
are the values source-binding show reported. --expected-pointer-version is
0 for a first publication; a stale value is refused rather than overwriting
a concurrent publication.
7. Verify the result
Read the canonical explanation and the Application status:
proof liskov application policy explain hello-liskov --json
proof liskov application status hello-liskov --json
The explanation's publication, execution, spend-closeout, and managed-SSH
sections report absent, notApplicable, refused, or satisfied, with
server-owned next actions. Follow your first deployment
through the normal waiting stages.
Then verify the worker's own output. Once the runtime is ready, the managed
logs contain one starter.fetch.completed event with the host, success flag,
and HTTP status:
proof liskov application logs hello-liskov --from-start
Completion means more than a green workflow: open Proof and confirm the exact commit and workflow, artifact digest, effective policy digest, Acurast job and processor, and signed runtime contact in the proof chain.
A once Application runs one job and settles; it does not run again on its
own. See Execution and spend
before changing the execution mode.
If the build, attestation, source binding, or publication fails, use Build, attestation, import, and publication.
Next
- Make the worker your own: Author a retained Application Manifest V5 and Use the runtime SDK.
- Exact fields: Application Manifest V5 reference.
- Operate the Application: Deploy & operate.
Manifest V4
Existing Manifest V4 Applications keep running
until they are retired. New V4 imports and publications are refused with
v4_publication_disabled. Use the V5 creation, source-binding, and publication
path above.