← Back to issue list

Replace generated hook stubs with built hooks when hooks are declared

View original Github issue

Metadata

Project
snapcraft
Number
#6434
Type
pull request
State
closed
Author
copilot-swe-agent
Labels
—
Created
Updated
Closed

Current evaluation

Closed unmerged; the generated-hook regression was fixed separately by commit 271462658 and released in Snapcraft 9.1.3.

Resolution: closed superseded

Reason: PR #6434 was closed without merging because issue #6433 was resolved separately. Commit 271462658 prevented premature hook-stub creation and was targeted for Snapcraft 9.1.3.

Evaluated by: mr-cal-bot

No scores available.

Issue body

When a snap declares a `hooks:` section, Snapcraft currently creates `meta/hooks/<name>` placeholder stubs early in metadata generation. If a part later produces the real hook at `snap/hooks/<name>`, the placeholder blocks it from being staged into the final snap, leaving snapd to execute `#!/bin/true` instead of the generated hook. - **Hook provisioning** - Treat the auto-generated `#!/bin/true` file in `meta/hooks` as a replaceable placeholder during `provision_hooks(..., overwrite=False)`. - Preserve existing project hooks and other non-placeholder `meta/hooks/*` entries; only placeholder stubs are overwritten by part-generated hooks. - **Regression coverage** - Add a unit regression for `_materialize_extra_assets()` covering the failing case: a built hook in `snap/hooks/` plus an existing placeholder in `meta/hooks/`. - Update the spread regression for generated hooks to reproduce the real trigger condition: - a declared `hooks:` entry - a part-generated `snap/hooks/configure` - Assert that both `prime/meta/hooks/configure` and the packed snap contain the real generated hook payload, not the stub. - **Behavioral intent** - Keep the current precedence model intact: - project hooks still override built hooks - built hooks replace only Snapcraft-generated placeholders ```python destination = hooks_meta_dir / hook.name if ( destination.exists() and not overwrite and not _is_placeholder_hook(destination) ): continue ``` <!-- START COPILOT CODING AGENT SUFFIX --> - Fixes #6433

Evaluation history

Date Model Scores Action Summary
stealth/space-bunny-alpha — closed superseded Closed unmerged; the generated-hook regression was fixed separately by commit 271462658 and released in Snapcraft 9.1.3.
stealth/space-bunny-alpha — closed superseded Hook-stub replacement fix was closed unmerged; the regression was resolved separately in Snapcraft 9.1.3.
qwen/qwen3.6-35b-a3b
Impact: 55
Quick Win: 11
Complexity: 35
Confidence: 65
Actionability: 30
keep open WIP PR fixing generated hooks not included in Snap (#6433); author checklist incomplete — validation, lint, and test steps not yet run; 0 reviewers, 0 comments, CLA passing

Update history

Date Change
closed
updated
updated
updated
updated
updated
updated
updated
updated
created

Related work

  • Superseded By: snapcraft#6433 (confidence 98%)

    The linked bug was fixed independently by commit 271462658 after PR #6434 was closed unmerged.

Related issues

Issue Project State Summary Similarity
#6433 Generated hooks are not included in the Snap snapcraft closed Generated part hooks now replace stubs correctly; commit 271462658 prevents premature stub creation and was targeted for Snapcraft 9.1.3.
85%
#3386 meta: don't overwrite preconfigured hooks with stubs snapcraft merged Hook stub generation now preserves existing primed meta/hooks scripts; merged in snapcraft#3386 via commit bb9525144, with added unit-test fixtures and coverage.
76%
#3296 meta: write stubs for command-chain using hooks when needed snapcraft merged Merged #3296 in commit 95225991f, adding Snapcraft metadata generation of stub hooks for command-chain-based hooks.
73%
#6435 Provision built hooks before declared hook stubs snapcraft closed Closed unmerged; the hook-ordering fix and regression tests passed CI, but the PR remained unreviewed and received no maintainer feedback.
71%
#3837 fix: hooks: process generated hooks snapcraft merged Merged as commit c77e3a07a (CRAFT-1159): core22 now includes lifecycle-generated hooks in the snap via meta/hooks wrappers, with snap/hooks taking priority; adds spread tests for core18/20/22.
70%