Diff of the two buildlogs: -- --- b1/build.log 2025-09-12 12:41:33.870009437 +0000 +++ b2/build.log 2025-09-12 12:42:22.454068819 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Fri Sep 12 00:40:58 -12 2025 -I: pbuilder-time-stamp: 1757680858 +I: Current time: Fri Oct 16 09:04:35 +14 2026 +I: pbuilder-time-stamp: 1792091075 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration @@ -24,53 +24,85 @@ dpkg-source: info: applying 0001-Fix-keyword-params-issue-in-tests.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/3769687/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/1292697/tmp/hooks/D01_modify_environment starting +debug: Running on codethink03-arm64. +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 Oct 15 19:04 /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/1292697/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/1292697/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='arm64' - 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]="3" [2]="3" [3]="1" [4]="release" [5]="aarch64-unknown-linux-gnu") + BASH_VERSION='5.3.3(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=arm64 + DEBIAN_FRONTEND=noninteractive DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' - DISTRIBUTION='unstable' - HOME='/root' - HOST_ARCH='arm64' + DIRSTACK=() + DISTRIBUTION=unstable + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=aarch64 + HOST_ARCH=arm64 IFS=' ' - INVOCATION_ID='378d1dfdd79c45448a408f3741c53a9c' - 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='3769687' - PS1='# ' - PS2='> ' + INVOCATION_ID=8b0d6bba773e4a7e80d576e78954a433 + LANG=C + LANGUAGE=nl_BE:nl + LC_ALL=C + MACHTYPE=aarch64-unknown-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=1292697 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.PX0aZBlJ/pbuilderrc_JoTe --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.PX0aZBlJ/b1 --logfile b1/build.log ruby-slack-notifier_2.4.0-1.dsc' - SUDO_GID='109' - SUDO_HOME='/var/lib/jenkins' - SUDO_UID='104' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://192.168.101.4:3128' + 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.PX0aZBlJ/pbuilderrc_ZIGk --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.PX0aZBlJ/b2 --logfile b2/build.log ruby-slack-notifier_2.4.0-1.dsc' + SUDO_GID=109 + SUDO_HOME=/var/lib/jenkins + SUDO_UID=104 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://192.168.101.4:3128 I: uname -a - Linux codethink04-arm64 6.12.43+deb13-cloud-arm64 #1 SMP Debian 6.12.43-1 (2025-08-27) aarch64 GNU/Linux + Linux i-capture-the-hostname 6.12.43+deb13-cloud-arm64 #1 SMP Debian 6.12.43-1 (2025-08-27) aarch64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 Aug 10 12:30 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/3769687/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Aug 10 2025 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/1292697/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -238,7 +270,7 @@ Get: 124 http://deb.debian.org/debian unstable/main arm64 ruby-rspec-expectations all 3.13.0c0e0m0s1-2 [90.2 kB] Get: 125 http://deb.debian.org/debian unstable/main arm64 ruby-rspec-mocks all 3.13.0c0e0m0s1-2 [81.3 kB] Get: 126 http://deb.debian.org/debian unstable/main arm64 ruby-rspec all 3.13.0c0e0m0s1-2 [5184 B] -Fetched 34.5 MB in 0s (162 MB/s) +Fetched 34.5 MB in 0s (136 MB/s) Preconfiguring packages ... Selecting previously unselected package libexpat1:arm64. (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 ... 20020 files and directories currently installed.) @@ -660,8 +692,8 @@ Setting up tzdata (2025b-5) ... Current default time zone: 'Etc/UTC' -Local time is now: Fri Sep 12 12:41:21 UTC 2025. -Universal Time is now: Fri Sep 12 12:41:21 UTC 2025. +Local time is now: Thu Oct 15 19:05:01 UTC 2026. +Universal Time is now: Thu Oct 15 19:05:01 UTC 2026. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up ruby-minitest (5.25.4-3) ... @@ -777,7 +809,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/ruby-slack-notifier-2.4.0/ && 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-slack-notifier_2.4.0-1_source.changes +I: user script /srv/workspace/pbuilder/1292697/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for unstable +I: user script /srv/workspace/pbuilder/1292697/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/ruby-slack-notifier-2.4.0/ && 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-slack-notifier_2.4.0-1_source.changes dpkg-buildpackage: info: source package ruby-slack-notifier dpkg-buildpackage: info: source version 2.4.0-1 dpkg-buildpackage: info: source distribution unstable @@ -845,144 +881,144 @@ All examples were filtered out; ignoring {:focus=>true} -Randomized with seed 45279 +Randomized with seed 50924 -Slack::Notifier::PayloadMiddleware - ::registry - returns a hash if nothing set - returns memoized version if already set - ::register - adds given class to key in registry +Slack::Notifier::Util::HTTPClient + #initialize + allows setting of options for Net::HTTP + ::post + initializes Util::HTTPClient with the given uri and params then calls + #call + raises an error when the response is unsuccessful + +Slack::Notifier::PayloadMiddleware::At + generates :text in payload if given :at & no :text + can handle single at option + can handle array at Slack::Notifier::PayloadMiddleware::Stack #set + initializes each middleware w/ the notifier instance creates a stack from hashes passing them as opts raises if a middleware is missing - initializes each middleware w/ the notifier instance creates the stack in an array + ::initialize + has empty stack + sets notifier to given notifier #call allows any middleware to return an array but other's don't need special behavior calls the middleware in order, passing return of each to the next handles multiple middleware splitting payload - ::initialize - sets notifier to given notifier - has empty stack -Slack::Notifier::PayloadMiddleware::At - can handle single at option - generates :text in payload if given :at & no :text - can handle array at +Slack::Notifier + #post + uses the defaults set on initialization + calls the middleware stack with the payload + allows overriding the set defaults + #initialize + sets the default_payload options + sets a custom http client + sets the given hook_url to the endpoint URI + when given a block + yields the config object + #ping + calls #post with the message as the text key in #post + +Slack::Notifier::PayloadMiddleware::FormatAttachments + can handle a single attachment + searches through string or symbol keys + passes the text of attachments through linkformatter with options[:formats] + returns the payload unmodified if not :attachments key + wraps attachment into array if given as a single hash + +Slack::Notifier::PayloadMiddleware::FormatMessage + returns the payload unmodified if not :text key + passes the text through linkformatter with options[:formats] + +Slack::Notifier::PayloadMiddleware::Base + ::options + allows setting default options for a middleware + #call + raises NoMethodError (expects subclass to define) + ::middleware_name + registers class w/ given name + uses symbolized name to register + #initialize + sets given notifier as notifier + sets given options as opts + +Slack::Notifier::PayloadMiddleware + ::registry + returns memoized version if already set + returns a hash if nothing set + ::register + adds given class to key in registry + +Slack::Notifier + sends correct payload for #post({:attachments=>{:color=>"#000", :text=>nil, :fallback=>"fallback message"}}) + sends correct payload for #post({:text=>"hello", :http_options=>{:timeout=>5}}) + sends correct payload for #post({:text=>"[hello](http://example.com/world)"}) + sends correct payload for #post({:attachments=>{:color=>"#000", :text=>"attachment message [hodor](http://winterfell.com)", :fallback=>"fallback message"}}) + sends correct payload for #post({:text=>"Hello World, enjoy [this](http://example.com)[this2](http://example2.com)"}) + sends correct payload for #post({:text=>"example"}) + sends correct payload for #post({:text=>nil, :attachments=>[{:text=>"attachment message"}]}) + sends correct payload for #post({:text=>"John"}) + sends correct payload for #post({:text=>"the message", :channel=>"foo", :attachments=>[{:color=>"#000", :text=>"attachment message", :fallback=>"fallback message"}]}) + sends correct payload for #post({:text=>"Hello World, enjoy [](http://example.com)."}) + sends correct payload for #post({:text=>"[John](mailto:john@example.com)"}) + applies options given to middleware + sends correct payload for #post({:text=>"hello", :channel=>"hodor"}) + sends correct payload for #post({:text=>"hello/\u3053\u3093\u306B\u3061\u306F from notifier test"}) + sends correct payload for #post({:text=>"hello"}) + sends correct payload for #post({:attachments=>[{:color=>"#000", :text=>"attachment message", :fallback=>"fallback message"}]}) Slack::Notifier::PayloadMiddleware::Channels leaves string channels alone splits payload into multiple if given an array of channels Slack::Notifier::Config + #defaults + raises ArgumentError if not given a hash + is an empty hash by default + sets a hash to default if given #http_client - raises an ArgumentError if given class does not respond to ::post sets a new client class if given one is Util::HTTPClient if not set + raises an ArgumentError if given class does not respond to ::post #middleware - is [:format_message, :format_attachments, :at] if not set takes an array or a splat of args allows passing options to middleware stack - #defaults - raises ArgumentError if not given a hash - is an empty hash by default - sets a hash to default if given + is [:format_message, :format_attachments, :at] if not set Slack::Notifier::Util::LinkFormatter - initialize & formatted - can be initialized without format args - can be initialized with format args ::format - formats markdown links - formats html links handles mailto links in html handles multiple html links - handles mailto links in markdown + handles multiple markdown links formats markdown links with no title + formats html links doesn't replace valid Japanese - handles mixed html & markdown links handles links with trailing parentheses - handles multiple markdown links + handles mailto links in markdown + handles mixed html & markdown links formats a number of differently formatted links formats markdown links in brackets - when on ruby 2.1+ or have string-scrub installed - handles invalid unicode sequences - replaces invalid unicode sequences with the unicode replacement character + formats markdown links with a configured stack - only formats markdown if markdown is the only item in formats only formats html if html is the only item in formats + only formats markdown if markdown is the only item in formats doesn't format if formats is empty + when on ruby 2.1+ or have string-scrub installed + replaces invalid unicode sequences with the unicode replacement character + handles invalid unicode sequences + initialize & formatted + can be initialized without format args + can be initialized with format args -Slack::Notifier - #post - uses the defaults set on initialization - allows overriding the set defaults - calls the middleware stack with the payload - #ping - calls #post with the message as the text key in #post - #initialize - sets the given hook_url to the endpoint URI - sets the default_payload options - sets a custom http client - when given a block - yields the config object - -Slack::Notifier::PayloadMiddleware::FormatMessage - returns the payload unmodified if not :text key - passes the text through linkformatter with options[:formats] - -Slack::Notifier::PayloadMiddleware::FormatAttachments - wraps attachment into array if given as a single hash - can handle a single attachment - searches through string or symbol keys - passes the text of attachments through linkformatter with options[:formats] - returns the payload unmodified if not :attachments key - -Slack::Notifier - sends correct payload for #post({:text=>"[hello](http://example.com/world)"}) - sends correct payload for #post({:text=>"hello"}) - applies options given to middleware - sends correct payload for #post({:text=>"hello", :channel=>"hodor"}) - sends correct payload for #post({:text=>"Hello World, enjoy [this](http://example.com)[this2](http://example2.com)"}) - sends correct payload for #post({:text=>"the message", :channel=>"foo", :attachments=>[{:color=>"#000", :text=>"attachment message", :fallback=>"fallback message"}]}) - sends correct payload for #post({:attachments=>{:color=>"#000", :text=>"attachment message [hodor](http://winterfell.com)", :fallback=>"fallback message"}}) - sends correct payload for #post({:text=>"John"}) - sends correct payload for #post({:text=>"[John](mailto:john@example.com)"}) - sends correct payload for #post({:text=>nil, :attachments=>[{:text=>"attachment message"}]}) - sends correct payload for #post({:attachments=>[{:color=>"#000", :text=>"attachment message", :fallback=>"fallback message"}]}) - sends correct payload for #post({:text=>"Hello World, enjoy [](http://example.com)."}) - sends correct payload for #post({:text=>"hello/\u3053\u3093\u306B\u3061\u306F from notifier test"}) - sends correct payload for #post({:attachments=>{:color=>"#000", :text=>nil, :fallback=>"fallback message"}}) - sends correct payload for #post({:text=>"example"}) - sends correct payload for #post({:text=>"hello", :http_options=>{:timeout=>5}}) - -Slack::Notifier::Util::HTTPClient - #initialize - allows setting of options for Net::HTTP - ::post - initializes Util::HTTPClient with the given uri and params then calls - #call - raises an error when the response is unsuccessful - -Slack::Notifier::PayloadMiddleware::Base - #initialize - sets given options as opts - sets given notifier as notifier - ::options - allows setting default options for a middleware - #call - raises NoMethodError (expects subclass to define) - ::middleware_name - uses symbolized name to register - registers class w/ given name - -Finished in 0.09759 seconds (files took 0.24823 seconds to load) +Finished in 0.06718 seconds (files took 0.19384 seconds to load) 85 examples, 0 failures -Randomized with seed 45279 +Randomized with seed 50924 ┌──────────────────────────────────────────────────────────────────────────────┐ @@ -1018,12 +1054,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/1292697/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/1292697/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/3769687 and its subdirectories -I: Current time: Fri Sep 12 00:41:33 -12 2025 -I: pbuilder-time-stamp: 1757680893 +I: removing directory /srv/workspace/pbuilder/1292697 and its subdirectories +I: Current time: Fri Oct 16 09:05:21 +14 2026 +I: pbuilder-time-stamp: 1792091121