Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

release: actually create deterministic release archives #4879

Merged
merged 4 commits into from Jan 8, 2021

Conversation

guggero
Copy link
Collaborator

@guggero guggero commented Dec 21, 2020

Fixes a number of small issues that lead to the release artifact hashes not matching up with local builds.

  1. Fetch full git history to make sure git describe works correctly.
  2. Use git describe --tags to identify the commit name compiled into the binaries.
  3. Use fixed/deterministic file order, file timestamps and file attributes when creating the .tar.gz and .zip files.

A test run is in progress on GitHub: https://github.com/guggero/lnd/runs/1669502010?check_suite_focus=true
Will validate against my local build and report back on it.

Anyone trying to reproduce the same hashes can do the following (using go 1.15.6!):

git remote add guggero git@github.com:guggero/lnd.git
git fetch guggero
git checkout v0.12.0-beta.rc3-testbuild7
SKIP_VERSION_CHECK=1 make release tag=v0.12.0-beta.rc3-testbuild7

This results in the following hashes: manifest-v0.12.0-beta.rc3-testbuild7.txt (on my local machine).

MacOS users:
There is now a docker image that helps you create reproducible builds. please run the same steps as above but replace make release with make docker-release!

@guggero guggero added golang/build system Related to the go language and compiler bug fix releases github actions labels Dec 21, 2020
@guggero guggero added this to the 0.12.0 milestone Dec 21, 2020
@guggero guggero requested a review from halseth December 21, 2020 16:42
@guggero guggero added this to In progress in v0.12.0-beta via automation Dec 21, 2020
@bhandras bhandras self-requested a review December 21, 2020 16:50
@bhandras
Copy link
Collaborator

Seems like I got somewhat different results as the manifest file's contents are:

