Skip to content

Conversation

@raharper
Copy link
Contributor

Tested on a Debian 13 Trixie amd64 VM

[install deps]

  • Split out debian setup since package names diverge
  • Merged common ubuntu/debian packages
  • Add debian specific package names/needs
  • Added sudo for access to modinfo, not always in user PATH

[test]

  • Added a env check to help non-github runner systems to detect when settings aren't exported to avoid getting test failure but with no indication why test doesn't run successfully.

Fixes: #719

What type of PR is this?

bug

Which issue does this PR fix:

#719

What does this PR do / Why do we need it:

If an issue # is not available please add repro steps and logs showing the issue:

Testing done on this change:

  1. build stacker on Debian 13 amd64 VM
  2. make check passes
debian@d13vm:~/stacker$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.1
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
debian@d13vm:~/stacker$ ^Ct /etc/os-release
debian@d13vm:~/stacker$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.1
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
debian@d13vm:~/stacker$ uname -r
6.12.48+deb13-amd64
debian@d13vm:~/stacker$ ./stacker-dynamic --version
stacker version stacker debian13 liblxc 6.0.4
debian@d13vm:~/stacker$ ./stacker --version
stacker version stacker debian13 liblxc cb8e38aca27a23964941f0f011a8919aab8bebab

sudo -E PATH="/home/debian/stacker/hack/tools/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" \
	STACKER_BUILD_ALPINE_IMAGE=docker://ghcr.io/project-stacker/alpine:3.19 \
	STACKER_BUILD_BUSYBOX_IMAGE=docker://ghcr.io/project-stacker/busybox:latest \
	STACKER_BUILD_CENTOS_IMAGE=docker://ghcr.io/project-stacker/centos:latest \
	STACKER_BUILD_UBUNTU_IMAGE=docker://ghcr.io/project-stacker/ubuntu:latest \
	./test/main.py \
	--privilege-level=unpriv \
	test/annotations.bats test/annotations-namespace.bats test/args.bats test/asterisk.bats test/atomfs-erofs.bats test/atomfs-squashfs.bats test/basic-auth.bats test/basic.bats test/binds.bats test/bom.bats test/broken-link.bats test/build-only.bats test/built-type.bats test/caching.bats test/check.bats test/chroot.bats test/clean.bats test/config.bats test/convert.bats test/cp-not-required.bats test/dependency-order.bats test/dirlinks.bats test/dir-whiteout.bats test/docker-base.bats test/empty-layers.bats test/entrypoint.bats test/env.bats test/grab.bats test/gzip.bats test/hiding-creds.bats test/import.bats test/import-http-auth.bats test/import-http.bats test/invalid.bats test/labels.bats test/log.bats test/multi-arch.bats test/multiple-output-types.bats test/oci-import.bats test/overlay-dirs.bats test/prerequisites.bats test/publish.bats test/squashfs.bats test/tmpfs.bats test/unprivileged.bats test/whiteout.bats
