#!/usr/bin/make -f # test/integration builds container images with docker, podman and singularity # and pulls from registries; test/tools holds their Dockerfiles. test/linter and # examples/ are programmes, and this is an Architecture: all package. export DH_GOLANG_EXCLUDES := test/integration test/tools test/linter examples # Test fixtures that dh-go does not copy on its own. export DH_GOLANG_INSTALL_EXTRA := pkg/image/testdata/certs pkg/image/oci/testdata \ pkg/image/sif/testdata pkg/file/testdata %: dh $@ --builddirectory=debian/_build --buildsystem=golang --with=golang override_dh_auto_install: # Library only: an Architecture: all package cannot ship compiled binaries. dh_auto_install -- --no-binaries execute_after_dh_auto_install: # .make is upstream's build tooling as a nested Go module, and its module # path ends in /.make. A path component starting with a dot is not valid in # a go.work replace directive, so shipping it can make dh-go write a go.work # that Go refuses to parse for anything build-depending on this package, and # it requires anchore/go-make, which is not in Debian. None of it is library # code or test data. # The glob covers both layouts: dh_auto_install stages into debian/tmp when # the package has a .install file, and dh_install copies from there later. rm -rf debian/*/usr/share/gocode/src/github.com/anchore/stereoscope/.make # Upstream ships some fixtures with the executable bit set, and a .gitignore # inside the OCI test fixtures that has no business in a package. find debian \( -name '*.snap' -o -name '*.sif' \) -type f -exec chmod -x {} + find debian -name '.gitignore' -delete execute_after_dh_auto_configure: # Two defects in the go.work that dh-go 1.68 generates: # https://bugs.debian.org/1149022 and https://bugs.debian.org/1149023. # # A comment on a line of its own inside a "require (" block becomes a module # named "//", and the replace written for it makes Go refuse to parse the # workspace. Here it comes from a dependency, not from upstream's own go.mod. sed -i '/^replace \/\//d' debian/_build/go.work # And a replace is written for any directory that exists under the build tree # even when it holds no go.mod, as happens for the v1 parent of a module Debian # ships only as /vN. Point those at a stub instead: nothing imports them, Go # only reads them to resolve the module graph. The stub goes in a directory of # our own because some of those paths are symlinks into /usr, where a write # would fail, and a silently missing stub would be worse than none. sed -n 's|^replace \([^ ]*\) => \./\(src/.*\)$$|\1 \2|p' debian/_build/go.work \ | while read -r mod dir; do \ if [ ! -e "debian/_build/$$dir/go.mod" ]; then \ mkdir -p "debian/_build/stubs/$$mod"; \ printf 'module %s\n\ngo 1.16\n' "$$mod" > "debian/_build/stubs/$$mod/go.mod"; \ sed -i "s|^replace $$mod => \./$$dir$$|replace $$mod => ./stubs/$$mod|" debian/_build/go.work; \ echo "stub module for $$mod"; \ fi; \ done override_dh_auto_test: # Twelve tests get their tarball from pkg/image/testdata/generators, which # builds it with docker and dies with exit status 127 without it, and # Test_DockerMainRegistry_Provide wants a registry. # # TestImage_PartialReadReleasesEarlierLayers counts the entries of /dev/fd # before and after a read that is meant to fail, and requires the two counts # to be equal. Here it sees 8 and then 7, i.e. one descriptor fewer, which is # not the leak its own failure message describes: a leak would be more # descriptors, not fewer. The assertion is stricter than the invariant it is # checking, so it is skipped rather than papered over; worth telling upstream. dh_auto_test -- -skip 'TestFileCatalog_Open|TestFileCatalog_GetBasenames|TestFileCatalog_GetByBasename|TestFileCatalog_GetByBasenameGlob|TestFileCatalog_GetByExtension|TestFileCatalog_GetByMimeType|TestFileMetadataFromTar|TestMetadataFromTar|TestReaderFromTar_GoCase|TestReaderFromTar_MissingFile|TestIndexedTarIndex_GoCase|TestIndexedTarReader_DuplicateEntries|Test_DockerMainRegistry_Provide|TestImage_PartialReadReleasesEarlierLayers'