Replace build script with 'go build'

This commit is contained in:
Daniel Nephin 2021-09-08 19:50:42 -04:00 committed by Jared Kirschner
parent da3076fc89
commit 7080e26c83
5 changed files with 53 additions and 259 deletions

View File

@ -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:

View File

@ -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:

View File

@ -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
}

View File

@ -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 $?

View File

@ -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