mirror of
https://github.com/denoland/deno.git
synced 2025-01-21 04:52:26 -05:00
Use docker to build deno cli on a debian env
Instead of managing deps locally on the dev machine, use docker to manage build env for a quick deno cli build from source fixes: https://github.com/denoland/deno/issues/27648
This commit is contained in:
parent
70c822bfe2
commit
d69a1ce9b1
3 changed files with 120 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -15,6 +15,7 @@ gclient_config.py_entries
|
||||||
/tests/napi/node_modules
|
/tests/napi/node_modules
|
||||||
/tests/napi/build
|
/tests/napi/build
|
||||||
/tests/napi/third_party_tests/node_modules
|
/tests/napi/third_party_tests/node_modules
|
||||||
|
.buildtool
|
||||||
|
|
||||||
# MacOS generated files
|
# MacOS generated files
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
29
tools/buildtools/Dockerfile
Normal file
29
tools/buildtools/Dockerfile
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
# Use Ubuntu 24.04 LTS as the base image
|
||||||
|
FROM ubuntu:24.04
|
||||||
|
|
||||||
|
WORKDIR /mnt
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
curl \
|
||||||
|
build-essential \
|
||||||
|
libssl-dev \
|
||||||
|
pkg-config \
|
||||||
|
wget \
|
||||||
|
cmake \
|
||||||
|
libglib2.0-dev \
|
||||||
|
lsb-release \
|
||||||
|
software-properties-common \
|
||||||
|
gnupg \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||||
|
|
||||||
|
# Add the Cargo and Rust binaries to the PATH
|
||||||
|
ENV PATH="/root/.cargo/bin:${PATH}"
|
||||||
|
|
||||||
|
# Verify the installation
|
||||||
|
RUN rustc --version && cargo --version
|
||||||
|
|
||||||
|
RUN wget https://apt.llvm.org/llvm.sh && \
|
||||||
|
chmod +x llvm.sh && \
|
||||||
|
./llvm.sh 17 && \
|
||||||
|
apt-get install --install-recommends -y cmake libglib2.0-dev
|
90
tools/buildtools/denobuild
Executable file
90
tools/buildtools/denobuild
Executable file
|
@ -0,0 +1,90 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
is_debian_based() {
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
source /etc/os-release
|
||||||
|
if [[ "$ID_LIKE" == *debian* || "$ID" == *debian* ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! is_debian_based; then
|
||||||
|
echo "Only works on debian based systems"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
buildtools_folder="$(realpath $(dirname "$0"))"
|
||||||
|
deno_root="$(realpath "$buildtools_folder/../..")"
|
||||||
|
|
||||||
|
if command -v docker &> /dev/null
|
||||||
|
then
|
||||||
|
echo "Docker is installed."
|
||||||
|
docker --version
|
||||||
|
else
|
||||||
|
echo "Docker is not installed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DOCKERFILE="$buildtools_folder/Dockerfile"
|
||||||
|
IMAGE_NAME="denobuildtool"
|
||||||
|
IMAGE_TAG="current"
|
||||||
|
BUILD_TOOL_WORKING_DIR="$deno_root/.buildtool"
|
||||||
|
STORED_DOCKER_FILE_CHECKSUM_FILE="$BUILD_TOOL_WORKING_DIR/dockerfile_check_sum"
|
||||||
|
|
||||||
|
if [ ! -d "$BUILD_TOOL_WORKING_DIR" ]; then
|
||||||
|
mkdir -p "$BUILD_TOOL_WORKING_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
DOCKERFILE_CHECKSUM=$(sha256sum "$DOCKERFILE" | awk '{ print $1 }')
|
||||||
|
|
||||||
|
run_with_docker() {
|
||||||
|
if [[ $# != 0 ]]; then
|
||||||
|
args=("$@")
|
||||||
|
else
|
||||||
|
args=(/bin/bash -i)
|
||||||
|
fi
|
||||||
|
|
||||||
|
docker_args=()
|
||||||
|
if [ "$PWD" != "$deno_root" ]; then
|
||||||
|
docker_args+=(-v "$deno_root:$deno_root")
|
||||||
|
fi
|
||||||
|
|
||||||
|
image="$IMAGE_NAME:$IMAGE_TAG"
|
||||||
|
docker_args+=(
|
||||||
|
--network host \
|
||||||
|
--privileged \
|
||||||
|
-v "$PWD:$PWD" \
|
||||||
|
-v /etc/localtime:/etc/localtime:ro \
|
||||||
|
--env CARGO_HOME \
|
||||||
|
-v "${CARGO_HOME}:${CARGO_HOME}" \
|
||||||
|
-w "$PWD" \
|
||||||
|
-e HOME="$HOME" \
|
||||||
|
"$image" \
|
||||||
|
"${args[@]}"
|
||||||
|
)
|
||||||
|
|
||||||
|
docker run --rm "${docker_args[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -f "$STORED_DOCKER_FILE_CHECKSUM_FILE" ]; then
|
||||||
|
STORED_DOCKERFILE_CHECKSUM=$(cat "$STORED_DOCKER_FILE_CHECKSUM_FILE")
|
||||||
|
|
||||||
|
# Compare the current checksums with the stored checksums
|
||||||
|
if [ "$DOCKERFILE_CHECKSUM" == "$STORED_DOCKERFILE_CHECKSUM" ]; then
|
||||||
|
echo "Dockerfile not changed, no need to rebuild"
|
||||||
|
run_with_docker "$@"
|
||||||
|
else
|
||||||
|
echo "Dockerfile changed Proceeding with building docker image..."
|
||||||
|
docker buildx build -t "$IMAGE_NAME:$IMAGE_TAG" "$buildtools_folder" &&
|
||||||
|
echo "$DOCKERFILE_CHECKSUM" > "$STORED_DOCKER_FILE_CHECKSUM_FILE"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "No previous checksum found. Building the image..."
|
||||||
|
docker buildx build -t "$IMAGE_NAME:$IMAGE_TAG" "$buildtools_folder" &&
|
||||||
|
echo "$DOCKERFILE_CHECKSUM" > "$STORED_DOCKER_FILE_CHECKSUM_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue