mirror of https://github.com/status-im/consul.git
Replace build script with 'go build'
This commit is contained in:
parent
947e972dd2
commit
f504a02776
|
@ -359,7 +359,7 @@ jobs:
|
||||||
path: /tmp/jsonfile
|
path: /tmp/jsonfile
|
||||||
- run: *notify-slack-failure
|
- run: *notify-slack-failure
|
||||||
|
|
||||||
# build all distros
|
# build is a templated job for build-x
|
||||||
build-distros: &build-distros
|
build-distros: &build-distros
|
||||||
docker:
|
docker:
|
||||||
- image: *GOLANG_IMAGE
|
- image: *GOLANG_IMAGE
|
||||||
|
@ -367,7 +367,13 @@ jobs:
|
||||||
<<: *ENVIRONMENT
|
<<: *ENVIRONMENT
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- run: ./build-support/scripts/build-local.sh
|
- run:
|
||||||
|
name: Build
|
||||||
|
command: |
|
||||||
|
for os in $XC_OS; do
|
||||||
|
target="./pkg/bin/${GOOS}_${GOARCH}/"
|
||||||
|
GOOS="$os" CGO_ENABLED=0 go build -o "$target" -ldflags "$(GOLDFLAGS)" -tags "$(GOTAGS)"
|
||||||
|
done
|
||||||
|
|
||||||
# save dev build to CircleCI
|
# save dev build to CircleCI
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
|
@ -380,7 +386,7 @@ jobs:
|
||||||
environment:
|
environment:
|
||||||
<<: *build-env
|
<<: *build-env
|
||||||
XC_OS: "freebsd linux windows"
|
XC_OS: "freebsd linux windows"
|
||||||
XC_ARCH: "386"
|
GOARCH: "386"
|
||||||
|
|
||||||
# build all amd64 architecture supported OS binaries
|
# build all amd64 architecture supported OS binaries
|
||||||
build-amd64:
|
build-amd64:
|
||||||
|
@ -388,7 +394,7 @@ jobs:
|
||||||
environment:
|
environment:
|
||||||
<<: *build-env
|
<<: *build-env
|
||||||
XC_OS: "darwin freebsd linux solaris windows"
|
XC_OS: "darwin freebsd linux solaris windows"
|
||||||
XC_ARCH: "amd64"
|
GOARCH: "amd64"
|
||||||
|
|
||||||
# build all arm/arm64 architecture supported OS binaries
|
# build all arm/arm64 architecture supported OS binaries
|
||||||
build-arm:
|
build-arm:
|
||||||
|
@ -433,7 +439,11 @@ jobs:
|
||||||
- attach_workspace: # this normally runs as the first job and has nothing to attach; only used in main branch after rebuilding UI
|
- attach_workspace: # this normally runs as the first job and has nothing to attach; only used in main branch after rebuilding UI
|
||||||
at: .
|
at: .
|
||||||
- run:
|
- run:
|
||||||
command: make dev
|
name: Build
|
||||||
|
command: |
|
||||||
|
make dev
|
||||||
|
mkdir -p /home/circleci/go/bin
|
||||||
|
cp ./bin/consul /home/circleci/go/bin/consul
|
||||||
|
|
||||||
# save dev build to pass to downstream jobs
|
# save dev build to pass to downstream jobs
|
||||||
- persist_to_workspace:
|
- persist_to_workspace:
|
||||||
|
|
18
GNUmakefile
18
GNUmakefile
|
@ -15,8 +15,6 @@ GOTOOLS = \
|
||||||
github.com/hashicorp/lint-consul-retry@master
|
github.com/hashicorp/lint-consul-retry@master
|
||||||
|
|
||||||
GOTAGS ?=
|
GOTAGS ?=
|
||||||
GOOS?=$(shell go env GOOS)
|
|
||||||
GOARCH?=$(shell go env GOARCH)
|
|
||||||
GOPATH=$(shell go env GOPATH)
|
GOPATH=$(shell go env GOPATH)
|
||||||
MAIN_GOPATH=$(shell go env GOPATH | cut -d: -f1)
|
MAIN_GOPATH=$(shell go env GOPATH | cut -d: -f1)
|
||||||
|
|
||||||
|
@ -137,20 +135,17 @@ ifdef SKIP_DOCKER_BUILD
|
||||||
ENVOY_INTEG_DEPS=noop
|
ENVOY_INTEG_DEPS=noop
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# all builds binaries for all targets
|
all: dev-build
|
||||||
all: bin
|
|
||||||
|
|
||||||
# used to make integration dependencies conditional
|
# used to make integration dependencies conditional
|
||||||
noop: ;
|
noop: ;
|
||||||
|
|
||||||
bin: tools
|
# dev creates binaries for testing locally - these are put into ./bin
|
||||||
@$(SHELL) $(CURDIR)/build-support/scripts/build-local.sh
|
|
||||||
|
|
||||||
# dev creates binaries for testing locally - these are put into ./bin and $GOPATH
|
|
||||||
dev: dev-build
|
dev: dev-build
|
||||||
|
|
||||||
dev-build:
|
dev-build:
|
||||||
@$(SHELL) $(CURDIR)/build-support/scripts/build-local.sh -o $(GOOS) -a $(GOARCH)
|
mkdir -p bin
|
||||||
|
CGO_ENABLED=0 go build -o ./bin -ldflags "$(GOLDFLAGS)" -tags "$(GOTAGS)"
|
||||||
|
|
||||||
dev-docker: linux
|
dev-docker: linux
|
||||||
@echo "Pulling consul container image - $(CONSUL_IMAGE_VERSION)"
|
@echo "Pulling consul container image - $(CONSUL_IMAGE_VERSION)"
|
||||||
|
@ -178,9 +173,10 @@ ifeq ($(CIRCLE_BRANCH), main)
|
||||||
@docker push $(CI_DEV_DOCKER_NAMESPACE)/$(CI_DEV_DOCKER_IMAGE_NAME):latest
|
@docker push $(CI_DEV_DOCKER_NAMESPACE)/$(CI_DEV_DOCKER_IMAGE_NAME):latest
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# linux builds a linux package independent of the source platform
|
# linux builds a linux binary independent of the source platform
|
||||||
linux:
|
linux:
|
||||||
@$(SHELL) $(CURDIR)/build-support/scripts/build-local.sh -o linux -a amd64
|
mkdir -p bin
|
||||||
|
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./bin -ldflags "$(GOLDFLAGS)" -tags "$(GOTAGS)"
|
||||||
|
|
||||||
# dist builds binaries for all platforms and packages them for distribution
|
# dist builds binaries for all platforms and packages them for distribution
|
||||||
dist:
|
dist:
|
||||||
|
|
|
@ -326,8 +326,7 @@ function build_consul {
|
||||||
-e CGO_ENABLED=0 \
|
-e CGO_ENABLED=0 \
|
||||||
-e GOLDFLAGS="${GOLDFLAGS}" \
|
-e GOLDFLAGS="${GOLDFLAGS}" \
|
||||||
-e GOTAGS="${GOTAGS}" \
|
-e GOTAGS="${GOTAGS}" \
|
||||||
${image_name} \
|
${image_name} make linux
|
||||||
./build-support/scripts/build-local.sh -o "${XC_OS}" -a "${XC_ARCH}")
|
|
||||||
ret=$?
|
ret=$?
|
||||||
|
|
||||||
if test $ret -eq 0
|
if test $ret -eq 0
|
||||||
|
@ -354,110 +353,3 @@ function build_consul {
|
||||||
popd > /dev/null
|
popd > /dev/null
|
||||||
return $ret
|
return $ret
|
||||||
}
|
}
|
||||||
|
|
||||||
function build_consul_local {
|
|
||||||
# Arguments:
|
|
||||||
# $1 - Path to the top level Consul source
|
|
||||||
# $2 - Space separated string of OSes to build. If empty will use env vars for determination.
|
|
||||||
# $3 - Space separated string of architectures to build. If empty will use env vars for determination.
|
|
||||||
# $4 - Subdirectory to put binaries in under pkg/bin (optional)
|
|
||||||
#
|
|
||||||
# Returns:
|
|
||||||
# 0 - success
|
|
||||||
# * - error
|
|
||||||
#
|
|
||||||
# Note:
|
|
||||||
# The GOLDFLAGS and GOTAGS environment variables will be used if set
|
|
||||||
# If the CONSUL_DEV environment var is truthy only the local platform/architecture is built.
|
|
||||||
# If the XC_OS or the XC_ARCH environment vars are present then only those platforms/architectures
|
|
||||||
# will be built. Otherwise all supported platform/architectures are built
|
|
||||||
# The GOXPARALLEL environment variable is used if set
|
|
||||||
|
|
||||||
if ! test -d "$1"
|
|
||||||
then
|
|
||||||
err "ERROR: '$1' is not a directory. build_consul must be called with the path to the top level source as the first argument'"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
local sdir="$1"
|
|
||||||
local build_os="$2"
|
|
||||||
local build_arch="$3"
|
|
||||||
local extra_dir_name="$4"
|
|
||||||
local extra_dir=""
|
|
||||||
|
|
||||||
if test -n "${extra_dir_name}"
|
|
||||||
then
|
|
||||||
extra_dir="${extra_dir_name}/"
|
|
||||||
fi
|
|
||||||
|
|
||||||
pushd ${sdir} > /dev/null
|
|
||||||
if is_set "${CONSUL_DEV}"
|
|
||||||
then
|
|
||||||
if test -z "${XC_OS}"
|
|
||||||
then
|
|
||||||
XC_OS=$(go env GOOS)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "${XC_ARCH}"
|
|
||||||
then
|
|
||||||
XC_ARCH=$(go env GOARCH)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
XC_OS=${XC_OS:-"solaris darwin freebsd linux windows"}
|
|
||||||
XC_ARCH=${XC_ARCH:-"386 amd64 arm arm64"}
|
|
||||||
|
|
||||||
if test -z "${build_os}"
|
|
||||||
then
|
|
||||||
build_os="${XC_OS}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "${build_arch}"
|
|
||||||
then
|
|
||||||
build_arch="${XC_ARCH}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
status_stage "==> Building Consul - OSes: ${build_os}, Architectures: ${build_arch}"
|
|
||||||
mkdir pkg.bin.new 2> /dev/null
|
|
||||||
|
|
||||||
status "Building sequentially with go install"
|
|
||||||
for os in ${build_os}
|
|
||||||
do
|
|
||||||
for arch in ${build_arch}
|
|
||||||
do
|
|
||||||
outdir="pkg.bin.new/${extra_dir}${os}_${arch}"
|
|
||||||
osarch="${os}/${arch}"
|
|
||||||
|
|
||||||
if ! supported_osarch "${osarch}"
|
|
||||||
then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
echo "---> ${osarch}"
|
|
||||||
|
|
||||||
mkdir -p "${outdir}"
|
|
||||||
GOBIN_EXTRA=""
|
|
||||||
if test "${os}" != "$(go env GOHOSTOS)" -o "${arch}" != "$(go env GOHOSTARCH)"
|
|
||||||
then
|
|
||||||
GOBIN_EXTRA="${os}_${arch}/"
|
|
||||||
fi
|
|
||||||
binname="consul"
|
|
||||||
if [ $os == "windows" ];then
|
|
||||||
binname="consul.exe"
|
|
||||||
fi
|
|
||||||
debug_run env CGO_ENABLED=0 GOOS=${os} GOARCH=${arch} go install -ldflags "${GOLDFLAGS}" -tags "${GOTAGS}" && cp "${MAIN_GOPATH}/bin/${GOBIN_EXTRA}${binname}" "${outdir}/${binname}"
|
|
||||||
if test $? -ne 0
|
|
||||||
then
|
|
||||||
err "ERROR: Failed to build Consul for ${osarch}"
|
|
||||||
rm -r pkg.bin.new
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
build_consul_post "${sdir}" "${extra_dir_name}"
|
|
||||||
if test $? -ne 0
|
|
||||||
then
|
|
||||||
err "ERROR: Failed postprocessing Consul binaries"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,107 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
SCRIPT_NAME="$(basename ${BASH_SOURCE[0]})"
|
|
||||||
pushd $(dirname ${BASH_SOURCE[0]}) > /dev/null
|
|
||||||
SCRIPT_DIR=$(pwd)
|
|
||||||
pushd ../.. > /dev/null
|
|
||||||
SOURCE_DIR=$(pwd)
|
|
||||||
popd > /dev/null
|
|
||||||
pushd ../functions > /dev/null
|
|
||||||
FN_DIR=$(pwd)
|
|
||||||
popd > /dev/null
|
|
||||||
popd > /dev/null
|
|
||||||
|
|
||||||
source "${SCRIPT_DIR}/functions.sh"
|
|
||||||
|
|
||||||
function usage {
|
|
||||||
cat <<-EOF
|
|
||||||
Usage: ${SCRIPT_NAME} [<options ...>]
|
|
||||||
|
|
||||||
Description:
|
|
||||||
This script will build the Consul binary on the local system.
|
|
||||||
All the requisite tooling must be installed for this to be
|
|
||||||
successful.
|
|
||||||
|
|
||||||
Options:
|
|
||||||
|
|
||||||
-s | --source DIR Path to source to build.
|
|
||||||
Defaults to "${SOURCE_DIR}"
|
|
||||||
|
|
||||||
-o | --os OSES Space separated string of OS
|
|
||||||
platforms to build.
|
|
||||||
|
|
||||||
-a | --arch ARCH Space separated string of
|
|
||||||
architectures to build.
|
|
||||||
|
|
||||||
-h | --help Print this help text.
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
function err_usage {
|
|
||||||
err "$1"
|
|
||||||
err ""
|
|
||||||
err "$(usage)"
|
|
||||||
}
|
|
||||||
|
|
||||||
function main {
|
|
||||||
declare sdir="${SOURCE_DIR}"
|
|
||||||
declare build_os=""
|
|
||||||
declare build_arch=""
|
|
||||||
|
|
||||||
|
|
||||||
while test $# -gt 0
|
|
||||||
do
|
|
||||||
case "$1" in
|
|
||||||
-h | --help )
|
|
||||||
usage
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
-s | --source )
|
|
||||||
if test -z "$2"
|
|
||||||
then
|
|
||||||
err_usage "ERROR: option -s/--source requires an argument"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! test -d "$2"
|
|
||||||
then
|
|
||||||
err_usage "ERROR: '$2' is not a directory and not suitable for the value of -s/--source"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
sdir="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-o | --os )
|
|
||||||
if test -z "$2"
|
|
||||||
then
|
|
||||||
err_usage "ERROR: option -o/--os requires an argument"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
build_os="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
-a | --arch )
|
|
||||||
if test -z "$2"
|
|
||||||
then
|
|
||||||
err_usage "ERROR: option -a/--arch requires an argument"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
build_arch="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
* )
|
|
||||||
err_usage "ERROR: Unknown argument: '$1'"
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
build_consul_local "${sdir}" "${build_os}" "${build_arch}" || return 1
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
main "$@"
|
|
||||||
exit $?
|
|
|
@ -50,41 +50,44 @@ a copy of [`git`](https://www.git-scm.com/) in your `PATH`.
|
||||||
1. Build Consul for your target system. The binary will be placed in `./bin`
|
1. Build Consul for your target system. The binary will be placed in `./bin`
|
||||||
(relative to the git checkout).
|
(relative to the git checkout).
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
The tabs below *should* be indented with the step immediately above,
|
The tabs below are intended to be indented with the step immediately
|
||||||
but that is not currently possible.
|
above, but getting that to work is tricky.
|
||||||
|
|
||||||
The pre-commit linting rules will automatically unindent the <Tab>
|
The pre-commit linting rules will automatically unindent the <Tab>
|
||||||
element upon commit. This causes compilation to fail, because <Tabs>
|
element upon commit. This causes compilation to fail, because <Tabs>
|
||||||
and all its contained <Tab> elements need to be at the same indent level
|
and all its contained <Tab> elements need to be at the same indent level
|
||||||
for compilation. As a temporary solution, the <Tabs> will be unindented.
|
for compilation.
|
||||||
-->
|
|
||||||
|
|
||||||
<Tabs>
|
To circumvent the pre-commit linting rules, commit with:
|
||||||
<Tab heading="Compile for your current system">
|
$ git commit --no-verify
|
||||||
|
-->
|
||||||
|
|
||||||
|
<Tabs>
|
||||||
|
<Tab heading="Compile for your current system">
|
||||||
|
|
||||||
```shell-session
|
```shell-session
|
||||||
$ make dev
|
$ make dev
|
||||||
```
|
```
|
||||||
|
|
||||||
</Tab>
|
</Tab>
|
||||||
<Tab heading="Cross-compile for another system">
|
<Tab heading="Cross-compile for another system">
|
||||||
|
|
||||||
Specify your target system by setting the following environment variables
|
Specify your target system by setting the following environment variables
|
||||||
before building:
|
before building:
|
||||||
|
|
||||||
- `GOOS`: Target operating system. Valid values include:
|
- `GOOS`: Target operating system. Valid values include:
|
||||||
`linux`, `darwin`, `windows`, `solaris`, `freebsd`.
|
`linux`, `darwin`, `windows`, `solaris`, `freebsd`.
|
||||||
- `GOARCH`: Target architecture. Valid values include:
|
- `GOARCH`: Target architecture. Valid values include:
|
||||||
`386`, `amd64`, `arm`, `arm64`
|
`386`, `amd64`, `arm`, `arm64`
|
||||||
|
|
||||||
```shell-session
|
```shell-session
|
||||||
$ export GOOS=linux GOARCH=amd64
|
$ export GOOS=linux GOARCH=amd64
|
||||||
$ make dev
|
$ make dev
|
||||||
```
|
```
|
||||||
|
|
||||||
</Tab>
|
</Tab>
|
||||||
</Tabs>
|
</Tabs>
|
||||||
|
|
||||||
## Verifying the Installation
|
## Verifying the Installation
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue