`dfx generate` should download the `.did` files of imported canisters (`dfx.json`)
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 204
- Forks
- 98
- PR merge metrics
- No merged PRs in 30d
Description
I tried the following:
- Run workflow in GitHub Actions to build dfx project with custom canisters (frontend + backend)
- Using dfx build command sequentially for each canister
I expected to see: Build succeeds with all canisters compiled
Instead: Build fails due to missing .did files despite them being defined in dfx.json with remote URLs:
- icrc1_ledger_canister.did
- ledger.did
- evm_rpc.did
The error occurs during dfx generate prebuild step as it looks for .did files in local directory path even though they are defined as remote URLs in dfx.json.
Current workaround is to use curl to download the .did files before executing dfx build or dfx generate. This affects the developer experience.
Meta
dfx --version: 0.24.0
dfx 0.24.0
Further log output
Run find . -name "ledger.did"
./node_modules/@dfinity/ledger-icp/dist/candid/ledger.did
Building canisters...
WARN: .did file for canister 'evm_rpc' does not exist.
WARN: .did file for canister 'ledger' does not exist.
WARN: .did file for canister 'icrc1_ledger_canister' does not exist.
Building canisters...
WARN: .did file for canister 'evm_rpc' does not exist.
WARN: .did file for canister 'icrc1_ledger_canister' does not exist.
Building canisters...
WARN: .did file for canister 'icrc1_ledger_canister' does not exist.
WARN: .did file for canister 'evm_rpc' does not exist.
Building frontend...
Error: Failed while trying to build all canisters.
Caused by: The post-build step failed for canister 'b77ix-eeaaa-aaaaa-qaada-cai' (landing)
Caused by: Failed to build frontend for network 'local'.
Caused by: The command 'cd "/home/runner/work/multisignature/multisignature" && CANISTER_CANDID_PATH="/home/runner/work/multisignature/multisignature/.dfx/local/canisters/landing/assetstorage.did" CANISTER_ID="b77ix-eeaaa-aaaaa-qaada-cai" CANISTER_ID_ACCOUNT="bkyz2-fmaaa-aaaaa-qaaaq-cai" CANISTER_ID_CENTRAL="bd3sg-teaaa-aaaaa-qaaba-cai" CANISTER_ID_DASH="be2us-64aaa-aaaaa-qaabq-cai" CANISTER_ID_EVM_RPC="7hfb6-caaaa-aaaar-qadga-cai" CANISTER_ID_ICRC1_LEDGER_CANISTER="br5f7-7uaaa-aaaaa-qaaca-cai" CANISTER_ID_INTERNET_IDENTITY="bw4dl-smaaa-aaaaa-qaacq-cai" CANISTER_ID_LANDING="b77ix-eeaaa-aaaaa-qaada-cai" CANISTER_ID_LEDGER="by6od-j4aaa-aaaaa-qaadq-cai" DFX_NETWORK="local" DFX_VERSION="0.[24](https://github.com/keygate-vault/multisignature/actions/runs/12090915916/job/33718593999#step:10:25).0" "npm" "run" "build"' failed with exit status 'exit status: 255'.
Stdout:
> prebuild
> npm run prebuild --workspaces --if-present
> dash@0.0.1 prebuild
> dfx generate
> landing@0.0.0 prebuild
> dfx generate
Stderr:
Generating type declarations for canister ledger:
/home/runner/work/multisignature/multisignature/src/declarations/ledger/ledger.did.d.ts
/home/runner/work/multisignature/multisignature/src/declarations/ledger/ledger.did.js
/home/runner/work/multisignature/multisignature/src/declarations/ledger/ledger.did
Generating type declarations for canister landing:
/home/runner/work/multisignature/multisignature/src/declarations/landing/landing.did.d.ts
/home/runner/work/multisignature/multisignature/src/declarations/landing/landing.did.js
/home/runner/work/multisignature/multisignature/src/declarations/landing/landing.did
Generating type declarations for canister internet_identity:
/home/runner/work/multisignature/multisignature/src/declarations/internet_identity/internet_identity.did.d.ts
/home/runner/work/multisignature/multisignature/src/declarations/internet_identity/internet_identity.did.js
/home/runner/work/multisignature/multisignature/src/declarations/internet_identity/internet_identity.did
Generating type declarations for canister icrc1_ledger_canister:
Error: Failed while trying to generate type declarations for 'icrc1_ledger_canister'.
Caused by: Candid file: /home/runner/work/multisignature/multisignature/.dfx/local/canisters/icrc1_ledger_canister/icrc1_ledger_canister.did doesn't exist.
npm error Lifecycle script `prebuild` failed with error:
npm error code [25](https://github.com/keygate-vault/multisignature/actions/runs/12090915916/job/33718593999#step:10:26)5
npm error path /home/runner/work/multisignature/multisignature/src/dash
npm error workspace dash@0.0.1
npm error location /home/runner/work/multisignature/multisignature/src/dash
npm error command failed
npm error command sh -c dfx generate
Generating type declarations for canister ledger:
/home/runner/work/multisignature/multisignature/src/declarations/ledger/ledger.did.d.ts
/home/runner/work/multisignature/multisignature/src/declarations/ledger/ledger.did.js
/home/runner/work/multisignature/multisignature/src/declarations/ledger/ledger.did
Generating type declarations for canister landing:
/home/runner/work/multisignature/multisignature/src/declarations/landing/landing.did.d.ts
/home/runner/work/multisignature/multisignature/src/declarations/landing/landing.did.js
/home/runner/work/multisignature/multisignature/src/declarations/landing/landing.did
Generating type declarations for canister internet_identity:
/home/runner/work/multisignature/multisignature/src/declarations/internet_identity/internet_identity.did.d.ts
/home/runner/work/multisignature/multisignature/src/declarations/internet_identity/internet_identity.did.js
/home/runner/work/multisignature/multisignature/src/declarations/internet_identity/internet_identity.did
Generating type declarations for canister icrc1_ledger_canister:
Error: Failed while trying to generate type declarations for 'icrc1_ledger_canister'.
Caused by: Candid file: /home/runner/work/multisignature/multisignature/.dfx/local/canisters/icrc1_ledger_canister/icrc1_ledger_canister.did doesn't exist.
npm error Lifecycle script `prebuild` failed with error:
npm error code 255
npm error path /home/runner/work/multisignature/multisignature/src/landing
npm error workspace landing@0.0.0
npm error location /home/runner/work/multisignature/multisignature/src/landing
npm error command failed
npm error command sh -c dfx generate
Error: Process completed with exit code 2[55](https://github.com/keygate-vault/multisignature/actions/runs/12090915916/job/33718593999#step:10:56).
See https://github.com/keygate-vault/multisignature/actions/runs/12090915916/workflow.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the dfx generate prebuild path and how imported canisters in dfx.json are resolved when their .did values are remote URLs. Reproduce the failure with the listed canisters and verify that generation downloads the referenced files and completes without the missing-file error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- cli, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100