mirror of
https://github.com/restic/restic.git
synced 2025-01-03 13:45:20 +00:00
Update instructions for reproducing build
Dependencies are fetched at build time and stored in the GOPATH. These paths end up being in the final binary. Bump restic version to latest and go version to the 1.16.6, which was used to build restic 0.12.1.
This commit is contained in:
parent
bf9c8771a4
commit
c0eddc9969
1 changed files with 19 additions and 17 deletions
|
@ -12,27 +12,28 @@ depends on the following things:
|
||||||
* The source code for the release
|
* The source code for the release
|
||||||
* The exact version of the official `Go compiler <https://golang.org>`__ used to produce the binaries (running ``restic version`` will print this)
|
* The exact version of the official `Go compiler <https://golang.org>`__ used to produce the binaries (running ``restic version`` will print this)
|
||||||
* The architecture and operating system the Go compiler runs on (Linux, ``amd64``)
|
* The architecture and operating system the Go compiler runs on (Linux, ``amd64``)
|
||||||
|
* The build tags (for official binaries, it's the tag ``selfupdate``)
|
||||||
* The path where the source code is extracted to (``/restic``)
|
* The path where the source code is extracted to (``/restic``)
|
||||||
* The path to the Go compiler (``/usr/local/go``)
|
* The path to the Go compiler (``/usr/local/go``)
|
||||||
* The build tags (for official binaries, it's the tag ``selfupdate``)
|
* The path to the Go workspace (``GOPATH=/home/build/go``)
|
||||||
* The environment variables (mostly ``$GOOS``, ``$GOARCH``, ``$CGO_ENABLED``)
|
* Other environment variables (mostly ``$GOOS``, ``$GOARCH``, ``$CGO_ENABLED``)
|
||||||
|
|
||||||
In addition, The compressed ZIP files for Windows depends on the modification
|
In addition, The compressed ZIP files for Windows depends on the modification
|
||||||
timestamp and filename of the binary contained in it. In order to reproduce the
|
timestamp and filename of the binary contained in it. In order to reproduce the
|
||||||
exact same ZIP file every time, we update the timestamp of the file ``VERSION``
|
exact same ZIP file every time, we update the timestamp of the file ``VERSION``
|
||||||
in the source code archive and set the timezone to Europe/Berlin.
|
in the source code archive and set the timezone to Europe/Berlin.
|
||||||
|
|
||||||
In the following example, we'll use the file ``restic-0.10.0.tar.gz`` and Go
|
In the following example, we'll use the file ``restic-0.12.1.tar.gz`` and Go
|
||||||
1.15.2 to reproduce the released binaries.
|
1.16.6 to reproduce the released binaries.
|
||||||
|
|
||||||
1. Determine the Go compiler version used to build the released binaries, then download and extract the Go compiler into ``/usr/local/go``:
|
1. Determine the Go compiler version used to build the released binaries, then download and extract the Go compiler into ``/usr/local/go``:
|
||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
$ restic version
|
$ restic version
|
||||||
restic 0.10.0 compiled with go1.15.2 on linux/amd64
|
restic 0.12.1 compiled with go1.16.6 on linux/amd64
|
||||||
$ cd /usr/local
|
$ cd /usr/local
|
||||||
$ curl -L https://dl.google.com/go/go1.15.2.linux-amd64.tar.gz | tar xz
|
$ curl -L https://dl.google.com/go/go1.16.6.linux-amd64.tar.gz | tar xz
|
||||||
|
|
||||||
2. Extract the restic source code into ``/restic``
|
2. Extract the restic source code into ``/restic``
|
||||||
|
|
||||||
|
@ -40,22 +41,23 @@ In the following example, we'll use the file ``restic-0.10.0.tar.gz`` and Go
|
||||||
|
|
||||||
$ mkdir /restic
|
$ mkdir /restic
|
||||||
$ cd /restic
|
$ cd /restic
|
||||||
$ TZ=Europe/Berlin curl -L https://github.com/restic/restic/releases/download/v0.10.0/restic-0.10.0.tar.gz | tar xz --strip-components=1
|
$ TZ=Europe/Berlin curl -L https://github.com/restic/restic/releases/download/v0.12.1/restic-0.12.1.tar.gz | tar xz --strip-components=1
|
||||||
|
|
||||||
3. Build the binaries for Windows and Linux:
|
3. Build the binaries for Windows and Linux:
|
||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
$ export PATH=/usr/local/go/bin:$PATH
|
$ export PATH=/usr/local/go/bin:$PATH
|
||||||
|
$ export GOPATH=/home/build/go
|
||||||
$ go version
|
$ go version
|
||||||
go version go1.15.2 linux/amd64
|
go version go1.16.6 linux/amd64
|
||||||
|
|
||||||
$ GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags "-s -w" -tags selfupdate -o restic_linux_amd64 ./cmd/restic
|
$ GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags "-s -w" -tags selfupdate -o restic_linux_amd64 ./cmd/restic
|
||||||
$ bzip2 restic_linux_amd64
|
$ bzip2 restic_linux_amd64
|
||||||
|
|
||||||
$ GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -ldflags "-s -w" -tags selfupdate -o restic_0.10.0_windows_amd64.exe ./cmd/restic
|
$ GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -ldflags "-s -w" -tags selfupdate -o restic_0.12.1_windows_amd64.exe ./cmd/restic
|
||||||
$ touch --reference VERSION restic_0.10.0_windows_amd64.exe
|
$ touch --reference VERSION restic_0.12.1_windows_amd64.exe
|
||||||
$ TZ=Europe/Berlin zip -q -X restic_0.10.0_windows_amd64.zip restic_0.10.0_windows_amd64.exe
|
$ TZ=Europe/Berlin zip -q -X restic_0.12.1_windows_amd64.zip restic_0.12.1_windows_amd64.exe
|
||||||
|
|
||||||
Building the Official Binaries
|
Building the Official Binaries
|
||||||
******************************
|
******************************
|
||||||
|
@ -83,7 +85,7 @@ The following steps are necessary to build the binaries:
|
||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
tar xvzf restic-0.10.0.tar.gz
|
tar xvzf restic-0.12.1.tar.gz
|
||||||
|
|
||||||
3. Create a directory to place the resulting binaries in:
|
3. Create a directory to place the resulting binaries in:
|
||||||
|
|
||||||
|
@ -96,20 +98,20 @@ The following steps are necessary to build the binaries:
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
docker run --rm \
|
docker run --rm \
|
||||||
--volume "$PWD/restic-0.10.0:/restic" \
|
--volume "$PWD/restic-0.12.1:/restic" \
|
||||||
--volume "$PWD/output:/output" \
|
--volume "$PWD/output:/output" \
|
||||||
restic/builder \
|
restic/builder \
|
||||||
go run helpers/build-release-binaries/main.go --version 0.10.0
|
go run helpers/build-release-binaries/main.go --version 0.12.1
|
||||||
|
|
||||||
4. If anything goes wrong, you can enable debug output like this:
|
4. If anything goes wrong, you can enable debug output like this:
|
||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
docker run --rm \
|
docker run --rm \
|
||||||
--volume "$PWD/restic-0.10.0:/restic" \
|
--volume "$PWD/restic-0.12.1:/restic" \
|
||||||
--volume "$PWD/output:/output" \
|
--volume "$PWD/output:/output" \
|
||||||
restic/builder \
|
restic/builder \
|
||||||
go run helpers/build-release-binaries/main.go --version 0.10.0 --verbose
|
go run helpers/build-release-binaries/main.go --version 0.12.1 --verbose
|
||||||
|
|
||||||
Prepare a New Release
|
Prepare a New Release
|
||||||
*********************
|
*********************
|
||||||
|
@ -122,6 +124,6 @@ required argument is the new version number (in `Semantic Versioning
|
||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
go run helpers/prepare-release/main.go 0.10.0
|
go run helpers/prepare-release/main.go 0.12.1
|
||||||
|
|
||||||
Checks can be skipped on demand via flags, please see ``--help`` for details.
|
Checks can be skipped on demand via flags, please see ``--help`` for details.
|
||||||
|
|
Loading…
Reference in a new issue