← Back to issue list

Snapcraft 9: snapcraftctl errors in core22 snaps

View original Github issue

Metadata

Project
snapcraft
Number
#6336
Type
issue
State
open
Author
ThibF
Labels
Status: Triaged Type: Bug
Created
Updated
Closed

Current evaluation

Regression in snapcraft 9: core22 snaps using snapcraftctl in override-build fail validation. Maintainer confirmed as a regression.

Suggested action: keep open

Reason: Maintainer @mr-cal confirmed this is a regression in snapcraft 9.0.1 and reproduced it. The bug is in snapcraft/models/project.py line 2159: the validator checks info.data.get("build-base") with a hyphen, but pydantic v2 stores field names with underscores (build_base), so the check always returns None and incorrectly rejects snapcraftctl for core22 snaps. Fix is a one-line change.

Impact: 75 Quick Win: 67.5 Staleness: 45 Complexity: 10 Confidence: 85 Support Request: 0

Issue body

### Check existing issues - [x] I've verified that this bug isn't described by any existing issues. ### Bug description While running a new build of a kernel snap for core 22, there was no significant changes on the snapcraft.yaml but it leaded to a build failure. The only major difference was the jump from snapcraft 8.14.5 to 9.0.1. The build-base is core 22. ### Steps to reproduce Prepare a snapcraft core 22. Use `snapcraftctl build` in an `override-build` stage. Trigger a build on launchpad. ### Environment This error popped up in launchpad snap building service ### snapcraft.yaml ```yaml name: XXXX-a-m1-kernel adopt-info: kernel summary: Ubuntu XXXX Linux Kernel description: The XXXX Ubuntu kernel package as a snap for XXXX project type: kernel confinement: strict build-base: core22 environment: LD_LIBRARY_PATH: ${SNAP}/usr/lib hooks: fde-setup: plugs: - tee - home parts: kernel: plugin: nil build-packages: - kmod stage-packages: - linux-image-uc22-XXXX - linux-image-XXXX - linux-XXXX-firmware organize: boot: ./ lib/firmware: firmware lib/modules: modules usr/share/doc: doc override-build: | craftctl set version="$(apt show linux-image-uc22-XXXX 2>/dev/null | sed -n 's/^Version: //p' | head -n1)" rm -f "$SNAPCRAFT_PART_INSTALL"/boot/vmlinuz-* "$SNAPCRAFT_PART_INSTALL"/boot/fit-*-nofde mv "$SNAPCRAFT_PART_INSTALL"/boot/fit-*-fde "$SNAPCRAFT_PART_INSTALL"/boot/kernel.img depmod -b "$SNAPCRAFT_PART_INSTALL" $(basename "$SNAPCRAFT_PART_INSTALL"/lib/modules/*) ls . ls / if [ -e /usr/lib/ubuntu-core-initramfs/main/usr/lib/snapd/info ]; then cp /usr/lib/ubuntu-core-initramfs/main/usr/lib/snapd/info "$SNAPCRAFT_PART_INSTALL"/snapd-info; elif [ -e /usr/lib/snapd/info ]; then cp /usr/lib/snapd/info "$SNAPCRAFT_PART_INSTALL"/snapd-info; elif [ -e chroot/usr/lib/snapd/info ]; then cp chroot/usr/lib/snapd/info "$SNAPCRAFT_PART_INSTALL"/snapd-info; else echo "ERROR: no snapd-info found" 1>&2; exit 1; fi craftctl default stage: - -doc/crda - -doc/linux-base - -doc/iw - -etc - -firmware/amd - -firmware/amdgpu - -firmware/asihpi - -firmware/cavium - -firmware/cxgb3 - -firmware/cxgb4 - -firmware/dpaa2 - -firmware/i915 - -firmware/intel - -firmware/iwlwifi-* - -firmware/liquidio - -firmware/matrox - -firmware/mellanox - -firmware/mrvl - -firmware/moxa - -firmware/netronome - -firmware/nvidia - -firmware/qed - -firmware/radeon - -firmware/rockchip - -firmware/ath10k/QCA9377/hw1.0/firmware-5.bin - -firmware/ath3k-1.fw - -firmware/qca/htbtfw20.tlv - -firmware/qcom - -firmware/s5p* - -lib - -sbin - -usr fdehook: plugin: nil build-packages: - oem-fdehelper-optee override-build: | mkdir -p "$SNAPCRAFT_PART_INSTALL"/meta/hooks "$SNAPCRAFT_PART_INSTALL"/usr/lib cp -a /usr/bin/fde-setup "$SNAPCRAFT_PART_INSTALL"/meta/hooks cp -a /usr/lib/libteec* "$SNAPCRAFT_PART_INSTALL"/usr/lib ``` ### Log output ```shell snapcraft 9.0.1 from Canonical** installed Running repo phase... Cloning into 'XXXXX-kernel'... [12/Jul/2026:22:36:16 +0000] "CONNECT git.launchpad.net:443 HTTP/1.1" 200 4520178 "-" "git/2.34.1" Running pull phase... Traceback (most recent call last): File "/snap/snapcraft/18519/bin/snapcraft", line 12, in <module> sys.exit(main()) ^^^^^^ File "/snap/snapcraft/18519/lib/python3.12/site-packages/snapcraft/application.py", line 358, in main return cli.run() ^^^^^^^^^ File "/snap/snapcraft/18519/lib/python3.12/site-packages/snapcraft/cli.py", line 258, in run _run_dispatcher(dispatcher, global_args) File "/snap/snapcraft/18519/lib/python3.12/site-packages/snapcraft/cli.py", line 231, in _run_dispatcher dispatcher.run() File "/snap/snapcraft/18519/lib/python3.12/site-packages/craft_cli/dispatcher.py", line 576, in run return self._loaded_command.run(self._parsed_command_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/snap/snapcraft/18519/lib/python3.12/site-packages/snapcraft/commands/core22/lifecycle.py", line 118, in run parts_lifecycle.run(self.name, parsed_args) File "/snap/snapcraft/18519/lib/python3.12/site-packages/snapcraft/parts/lifecycle.py", line 99, in run project = models.Project.unmarshal(yaml_data_for_arch) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/snap/snapcraft/18519/lib/python3.12/site-packages/snapcraft/models/project.py", line 2120, in unmarshal return pydantic.TypeAdapter(SnapcraftProject).validate_python(data) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/snap/snapcraft/18519/lib/python3.12/site-packages/pydantic/type_adapter.py", line 441, in validate_python return self.validator.validate_python( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pydantic_core._pydantic_core.ValidationError: 1 validation error for function-before[_validate_type(), tagged-union[tagged-union[function-after[_validate_platforms_and_architectures(), function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), Core22Project]]]],function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), Core24Project]]],function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), Core26Project]]],function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), DevelBaseProject]]],tagged-union[function-after[_validate_platforms_and_architectures(), function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), BareCore22Project]]]],function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), BareCore24Project]]],function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), BareCore26Project]]],function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), BareDevelProject]]]]],tagged-union[function-after[_validate_platforms_and_architectures(), function-after[_validate_no_base(), function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), _BaselessCore22Project]]]]],function-after[_validate_no_base(), function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), _BaselessProject]]]],function-after[_validate_no_base(), function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), _BaselessProject]]]],function-after[_validate_no_base(), function-after[_validate_grade_and_build_base(), function-after[_validate_adoptable_fields(), function-after[_validate_bare_base_requires_build_base(), _BaselessProject]]]]]]] baseless.core22.parts Value error, Can't use 'snapcraftctl' in the override-build script for part 'kernel'. Use 'craftctl' instead. [type=value_error, input_value={'kernel': {'plugin': 'ni...RT_INSTALL"/usr/lib\n'}}, input_type=dict] For further information visit https://errors.pydantic.dev/2.12/v/value_error Build failed Traceback (most recent call last): File "/usr/lib/python3/dist-packages/lpbuildd/target/build_snap.py", line 341, in run self.pull() File "/usr/lib/python3/dist-packages/lpbuildd/target/build_snap.py", line 264, in pull self.run_build_command( File "/usr/lib/python3/dist-packages/lpbuildd/target/operation.py", line 70, in run_build_command return self.backend.run(args, cwd=cwd, env=full_env, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/lpbuildd/target/lxd.py", line 736, in run subprocess.check_call(cmd, **kwargs) File "/usr/lib/python3.12/subprocess.py", line 413, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command '['lxc', 'exec', 'lp-jammy-arm64', '--env', 'LANG=C.UTF-8', '--env', 'SHELL=/bin/sh', '--env', 'http_proxy=http://10.10.10.1:8222/', '--env', 'https_proxy=http://10.10.10.1:8222/', '--env', 'HTTP_PROXY=http://10.10.10.1:8222/', '--env', 'HTTPS_PROXY=http://10.10.10.1:8222/', '--env', 'GIT_PROXY_COMMAND=/usr/local/bin/lpbuildd-git-proxy', '--env', 'SNAPPY_STORE_NO_CDN=1', '--env', 'LAUNCHPAD_INSTANCE=production', '--env', 'LAUNCHPAD_SERVER_URL=launchpad.net', '--env', 'SNAPCRAFT_LOCAL_SOURCES=1', '--env', 'SNAPCRAFT_SETUP_CORE=1', '--env', 'SNAPCRAFT_IMAGE_INFO={"build-request-id": "lp-115638100", "build-request-timestamp": "2026-07-10T13:33:56Z", "build_url": "https://launchpad.net/~XXXXX-team/XXXXXX/+snap/XXXXXX-01/+build/3212660"}', '--env', 'SNAPCRAFT_BUILD_ENVIRONMENT=host', '--', '/bin/sh', '-c', 'cd /build/XXXXX-kernel && linux64 snapcraft pull']' returned non-zero exit status 1. ```