1..170
ok 1 annotations work in 534ms
ok 2 namespace arg works in 496ms
ok 3 default namespace arg works in 850ms
ok 4 workdir args in 600ms
ok 5 wildcards work in run section in 7879ms
ok 6 --no-verity works in 52ms # skip test not valid for privilege level unpriv
ok 7 mount + umount works in 40ms # skip test not valid for privilege level unpriv
ok 8 mount + umount + mount a tree of images works in 30ms # skip test not valid for privilege level unpriv
ok 9 bad existing verity device is rejected in 73ms # skip test not valid for privilege level unpriv
ok 10 --no-verity works in 68ms # skip test not valid for privilege level unpriv
ok 11 mount + umount works in 34ms # skip test not valid for privilege level unpriv
ok 12 mount + umount + mount a tree of images works in 53ms # skip test not valid for privilege level unpriv
ok 13 bad existing verity device is rejected in 38ms # skip test not valid for privilege level unpriv
# starting zot at localhost:8080
# zot is up
# stopping zot
ok 14 from: authenticated zot works in 1160ms # skip test not valid for privilege level unpriv
ok 15 multiple stacker builds in a row in 1341ms
ok 16 basic workings in 2773ms
ok 17 stacker.yaml without imports can run in 863ms
ok 18 stacker without arguments prints help in 61ms
ok 19 use colons in roots-dir path name should fail in 158ms
ok 20 use colons in layer name should fail in 187ms
ok 21 basic workings with substitutions from a file in 2392ms
ok 22 commas in substitute flags ok in 479ms
ok 23 Test whiteouts across layers in 1695ms
ok 24 bind as string slice in 432ms
ok 25 bind as struct in 475ms
ok 26 fail on missing bind source in 191ms
# starting zot at localhost:8080
# zot is up
ok 27 all container contents must be accounted for in 41ms # skip test_all_container_contents_must_be_accounted_for is slow. Set SLOW_TEST=true to run.
ok 28 bom tool should work inside run in 54ms # skip test_bom_tool_should_work_inside_run is slow. Set SLOW_TEST=true to run.
ok 29 bom for alpine-based image in 3585ms
ok 30 pull boms if published in 6275ms
ok 31 all container contents must be accounted for even for build_only layers in 46ms # skip test_all_container_contents_must_be_accounted_for_even_for_build-2d5fonly_layers is slow. Set SLOW_TEST=true to run.
ok 32 generate bom for built layer in 45ms # skip test_generate_bom_for_built_layer is slow. Set SLOW_TEST=true to run.
# stopping zot
ok 33 importing broken symlink is ok in 817ms
ok 34 build only + missing prereq fails in 432ms
ok 35 build only + prerequisites work in 782ms
ok 36 after build only failure works in 1038ms
ok 37 build only stacker in 1210ms
ok 38 stacker grab in 983ms
ok 39 build only + unpriv + overlay clears state in 684ms
ok 40 multiple build onlys in final chain rebuild OK in 1464ms
ok 41 built type layers are restored correctly in 1293ms
ok 42 from: tar layer rebuilds on change in 656ms
ok 43 from: oci layer rebuilds on change in 3546ms
ok 44 built-type layer import caching in 1211ms
ok 45 import caching in 1095ms
ok 46 remove from a dir in 1025ms
ok 47 bind rebuilds in 1141ms
ok 48 mode change is re-imported in 1179ms
ok 49 can read previous version's cache in 37ms # skip old version does not support imports (plural) directive
ok 50 different old cache version is ok in 655ms
ok 51 cache comparison of legacy import works across prereqs in 664ms
ok 52 stacker check is reasonable priv overlay in 2ms # skip test not valid for privilege level unpriv
ok 53 stacker check is reasonable unpriv overlay in 192ms
ok 54 chroot goes to a reasonable place in 609ms
ok 55 clean of unpriv overlay works in 444ms
ok 56 config args work in 38ms # skip test not valid for privilege level unpriv
ok 57 config file works in 47ms # skip test not valid for privilege level unpriv
ok 58 config file substitutions work in 32ms # skip test not valid for privilege level unpriv
ok 59 convert a Dockerfile in 8428ms # skip publish step of test because no registry found in REGISTRY_URL env variable
ok 60 alpine in 58ms # skip test_alpine is slow. Set SLOW_TEST=true to run.
ok 61 elasticsearch in 56ms # skip test_elasticsearch is slow. Set SLOW_TEST=true to run.
ok 62 python in 101ms # skip test_python is slow. Set SLOW_TEST=true to run.
ok 63 cp is not required for stacker:// imports in 1509ms
ok 64 base layer missing fails and prints in 166ms
ok 65 imports missing fails and prints in 177ms
ok 66 stacker:// style nesting w/ type built works in 1598ms
ok 67 copy_up on a dirlink renders a dirlink (squashfs) in 755ms
ok 68 dir whiteouts work in 2562ms
ok 69 importing from a docker hub in 1618ms
ok 70 squashfs empty change no layer in 10383ms
ok 71 tar empty change no layer in 5230ms
ok 72 an image with empty layers in 283ms
ok 73 a real-world docker image with empty/filler layer in 33ms # skip requires privileges
ok 74 entrypoint mess in 605ms
ok 75 /stacker is ro in 1172ms
ok 76 two stackers can't run at the same time in 768ms
ok 77 grab has no side-effects in 1205ms
ok 78 import various sizes in 5311ms
ok 79 secrets loaded via imports should not be in output image in 1051ms
ok 80 secrets loaded via imports but saved to file WILL leak in 1297ms
ok 81 different URLs with same base get re-imported in 1387ms
ok 82 importing recursively in 491ms
ok 83 importing stacker:// recursively in 668ms
ok 84 different import types in 1093ms
ok 85 import with unmatched hash should fail in 179ms
ok 86 invalid hash should fail in 235ms
ok 87 case insensitive hash works in 701ms
ok 88 correct sha hash is allowed for internet files in 801ms
ok 89 invalid sha hash fails build for internet files in 238ms
ok 90  flag allows build when hash is provided in 786ms
ok 91  flag fails build when http import hash is not provided in 412ms
ok 92  flag allows build even when local hash is not provided in 660ms
ok 93 invalid import  in 188ms
ok 94 import a full directory tree with siblings in 573ms
ok 95 different import types with perms in 3082ms
ok 96 import with dir contents in 1278ms
ok 97 dir path behavior in 1712ms
ok 98 legacy imports in 2977ms
ok 99 importing from http server with auth works in 628ms # skip test not valid for privilege level unpriv
ok 100 importing from cache works for unreachable http urls in 104ms # skip test not valid for privilege level unpriv
ok 101 importing cached file from http url with matching length in 1435ms
ok 102 importing to a dest in 797ms
ok 103 bad stacker:// import in 152ms
ok 104 invalid yaml entry in 193ms
ok 105 missing tag for base layer of type built in 172ms
ok 106 generate_labels generates oci labels in 528ms
ok 107 log --debug works in 173ms
ok 108 --debug and --quiet together fail in 190ms
ok 109 --quiet works in 100ms
ok 110 --log-file works in 166ms
ok 111 --progress works in 325ms
ok 112 no progress when not attached to a terminal in 351ms
ok 113 multi-arch/os support in 865ms
ok 114 multi-arch/os bad config fails in 164ms
ok 115 multiple layer type outputs work in 1602ms
ok 116 chained multiple layer type outputs work in 1769ms
ok 117 build-only multiple layer type outputs work in 1608ms
ok 118 multiple output types cache correctly in 1022ms
ok 119 chained built type layers are OK (tar first) in 1323ms
ok 120 chained built type layers are OK (squashfs first) in 1390ms
ok 121 oci input and output directories can be the same in 727ms
ok 122 oci imports in 779ms
ok 123 oci imports colons in version in 938ms
ok 124 overlay_dirs works in 913ms
ok 125 import from overlay_dir works in 1032ms
ok 126 build binary and import in distroless in 2658ms
ok 127 overlay_dirs dest works in 655ms
ok 128 overlay_dirs cache works in 1850ms
ok 129 overlay_dirs don't preserve ownership in 737ms
ok 130 order prerequisites in 227ms
ok 131 search for multiple stackerfiles using default settings in 228ms
ok 132 search for multiple stackerfiles using a custom search directory in 213ms
ok 133 search for multiple stackerfiles using a custom search directory and a custom file path pattern in 198ms
ok 134 build layers and prerequisites using the build command in 1689ms
ok 135 build layers and prerequisites using the recursive-build command in 1762ms
ok 136 build layers and prerequisites containing build-only layer in 1207ms
ok 137 nested prerequisites work in 1582ms
ok 138 absolute prerequisites work in 1785ms
ok 139 recurisve-build default matching only builds reasonable things in 1396ms
ok 140 same stacker.yaml tags are unique in 222ms
ok 141 different stacker.yaml tags are unique in 187ms
ok 142 publish layer with custom tag in 1086ms
ok 143 publish layer with multiple custom tags in 1378ms
ok 144 publish multiple layers recursively in 1966ms
ok 145 publish selected multiple layers in 1754ms
ok 146 publish single layer with docker url in 622ms
ok 147 do not publish build only layer in 649ms
ok 148 publish multiple layer types in 1524ms
ok 149 publish tag to unsecure registry in 65ms # skip skipping test because no registry found in REGISTRY_URL env variable
ok 150 publish multiple tags to unsecure registry in 60ms # skip skipping test because no registry found in REGISTRY_URL env variable
ok 151 publish multiple layers recursively to unsecure registry in 61ms # skip skipping test because no registry found in REGISTRY_URL env variable
ok 152 building from published images with whiteouts in 47ms # skip skipping test because no registry found in REGISTRY_URL env variable
ok 153 squashfs + derivative build only layers in 754ms
ok 154 squashfs mutate /usr/bin in 1163ms
ok 155 squashfs import support in 1112ms
ok 156 squashfs layer support (overlay) in 834ms
ok 157 squashfs file whiteouts (overlay) in 702ms
ok 158 squashfs + build only layers in 764ms
ok 159 built type with squashfs works in 1348ms
ok 160 built type with squashfs build-only base works (overlay) in 1077ms
ok 161 build squashfs then tar in 1312ms
ok 162 stacker works in a tmpfs in 427ms
ok 163 file with chmod 000 works in 1190ms
ok 164 unprivileged stacker in 1605ms
ok 165 unprivileged read-only imports can be re-cached in 780ms
ok 166 /stacker in unprivileged mode gets deleted in 981ms
ok 167 stacker switching privilege modes fails in 478ms
ok 168 underlying layer output conversion happens in a user namespace in 490ms
ok 169 test not adding extraneous whiteouts in 6745ms
ok 170 dont emit whiteout for new dir creates in 1777ms
running tests in modes: unpriv
go test -v -trimpath -cover -coverprofile=coverage.txt -covermode=atomic -tags "exclude_graphdriver_btrfs exclude_graphdriver_devicemapper containers_image_openpgp osusergo netgo skipembed" ./pkg/... ./cmd/...
	stackerbuild.io/stacker/pkg/container		coverage: 0.0% of statements
	stackerbuild.io/stacker/pkg/container/idmap		coverage: 0.0% of statements
	stackerbuild.io/stacker/pkg/embed-exec		coverage: 0.0% of statements
