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
- Download and extract the plugin archive manually and compare its layout with the From pattern in the plugin manifest
- Fix the From pattern in the manifest/index to match the real archive layout (include the top-level directory if present)
- Check that a build for your OS/architecture exists in the release; if not, pick another platform or build from source
- 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
- Write tests that extract the real release archive and assert the glob matches
- Bump plugin index version whenever archive layout changes
- Confirm platform artifacts exist for all supported OS/arch pairs
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
- could not get files using a glob string: %w
- could not find move targets: %w
- failed to create a symlink from %q to %q: %w
- writing metadata to file: %w
- reading metadata file: %w
AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28).
Data as JSON: /api/errors/140865bbb64a9bfe.
Report an issue: GitHub.