bc2e52575cae2b4eb76821d78ea5d7e3ba448c593b281b8111e41b23e3b9f079  lnd-darwin-amd64-v0.12.0-beta.rc2-testbuild3.tar.gz
47ada3dd851ec10364e6b6779bac0c8d632624554d3198b6900d979128a08cea  lnd-dragonfly-amd64-v0.12.0-beta.rc2-testbuild3.tar.gz
4146322017eab39296b79258f38d654566f39cb4dd14acd2baac11919a99f0e5  lnd-freebsd-386-v0.12.0-beta.rc2-testbuild3.tar.gz
452ab15962a8251bffaa7d684fe79dd3078a921f1978a6928109410cdd3663f9  lnd-freebsd-amd64-v0.12.0-beta.rc2-testbuild3.tar.gz
f96e5f76336138287fbf172e239cd2ec2647d7770d0b4883bae5d3a76a68d286  lnd-freebsd-arm-v0.12.0-beta.rc2-testbuild3.tar.gz
d6542bc29e783db208de6cb5156c02e6ff62458b45327f312af514b5ace69cde  lnd-illumos-amd64-v0.12.0-beta.rc2-testbuild3.tar.gz
b2e986c56070fd49ee977add546c028cfa32375787204e89e0776acd5521390d  lnd-linux-386-v0.12.0-beta.rc2-testbuild3.tar.gz
45615069ec913438795830141691107b9e57ecd3539399e0c38fafd84e916ca3  lnd-linux-amd64-v0.12.0-beta.rc2-testbuild3.tar.gz
62d1afd7ed5ea59bac3abce76fdf3e3f6cb47fe8d68ccdc746e0ade0c9fa3229  lnd-linux-arm64-v0.12.0-beta.rc2-testbuild3.tar.gz
74a68431f93b347a7bc8907ed4996e0ed73fe81b7db613486d664fe415c746b7  lnd-linux-armv6-v0.12.0-beta.rc2-testbuild3.tar.gz
d6e7cefaada5afc3df14b2435d65b761a5c0e7fcf01c5c8e493f371b446bc1e1  lnd-linux-armv7-v0.12.0-beta.rc2-testbuild3.tar.gz
7184472a07f46991281b5af1fc7a4049af88344b8c4d979a56949a69e4fc9c59  lnd-linux-mips-v0.12.0-beta.rc2-testbuild3.tar.gz
c1a8ddd814d1458e9ed5dd7d31f16c834a1345723b1249bbcf6bd1356d7fda51  lnd-linux-mips64-v0.12.0-beta.rc2-testbuild3.tar.gz
b7e8a113219e6b7caeef3ee7508fcd65efda9c8f133c735984083ec3f09f6713  lnd-linux-mips64le-v0.12.0-beta.rc2-testbuild3.tar.gz
01b5861df1057e2a08e14bb2bd9602a1386448d8325a05360483795f6c8f557b  lnd-linux-mipsle-v0.12.0-beta.rc2-testbuild3.tar.gz
80f5b150b92a25c9e826c924658982915a0458e4ba74d702c4d6d5fa85cc84a4  lnd-linux-ppc64-v0.12.0-beta.rc2-testbuild3.tar.gz
9486b231749cd86b6a47d966e2db11480912883962db2cb401db86344ff19f8a  lnd-linux-ppc64le-v0.12.0-beta.rc2-testbuild3.tar.gz
41e9a913d20f54e72afd98dddb4a06b501f52ed24fe41cab7626404ba0d3c966  lnd-linux-s390x-v0.12.0-beta.rc2-testbuild3.tar.gz
ace8639df8748e4a0921d537b8dd2ba1b1719acf0a51b64427d1a358538fed34  lnd-netbsd-386-v0.12.0-beta.rc2-testbuild3.tar.gz
31373ca5d367496ec2f032193e14186c9ed48997f11d29b586e7c45028d0a9c4  lnd-netbsd-amd64-v0.12.0-beta.rc2-testbuild3.tar.gz
4d3d05816a5f9fcc435ac4ce4d58ed8f18e51ee80090472c70139c5166162b9d  lnd-netbsd-arm-v0.12.0-beta.rc2-testbuild3.tar.gz
f4afa8248238db3c1961bd056a3de27d8997b5a495936c5dec72cf4e583cd1bb  lnd-netbsd-arm64-v0.12.0-beta.rc2-testbuild3.tar.gz
2dd9df4ed86f63a8ed0357d45b943998cb1c0a80fb33ec99cfa85731466e5ee0  lnd-openbsd-386-v0.12.0-beta.rc2-testbuild3.tar.gz
6b88381ed5f7f70dbc6732b59b3eda13c3d3d912cfde5f11d108b6483249050a  lnd-openbsd-amd64-v0.12.0-beta.rc2-testbuild3.tar.gz
e7a983bdfa80d32e9f1ad6a54a820e2d8ce329eda973ba78920aa2abccc80cca  lnd-openbsd-arm-v0.12.0-beta.rc2-testbuild3.tar.gz
2f88cbe245a255249aadf739a557a5479ee43376ef3cf9acc9947f615c85adff  lnd-openbsd-arm64-v0.12.0-beta.rc2-testbuild3.tar.gz
3624e627ee6d2bf9d8a9d67c89eb7605bd10e751f241506b57a42927446a13d2  lnd-solaris-amd64-v0.12.0-beta.rc2-testbuild3.tar.gz
bebaeb70633bd868149ae2a60a4d9093e59b61a72631dd6866eef69c636bc064  lnd-source-v0.12.0-beta.rc2-testbuild3.tar.gz
79ee475d357e62dd2b12fa6f58b2ccf4bdb3df9744e0088dfc549d741c2cb13f  lnd-windows-386-v0.12.0-beta.rc2-testbuild3.zip
e9880f22815027d901bf8c3ac7acbcaa8e054ff924ef0f2ad18bfce3000b0a15  lnd-windows-amd64-v0.12.0-beta.rc2-testbuild3.zip
140d43a4b052efbe116c8975fef5e2246b338aebb165ef0b2d4d35c98e631d00  lnd-windows-arm-v0.12.0-beta.rc2-testbuild3.zip
e353705b2b77332e5224e7ce3605a24f20c9ede47d6a3109b0aafda871e79e05  vendor.tar.gz```

@guggero
Copy link
Collaborator Author

guggero commented Dec 21, 2020

Hmmm... interesting, the builds from GitHub also don't match mine. At least the hashes of the extracted binaries seem to match, so it's still a packaging issue.
I'll investigate further, thanks for testing!

@guggero guggero force-pushed the release-fix branch 5 times, most recently from 3a06fab to 843963c Compare December 21, 2020 21:44
@guggero
Copy link
Collaborator Author

guggero commented Dec 21, 2020

This was harder than I expected.
Turns out the following things are also not automatically the same on each system:

  • the order in which the files are added to a zip file
  • the file attributes within a zip file

Got it fully working now, though: https://github.com/guggero/lnd/releases/download/v0.12.0-beta.rc3-testbuild1/manifest-v0.12.0-beta.rc3-testbuild1.txt

@guggero guggero moved this from In progress to Review in progress in v0.12.0-beta Dec 21, 2020
scripts/release.sh Outdated Show resolved Hide resolved
@guggero guggero force-pushed the release-fix branch 5 times, most recently from 6eda5d4 to df7cd40 Compare December 22, 2020 18:59
To make sure git has the full history, including all annotated tags, we
need to explicitly fetch everything on checkout.
@guggero
Copy link
Collaborator Author

guggero commented Jan 5, 2021

@bhandras I pushed up a new tag with the latest changes, it's ready to be re-tested (see updated instructions in PR description).

@halseth
Copy link
Contributor

halseth commented Jan 7, 2021

@guggero Still not getting same hashes one macOS:

$ git remote add guggero git@github.com:guggero/lnd.git
$ git fetch guggero
$ git checkout v0.12.0-beta.rc3-testbuild1
$ SKIP_VERSION_CHECK=1 make release tag=v0.12.0-beta.rc3-testbuild1
$ cat lnd-v0.12.0-beta.rc3-testbuild1/manifest-v0.12.0-beta.rc3-testbuild1.txt
c5c73b453877597741c7aa8aa30387012b6191ff93a5ac5eba1f18d6d17c7c26  lnd-darwin-amd64-v0.12.0-beta.rc3-testbuild1.tar.gz
69814b83c48e647bb06b3112b82f7cfb95ad523e93db1e70cb70fa31a55af9a8  lnd-dragonfly-amd64-v0.12.0-beta.rc3-testbuild1.tar.gz
bd4ef63179318305a79ce2a17b8bb9ffdd80a9ed8bd4fb34710d2e1bf0a718c8  lnd-freebsd-386-v0.12.0-beta.rc3-testbuild1.tar.gz
764ad551347bf655c3d39b00f0610d6ba609413efbd8ee4b2f77fe52c668b5d9  lnd-freebsd-amd64-v0.12.0-beta.rc3-testbuild1.tar.gz
258453d79d4c17c5af5f27a9eff042b9242bc2798223b115c4d2afd949b2d5d5  lnd-freebsd-arm-v0.12.0-beta.rc3-testbuild1.tar.gz
a0c6cd5736fd0a2906900716c780ccbf0e9b490ffdc2f720902466d4b9c82202  lnd-illumos-amd64-v0.12.0-beta.rc3-testbuild1.tar.gz
9193cdd7252dc4ed1f2dbe5791e371aeaf12c2d94690c646dc1de85c6f794f8e  lnd-linux-386-v0.12.0-beta.rc3-testbuild1.tar.gz
a7fc56b2c33055ef3376b98b6247b1f9b88ac8660249d93e4e0c609541155e01  lnd-linux-amd64-v0.12.0-beta.rc3-testbuild1.tar.gz
dcc18a06e605321d9532b35e90fcab0069d594c514fe08dec854002f4a66640a  lnd-linux-arm64-v0.12.0-beta.rc3-testbuild1.tar.gz
a98d29c280b2785ebccf3705dcacae862dcef073ccb3786dad78805e7a05f591  lnd-linux-armv6-v0.12.0-beta.rc3-testbuild1.tar.gz
73f363686870f54f9f7242d24aa3bb55d187d1b64ecf14cc08333326b7189cfd  lnd-linux-armv7-v0.12.0-beta.rc3-testbuild1.tar.gz
d28913a6f1f7a54ddf351550c2cef414e307d8ca01136ca02bcc08b13ae20c12  lnd-linux-mips-v0.12.0-beta.rc3-testbuild1.tar.gz
fb67fa58f864783b388249d5431b472b93a4c82160beacf77e8199ef2cded723  lnd-linux-mips64-v0.12.0-beta.rc3-testbuild1.tar.gz
5654fc6e0dad3c94a06c6844767e3f3c32a7e390136995e14dfac3b084c9db8d  lnd-linux-mips64le-v0.12.0-beta.rc3-testbuild1.tar.gz
8d5a1b865b4a36eab533210e7ca8ba43239df1f84885dd85c142a9a86a5459a9  lnd-linux-mipsle-v0.12.0-beta.rc3-testbuild1.tar.gz
a905e0348f72171a411a6780fbe43b5e65da97da11da4ccceec3ec4741ba98de  lnd-linux-ppc64-v0.12.0-beta.rc3-testbuild1.tar.gz
48998ce4ef9d0770415a33c454c469c8bc15b0e39422590d0959d7b9ed05a562  lnd-linux-ppc64le-v0.12.0-beta.rc3-testbuild1.tar.gz
2e985e998620aba5c6ce1536f879caed3d42cb7a44ce37825b355e9a5daaedac  lnd-linux-s390x-v0.12.0-beta.rc3-testbuild1.tar.gz
54e00ba02a66867b52836cd7732e7fdcf8e844152d042c0d5d684bebfe2a2ef2  lnd-netbsd-386-v0.12.0-beta.rc3-testbuild1.tar.gz
fed2affd56998083afefc2faec4592d0dbc31b7a1179f3719cee1a6e51539e4c  lnd-netbsd-amd64-v0.12.0-beta.rc3-testbuild1.tar.gz
b72135a3bae59cd12c2d93f659c9e3bd2f313bbacf094515f196b1889c074e83  lnd-netbsd-arm-v0.12.0-beta.rc3-testbuild1.tar.gz
322911ccd21023da6c57a52751413ebd37956dfaf1efc58303d17deba9ca8890  lnd-netbsd-arm64-v0.12.0-beta.rc3-testbuild1.tar.gz
bc97ca7f5d9383745cde1cf98aedd95d16283b87decd41c9925c0cbd855991ba  lnd-openbsd-386-v0.12.0-beta.rc3-testbuild1.tar.gz
40fa4e096025469334a4b64763d0336a725d066b5bd00dd92829d6c37aeec8cc  lnd-openbsd-amd64-v0.12.0-beta.rc3-testbuild1.tar.gz
e03894e083a9a6504ca9d76518255924a70edddd038a05edf09531dd211e78d6  lnd-openbsd-arm-v0.12.0-beta.rc3-testbuild1.tar.gz
4375d54d3f563602cb415499253b71fc66d261b31f722939e6add0e9988824c8  lnd-openbsd-arm64-v0.12.0-beta.rc3-testbuild1.tar.gz
1d970024ac47ea812247953c690b56b5fcdca64e254345cf63f7af9db5f3373f  lnd-solaris-amd64-v0.12.0-beta.rc3-testbuild1.tar.gz
ba9036e14be736962bb679446bf09ee5e5f59c7baa369364618d084d0b66180d  lnd-source-v0.12.0-beta.rc3-testbuild1.tar.gz
34a05d7940622c8da2d731034d7d5b2cdaa275ac18baf79a9c411ef409643df3  lnd-windows-386-v0.12.0-beta.rc3-testbuild1.zip
3273829ee1ef0c6800f014c98faddbdd1b2b0de05bbab344c4ca782fe98a8a95  lnd-windows-amd64-v0.12.0-beta.rc3-testbuild1.zip
16b16cbb63d220a1a207ee09d24ec0895a1d7ef25f30c01e4bc5035ce748098e  lnd-windows-arm-v0.12.0-beta.rc3-testbuild1.zip
0379a3d32d3212cfbd11f62f6889282d5cab4093026da9260f6db20af4c1435f  vendor.tar.gz

@guggero guggero force-pushed the release-fix branch 2 times, most recently from c225be9 to 89a6a46 Compare January 7, 2021 21:39
@guggero guggero force-pushed the release-fix branch 2 times, most recently from 21067f3 to ba3bffe Compare January 8, 2021 12:47
A number of tricks need to be applied to the tar and zip commands
respectively to make sure they always produce deterministic archives.
This includes setting the file timestamps to a fixed date and setting
specific ownership attributes (tar) or no attributes at all (zip).
@bhandras
Copy link
Collaborator

bhandras commented Jan 8, 2021

Manifest matches (although I had to sort the file first).

✔ ~/work/lnd/lnd-v0.12.0-beta.rc3-testbuild7 [v0.12.0-beta.rc3-testbuild7|…6⚑ 26]
17:22 $ cat manifest-v0.12.0-beta.rc3-testbuild7.txt
e141b6f612c0ae7293d01aa6ff1c17e8f283a8ed5ef61f315e5ce7517c284583  lnd-darwin-amd64-v0.12.0-beta.rc3-testbuild7.tar.gz
2904fcb7c293e28ac77142f44181ddc6822b8c3c5e75720dbc5363c0184c4ecc  lnd-dragonfly-amd64-v0.12.0-beta.rc3-testbuild7.tar.gz
ec9044d3a1b8056e68a331c08167ee7096ea2abd6230a0e5fc7742f0752c45bd  lnd-freebsd-386-v0.12.0-beta.rc3-testbuild7.tar.gz
b837a3ab3b4eb0abccbaa552523c55fedb8dc56506153d4deea02412db00a303  lnd-freebsd-amd64-v0.12.0-beta.rc3-testbuild7.tar.gz
321b3f6a60dd6e0ec7d8cfec48965b227c5495496f68c94a3f669bd3c3dc0518  lnd-freebsd-arm-v0.12.0-beta.rc3-testbuild7.tar.gz
ec1aeea048b7d2a794f0824b01a4485c1cd9edc16998452e1754ad8552c47118  lnd-illumos-amd64-v0.12.0-beta.rc3-testbuild7.tar.gz
294b94bc1c57622c8921bd0cbebbb709a632f969af5007039ca45c625198e81d  lnd-linux-386-v0.12.0-beta.rc3-testbuild7.tar.gz
685f0457623dbba26f5c126ec5519b43e19556e173929b2a083271889fa16eda  lnd-linux-amd64-v0.12.0-beta.rc3-testbuild7.tar.gz
588677761786812ba99011bd87bdf504c89df289762b5c0825fd56654fef6145  lnd-linux-arm64-v0.12.0-beta.rc3-testbuild7.tar.gz
bc3fa822de2e2a81dbd3262d39d38ffdcc64d42eec9c5a642514457a0d2f52fc  lnd-linux-armv6-v0.12.0-beta.rc3-testbuild7.tar.gz
53ce5a59c61877dcc107785f077d86fc5407d09d59f495bde2f737768894aa46  lnd-linux-armv7-v0.12.0-beta.rc3-testbuild7.tar.gz
b3611620c42e0a84f3715472ca05ae03c32d7e3c4c267512f393f1090dce7ab1  lnd-linux-mips64le-v0.12.0-beta.rc3-testbuild7.tar.gz
51ce26ff8cab9566585f196d6a4ad81307c8d42db600c90130147d89dbc18f5d  lnd-linux-mips64-v0.12.0-beta.rc3-testbuild7.tar.gz
840ad80f9248cb5b31c01ce2d7b36f66922e67617791e08fdfb664a377f0b8b3  lnd-linux-mipsle-v0.12.0-beta.rc3-testbuild7.tar.gz
1ce6c805e03cfd493b10d82a9bc6049d6670901304999912202fae860c5ccab8  lnd-linux-mips-v0.12.0-beta.rc3-testbuild7.tar.gz
bc509e74b880aa991cd3768ea1c984d4055b69699de7baa88a2882dd60d3dd64  lnd-linux-ppc64le-v0.12.0-beta.rc3-testbuild7.tar.gz
00e2d0530a4b6cfbdf194e3f0eafae50243fb6d47572dfb8ebacd51d170c5003  lnd-linux-ppc64-v0.12.0-beta.rc3-testbuild7.tar.gz
80764fbb8df83bc3a5e1bc592b5c028f3352e72494cfb9fcf8d0c40d2634d00d  lnd-linux-s390x-v0.12.0-beta.rc3-testbuild7.tar.gz
61e26693ba6f87e84a2ab27956277f3e5f947a40883bb83e2c9b41b70ffa4211  lnd-netbsd-386-v0.12.0-beta.rc3-testbuild7.tar.gz
7db2b5d30b5412df1bb8629f01dbaf8e5a3880fdee1032c4d68a36076bf0744a  lnd-netbsd-amd64-v0.12.0-beta.rc3-testbuild7.tar.gz
ffde3ae184a38636bab6a0da2c6feed4ca911cadd3a65e6d5dcb2b1afc9ee903  lnd-netbsd-arm64-v0.12.0-beta.rc3-testbuild7.tar.gz
168f4d948a433ba498727b3acbae63c93751a18bea424cd7d8828c5ee4b2caf5  lnd-netbsd-arm-v0.12.0-beta.rc3-testbuild7.tar.gz
6a5e001c8587d58aeb5768e302a45650e9ed4ee3b6ea82f80675fcf236ea34af  lnd-openbsd-386-v0.12.0-beta.rc3-testbuild7.tar.gz
abb4e4778b7b22adc9c6cf1bb828cf285cfd5155213438ed9f84bb89c68f6695  lnd-openbsd-amd64-v0.12.0-beta.rc3-testbuild7.tar.gz
2c8f5f7e873362b9cf0466c64bab0aba93cec7778f1b076dbc5777b290de491f  lnd-openbsd-arm64-v0.12.0-beta.rc3-testbuild7.tar.gz
9e216bdeef546736d9c11cbcffe65119b26354e8f0ec76c26656aeec3caa442a  lnd-openbsd-arm-v0.12.0-beta.rc3-testbuild7.tar.gz
0361af047e03053526ad61248bd6c2de1b4252aab82c6309fbad6d38dae51854  lnd-solaris-amd64-v0.12.0-beta.rc3-testbuild7.tar.gz
e6fa7f6d19f18db27a098afc9e05ce718cf56ead3022b63710c2dd3b2e662557  lnd-source-v0.12.0-beta.rc3-testbuild7.tar.gz
8ffee35583209ec0fd4d012e8221d5d6b8d179ebc63ea2e92502acf5e2913d70  lnd-windows-386-v0.12.0-beta.rc3-testbuild7.zip
ab8cd451ad52a521fff8eb820cf307af629fc5648dcef34c24658464f5c2c58b  lnd-windows-amd64-v0.12.0-beta.rc3-testbuild7.zip
25762418f5fef8f6533f81d10dd1e2448b4aebcda3d073241fc5391f57cbd86f  lnd-windows-arm-v0.12.0-beta.rc3-testbuild7.zip
8fb114940aed7b7b0893e6b7e1d20e0024a8d6f638fd37332d50266a3d8e2e79  vendor.tar.gz

Copy link
Collaborator

@bhandras bhandras left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, very nice work @guggero 🥇

@@ -10,13 +10,11 @@ defaults:
shell: bash

env:
DOCKER_REPO: lightninglabs
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We no longer need this?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cleared up offline: these env variables were never even used in the first place!

Copy link
Member

@Roasbeef Roasbeef left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🥽

v0.12.0-beta automation moved this from Review in progress to Reviewer approved Jan 8, 2021
@Roasbeef Roasbeef merged commit 5b8c0e6 into lightningnetwork:master Jan 8, 2021
v0.12.0-beta automation moved this from Reviewer approved to Done Jan 8, 2021
@guggero guggero deleted the release-fix branch January 8, 2021 20:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
No open projects
v0.12.0-beta
  
Done
Development

Successfully merging this pull request may close these issues.

None yet

4 participants