=== RUN   TestDag

  Create a dag ✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔


24 total assertions

--- PASS: TestDag (0.00s)
=== RUN   TestImageCompressionCopy
2025/11/11 21:54:56  info new image manifest created: sha256:2e0c0e2cf41c313b9cdb49326fb0080d04e4d6eda5a41678ebab19ba07c7c52c
2025/11/11 21:54:56  info created new tag for image manifest: foo
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on /tmp/stacker-compression-copy-test1447110024/stacker-squashfs-img-2958252070, block size 131072.
[===================================================================|] 4/4 100%

Exportable Squashfs 4.0 filesystem, zstd compressed, data block size 131072
	compressed data, compressed metadata, compressed fragments,
	compressed xattrs, compressed ids
	duplicates are removed
Filesystem size 0.87 Kbytes (0.00 Mbytes)
	61.80% of uncompressed filesystem size (1.41 Kbytes)
Inode table size 110 bytes (0.11 Kbytes)
	42.64% of uncompressed inode table size (258 bytes)
Directory table size 209 bytes (0.20 Kbytes)
	77.41% of uncompressed directory table size (270 bytes)
Number of duplicate files found 0
Number of inodes 8
Number of files 4
Number of fragments 1
Number of symbolic links 0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 4
Number of hard-links 0
Number of ids (unique uids + gids) 1
Number of uids 1
	debian (1000)
