diff --git a/.github/scripts/check-patterns.sh b/.github/scripts/check-patterns.sh index 836032c..86ee5cd 100755 --- a/.github/scripts/check-patterns.sh +++ b/.github/scripts/check-patterns.sh @@ -9,6 +9,7 @@ IFS=' ' read -r -a changed <<< $ALL_CHANGED_FILES TOOL_CONFIG_PATTERNS=("docker/tool-config.Dockerfile .github/workflows/tool-config.yml docker/conf/**") BUILDER_2004_PATTERNS=("docker/ubuntu-2004-builder.Dockerfile .github/workflows/builder-ubuntu.yml") BUILDER_2204_PATTERNS=("docker/ubuntu-2204-builder.Dockerfile .github/workflows/builder-ubuntu.yml") +BUILDER_2404_PATTERNS=("docker/ubuntu-2404-builder.Dockerfile .github/workflows/builder-ubuntu.yml") CONTRIB_PATTERNS=("docker/psibase-contributor.Dockerfile .github/workflows/contributor.yml") matches_pattern() { @@ -46,6 +47,14 @@ for pattern in ${BUILDER_2204_PATTERNS[@]}; do fi done +run_2404="0" +for pattern in ${BUILDER_2404_PATTERNS[@]}; do + if matches_pattern $pattern; then + run_2404="1" + break + fi +done + run_contrib="0" if [[ "$run_tc" == "1" ]] || [[ "$run_2204" == "1" ]]; then run_contrib="1" @@ -58,4 +67,4 @@ else done fi -echo "${run_tc} ${run_2004} ${run_2204} ${run_contrib}" +echo "${run_tc} ${run_2004} ${run_2204} ${run_2404} ${run_contrib}" diff --git a/.github/workflows/_dispatcher.yml b/.github/workflows/_dispatcher.yml index c4b842c..803db9b 100644 --- a/.github/workflows/_dispatcher.yml +++ b/.github/workflows/_dispatcher.yml @@ -33,6 +33,7 @@ jobs: run_tc: ${{ steps.schedule-builders.outputs.run_tc }} run_2004: ${{ steps.schedule-builders.outputs.run_2004 }} run_2204: ${{ steps.schedule-builders.outputs.run_2204 }} + run_2404: ${{ steps.schedule-builders.outputs.run_2404 }} run_contrib: ${{ steps.schedule-builders.outputs.run_contrib }} steps: @@ -60,10 +61,11 @@ jobs: ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | necessary_jobs=$(./.github/scripts/check-patterns.sh "$ALL_CHANGED_FILES") - read -r run_tc run_2004 run_2204 run_contrib <<< "$necessary_jobs" + read -r run_tc run_2004 run_2204 run_2404 run_contrib <<< "$necessary_jobs" echo "run_tc=${run_tc}" | tee -a $GITHUB_OUTPUT echo "run_2004=${run_2004}" | tee -a $GITHUB_OUTPUT echo "run_2204=${run_2204}" | tee -a $GITHUB_OUTPUT + echo "run_2404=${run_2404}" | tee -a $GITHUB_OUTPUT echo "run_contrib=${run_contrib}" | tee -a $GITHUB_OUTPUT build-tool-config: @@ -88,6 +90,14 @@ jobs: with: ubuntu_version: "2204" + build-2404: + name: "Build 24.04 builder" + needs: determine-actions + if: ${{ needs.determine-actions.outputs.run_2404 == '1' }} + uses: ./.github/workflows/builder-ubuntu.yml + with: + ubuntu_version: "2404" + build-contributor: name: "Build contributor" needs: [determine-actions, build-tool-config, build-2204] diff --git a/README.md b/README.md index 6293f9d..86ba74d 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,10 @@ An image based on Ubuntu 22.04 that contains an environment suitable for buildin Used by the `psibase-contributor` image. +## ubuntu-2404-builder + +An image based on Ubuntu 24.04 that contains an environment suitable for building Psibase from source. + ## tool-config A [scratch](https://hub.docker.com/_/scratch)-based image that contains configuration files for various third-party tooling required by psibase contributor and other downstream images to allow them to display the admin-sys monitoring dashboards (e.g. Prometheus, Grafana, etc.). diff --git a/WORKFLOWS.md b/WORKFLOWS.md index 67916f5..ca52e36 100644 --- a/WORKFLOWS.md +++ b/WORKFLOWS.md @@ -51,7 +51,7 @@ This reusable workflow generates the builder images, which are environments capa ### Input variables -* `ubuntu_version` - When set to either `"2004"` or `"2204"`, then the generated image will be based on the corresponding version of Ubuntu. +* `ubuntu_version` - When set to either `"2004"`, `"2204"`, or `"2404"`, then the generated image will be based on the corresponding version of Ubuntu. ### How to run diff --git a/docker/ubuntu-2404-builder.Dockerfile b/docker/ubuntu-2404-builder.Dockerfile new file mode 100644 index 0000000..072274a --- /dev/null +++ b/docker/ubuntu-2404-builder.Dockerfile @@ -0,0 +1,82 @@ +FROM ubuntu:24.04 + +ARG TARGETARCH + +RUN export DEBIAN_FRONTEND=noninteractive \ + && apt-get update \ + && apt-get install -yq software-properties-common \ + && apt-get update \ + && apt-get install -yq \ + autoconf \ + binaryen \ + build-essential \ + ccache \ + cmake \ + curl \ + git \ + libssl-dev \ + libtool \ + pkg-config \ + python3-requests \ + strace \ + wget \ + zstd \ + clang-16 \ + libclang-16-dev \ + lld-16 \ + llvm-16 \ + libboost1.83-dev \ + && apt-get clean -yq \ + && rm -rf /var/lib/apt/lists/* + +# https://github.com/WebAssembly/wasi-sdk/releases/tag/wasi-sdk-20 +ENV WASI_SDK_PREFIX=/usr/lib/llvm-16 +ENV PATH=${WASI_SDK_PREFIX}/bin:$PATH +RUN cd ${WASI_SDK_PREFIX}/lib/clang/16/ \ + && curl -LO https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/libclang_rt.builtins-wasm32-wasi-20.0.tar.gz \ + && tar xf libclang_rt.builtins-wasm32-wasi-20.0.tar.gz \ + && rm libclang_rt.builtins-wasm32-wasi-20.0.tar.gz \ + && cd ${WASI_SDK_PREFIX}/share \ + && curl -LO https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sysroot-20.0.tar.gz \ + && tar xf wasi-sysroot-20.0.tar.gz \ + && rm wasi-sysroot-20.0.tar.gz + +RUN <