Diff of the two buildlogs: -- --- b1/build.log 2024-05-15 20:53:44.739058288 +0000 +++ b2/build.log 2024-05-15 20:55:02.667748863 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Wed May 15 08:51:57 -12 2024 -I: pbuilder-time-stamp: 1715806317 +I: Current time: Wed Jun 18 17:16:47 +14 2025 +I: pbuilder-time-stamp: 1750216607 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration @@ -30,51 +30,83 @@ dpkg-source: info: applying 0003-Disable-gecode-solver.patch I: using fakeroot in build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/2145830/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/3051918/tmp/hooks/D01_modify_environment starting +debug: Running on infom02-amd64. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Jun 18 03:16 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/3051918/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/3051918/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='amd64' - DEBIAN_FRONTEND='noninteractive' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="2" [2]="21" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") + BASH_VERSION='5.2.21(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=amd64 + DEBIAN_FRONTEND=noninteractive DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' - DISTRIBUTION='trixie' - HOME='/root' - HOST_ARCH='amd64' + DIRSTACK=() + DISTRIBUTION=trixie + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=x86_64 + HOST_ARCH=amd64 IFS=' ' - INVOCATION_ID='8fbb641c52754d158db6a825bc14ccfa' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='2145830' - PS1='# ' - PS2='> ' + INVOCATION_ID=3fbcace1bec844bc87b22d7e0eb07a0f + LANG=C + LANGUAGE=et_EE:et + LC_ALL=C + MACHTYPE=x86_64-pc-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=3051918 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.D5VCIQyS/pbuilderrc_YrXY --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.D5VCIQyS/b1 --logfile b1/build.log ruby-solve_4.0.4-1.dsc' - SUDO_GID='109' - SUDO_UID='104' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.D5VCIQyS/pbuilderrc_A6bH --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.D5VCIQyS/b2 --logfile b2/build.log ruby-solve_4.0.4-1.dsc' + SUDO_GID=109 + SUDO_UID=104 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' I: uname -a - Linux infom01-amd64 6.1.0-21-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64 GNU/Linux + Linux i-capture-the-hostname 6.6.13+bpo-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.6.13-1~bpo12+1 (2024-02-15) x86_64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 May 14 11:25 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/2145830/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Jun 16 03:14 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/3051918/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -253,7 +285,7 @@ Get: 131 http://deb.debian.org/debian trixie/main amd64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB] Get: 132 http://deb.debian.org/debian trixie/main amd64 ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] Get: 133 http://deb.debian.org/debian trixie/main amd64 ruby-semverse all 2.0.0-1 [6818 B] -Fetched 47.1 MB in 1s (76.5 MB/s) +Fetched 47.1 MB in 1s (91.6 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libpython3.11-minimal:amd64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19699 files and directories currently installed.) @@ -696,8 +728,8 @@ Setting up tzdata (2024a-4) ... Current default time zone: 'Etc/UTC' -Local time is now: Wed May 15 20:53:09 UTC 2024. -Universal Time is now: Wed May 15 20:53:09 UTC 2024. +Local time is now: Wed Jun 18 03:17:37 UTC 2025. +Universal Time is now: Wed Jun 18 03:17:37 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20220109.1) ... @@ -824,7 +856,11 @@ fakeroot is already the newest version (1.33-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: Building the package -I: Running cd /build/reproducible-path/ruby-solve-4.0.4/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../ruby-solve_4.0.4-1_source.changes +I: user script /srv/workspace/pbuilder/3051918/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for trixie +I: user script /srv/workspace/pbuilder/3051918/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/ruby-solve-4.0.4/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../ruby-solve_4.0.4-1_source.changes dpkg-buildpackage: info: source package ruby-solve dpkg-buildpackage: info: source version 4.0.4-1 dpkg-buildpackage: info: source distribution unstable @@ -896,15 +932,59 @@ All examples were filtered out; ignoring {:focus=>true} -Randomized with seed 26422 +Randomized with seed 8195 -Solve::Dependency - #== - returns true if the other object is an instance of Solve::Dependency with the same constraint and artifact +Solve::Demand + equality + returns false when other isn't a Solve::Demand + returns false when other is a Solve::Demand with the same constraint but a different name + returns true when other is a Solve::Demand with the same name and constriant + returns false when other is a Solve::Demand with the same name but a different constraint #initialize - uses a default of >= 0.0.0 + accepts a string for the constraint parameter + accepts a Semverse::Constraint for the constraint parameter + when no value for 'constraint' is given + uses a default of >= 0.0.0 + +Solve::Graph + #find + returns an instance of artifact of the matching name and version + returns nil when the artifact does not exist + #artifact + given the artifact of the given name and version does not exist + the artifact has the given version + returns a Solve::Artifact + the artifact has the given name + adds an artifact to the artifacts collection + #artifacts + returns an array containing an artifact if one was accessed + returns an array + returns an empty array if no artifacts have been accessed + #versions + does not satisfy constraints if it is the default + returns all the artifacts matching the given name + returns only matching constraints if one is given + == + returns false if the other has the same artifacts but different dependencies + returns true if the other is the same + returns false if other isn't a Solve::Graph + returns false if the other has the same dependencies but different artifacts + #artifact? + returns false if the given Solve::Artifact is not a member of the collection + returns true if the given Solve::Artifact is a member of the collection + +Solve::Solver::Serializer + creates a problem from a solver + deserializes a serialized problem to an equivalent problem Solve::Artifact + #dependency? + returns true when the dependendency exists + returns false when the dependency does not exist + #dependencies + returns an empty array if no dependencies have been accessed + returns all dependencies + returns an array equality given an artifact with the same version but different name is not equal @@ -912,39 +992,32 @@ is not equal given an artifact with the same name and version is equal - #dependencies - returns all dependencies - returns an empty array if no dependencies have been accessed - returns an array #dependency returns an instance of Solve::Dependency matching the given name and constraint #depends given a name and constraint argument given the dependency of the given name and constraint does not exist - adds a dependency with the given name and constraint to the list of dependencies returns a Solve::Artifact + adds a dependency with the given name and constraint to the list of dependencies given only a name argument adds a dependency with a all constraint (>= 0.0.0) - #dependency? - returns true when the dependendency exists - returns false when the dependency does not exist sorting orders artifacts by their version number Solutions when using the ruby solver - chooses the best artifact for the demands - gives an empty solution when there are no demands - find the correct solution when backtracking in variables introduced via demands - rejects a p shaped depenency chain with a circular dep error solves when packages and constraints have build elements - rejects a circular dependency with a circular dep error + find the correct solution when backtracking in variables introduced via demands + raises NoSolutionError when a solution cannot be found + chooses the correct artifact for the demands solves when packages and constraints have prerelease elements correctly resolves when a resolution exists but it is not the latest - finds the correct solution when there is a diamond shaped dependency + rejects a circular dependency with a circular dep error + chooses the best artifact for the demands + rejects a p shaped depenency chain with a circular dep error fails with a self dependency - raises NoSolutionError when a solution cannot be found + finds the correct solution when there is a diamond shaped dependency tries all combinations until it finds a solution - chooses the correct artifact for the demands + gives an empty solution when there are no demands when options[:sorted] is true when the solution is cyclic raises a Solve::Errors::NoSolutionError because Molinillo doesn't support circular deps @@ -953,93 +1026,56 @@ with a simple list of dependencies returns a sorted list of dependencies -Solve::Solver::Serializer - creates a problem from a solver - deserializes a serialized problem to an equivalent problem - -Solve::Demand +Solve::Dependency + #== + returns true if the other object is an instance of Solve::Dependency with the same constraint and artifact #initialize - accepts a string for the constraint parameter - accepts a Semverse::Constraint for the constraint parameter - when no value for 'constraint' is given - uses a default of >= 0.0.0 - equality - returns false when other is a Solve::Demand with the same name but a different constraint - returns false when other is a Solve::Demand with the same constraint but a different name - returns false when other isn't a Solve::Demand - returns true when other is a Solve::Demand with the same name and constriant - -Solve::Graph - #artifacts - returns an array containing an artifact if one was accessed - returns an empty array if no artifacts have been accessed - returns an array - #find - returns nil when the artifact does not exist - returns an instance of artifact of the matching name and version - == - returns false if the other has the same dependencies but different artifacts - returns false if the other has the same artifacts but different dependencies - returns false if other isn't a Solve::Graph - returns true if the other is the same - #artifact? - returns true if the given Solve::Artifact is a member of the collection - returns false if the given Solve::Artifact is not a member of the collection - #artifact - given the artifact of the given name and version does not exist - the artifact has the given version - the artifact has the given name - returns a Solve::Artifact - adds an artifact to the artifacts collection - #versions - does not satisfy constraints if it is the default - returns only matching constraints if one is given - returns all the artifacts matching the given name - -Solve - ClassMethods - #it! - raises NoSolutionError if a solution does not exist (PENDING: No reason given) - #it - returns nil if a solution does not exist (PENDING: No reason given) + uses a default of >= 0.0.0 Solve::RubySolver - has a list of demands as ruby literals has a list of demands as model objects has a graph - supporting Serializer interface - implements the required interface + has a list of demands as ruby literals + ClassMethods + ::timeout + returns 30,000 by default + when the SOLVE_TIMEOUT env variable is set + returns the value multiplied by a thousand + ::activate + is a no-op when the constraints are not solvable + and molinillo identifies missing artifacts + raises an error detailing the missing artifacts and molinillo identifies dependency conflicts raises an error detailing the missing artifacts and molinillo identifies constraints that exclude all known versions raises an error detailing the missing artifacts - and molinillo identifies missing artifacts - raises an error detailing the missing artifacts when the constraints are solvable gives the solution as a Hash gives the solution in sorted form + supporting Serializer interface + implements the required interface + +Solve ClassMethods - ::timeout - returns 30,000 by default - when the SOLVE_TIMEOUT env variable is set - returns the value multiplied by a thousand - ::activate - is a no-op + #it + returns nil if a solution does not exist (PENDING: No reason given) + #it! + raises NoSolutionError if a solution does not exist (PENDING: No reason given) Pending: (Failures listed here are expected and do not affect your suite's status) - 1) Solve ClassMethods #it! raises NoSolutionError if a solution does not exist + 1) Solve ClassMethods #it returns nil if a solution does not exist # No reason given - # ./spec/unit/solve_spec.rb:14 + # ./spec/unit/solve_spec.rb:8 - 2) Solve ClassMethods #it returns nil if a solution does not exist + 2) Solve ClassMethods #it! raises NoSolutionError if a solution does not exist # No reason given - # ./spec/unit/solve_spec.rb:8 + # ./spec/unit/solve_spec.rb:14 Deprecation Warnings: -Using `should` from rspec-expectations' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` with `config.expect_with(:rspec) { |c| c.syntax = :should }` instead. Called from /build/reproducible-path/ruby-solve-4.0.4/spec/acceptance/ruby_solver_solutions_spec.rb:28:in `block (2 levels) in '. +Using `should` from rspec-expectations' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` with `config.expect_with(:rspec) { |c| c.syntax = :should }` instead. Called from /build/reproducible-path/ruby-solve-4.0.4/spec/unit/solve/solver/serializer_spec.rb:23:in `block (2 levels) in '. Using `stub` from rspec-mocks' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` instead. Called from /build/reproducible-path/ruby-solve-4.0.4/spec/unit/solve/artifact_spec.rb:7:in `block (2 levels) in '. @@ -1051,10 +1087,10 @@ 2 deprecation warnings total -Finished in 0.10992 seconds (files took 0.35542 seconds to load) +Finished in 0.06136 seconds (files took 0.17001 seconds to load) 72 examples, 0 failures, 2 pending -Randomized with seed 26422 +Randomized with seed 8195 ┌──────────────────────────────────────────────────────────────────────────────┐ @@ -1086,12 +1122,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/3051918/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/3051918/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/2145830 and its subdirectories -I: Current time: Wed May 15 08:53:43 -12 2024 -I: pbuilder-time-stamp: 1715806423 +I: removing directory /srv/workspace/pbuilder/3051918 and its subdirectories +I: Current time: Wed Jun 18 17:18:01 +14 2025 +I: pbuilder-time-stamp: 1750216681