Number of gids 1
	debian (1000)
--- PASS: TestImageCompressionCopy (0.15s)
=== RUN   TestForceManifestTypeOption
2025/11/11 21:54:56  info new image manifest created: sha256:e644c884c95c9c223d0cd8cbf595c662d59f145ed324bb8fea727606fa2e1b85
2025/11/11 21:54:56  info created new tag for image manifest: foo
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on /tmp/stacker-force-manifesttype-test4264788527/stacker-squashfs-img-2261706850, block size 131072.
[===================================================================|] 4/4 100%

Exportable Squashfs 4.0 filesystem, zstd compressed, data block size 131072
	compressed data, compressed metadata, compressed fragments,
	compressed xattrs, compressed ids
	duplicates are removed
Filesystem size 0.87 Kbytes (0.00 Mbytes)
	61.73% of uncompressed filesystem size (1.41 Kbytes)
Inode table size 110 bytes (0.11 Kbytes)
	42.64% of uncompressed inode table size (258 bytes)
Directory table size 208 bytes (0.20 Kbytes)
	77.04% of uncompressed directory table size (270 bytes)
Number of duplicate files found 0
Number of inodes 8
Number of files 4
Number of fragments 1
Number of symbolic links 0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 4
Number of hard-links 0
Number of ids (unique uids + gids) 1
Number of uids 1
	debian (1000)
