From 4c56f3cacba3b85a130b675116cd524b89450e18 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Fri, 8 Jan 2021 10:40:17 +0100 Subject: [PATCH] multi: add release helper docker file --- .github/workflows/main.yml | 1 + .github/workflows/release.yaml | 1 + .travis.yml | 1 + Dockerfile | 6 ++++++ Makefile | 8 ++++++++ dev.Dockerfile | 6 ++++++ docs/release.md | 21 +++++++++++++++++++-- make/builder.Dockerfile | 34 ++++++++++++++++++++++++++++++++++ make/release_flags.mk | 10 ++++++++++ 9 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 make/builder.Dockerfile diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index abeed5120..c9a053885 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,6 +23,7 @@ env: # /.travis.yml # /Dockerfile # /dev.Dockerfile + # /make/builder.Dockerfile # /.github/workflows/release.yml GO_VERSION: 1.15.6 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index c2240598f..e40deccd6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -14,6 +14,7 @@ env: # /.travis.yml # /Dockerfile # /dev.Dockerfile + # /make/builder.Dockerfile # /.github/workflows/main.yml GO_VERSION: 1.15.6 diff --git a/.travis.yml b/.travis.yml index cd1c1cb72..eb4243f6c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,7 @@ go: # If you change this value, please change it in the following files as well: # /Dockerfile # /dev.Dockerfile + # /make/builder.Dockerfile # /.github/workflows/main.yml # /.github/workflows/release.yml - "1.15.6" diff --git a/Dockerfile b/Dockerfile index b544c0b84..9fdcb4a3d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,9 @@ +# If you change this value, please change it in the following files as well: +# /.travis.yml +# /dev.Dockerfile +# /make/builder.Dockerfile +# /.github/workflows/main.yml +# /.github/workflows/release.yml FROM golang:1.15.6-alpine as builder # Force Go to use the cgo based DNS resolver. This is required to ensure DNS diff --git a/Makefile b/Makefile index 1bffec590..cfe1de345 100644 --- a/Makefile +++ b/Makefile @@ -156,6 +156,14 @@ release: $(VERSION_CHECK) ./scripts/release.sh build-release "$(VERSION_TAG)" "$(BUILD_SYSTEM)" "$(RELEASE_TAGS)" "$(RELEASE_LDFLAGS)" +docker-release: + @$(call print, "Building release helper docker image.") + if [ "$(tag)" = "" ]; then echo "Must specify tag=!"; exit 1; fi + + docker build -t lnd-release-helper -f make/builder.Dockerfile make/ + $(DOCKER_RELEASE_HELPER) scripts/release.sh check-tag "$(VERSION_TAG)" + $(DOCKER_RELEASE_HELPER) scripts/release.sh build-release "$(VERSION_TAG)" "$(BUILD_SYSTEM)" "$(RELEASE_TAGS)" "$(RELEASE_LDFLAGS)" + scratch: build diff --git a/dev.Dockerfile b/dev.Dockerfile index cd3be28ae..f876febca 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -1,3 +1,9 @@ +# If you change this value, please change it in the following files as well: +# /.travis.yml +# /Dockerfile +# /make/builder.Dockerfile +# /.github/workflows/main.yml +# /.github/workflows/release.yml FROM golang:1.15.6-alpine as builder LABEL maintainer="Olaoluwa Osuntokun " diff --git a/docs/release.md b/docs/release.md index e6591ea47..58d82d845 100644 --- a/docs/release.md +++ b/docs/release.md @@ -10,7 +10,23 @@ utilize a work around needed until `go1.13.2`. ## Building a New Release -### macOS/Linux/Windows (WSL) +### MacOS + +The first requirement is to have [`docker`](https://www.docker.com/) +installed locally and running. The second requirement is to have `make` +installed. Everything else (including `golang`) is included in the release +helper image. + +To build a release, run the following commands: + +1. `git clone https://github.com/lightningnetwork/lnd.git` +2. `cd lnd` +3. `git checkout # is the name of the next release/tag` +4. `make docker-release tag=` + +Where `` is the name of the next release of `lnd`. + +### Linux/Windows (WSL) No prior set up is needed on Linux or macOS is required in order to build the release binaries. However, on Windows, the only way to build the release @@ -19,7 +35,8 @@ the release binaries following these steps: 1. `git clone https://github.com/lightningnetwork/lnd.git` 2. `cd lnd` -3. `make release tag= # is the name of the next release/tag` +3. `git checkout # is the name of the next release/tag` +4. `make release tag=` This will then create a directory of the form `lnd-` containing archives of the release binaries for each supported operating system and architecture, diff --git a/make/builder.Dockerfile b/make/builder.Dockerfile new file mode 100644 index 000000000..08ba05c60 --- /dev/null +++ b/make/builder.Dockerfile @@ -0,0 +1,34 @@ +# If you change this value, please change it in the following files as well: +# /.travis.yml +# /Dockerfile +# /dev.Dockerfile +# /.github/workflows/main.yml +# /.github/workflows/release.yml +FROM golang:1.15.6-buster + +MAINTAINER Olaoluwa Osuntokun + +# Golang build related environment variables that are static and used for all +# architectures/OSes. +ENV GODEBUG netdns=cgo +ENV GO111MODULE=auto +ENV CGO_ENABLED=0 + +# Set up cache directories. Those will be mounted from the host system to speed +# up builds. If go isn't installed on the host system, those will fall back to +# temp directories during the build (see make/release_flags.mk). +ENV GOCACHE=/tmp/build/.cache +ENV GOMODCACHE=/tmp/build/.modcache + +RUN apt-get update && apt-get install -y \ + git \ + make \ + tar \ + zip \ + bash \ + && mkdir -p /tmp/build/lnd \ + && mkdir -p /tmp/build/.cache \ + && mkdir -p /tmp/build/.modcache \ + && chmod -R 777 /tmp/build/ + +WORKDIR /tmp/build/lnd diff --git a/make/release_flags.mk b/make/release_flags.mk index e0058133e..8a00f0898 100644 --- a/make/release_flags.mk +++ b/make/release_flags.mk @@ -1,6 +1,16 @@ VERSION_TAG = $(shell date +%Y%m%d)-01 VERSION_CHECK = @$(call print, "Building master with date version tag") +DOCKER_RELEASE_HELPER = docker run \ + -it \ + --rm \ + --user $(shell id -u):$(shell id -g) \ + -v $(shell pwd):/tmp/build/lnd \ + -v $(shell bash -c "go env GOCACHE || (mkdir -p /tmp/go-cache; echo /tmp/go-cache)"):/tmp/build/.cache \ + -v $(shell bash -c "go env GOMODCACHE || (mkdir -p /tmp/go-modcache; echo /tmp/go-modcache)"):/tmp/build/.modcache \ + -e SKIP_VERSION_CHECK \ + lnd-release-helper + BUILD_SYSTEM = darwin-amd64 \ dragonfly-amd64 \ freebsd-386 \