dragonfly/hack/build.sh

143 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
set -o nounset
set -o errexit
set -o pipefail
CDN_BINARY_NAME=cdn
DFGET_BINARY_NAME=dfget
SCHEDULER_BINARY_NAME=scheduler
MANAGER_BINARY_NAME=manager
PKG=d7y.io/dragonfly/v2
BUILD_IMAGE=golang:1.15.8
GOPROXY=${GOPROXY:-}
DATE=$(date "+%Y%m%d-%H:%M:%S")
curDir=$(cd "$(dirname "$0")" && pwd)
cd "${curDir}" || return
BUILD_SOURCE_HOME=$(cd ".." && pwd)
. ./env.sh
BUILD_PATH=bin/${GOOS}_${GOARCH}
USE_DOCKER=${USE_DOCKER:-"0"}
create-dirs() {
cd "${BUILD_SOURCE_HOME}" || return
mkdir -p .go/src/${PKG} .go/bin .cache
mkdir -p "${BUILD_PATH}"
}
build-local() {
test -f "${BUILD_SOURCE_HOME}/${BUILD_PATH}/$1" && rm -f "${BUILD_SOURCE_HOME}/${BUILD_PATH}/$1"
cd "${BUILD_SOURCE_HOME}/cmd/$2" || return
go build -o "${BUILD_SOURCE_HOME}/${BUILD_PATH}/$1"
chmod a+x "${BUILD_SOURCE_HOME}/${BUILD_PATH}/$1"
echo "BUILD: $2 in ${BUILD_SOURCE_HOME}/${BUILD_PATH}/$1"
}
build-cdn-local() {
build-local ${CDN_BINARY_NAME} cdn
}
build-dfget-local() {
build-local ${DFGET_BINARY_NAME} dfget
}
build-scheduler-local() {
build-local ${SCHEDULER_BINARY_NAME} scheduler
}
build-manager-local() {
build-local ${MANAGER_BINARY_NAME} manager
}
build-docker() {
cd "${BUILD_SOURCE_HOME}" || return
docker run \
--rm \
-ti \
-u "$(id -u)":"$(id -g)" \
-v "$(pwd)"/.go:/go \
-v "$(pwd)":/go/src/${PKG} \
-v "$(pwd)"/"${BUILD_PATH}":/go/bin \
-v "$(pwd)"/.cache:/.cache \
-e GOOS="${GOOS}" \
-e GOARCH="${GOARCH}" \
-e CGO_ENABLED=0 \
-e GO111MODULE=on \
-e GOPROXY="${GOPROXY}" \
-w /go/src/${PKG} \
${BUILD_IMAGE} \
go build -o "/go/bin/$1" ./cmd/"$2"
echo "BUILD: $1 in ${BUILD_SOURCE_HOME}/${BUILD_PATH}/$1"
}
build-cdn-docker() {
build-docker ${CDN_BINARY_NAME} dfdaemon
}
build-dfget-docker() {
build-docker ${DFGET_BINARY_NAME} dfget
}
build-scheduler-docker() {
build-docker ${SCHEDULER_BINARY_NAME} scheduler
}
build-manager-docker() {
build-docker ${MANAGER_BINARY_NAME} manager
}
main() {
create-dirs
if [[ "1" == "${USE_DOCKER}" ]]; then
echo "Begin to build with docker."
case "${1-}" in
dfdaemon)
build-cdn-docker
;;
dfget)
build-dfget-docker
;;
scheduler)
build-scheduler-docker
;;
manager)
build-manager-docker
;;
*)
build-dfget-docker
build-cdn-docker
build-scheduler-docker
build-manager-docker
;;
esac
else
echo "Begin to build in the local environment."
case "${1-}" in
cdn)
build-cdn-local
;;
dfget)
build-dfget-local
;;
scheduler)
build-scheduler-local
;;
manager)
build-manager-local
;;
*)
build-dfget-local
build-cdn-local
build-scheduler-local
build-manager-local
;;
esac
fi
}
main "$@"