Number of gids 1
	debian (1000)
--- PASS: TestForceManifestTypeOption (0.02s)
=== RUN   TestOldManifestReallyRemoved
2025/11/11 21:54:56  info new image manifest created: sha256:04f1ce2b4d8dd75aba57e4ed5641ba1fdb8ead46fef4580de41d18b743e52d70
2025/11/11 21:54:56  info created new tag for image manifest: a
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on /tmp/stacker-compression-copy-test885332399/stacker-squashfs-img-1834479456, block size 131072.
[===================================================================|] 4/4 100%

Exportable Squashfs 4.0 filesystem, zstd compressed, data block size 131072
	compressed data, compressed metadata, compressed fragments,
	compressed xattrs, compressed ids
	duplicates are removed
Filesystem size 0.87 Kbytes (0.00 Mbytes)
	61.75% of uncompressed filesystem size (1.41 Kbytes)
Inode table size 110 bytes (0.11 Kbytes)
	42.64% of uncompressed inode table size (258 bytes)
Directory table size 209 bytes (0.20 Kbytes)
	77.41% of uncompressed directory table size (270 bytes)
Number of duplicate files found 0
Number of inodes 8
Number of files 4
Number of fragments 1
Number of symbolic links 0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 4
Number of hard-links 0
Number of ids (unique uids + gids) 1
Number of uids 1
	debian (1000)
Number of gids 1
	debian (1000)
2025/11/11 21:54:56  info new image manifest created: sha256:5b98ba1d8937fc56a65fea691b0843d8234ae2041bdac122995ceb67a3e62bb7
2025/11/11 21:54:56  info created new tag for image manifest: b
Parallel mksquashfs: Using 4 processors
Creating 4.0 filesystem on /tmp/stacker-compression-copy-test885332399/stacker-squashfs-img-1203225524, block size 131072.
[===================================================================|] 6/6 100%

Exportable Squashfs 4.0 filesystem, zstd compressed, data block size 131072
	compressed data, compressed metadata, compressed fragments,
	compressed xattrs, compressed ids
	duplicates are removed
Filesystem size 1.08 Kbytes (0.00 Mbytes)
	48.96% of uncompressed filesystem size (2.21 Kbytes)
