diff options
author | 2022-07-21 16:57:43 -0700 | |
---|---|---|
committer | 2022-07-21 16:58:07 -0700 | |
commit | 588669ea6ab9a73ba3ca7fd8c1ba9d11ebcbb0f3 (patch) | |
tree | 83b09ca61b58f35e5fe1c06002515f3b9e3c8fad | |
parent | e6c58ae4f236b0fbad27d0c8a029224d05eca9a9 (diff) | |
download | bun-588669ea6ab9a73ba3ca7fd8c1ba9d11ebcbb0f3.tar.gz bun-588669ea6ab9a73ba3ca7fd8c1ba9d11ebcbb0f3.tar.zst bun-588669ea6ab9a73ba3ca7fd8c1ba9d11ebcbb0f3.zip |
Redo the dockerfile
-rw-r--r-- | .docker/build-base-images.sh | 4 | ||||
-rw-r--r-- | .docker/build-base.sh | 10 | ||||
-rw-r--r-- | Dockerfile | 223 | ||||
-rw-r--r-- | Dockerfile.base | 159 | ||||
-rw-r--r-- | Makefile | 29 |
5 files changed, 203 insertions, 222 deletions
diff --git a/.docker/build-base-images.sh b/.docker/build-base-images.sh index 396017e81..55984471f 100644 --- a/.docker/build-base-images.sh +++ b/.docker/build-base-images.sh @@ -6,10 +6,10 @@ export DOCKER_BUILDKIT=1 docker login --username bunbunbunbun -docker build -f Dockerfile.base -t bunbunbunbun/bun-test-base --target bun-test-base . --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH +# docker build -f Dockerfile.base -t bunbunbunbun/bun-test-base --target bun-test-base . --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH docker build -f Dockerfile.base -t bunbunbunbun/bun-base-with-zig-and-webkit --target bun-base-with-zig-and-webkit . --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH docker build -f Dockerfile.base -t bunbunbunbun/bun-base --target bun-base --platform=linux/$BUILDARCH . --build-arg BUILDARCH=$BUILDARCH -docker push bunbunbunbun/bun-test-base:latest +# docker push bunbunbunbun/bun-test-base:latest docker push bunbunbunbun/bun-base-with-zig-and-webkit:latest docker push bunbunbunbun/bun-base:latest diff --git a/.docker/build-base.sh b/.docker/build-base.sh index f22410371..3a9f097e8 100644 --- a/.docker/build-base.sh +++ b/.docker/build-base.sh @@ -4,10 +4,10 @@ set -euxo pipefail export DOCKER_BUILDKIT=1 -docker buildx build \ - -t bunbunbunbun/bun-test-base:latest -f Dockerfile.base \ - --target bun-test-base \ - --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH . +# docker buildx build \ +# -t bunbunbunbun/bun-test-base:latest -f Dockerfile.base \ +# --target bun-test-base \ +# --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH . docker buildx build \ --target bun-base \ -f Dockerfile.base \ @@ -19,6 +19,6 @@ docker buildx build \ --target bun-base-with-zig-and-webkit \ --platform=linux/$BUILDARCH --build-arg BUILDARCH=$BUILDARCH . -docker push bunbunbunbun/bun-test-base:latest +# docker push bunbunbunbun/bun-test-base:latest docker push bunbunbunbun/bun-base:latest docker push bunbunbunbun/bun-base-with-zig-and-webkit:latest diff --git a/Dockerfile b/Dockerfile index 311d54e55..344d6e323 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,8 @@ FROM bunbunbunbun/bun-base:latest as lolhtml +RUN install_packages build-essential && curl https://sh.rustup.rs -sSf | sh -s -- -y + ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig @@ -13,7 +15,7 @@ ARG BUN_DIR=${GITHUB_WORKSPACE}/bun COPY Makefile ${BUN_DIR}/Makefile COPY src/deps/lol-html ${BUN_DIR}/src/deps/lol-html -RUN cd ${BUN_DIR} && \ +RUN export PATH=$PATH:$HOME/.cargo/bin && export CC=$(which clang-13) && cd ${BUN_DIR} && \ make lolhtml && rm -rf src/deps/lol-html Makefile FROM bunbunbunbun/bun-base:latest as mimalloc @@ -68,7 +70,7 @@ COPY src/deps/libarchive ${BUN_DIR}/src/deps/libarchive WORKDIR $BUN_DIR -RUN cd $BUN_DIR && \ +RUN cd $BUN_DIR && install_packages autoconf automake libtool pkg-config && \ make libarchive && rm -rf src/deps/libarchive Makefile FROM bunbunbunbun/bun-base:latest as tinycc @@ -87,9 +89,7 @@ COPY src/deps/tinycc ${BUN_DIR}/src/deps/tinycc WORKDIR $BUN_DIR -RUN cd $BUN_DIR && \ - make tinycc && rm -rf src/deps/tinycc Makefile - +RUN install_packages libtcc-dev && cp /usr/lib/$(uname -m)-linux-gnu/libtcc.a ${BUN_DEPS_OUT_DIR} FROM bunbunbunbun/bun-base:latest as libbacktrace @@ -126,7 +126,7 @@ COPY src/deps/boringssl ${BUN_DIR}/src/deps/boringssl WORKDIR $BUN_DIR -RUN make boringssl && rm -rf src/deps/boringssl Makefile +RUN install_packages golang && make boringssl && rm -rf src/deps/boringssl Makefile FROM bunbunbunbun/bun-base:latest as base64 @@ -253,6 +253,56 @@ COPY ./package.json ${BUN_DIR}/package.json COPY ./misctools ${BUN_DIR}/misctools COPY Makefile ${BUN_DIR}/Makefile + +FROM prepare_release as compile_release_obj + +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun + +COPY Makefile ${BUN_DIR}/Makefile + +WORKDIR $BUN_DIR + +ENV JSC_BASE_DIR=${WEBKIT_DIR} +ENV LIB_ICU_PATH=${WEBKIT_DIR}/lib +ARG TRIPLET=x86_64-linux-gnu + +COPY --from=identifier_cache ${BUN_DIR}/src/js_lexer/*.blob ${BUN_DIR}/src/js_lexer/ +COPY --from=node_fallbacks ${BUN_DIR}/src/node-fallbacks/out ${BUN_DIR}/src/node-fallbacks/out + +RUN cd $BUN_DIR && mkdir -p src/bun.js/bindings-obj && rm -rf $HOME/.cache zig-cache && make prerelease && \ + mkdir -p $BUN_RELEASE_DIR && \ + $ZIG_PATH/zig build obj -Drelease-fast -Dtarget=${TRIPLET} && \ + make bun-release-copy-obj + +FROM scratch as build_release_obj + +COPY --from=compile_release_obj /tmp/*.o / + +FROM prepare_release as compile_cpp + +ARG DEBIAN_FRONTEND=noninteractive +ARG GITHUB_WORKSPACE=/build +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# Directory extracts to "bun-webkit" +ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +ARG BUN_DIR=${GITHUB_WORKSPACE}/bun + +COPY Makefile ${BUN_DIR}/Makefile + +WORKDIR $BUN_DIR + +ENV JSC_BASE_DIR=${WEBKIT_DIR} +ENV LIB_ICU_PATH=${WEBKIT_DIR}/lib + COPY --from=lolhtml ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ COPY --from=mimalloc ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/ COPY --from=libarchive ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ @@ -264,13 +314,11 @@ COPY --from=libbacktrace ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ COPY --from=zlib ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ COPY --from=tinycc ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ COPY --from=base64 ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ -COPY --from=identifier_cache ${BUN_DIR}/src/js_lexer/*.blob ${BUN_DIR}/src/js_lexer/ -COPY --from=node_fallbacks ${BUN_DIR}/src/node-fallbacks/out ${BUN_DIR}/src/node-fallbacks/out -WORKDIR ${BUN_DIR} +RUN cd $BUN_DIR && mkdir -p src/bun.js/bindings-obj && rm -rf $HOME/.cache zig-cache && mkdir -p $BUN_RELEASE_DIR && \ + make jsc-bindings-mac -j10 && mv src/bun.js/bindings-obj/* /tmp - -FROM prepare_release as build_release +FROM prepare_release as sqlite ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -285,17 +333,16 @@ COPY Makefile ${BUN_DIR}/Makefile WORKDIR $BUN_DIR -RUN cd $BUN_DIR && mkdir -p src/bun.js/bindings-obj && rm -rf $HOME/.cache zig-cache && make \ - sqlite api \ - analytics \ - bun_error \ - fallback_decoder && rm -rf $HOME/.cache zig-cache && \ - mkdir -p $BUN_RELEASE_DIR && \ - make jsc-bindings-mac -j10 && \ - make release copy-to-bun-release-dir && \ - rm -rf $HOME/.cache zig-cache misctools package.json build-id completions build.zig $(BUN_DIR)/packages +ENV JSC_BASE_DIR=${WEBKIT_DIR} +ENV LIB_ICU_PATH=${WEBKIT_DIR}/lib -FROM prepare_release as build_unit +RUN cd $BUN_DIR && make sqlite + +FROM scratch as build_release_cpp + +COPY --from=compile_cpp /tmp/*.o / + +FROM prepare_release as build_release ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -306,20 +353,32 @@ ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +COPY Makefile ${BUN_DIR}/Makefile + WORKDIR $BUN_DIR -ENV PATH "$ZIG_PATH:$PATH" +ENV JSC_BASE_DIR=${WEBKIT_DIR} +ENV LIB_ICU_PATH=${WEBKIT_DIR}/lib -CMD make jsc-bindings-headers \ - api \ - analytics \ - bun_error \ - fallback_decoder \ - jsc-bindings-mac -j10 && \ - make \ - run-all-unit-tests +COPY --from=lolhtml ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=mimalloc ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/ +COPY --from=libarchive ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=picohttp ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/ +COPY --from=boringssl ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=uws ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=uws ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/ +COPY --from=libbacktrace ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=zlib ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=tinycc ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=base64 ${BUN_DEPS_OUT_DIR}/*.a ${BUN_DEPS_OUT_DIR}/ +COPY --from=sqlite ${BUN_DEPS_OUT_DIR}/*.o ${BUN_DEPS_OUT_DIR}/ +COPY --from=build_release_obj /*.o /tmp +COPY --from=build_release_cpp /*.o ${BUN_DIR}/src/bun.js/bindings-obj/ -FROM bunbunbunbun/bun-base-with-zig-and-webkit:latest as bun.devcontainer +RUN cd $BUN_DIR && mkdir -p ${BUN_RELEASE_DIR} && make bun-relink copy-to-bun-release-dir && \ + rm -rf $HOME/.cache zig-cache misctools package.json build-id completions build.zig $(BUN_DIR)/packages + +FROM prepare_release as build_unit ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -330,37 +389,25 @@ ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun -ENV WEBKIT_OUT_DIR ${WEBKIT_DIR} -ENV PATH "$ZIG_PATH:$PATH" -ENV JSC_BASE_DIR $WEBKIT_OUT_DIR -ENV LIB_ICU_PATH ${GITHUB_WORKSPACE}/icu/source/lib -ENV BUN_RELEASE_DIR ${BUN_RELEASE_DIR} -ENV PATH "${GITHUB_WORKSPACE}/packages/bun-linux-x64:${GITHUB_WORKSPACE}/packages/bun-linux-aarch64:${GITHUB_WORKSPACE}/packages/debug-bun-linux-x64:${GITHUB_WORKSPACE}/packages/debug-bun-linux-aarch64:$PATH" -ENV PATH "/home/ubuntu/zls/zig-out/bin:$PATH" - -ENV BUN_INSTALL /home/ubuntu/.bun -ENV XDG_CONFIG_HOME /home/ubuntu/.config +WORKDIR $BUN_DIR -RUN apt-get -y update && update-alternatives --install /usr/bin/lldb lldb /usr/bin/lldb-13 90 +ENV PATH "$ZIG_PATH:$PATH" +ENV LIB_ICU_PATH "${WEBKIT_DIR}/lib" -COPY .devcontainer/workspace.code-workspace $GITHUB_WORKSPACE/workspace.code-workspace -COPY .devcontainer/zls.json $GITHUB_WORKSPACE/workspace.code-workspace -COPY .devcontainer/limits.conf /etc/security/limits.conf -COPY ".devcontainer/scripts/" /scripts/ -COPY ".devcontainer/scripts/getting-started.sh" $GITHUB_WORKSPACE/getting-started.sh -RUN mkdir -p /home/ubuntu/.bun /home/ubuntu/.config $GITHUB_WORKSPACE/bun && \ - bash /scripts/common-debian.sh && \ - bash /scripts/github.sh && \ - bash /scripts/nice.sh && \ - bash /scripts/zig-env.sh -COPY .devcontainer/zls.json /home/ubuntu/.config/zls.json +CMD make jsc-bindings-headers \ + api \ + analytics \ + bun_error \ + fallback_decoder \ + jsc-bindings-mac -j10 && \ + make \ + run-all-unit-tests -FROM ubuntu:20.04 as release_with_debug_info +FROM alpine:latest as release_with_debug_info ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig -# Directory extracts to "bun-webkit" ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps @@ -380,7 +427,7 @@ WORKDIR /opt/bun ENTRYPOINT [ "/opt/bun/bin/bun" ] -FROM ubuntu:20.04 as release +FROM alpine:latest as release ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build @@ -398,49 +445,49 @@ ENV PATH "/opt/bun/bin:$PATH" ARG BUILDARCH=amd64 LABEL org.opencontainers.image.title="bun ${BUILDARCH} (glibc)" LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun -COPY --from=build_release ${BUN_RELEASE_DIR}/bun /opt/bun/bin/bun +COPY --from=build_release ${BUN_RELEASE_DIR}/bun /opt/bun WORKDIR /opt/bun ENTRYPOINT [ "/opt/bun/bin/bun" ] -FROM bunbunbunbun/bun-test-base as test_base +# FROM bunbunbunbun/bun-test-base as test_base -ARG DEBIAN_FRONTEND=noninteractive -ARG GITHUB_WORKSPACE=/build -ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig -# Directory extracts to "bun-webkit" -ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit -ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release -ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps -ARG BUN_DIR=${GITHUB_WORKSPACE}/bun +# ARG DEBIAN_FRONTEND=noninteractive +# ARG GITHUB_WORKSPACE=/build +# ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig +# # Directory extracts to "bun-webkit" +# ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit +# ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release +# ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps +# ARG BUN_DIR=${GITHUB_WORKSPACE}/bun -ARG BUILDARCH=amd64 -RUN groupadd -r chromium && useradd -d ${BUN_DIR} -M -r -g chromium -G audio,video chromium \ - && mkdir -p /home/chromium/Downloads && chown -R chromium:chromium /home/chromium +# ARG BUILDARCH=amd64 +# RUN groupadd -r chromium && useradd -d ${BUN_DIR} -M -r -g chromium -G audio,video chromium \ +# && mkdir -p /home/chromium/Downloads && chown -R chromium:chromium /home/chromium -USER chromium -WORKDIR $BUN_DIR +# USER chromium +# WORKDIR $BUN_DIR -ENV NPM_CLIENT bun -ENV PATH "${BUN_DIR}/packages/bun-linux-x64:${BUN_DIR}/packages/bun-linux-aarch64:$PATH" -ENV CI 1 -ENV BROWSER_EXECUTABLE /usr/bin/chromium +# ENV NPM_CLIENT bun +# ENV PATH "${BUN_DIR}/packages/bun-linux-x64:${BUN_DIR}/packages/bun-linux-aarch64:$PATH" +# ENV CI 1 +# ENV BROWSER_EXECUTABLE /usr/bin/chromium -COPY ./test ${BUN_DIR}/test -COPY Makefile ${BUN_DIR}/Makefile -COPY package.json ${BUN_DIR}/package.json -COPY .docker/run-test.sh ${BUN_DIR}/run-test.sh -COPY ./bun.lockb ${BUN_DIR}/bun.lockb +# COPY ./test ${BUN_DIR}/test +# COPY Makefile ${BUN_DIR}/Makefile +# COPY package.json ${BUN_DIR}/package.json +# COPY .docker/run-test.sh ${BUN_DIR}/run-test.sh +# COPY ./bun.lockb ${BUN_DIR}/bun.lockb -# # We don't want to worry about architecture differences in this image -COPY --from=release /opt/bun/bin/bun ${BUN_DIR}/packages/bun-linux-aarch64/bun -COPY --from=release /opt/bun/bin/bun ${BUN_DIR}/packages/bun-linux-x64/bun +# # # We don't want to worry about architecture differences in this image +# COPY --from=release /opt/bun/bin/bun ${BUN_DIR}/packages/bun-linux-aarch64/bun +# COPY --from=release /opt/bun/bin/bun ${BUN_DIR}/packages/bun-linux-x64/bun -USER root -RUN chgrp -R chromium ${BUN_DIR} && chmod g+rwx ${BUN_DIR} && chown -R chromium:chromium ${BUN_DIR} -USER chromium +# USER root +# RUN chgrp -R chromium ${BUN_DIR} && chmod g+rwx ${BUN_DIR} && chown -R chromium:chromium ${BUN_DIR} +# USER chromium -CMD [ "bash", "run-test.sh" ] +# CMD [ "bash", "run-test.sh" ] -FROM release
\ No newline at end of file +# FROM release
\ No newline at end of file diff --git a/Dockerfile.base b/Dockerfile.base index 38a34c6ef..538b71358 100644 --- a/Dockerfile.base +++ b/Dockerfile.base @@ -1,147 +1,74 @@ -FROM ubuntu:18.04 as bun-base-with-args +FROM bitnami/minideb:bullseye as bun-base -FROM bun-base-with-args as bun-base +RUN install_packages ca-certificates curl wget lsb-release software-properties-common gnupg gnupg1 gnupg2 -ARG DEBIAN_FRONTEND=noninteractive -ARG GITHUB_WORKSPACE=/build -ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig -# Directory extracts to "bun-webkit" -ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit -ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release -ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps -ARG BUN_DIR=${GITHUB_WORKSPACE}/bun - -WORKDIR ${GITHUB_WORKSPACE} - -RUN apt-get update && \ - apt-get install --no-install-recommends -y wget gnupg2 curl lsb-release wget software-properties-common && \ - add-apt-repository ppa:longsleep/golang-backports && \ - wget https://apt.llvm.org/llvm.sh --no-check-certificate && \ +RUN wget https://apt.llvm.org/llvm.sh && \ chmod +x llvm.sh && \ - ./llvm.sh 13 && \ - curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \ - apt-get update && \ - apt-get install --no-install-recommends -y \ - ca-certificates \ - curl \ - gnupg2 \ - software-properties-common \ + ./llvm.sh 13 + +RUN install_packages \ cmake \ - build-essential \ + curl \ + file \ git \ - libssl-dev \ + gnupg \ + libc-dev \ + libxml2 \ + libxml2-dev \ + make \ + ninja-build \ + perl \ + python3 \ + rsync \ ruby \ - liblld-13-dev \ - libclang-13-dev \ - nodejs \ - gcc \ - g++ \ - clang-13 \ - clang-format-13 \ - libc++-13-dev \ - libc++abi-13-dev \ - lld-13 \ - libicu-dev \ - wget \ - rustc \ - cargo \ unzip \ - tar \ - golang-go ninja-build pkg-config automake autoconf libtool curl && \ - update-alternatives --install /usr/bin/cc cc /usr/bin/clang-13 90 && \ - update-alternatives --install /usr/bin/cpp cpp /usr/bin/clang++-13 90 && \ - update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-13 90 && \ - npm install -g esbuild + bash tar gzip -ENV CC=clang-13 ENV CXX=clang++-13 +ENV CC=clang-13 +RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \ + install_packages nodejs && \ + npm install -g esbuild -ARG BUILDARCH=amd64 - - -WORKDIR $GITHUB_WORKSPACE - -ENV WEBKIT_OUT_DIR ${WEBKIT_DIR} - -ENV JSC_BASE_DIR $WEBKIT_OUT_DIR -ENV LIB_ICU_PATH ${GITHUB_WORKSPACE}/icu/source/lib -ENV BUN_RELEASE_DIR ${BUN_RELEASE_DIR} -ENV BUN_DEPS_OUT_DIR ${BUN_DEPS_OUT_DIR} - -RUN cd / && mkdir -p $BUN_RELEASE_DIR $BUN_DEPS_OUT_DIR ${BUN_DIR} ${BUN_DEPS_OUT_DIR} - -LABEL org.opencontainers.image.title="bun base image ${BUILDARCH} (glibc)" -LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun - - -FROM bun-base as bun-base-with-zig-and-webkit ARG DEBIAN_FRONTEND=noninteractive ARG GITHUB_WORKSPACE=/build -ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig + # Directory extracts to "bun-webkit" ARG WEBKIT_DIR=${GITHUB_WORKSPACE}/bun-webkit ARG BUN_RELEASE_DIR=${GITHUB_WORKSPACE}/bun-release ARG BUN_DEPS_OUT_DIR=${GITHUB_WORKSPACE}/bun-deps ARG BUN_DIR=${GITHUB_WORKSPACE}/bun ARG BUILDARCH=amd64 +ARG ZIG_PATH=${GITHUB_WORKSPACE}/zig + +ENV WEBKIT_OUT_DIR=${WEBKIT_DIR} +ENV BUILDARCH=${BUILDARCH} +ENV AR=/usr/bin/llvm-ar-13 +ENV ZIG "${ZIG_PATH}/zig" +ENV PATH="$ZIG/bin:$PATH" +ENV LD=lld-13 + +RUN mkdir -p $BUN_DIR $BUN_DEPS_OUT_DIR + +FROM bun-base as bun-base-with-zig-and-webkit WORKDIR $GITHUB_WORKSPACE -RUN cd $GITHUB_WORKSPACE && \ - curl -o zig-linux-$BUILDARCH.zip -L https://github.com/Jarred-Sumner/zig/releases/download/jul1/zig-linux-$BUILDARCH.zip && \ - unzip -q zig-linux-$BUILDARCH.zip && \ +RUN curl -o zig-linux-$BUILDARCH.zip -L https://github.com/Jarred-Sumner/zig/releases/download/jul1/zig-linux-$BUILDARCH.zip && \ + unzip zig-linux-$BUILDARCH.zip && \ rm zig-linux-$BUILDARCH.zip; + -RUN cd $GITHUB_WORKSPACE && \ - curl -o bun-webkit-linux-$BUILDARCH.tar.gz -L https://github.com/Jarred-Sumner/WebKit/releases/download/jul4/bun-webkit-linux-$BUILDARCH.tar.gz && \ - tar -xzf bun-webkit-linux-$BUILDARCH.tar.gz && \ +RUN mkdir -p $WEBKIT_OUT_DIR && cd $WEBKIT_OUT_DIR && cd ../ && \ + curl -o bun-webkit-linux-$BUILDARCH.tar.gz -L https://github.com/oven-sh/WebKit/releases/download/jul4-2/bun-webkit-linux-$BUILDARCH.tar.gz && \ + tar -xvzf bun-webkit-linux-$BUILDARCH.tar.gz && \ + ls && \ + echo $(pwd) && \ rm bun-webkit-linux-$BUILDARCH.tar.gz && \ cat $WEBKIT_OUT_DIR/include/cmakeconfig.h > /dev/null -RUN cd $GITHUB_WORKSPACE && \ - curl -o icu4c-66_1-src.tgz -L https://github.com/unicode-org/icu/releases/download/release-66-1/icu4c-66_1-src.tgz && \ - tar -xzf icu4c-66_1-src.tgz && \ - rm icu4c-66_1-src.tgz && \ - cd icu/source && \ - ./configure --enable-static --disable-shared && \ - make -j$(nproc) - -ENV ZIG "${ZIG_PATH}/zig" - LABEL org.opencontainers.image.title="bun base image with zig & webkit ${BUILDARCH} (glibc)" LABEL org.opencontainers.image.source=https://github.com/jarred-sumner/bun - -FROM debian:bullseye-slim as bun-test-base -# Original creator: -# LABEL maintainer "Jessie Frazelle <jess@linux.com>" - -# Install Chromium -# Yes, including the Google API Keys sucks but even debian does the same: https://packages.debian.org/stretch/amd64/chromium/filelist -RUN apt-get update && apt-get install -y \ - chromium \ - chromium-l10n \ - fonts-liberation \ - fonts-roboto \ - hicolor-icon-theme \ - libcanberra-gtk-module \ - libexif-dev \ - libgl1-mesa-dri \ - libgl1-mesa-glx \ - libpangox-1.0-0 \ - libv4l-0 \ - fonts-symbola \ - bash \ - make \ - psmisc \ - curl \ - --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* \ - && mkdir -p /etc/chromium.d/ \ - && /bin/echo -e 'export GOOGLE_API_KEY="AIzaSyCkfPOPZXDKNn8hhgu3JrA62wIgC93d44k"\nexport GOOGLE_DEFAULT_CLIENT_ID="811574891467.apps.googleusercontent.com"\nexport GOOGLE_DEFAULT_CLIENT_SECRET="kdloedMFGdGla2P1zacGjAQh"' > /etc/chromium.d/googleapikeys && \ - curl -L https://deb.nodesource.com/setup_16.x | bash - && \ - apt-get update && \ - apt-get install -y nodejs npm - @@ -9,7 +9,8 @@ ifeq ($(ARCH_NAME_RAW),aarch64) ARCH_NAME_RAW = arm64 endif -MARCH_NATIVE = -mtune=native +CPU_TARGET ?= native +MARCH_NATIVE = -mtune=$(CPU_TARGET) ARCH_NAME := DOCKER_BUILDARCH = @@ -18,13 +19,13 @@ ifeq ($(ARCH_NAME_RAW),arm64) DOCKER_BUILDARCH = arm64 BREW_PREFIX_PATH = /opt/homebrew MIN_MACOS_VERSION ?= 11.0 - MARCH_NATIVE = -mtune=native + MARCH_NATIVE = -mtune=$(CPU_TARGET) else ARCH_NAME = x64 DOCKER_BUILDARCH = amd64 BREW_PREFIX_PATH = /usr/local MIN_MACOS_VERSION ?= 10.14 - MARCH_NATIVE = -march=native -mtune=native + MARCH_NATIVE = -march=$(CPU_TARGET) -mtune=$(CPU_TARGET) endif AR= @@ -118,7 +119,7 @@ endif ifeq ($(OS_NAME),linux) LIBICONV_PATH = -AR=llvm-ar-13 +AR = $(shell which llvm-ar-13 || which llvm-ar || which ar) endif OPTIMIZATION_LEVEL=-O3 $(MARCH_NATIVE) @@ -541,7 +542,7 @@ init-submodules: git submodule update --init --recursive --progress --depth=1 build-obj: - $(ZIG) build obj -Drelease-fast + $(ZIG) build obj -Drelease-fast -Dcpu="$(CPU_TARGET)" dev-build-obj-wasm: $(ZIG) build bun-wasm -Dtarget=wasm32-freestanding --prominent-compile-errors @@ -614,8 +615,6 @@ sign-macos-aarch64: cls: @echo "\n\n---\n\n" -release: all-js jsc-bindings-mac build-obj cls bun-link-lld-release bun-link-lld-release-dsym release-bin-entitlements -release-safe: all-js jsc-bindings-mac build-obj-safe cls bun-link-lld-release bun-link-lld-release-dsym release-bin-entitlements jsc-check: @ls $(JSC_BASE_DIR) >/dev/null 2>&1 || (echo "Failed to access WebKit build. Please compile the WebKit submodule using the Dockerfile at $(shell pwd)/src/javascript/WebKit/Dockerfile and then copy from /output in the Docker container to $(JSC_BASE_DIR). You can override the directory via JSC_BASE_DIR. \n\n DOCKER_BUILDKIT=1 docker build -t bun-webkit $(shell pwd)/src/bun.js/WebKit -f $(shell pwd)/src/bun.js/WebKit/Dockerfile --progress=plain\n\n docker container create bun-webkit\n\n # Get the container ID\n docker container ls\n\n docker cp DOCKER_CONTAINER_ID_YOU_JUST_FOUND:/output $(JSC_BASE_DIR)" && exit 1) @@ -624,6 +623,12 @@ jsc-check: all-js: runtime_js fallback_decoder bun_error node-fallbacks +prerelease: api analytics all-js +release-only: jsc-bindings-mac build-obj cls bun-link-lld-release bun-link-lld-release-dsym release-bin-entitlements +release-safe-only: all-js jsc-bindings-mac build-obj-safe cls bun-link-lld-release bun-link-lld-release-dsym release-bin-entitlements +release: prerelease release-only +release-safe: prerelease release-safe-only + fmt-cpp: cd src/bun.js/bindings && clang-format *.cpp *.h -i @@ -1218,6 +1223,10 @@ bun-link-lld-release: rm -rf $(BUN_RELEASE_BIN).dSYM cp $(BUN_RELEASE_BIN) $(BUN_RELEASE_BIN)-profile +bun-release-copy-obj: + cp $(BUN_RELEASE_BIN).o /tmp/bun-$(PACKAGE_JSON_VERSION).o + cp $(BUN_RELEASE_BIN).o /tmp/bun-current.o + bun-link-lld-release-no-lto: $(CXX) $(BUN_LLD_FLAGS_FAST) $(SYMBOLS) \ $(BUN_RELEASE_BIN).o \ @@ -1229,23 +1238,21 @@ bun-link-lld-release-no-lto: ifeq ($(OS_NAME),darwin) -bun-link-lld-release-dsym: +bun-link-lld-release-dsym: bun-release-copy-obj $(DSYMUTIL) -o $(BUN_RELEASE_BIN).dSYM $(BUN_RELEASE_BIN) -$(STRIP) $(BUN_RELEASE_BIN) --wildcard -K _napi\* - cp $(BUN_RELEASE_BIN).o /tmp/bun-$(PACKAGE_JSON_VERSION).o copy-to-bun-release-dir-dsym: gzip --keep -c $(PACKAGE_DIR)/bun.dSYM > $(BUN_RELEASE_DIR)/bun.dSYM.gz endif ifeq ($(OS_NAME),linux) -bun-link-lld-release-dsym: +bun-link-lld-release-dsym: bun-release-copy-obj mv $(BUN_RELEASE_BIN).o /tmp/bun-$(PACKAGE_JSON_VERSION).o copy-to-bun-release-dir-dsym: endif - bun-relink: bun-relink-copy bun-link-lld-release bun-link-lld-release-dsym bun-relink-fast: bun-relink-copy bun-link-lld-release-no-lto |