hasura/graphql-engine · error

no files in the plugin archive matched the glob pattern=%s

Error message

no files in the plugin archive matched the glob pattern=%s

What it means

findMoveTargets ran the glob built from the plugin's From pattern against the extracted archive directory and got zero matches, so there is nothing to move into the install layout. The plugin binary/artifact the manifest expects is not where the manifest says it is.

Source

Thrown at cli/plugins/move.go:72

	newDir, err := filepath.Abs(filepath.Join(filepath.FromSlash(toDir), filepath.FromSlash(fo.To)))
	if err != nil {
		return nil, errors.E(
			op,
			fmt.Errorf("could not get the relative path for the move dst: %w", err),
		)
	}

	gl, err := filepath.Glob(
		filepath.Join(filepath.FromSlash(fromDir), filepath.FromSlash(fo.From)),
	)
	if err != nil {
		return nil, errors.E(op, fmt.Errorf("could not get files using a glob string: %w", err))
	}

	if len(gl) == 0 {
		return nil, errors.E(
			op,
			fmt.Errorf("no files in the plugin archive matched the glob pattern=%s", fo.From),
		)
	}

	moves := make([]move, 0, len(gl))
	for _, v := range gl {
		newPath := filepath.Join(newDir, filepath.Base(filepath.FromSlash(v)))
		// Check secure path
		m := move{from: v, to: newPath}
		if !isMoveAllowed(fromDir, toDir, m) {
			return nil, errors.E(
				op,
				fmt.Errorf(
					"can't move, move target %v is not a subpath from=%q, to=%q",
					m,
					fromDir,
					toDir,
				),
			)

View on GitHub (pinned to 724551b9ae)

Solutions

  1. Download and extract the plugin archive manually and compare its layout with the From pattern in the plugin manifest
  2. Fix the From pattern in the manifest/index to match the real archive layout (include the top-level directory if present)
  3. Check that a build for your OS/architecture exists in the release; if not, pick another platform or build from source
  4. Update the plugin index (hasura plugins update-index) in case the layout fix was published

Example fix

// before
From: "plugin" // archive actually contains build/plugin
// after
From: "build/plugin"
Defensive patterns

Strategy: validation

Validate before calling

matches, _ := filepath.Glob(filepath.Join(srcDir, filepath.FromSlash(fo.From)))
if len(matches) == 0 {
    return fmt.Errorf("archive layout does not match From=%s; inspect the extracted archive", fo.From)
}

Try / catch

if err := moveToInstallDir(...); err != nil && strings.Contains(err.Error(), "no files in the plugin archive matched") {
    // extract archive, compare layout, update manifest or index
}

Prevention

When it happens

Trigger: Installing a plugin whose manifest From glob (e.g. 'bin/*') matches no file in the downloaded/extracted archive — wrong path casing, archive layout changed upstream, or glob missing a directory level.

Common situations: Plugin release changed its archive layout (added a top-level folder) without updating the manifest; From uses 'dist/plugin' but archive contains 'plugin'; OS/arch-specific artifact missing from the release for your platform.

Related errors


AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28). Data as JSON: /api/errors/140865bbb64a9bfe. Report an issue: GitHub.