d2/ci/release/build.sh

139 lines
3.2 KiB
Bash
Raw Normal View History

2022-11-11 09:17:06 +00:00
#!/bin/sh
set -eu
cd -- "$(dirname "$0")/../.."
2022-11-12 19:53:54 +00:00
. ./ci/sub/lib.sh
2022-11-11 09:17:06 +00:00
2022-11-12 21:38:54 +00:00
help() {
cat <<EOF
2022-11-13 01:12:41 +00:00
usage: $0 [--rebuild] [--local] [--dryrun]
2022-11-12 21:38:54 +00:00
2022-11-12 22:19:09 +00:00
$0 builds D2 release archives into ./ci/release/build/<version>/d2-<version>.tar.gz
The version is detected via git describe which will use the git tag for the current
commit if available.
2022-11-12 21:38:54 +00:00
Flags:
--rebuild: By default build.sh will avoid rebuilding finished assets if they
already exist but if you changed something and need to force rebuild, use
this flag.
2022-11-13 01:12:41 +00:00
--local: By default build.sh uses \$TSTRUCT_MACOS_AMD64_BUILDER,
\$TSTRUCT_MACOS_ARM64_BUILDER, \$TSTRUCT_LINUX_AMD64_BUILDER and
\$TSTRUCT_LINUX_ARM64_BUILDER to build the release archives. It's required for
now due to the following issue: https://github.com/terrastruct/d2/issues/31
2022-11-12 21:38:54 +00:00
With --local, build.sh will cross compile locally.
warning: This is only for testing purposes, do not use in production!
EOF
}
2022-11-11 09:17:06 +00:00
main() {
VERSION="$(git_describe_ref)"
BUILD_DIR="ci/release/build/$VERSION"
2022-11-12 22:19:09 +00:00
while :; do
flag_parse "$@"
case "$FLAG" in
h|help)
help
return 0
;;
rebuild)
2022-11-14 05:58:55 +00:00
flag_noarg && shift "$FLAGSHIFT"
2022-11-12 22:19:09 +00:00
REBUILD=1
;;
local)
2022-11-14 05:58:55 +00:00
flag_noarg && shift "$FLAGSHIFT"
2022-11-12 22:19:09 +00:00
LOCAL=1
;;
dryrun)
2022-11-14 05:58:55 +00:00
flag_noarg && shift "$FLAGSHIFT"
2022-11-12 22:19:09 +00:00
DRYRUN=1
;;
2022-11-14 00:57:47 +00:00
run)
2022-11-14 05:58:55 +00:00
flag_reqarg && shift "$FLAGSHIFT"
JOBFILTER="$FLAGARG"
;;
2022-11-12 22:19:09 +00:00
'')
shift "$FLAGSHIFT"
break
;;
*)
flag_errusage "unrecognized flag $FLAGRAW"
;;
esac
done
2022-11-11 09:17:06 +00:00
2022-11-12 21:38:54 +00:00
if [ $# -gt 0 ]; then
flag_errusage "no arguments are accepted"
fi
runjob linux-amd64 'OS=linux ARCH=amd64 build' &
runjob linux-arm64 'OS=linux ARCH=arm64 build' &
runjob macos-amd64 'OS=macos ARCH=amd64 build' &
runjob macos-arm64 'OS=macos ARCH=arm64 build' &
2022-11-12 22:19:09 +00:00
waitjobs
2022-11-11 09:17:06 +00:00
}
2022-11-13 03:10:45 +00:00
build() {
HW_BUILD_DIR="$BUILD_DIR/$OS/$ARCH/d2-$VERSION"
ARCHIVE="$BUILD_DIR/d2-$OS-$ARCH-$VERSION.tar.gz"
if [ -e "$ARCHIVE" -a -z "${REBUILD-}" ]; then
log "skipping as already built at $ARCHIVE"
return 0
fi
2022-11-13 03:42:39 +00:00
if [ -n "${LOCAL-}" ]; then
build_local
return 0
fi
2022-11-13 03:10:45 +00:00
case $OS in
# macos)
# ;;
linux)
case $ARCH in
amd64)
RHOST=$TSTRUCT_LINUX_AMD64_BUILDER build_rhost
;;
arm64)
RHOST=$TSTRUCT_LINUX_ARM64_BUILDER build_rhost
;;
*)
COLOR=3 logp warn "no builder for OS=$OS, building locally..."
build_local
;;
esac
;;
*)
COLOR=3 logp warn "no builder for OS=$OS, building locally..."
2022-11-13 03:42:39 +00:00
build_local
2022-11-13 03:10:45 +00:00
;;
esac
}
build_local() {
export DRYRUN \
HW_BUILD_DIR \
VERSION \
OS \
ARCH \
ARCHIVE
sh_c ./ci/release/_build.sh
}
build_rhost() {
sh_c ssh "$RHOST" mkdir -p src
sh_c rsync --archive --human-readable --delete ./ "$RHOST:src/d2/"
sh_c ssh -tttt "$RHOST" "DRYRUN=${DRYRUN-} \
HW_BUILD_DIR=$HW_BUILD_DIR \
VERSION=$VERSION \
OS=$OS \
ARCH=$ARCH \
ARCHIVE=$ARCHIVE \
2022-11-14 05:58:55 +00:00
TERM=$TERM \
2022-11-13 03:10:45 +00:00
./src/d2/ci/release/build_docker.sh"
sh_c rsync --archive --human-readable "$RHOST:src/d2/$ARCHIVE" "$ARCHIVE"
}
2022-11-11 09:17:06 +00:00
main "$@"