syncthing/build.sh

110 lines
1.7 KiB
Bash
Raw Normal View History

2014-03-17 17:15:59 +00:00
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
2013-12-21 23:16:49 +00:00
2015-01-21 23:59:08 +00:00
STTRACE=${STTRACE:-}
2014-11-19 11:02:47 +00:00
script() {
name="$1"
shift
go run "script/$name.go" "$@"
}
build() {
go run build.go "$@"
}
case "${1:-default}" in
default)
build
build: Support builds outside of GOPATH This adds support for building with the source placed anywhere and no GOPATH set. The build script handles this by creating a temporary GOPATH in the system temp dir (or another specified location) and mirroring the source there before building. The resulting binaries etc still end up in the same place as usual, meaning at least the "build", "install", "tar", "zip", "deb", "snap", "test", "vet", "lint", "metalint" and "clean" commands work without a GOPATH. To this end these commands internally use fully qualified package paths like "github.com/syncthing/syncthing/cmd/..." instead of "./cmd/..." like before. There is a new command "gopath" that prepares and echoes the directory of the temporary GOPATH. This can be used to run other non-build go commands: export GOPATH=$(go run build.go gopath) // GOPATH is now set go test -v -race github.com/syncthing/syncthing/cmd/... There is a new option "-no-build-gopath" that prevents the check-and-copy step, instead assuming the temporary GOPATH is already created and up to date. This is a performance optimization for build servers running multiple builds commands in sequence: go run build.go gopath // creates a temporary GOPATH go run build.go -no-build-gopath -goos=... tar // reuses GOPATH go run build.go -no-build-gopath -goos=... tar // reuses GOPATH The temporary GOPATH is placed in the system temporary directory (os.TempDir()) unless overridden by the STTMPDIR variable. It is named after the hash of the current directory where build.go is run. The reason for this is that the name should be unique to a source checkout without risk for conflict, but still persistent between runs of build.go. GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4253 LGTM: AudriusButkevicius, imsodin
2017-07-11 07:57:58 +00:00
build lint
2014-03-02 22:55:08 +00:00
;;
2014-08-11 09:54:48 +00:00
clean)
build "$@"
;;
2014-08-18 20:05:26 +00:00
tar)
build "$@"
;;
2014-08-18 20:05:26 +00:00
assets)
build "$@"
2014-03-22 20:33:18 +00:00
;;
2014-08-18 20:05:26 +00:00
xdr)
build "$@"
;;
2014-08-18 20:05:26 +00:00
translate)
build "$@"
;;
deb)
build "$@"
;;
setup)
build "$@"
;;
test)
ulimit -t 600 &>/dev/null || true
ulimit -d 512000 &>/dev/null || true
ulimit -m 512000 &>/dev/null || true
LOGGER_DISCARD=1 build test
;;
bench)
LOGGER_DISCARD=1 build bench | script benchfilter
2014-03-02 22:55:08 +00:00
;;
prerelease)
go run script/authors.go
build transifex
2015-05-30 11:05:37 +00:00
pushd man ; ./refresh.sh ; popd
2017-06-01 10:09:20 +00:00
git add -A gui man
git commit -m 'gui, man: Update docs & translations'
;;
2014-08-18 20:05:26 +00:00
noupgrade)
build -no-upgrade tar
2014-03-02 22:55:08 +00:00
;;
2014-08-18 20:05:26 +00:00
all)
2015-12-08 08:33:34 +00:00
platforms=(
darwin-amd64 dragonfly-amd64 freebsd-amd64 linux-amd64 netbsd-amd64 openbsd-amd64 solaris-amd64 windows-amd64
freebsd-386 linux-386 netbsd-386 openbsd-386 windows-386
linux-arm linux-arm64 linux-ppc64 linux-ppc64le
2015-12-08 08:33:34 +00:00
)
for plat in "${platforms[@]}"; do
echo Building "$plat"
goos="${plat%-*}"
goarch="${plat#*-}"
dist="tar"
if [[ $goos == "windows" ]]; then
dist="zip"
fi
build -goos "$goos" -goarch "$goarch" "$dist"
echo
done
2014-07-31 07:08:08 +00:00
;;
2016-01-09 23:31:55 +00:00
test-xunit)
ulimit -t 600 &>/dev/null || true
ulimit -d 512000 &>/dev/null || true
ulimit -m 512000 &>/dev/null || true
(GOPATH="$(pwd)/Godeps/_workspace:$GOPATH" go test -v -race ./lib/... ./cmd/... || true) > tests.out
go2xunit -output tests.xml -fail < tests.out
;;
2014-03-02 22:55:08 +00:00
*)
echo "Unknown build command $1"
2014-03-02 22:55:08 +00:00
;;
esac