Inode table size 125 bytes (0.12 Kbytes)
	38.82% of uncompressed inode table size (322 bytes)
Directory table size 303 bytes (0.30 Kbytes)
	73.19% of uncompressed directory table size (414 bytes)
Number of duplicate files found 0
Number of inodes 10
Number of files 6
Number of fragments 1
Number of symbolic links 0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 4
Number of hard-links 0
Number of ids (unique uids + gids) 1
Number of uids 1
	debian (1000)
Number of gids 1
	debian (1000)
--- PASS: TestOldManifestReallyRemoved (0.05s)
=== RUN   TestDir

  IsSymLink ✔✔✔✔


28 total assertions


  DirCopy ✔✔✔✔✔✔


34 total assertions


  CopyThing ✔✔✔✔✔✔


40 total assertions


  Chmod ✔✔✔✔


44 total assertions

--- PASS: TestDir (0.00s)
=== RUN   TestFile

  FileCopy ✔✔✔
    With defaults ✔✔✔✔✔
    With non-default mode ✔✔


54 total assertions


  FindFiles ✔✔✔✔✔✔


60 total assertions

--- PASS: TestFile (0.00s)
PASS
coverage: 57.0% of statements
ok  	stackerbuild.io/stacker/pkg/lib	0.252s	coverage: 57.0% of statements
	stackerbuild.io/stacker/pkg/lib/containers_storage		coverage: 0.0% of statements
=== RUN   TestLog

  With timestamps ✔✔2025/11/11 21:54:56  info info msg                  isStacker=&{}
✔2025/11/11 21:54:56 error error msg                 isStacker=&{}
✔✔✔2025-11-11T21:54:56Z info msg
✔2025-11-11T21:54:56Z error msg
✔


8 total assertions


  Without timestamps ✔✔2025-11-11T21:54:56Z info msg
✔2025-11-11T21:54:56Z error msg
✔✔✔info msg
✔error msg
✔


16 total assertions

--- PASS: TestLog (0.00s)
PASS
coverage: 70.0% of statements
ok  	stackerbuild.io/stacker/pkg/log	0.003s	coverage: 70.0% of statements
	stackerbuild.io/stacker/pkg/mtree		coverage: 0.0% of statements
=== RUN   TestOverlayMetadataChanged
--- PASS: TestOverlayMetadataChanged (0.00s)
PASS
coverage: 0.0% of statements
ok  	stackerbuild.io/stacker/pkg/overlay	0.015s	coverage: 0.0% of statements
=== RUN   TestLayerHashing
2025/11/11 21:54:56  info new image manifest created: sha256:d590ed7bc8cdec42f9f967787bbbe2ec3bc266920638e9b4b254df6dfaded2f6
2025/11/11 21:54:56  info created new tag for image manifest: centos
2025/11/11 21:54:56  info cache miss because layer definition was changed isStacker=&{}
--- PASS: TestLayerHashing (0.00s)
=== RUN   TestCacheEntryChanged
--- PASS: TestCacheEntryChanged (0.00s)
=== RUN   TestDistspecURLParsing
--- PASS: TestDistspecURLParsing (0.00s)
PASS
coverage: 4.1% of statements
ok  	stackerbuild.io/stacker/pkg/stacker	0.016s	coverage: 4.1% of statements
	stackerbuild.io/stacker/pkg/storage		coverage: 0.0% of statements
	stackerbuild.io/stacker/pkg/test		coverage: 0.0% of statements
=== RUN   TestUnmarshalBindsYamlAndJSON
--- PASS: TestUnmarshalBindsYamlAndJSON (0.00s)
=== RUN   TestGetImportFromInterface
--- PASS: TestGetImportFromInterface (0.00s)
=== RUN   TestUnmarshalImports
--- PASS: TestUnmarshalImports (0.00s)
=== RUN   TestDockerFrom
--- PASS: TestDockerFrom (0.00s)
=== RUN   TestDependencyOrder
--- PASS: TestDependencyOrder (0.00s)
=== RUN   TestSubstitute
2025/11/11 21:54:57 error "A=B" was provided as a substitution and unsupported placeholder "${A}" was found. Replace "${A}" with "${{A}}" to use the substitution.
 isStacker=&{}
