|
4 | 4 | # |
5 | 5 | # SPDX-License-Identifier: Apache-2.0 |
6 | 6 |
|
7 | | -set -e |
| 7 | +set -euo pipefail |
8 | 8 |
|
9 | | -#NO_CACHE=--no-cache |
| 9 | +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) |
| 10 | +REPO_ROOT=$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel) |
| 11 | +CONTEXT_DIR="$SCRIPT_DIR" |
| 12 | +SHARED_DIR="$SCRIPT_DIR/shared" |
| 13 | +DOCKERFILE="$SCRIPT_DIR/Dockerfile" |
10 | 14 |
|
11 | | -extract-packages() { |
12 | | - local name=$1 |
13 | | - local pkg_list_file=$2 |
14 | | - if [ -z "$pkg_list_file" ]; then |
15 | | - return |
16 | | - fi |
17 | | - docker run --rm --entrypoint bash $name -c "dpkg -l | grep '^ii' | awk '{print \$2\"=\"\$3}' | sort" > "$pkg_list_file" |
18 | | -} |
| 15 | +source "$REPO_ROOT/build/shared/build-lib.sh" |
19 | 16 |
|
20 | | -# Function to build Docker image and optionally extract package list |
21 | | -docker-build() { |
22 | | - local name=$1 |
23 | | - local target=$2 |
24 | | - local pkg_list_file=$3 |
25 | | - # Get the commit timestamp for SOURCE_DATE_EPOCH |
26 | | - local commit_timestamp=$(git show -s --format=%ct $GIT_REV) |
27 | | - local build_args="--build-arg SOURCE_DATE_EPOCH=$commit_timestamp --build-arg DSTACK_REV=$GIT_REV" |
28 | | - |
29 | | - local args="--builder buildkit_20 $NO_CACHE $build_args" |
30 | | - |
31 | | - # Add target if specified |
32 | | - if [ -n "$target" ]; then |
33 | | - args="$args --target $target" |
34 | | - fi |
35 | | - |
36 | | - # Build the image |
37 | | - docker buildx build $args --output type=docker,name=$name,rewrite-timestamp=true --progress=plain . |
38 | | - extract-packages $name $pkg_list_file |
39 | | -} |
40 | | - |
41 | | -NAME=$1 |
| 17 | +NAME=${1:-} |
42 | 18 | if [ -z "$NAME" ]; then |
43 | | - echo "Usage: $0 <name>[:<tag>]" |
| 19 | + echo "Usage: $0 <image-name>[:<tag>]" >&2 |
44 | 20 | exit 1 |
45 | 21 | fi |
46 | 22 |
|
47 | | -# Check if buildkit_20 already exists before creating it |
48 | | -if ! docker buildx inspect buildkit_20 &>/dev/null; then |
49 | | - docker buildx create --use --driver-opt image=moby/buildkit:v0.20.2 --name buildkit_20 |
50 | | -fi |
51 | | - |
52 | | -touch shared/builder-pinned-packages.txt |
53 | | -touch shared/pinned-packages.txt |
| 23 | +NO_CACHE=${NO_CACHE:-} |
54 | 24 | GIT_REV=${GIT_REV:-HEAD} |
55 | | -GIT_REV=$(git rev-parse $GIT_REV) |
| 25 | +GIT_REV=$(git -C "$REPO_ROOT" rev-parse "$GIT_REV") |
| 26 | +DSTACK_SRC_URL=${DSTACK_SRC_URL:-https://github.com/Dstack-TEE/dstack.git} |
56 | 27 |
|
57 | | -docker-build "$NAME" "" "shared/pinned-packages.txt" |
58 | | -docker-build "gateway-builder-temp" "gateway-builder" "shared/builder-pinned-packages.txt" |
| 28 | +ensure_buildkit |
| 29 | +sync_shared_scripts "$SHARED_DIR" |
59 | 30 |
|
60 | | -git_status=$(git status --porcelain -- shared/) |
61 | | -if [ -n "$git_status" ]; then |
62 | | - echo "The working tree is not clean, please commit or stash your changes before re-running the build" |
63 | | - exit 1 |
64 | | -fi |
| 31 | +touch "$SHARED_DIR/builder-pinned-packages.txt" |
| 32 | +touch "$SHARED_DIR/pinned-packages.txt" |
| 33 | + |
| 34 | +docker_build "$NAME" "" "$SHARED_DIR/pinned-packages.txt" |
| 35 | +docker_build "gateway-builder-temp" "gateway-builder" "$SHARED_DIR/builder-pinned-packages.txt" |
65 | 36 |
|
| 37 | +check_clean_tree "$SHARED_DIR" |
0 commit comments