Evaluation history

Date Model Scores Action Summary
qwen3.6-35b-a3b-mtp-q6
Impact: 75
Quick Win: 67.5
Staleness: 45
Complexity: 10
Confidence: 85
Support Request: 0
keep open Regression in snapcraft 9: core22 snaps using snapcraftctl in override-build fail validation. Maintainer confirmed as a regression.
qwen/qwen3.6-35b-a3b
Staleness: 5
Complexity: 50
Confidence: 95
Support Request: 0
keep open Regression in Snapcraft 9 causing build failures for core22 snaps using snapcraftctl. Maintainer confirmed as a regression.
qwen3.6-35b-a3b-mtp-q6
Staleness: 0
Complexity: 10
Confidence: 80
Support Request: 80
needs triage Build failure on core22 snap after upgrading to snapcraft 9.0.1. Error explicitly rejects 'snapcraftctl' in favor of 'craftctl'. Issue is fresh, unlabelled, and requires maintainer confirmation of expected behavior.

Update history

No update history recorded yet.

Related issues

Issue Project State Summary Similarity
#1990126 "snapcraft help <plugin>" fails with SC7 and core22 in project directory snapcraft (launchpad) open snapcraft help <plugin> validates snapcraft.yaml unnecessarily, failing when core22 extensions are used. Untriaged, 1445 days old, no maintainer engagement.
72%
#4870 snapcraft pack error obtuse on snapd errors snapcraft closed Closed as a duplicate of issue #4548. The snapcraft pack error handling regression affecting core22 and core24 is superseded by the referenced tracking issue.
72%
#5634 Core22 unit tests in snapcraft fails with craft application 5.5.0 snapcraft closed Closed and deferred. The core22 test failure was traced to a validation change in craft-application PR #812. The issue was logged internally as SNAPCRAFT-1188 for tracking.
71%
#1987853 snapcraft terminates override-build script prematurely without error snapcraft (launchpad) open Snapcraft prematurely terminates override-build scripts after core18 to core20 upgrade, with no error output. Untriaged and inactive for over 4 years.
70%
#2099923 Snapcraft builds are failing: install of snap "snapcraft" failed snapcraft (launchpad) open Snapcraft builds failing due to outdated snapd (2.61) on build infrastructure unable to install core20 base. Issue is 556 days old with no maintainer response.
70%
#5983 feat!: error on snapcraftctl snapcraft merged Merged. Introduces a breaking change that errors on snapcraftctl usage in core26+ override scripts and renames all internal references. Legacy binaries are deferred to a follow-up PR, with core22/24 example updates planned for a future release.
70%