2025/11/11 21:54:57 error "A=B" was provided as a substitution and unsupported placeholder "${A}" was found. Replace "${A}" with "${{A}}" to use the substitution.
 isStacker=&{}
2025/11/11 21:54:57 error "A=B" was provided as a substitution and unsupported placeholder "${A:Z}" was found. Replace "${A:Z}" with "${{A:Z}}" to use the substitution.
 isStacker=&{}
2025/11/11 21:54:57 error "PRODUCT=foo" was provided as a substitution and unsupported placeholder "$PRODUCT" was found. Replace "$PRODUCT" with "${{PRODUCT}}" to use the substitution.
 isStacker=&{}
2025/11/11 21:54:57 error "PRODUCT=foo" was provided as a substitution and unsupported placeholder "${PRODUCT}" was found. Replace "${PRODUCT}" with "${{PRODUCT}}" to use the substitution.
 isStacker=&{}
2025/11/11 21:54:57 error "PRODUCT=foo" was provided as a substitution and unsupported placeholder "${PRODUCT}" was found. Replace "${PRODUCT}" with "${{PRODUCT}}" to use the substitution.
 isStacker=&{}
2025/11/11 21:54:57 error "PRODUCT=foo" was provided as a substitution and unsupported placeholder "${PRODUCT:def}" was found. Replace "${PRODUCT:def}" with "${{PRODUCT:def}}" to use the substitution.
 isStacker=&{}
--- PASS: TestSubstitute (0.00s)
=== RUN   TestFilterEnv
--- PASS: TestFilterEnv (0.00s)
=== RUN   TestBuildEnvEqualInEnviron
--- PASS: TestBuildEnvEqualInEnviron (0.00s)
=== RUN   TestContainerProxyPassThroughByDefault
--- PASS: TestContainerProxyPassThroughByDefault (0.00s)
PASS
coverage: 48.6% of statements
ok  	stackerbuild.io/stacker/pkg/types	0.012s	coverage: 48.6% of statements
	stackerbuild.io/stacker/cmd/stacker		coverage: 0.0% of statements
go tool cover -html coverage.txt  -o /home/debian/stacker/hack/coverage.html

Automation added to e2e:

None

Will this break upgrades or downgrades?

No

Does this PR introduce any user-facing change?:

No


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@codecov
Copy link

codecov bot commented Nov 11, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 51.67%. Comparing base (130ce6d) to head (cf2f000).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@             Coverage Diff             @@
##             main     #743       +/-   ##
===========================================
+ Coverage   15.79%   51.67%   +35.88%     
===========================================
  Files          59       59               
  Lines        6491     6491               
===========================================
+ Hits         1025     3354     +2329     
+ Misses       5293     2489     -2804     
- Partials      173      648      +475     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Tested on a Debian 13 Trixie amd64 VM

[install deps]
- Split out debian setup since package names diverge
- Merged common ubuntu/debian packages
- Add debian specific package names/needs
- Added sudo for access to modinfo, not always in user PATH

[test]
- Added a env check to help non-github runner systems to detect when
settings aren't exported to avoid getting test failure but with
no indication why test doesn't run successfully.

Fixes: project-stacker#719
Signed-off-by: Ryan Harper <[email protected]>
@raharper raharper force-pushed the feat/add-debian-13-support branch from faebd89 to cf2f000 Compare November 11, 2025 23:15
@rchamarthy rchamarthy merged commit ad24357 into project-stacker:main Nov 17, 2025
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: install-build-deps.sh doesn't work on Debian 13 (Trixie)

3 participants