hyperledger/fabric · error

failed to calculate dependencies: incomplete package: %s

Error message

failed to calculate dependencies: incomplete package: %s

What it means

During golang chaincode dependency calculation, 'go list' reports a package as Incomplete; the platform returns this error instead of building. It means the go toolchain could not fully resolve imports (missing dependency or unresolvable package) while listing transitive deps for the chaincode.

Source

Thrown at core/chaincode/platforms/golang/list.go:81

		return nil, wrapExitErr(err, "'go list -deps' failed")
	}
	decoder := json.NewDecoder(stdout)

	if err := cmd.Start(); err != nil {
		return nil, err
	}

	var list []PackageInfo
	for {
		var packageInfo PackageInfo
		if err := decoder.Decode(&packageInfo); errors.Is(err, io.EOF) {
			break
		} else if err != nil {
			return nil, err
		}

		if packageInfo.Incomplete {
			return nil, fmt.Errorf("failed to calculate dependencies: incomplete package: %s", packageInfo.ImportPath)
		}
		if !packageInfo.Goroot {
			list = append(list, packageInfo)
		}
	}

	err = cmd.Wait()
	if err != nil {
		return nil, errors.Wrapf(err, "listing deps for package %s failed", pkg)
	}

	return list, nil
}

func wrapExitErr(err error, message string) error {
	if ee, ok := err.(*exec.ExitError); ok {
		return errors.Wrapf(err, message+" with: %s", strings.TrimRight(string(ee.Stderr), "\n\r\t"))
	}

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Run 'go mod vendor' in the chaincode source so the vendor tree contains all imports
  2. Fix or remove the missing import reported by the ImportPath in the message
  3. Ensure the chaincode builds locally: 'go build ./...' before packaging
  4. Match the build mode to the source: GOPATH legacy chaincodes should not mix with module-style imports

Example fix

// before
vendor/github.com/foo/bar  (missing new dep)
// after
$ go mod tidy && go mod vendor
Defensive patterns

Strategy: validation

Validate before calling

cmd := exec.Command("go", "build", "./...")
if out, err := cmd.CombinedOutput(); err != nil {
  return fmt.Errorf("package incomplete: %v: %s", err, out)
}
// also: go mod verify && test -d vendor || true

Prevention

When it happens

Trigger: GetDeploymentPayload on the golang platform calls gopathDependencyPackageInfo running 'go list -deps -f ...'; any returned packageInfo with Incomplete=true triggers the error naming the ImportPath.

Common situations: vendor directory out of sync with go.mod (old GOPATH-style build); missing import that was never vendored; broken/renamed dependency; GOPATH mode used with a package that requires modules.

Related errors


AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04). Data as JSON: /api/errors/1d6461c5a02263fa. Report an issue: GitHub.