diff --git a/.github/workflows/build-check.yml b/.github/workflows/build-check.yml index 79fb8d3a..14f39dc1 100644 --- a/.github/workflows/build-check.yml +++ b/.github/workflows/build-check.yml @@ -10,95 +10,77 @@ jobs: build: runs-on: ubuntu-latest + # pandoc/latex ships pandoc and a minimal TeX Live, which is much faster + # to pull than installing texlive-full from apt + container: pandoc/latex:latest-ubuntu steps: - - uses: actions/checkout@master - with: - repository: matusnovak/doxybook2 - path: ./doxy - - name: Download Japanese fonts - run: curl -LO https://github.com/googlefonts/noto-cjk/blob/main/Sans/OTF/Japanese/NotoSansCJKjp-Black.otf && curl -LO https://github.com/googlefonts/noto-cjk/blob/main/Sans/OTF/Japanese/NotoSansCJKjp-Bold.otf && curl -LO https://github.com/googlefonts/noto-cjk/blob/main/Sans/OTF/Japanese/NotoSansCJKjp-DemiLight.otf && curl -LO https://github.com/googlefonts/noto-cjk/blob/main/Sans/OTF/Japanese/NotoSansCJKjp-Light.otf && curl -LO https://github.com/googlefonts/noto-cjk/blob/main/Sans/OTF/Japanese/NotoSansCJKjp-Medium.otf && curl -LO https://github.com/googlefonts/noto-cjk/blob/main/Sans/OTF/Japanese/NotoSansCJKjp-Regular.otf && curl -LO https://github.com/googlefonts/noto-cjk/blob/main/Sans/OTF/Japanese/NotoSansCJKjp-Thin.otf - - name: Install Japanese fonts - run: sudo mkdir -p /usr/local/share/fonts; sudo cp NotoSans* /usr/local/share/fonts/. && sudo fc-cache -f -v - - name: wget vcpkg - working-directory: ./doxy - run: wget -O vcpkg.tar.gz https://github.com/microsoft/vcpkg/archive/master.tar.gz - - name: mkdir vcpkg - working-directory: ./doxy - run: sudo mkdir /opt/vcpkg - - name: tar vcpkg - working-directory: ./doxy - run: sudo tar xf vcpkg.tar.gz --strip-components=1 -C /opt/vcpkg - - name: build vcpkg - working-directory: ./doxy - run: sudo /opt/vcpkg/bootstrap-vcpkg.sh - - name: Doxybook depenecies - working-directory: ./doxy - run: vcpkg install --triplet x64-linux $(cat vcpkg.txt) - - name: doxy mkdir build - working-directory: ./doxy - run: mkdir build - - name: doxy cmake setup - working-directory: ./doxy - run: cmake -B ./build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=/usr/local/share/vcpkg/scripts/buildsystems/vcpkg.cmake . - - name: doxy cmake - working-directory: ./doxy - run: cmake --build ./build --config MinSizeRel - - name: doxybook2 add to path - working-directory: ./doxy - run: cp build/src/DoxybookCli/doxybook2 ../.. - - uses: actions/checkout@master - - name: Update apt sources - run: sudo apt-get update + # git must be present before checkout so it makes a real clone that the + # submodule and wolfTPM/wolfCOSE make rules can use - name: Install Dependencies - run: sudo apt install pandoc texlive-full mkdocs doxygen + run: | + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + git make patch unzip wget ca-certificates mkdocs doxygen \ + fonts-noto-core fonts-noto-mono + git config --global --add safe.directory '*' + - name: Install LaTeX packages + run: | + tlmgr update --self + tlmgr install titlesec tocloft fvextra listings fancyhdr + - name: Install doxybook2 + run: | + wget -q -O /tmp/doxybook2.zip https://github.com/matusnovak/doxybook2/releases/download/v1.5.0/doxybook2-linux-amd64-v1.5.0.zip + unzip -q /tmp/doxybook2.zip -d /tmp/doxybook2 + cp /tmp/doxybook2/bin/doxybook2 /usr/local/bin/ + - uses: actions/checkout@v4 - name: wolfssl html - run: cd wolfSSL && export PATH=$PATH:"/home/runner/work/documentation" && make html + run: cd wolfSSL && make html - name: wolfssl pdf - run: cd wolfSSL && export PATH=$PATH:"/home/runner/work/documentation" && make pdf + run: cd wolfSSL && make pdf - name: wolfssh html - run: cd wolfSSH && export PATH=$PATH:"/home/runner/work/documentation" && make html + run: cd wolfSSH && make html - name: wolfssh pdf - run: cd wolfSSH && export PATH=$PATH:"/home/runner/work/documentation" && make pdf + run: cd wolfSSH && make pdf - name: Pin wolfTPM source for this build run: | ref=$(git ls-remote https://github.com/wolfSSL/wolfTPM.git refs/heads/master | cut -f1) test -n "$ref" echo "WOLFTPM_REF=$ref" >> "$GITHUB_ENV" - name: wolftpm html and pdf - run: cd wolfTPM && export PATH=$PATH:"/home/runner/work/documentation" && make + run: cd wolfTPM && make - name: wolfmqtt html - run: cd wolfMQTT && export PATH=$PATH:"/home/runner/work/documentation" && make html + run: cd wolfMQTT && make html - name: wolfmqtt pdf - run: cd wolfMQTT && export PATH=$PATH:"/home/runner/work/documentation" && make pdf + run: cd wolfMQTT && make pdf - name: wolfBoot html - run: cd wolfBoot && export PATH=$PATH:"/home/runner/work/documentation" && make html + run: cd wolfBoot && make html - name: wolfBoot pdf - run: cd wolfBoot && export PATH=$PATH:"/home/runner/work/documentation" && make pdf + run: cd wolfBoot && make pdf - name: wolfSentry html - run: cd wolfSentry && export PATH=$PATH:"/home/runner/work/documentation" && make html + run: cd wolfSentry && make html - name: wolfSentry pdf - run: cd wolfSentry && export PATH=$PATH:"/home/runner/work/documentation" && make pdf + run: cd wolfSentry && make pdf - name: wolfclu html - run: cd wolfCLU && export PATH=$PATH:"/home/runner/work/documentation" && make html + run: cd wolfCLU && make html - name: wolfclu pdf - run: cd wolfCLU && export PATH=$PATH:"/home/runner/work/documentation" && make pdf + run: cd wolfCLU && make pdf - name: wolfssl-jni html - run: cd wolfSSL-JNI && export PATH=$PATH:"/home/runner/work/documentation" && make html + run: cd wolfSSL-JNI && make html - name: wolfssl-jni pdf - run: cd wolfSSL-JNI && export PATH=$PATH:"/home/runner/work/documentation" && make pdf + run: cd wolfSSL-JNI && make pdf - name: wolfcrypt-jni html - run: cd wolfCrypt-JNI && export PATH=$PATH:"/home/runner/work/documentation" && make html + run: cd wolfCrypt-JNI && make html - name: wolfcrypt-jni pdf - run: cd wolfCrypt-JNI && export PATH=$PATH:"/home/runner/work/documentation" && make pdf + run: cd wolfCrypt-JNI && make pdf - name: wolfHSM html - run: cd wolfHSM && export PATH=$PATH:"/home/runner/work/documentation" && make html + run: cd wolfHSM && make html - name: wolfHSM pdf - run: cd wolfHSM && export PATH=$PATH:"/home/runner/work/documentation" && make pdf + run: cd wolfHSM && make pdf - name: Pin wolfCOSE source for this build run: | ref=$(git ls-remote https://github.com/wolfSSL/wolfCOSE.git refs/heads/main | cut -f1) test -n "$ref" echo "WOLFCOSE_REF=$ref" >> "$GITHUB_ENV" - name: wolfCOSE html and pdf - run: cd wolfCOSE && export PATH=$PATH:"/home/runner/work/documentation" && make + run: cd wolfCOSE && make diff --git a/.github/workflows/docker-build-check.yml b/.github/workflows/docker-build-check.yml index 7262ddb9..79b3a3a4 100644 --- a/.github/workflows/docker-build-check.yml +++ b/.github/workflows/docker-build-check.yml @@ -12,6 +12,8 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + # Each manual is a separate docker build, so run them in parallel and + # keep each one's output together in the log - name: Docker Make all - run: sudo make + run: sudo make -j$(nproc) --output-sync diff --git a/Dockerfile b/Dockerfile index b051edcb..88685d9a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,13 @@ -FROM texlive/texlive:latest AS builder +# Doxybook2 is built in its own stage so BuildKit runs it in parallel with +# the builder setup below +FROM pandoc/latex:latest-ubuntu AS doxybook2 WORKDIR /deps RUN apt-get -y update -# Pandoc and mkdocs are the tools we use -# Doxygen to convert the Doxygen docs # build-essential and cmake to build the dependencies # libfmt-dev nlohmann-json3-dev libspdlog-dev and libcxxopts-dev are needed by Doxybook2 -# fonts-noto is needed by our PDF generator -RUN apt-get -y install pandoc mkdocs doxygen git build-essential cmake libfmt-dev nlohmann-json3-dev libspdlog-dev libcxxopts-dev fonts-noto +RUN DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends git ca-certificates build-essential cmake libfmt-dev nlohmann-json3-dev libspdlog-dev libcxxopts-dev # Inja is a dep for Doxybook2 RUN git clone --depth=1 https://github.com/pantor/inja @@ -18,6 +17,20 @@ RUN git clone https://github.com/dgarske/doxybook2 # Checkout to working version of doxybook2 RUN cd doxybook2 && git checkout master RUN cd doxybook2 && cmake . && make install + +# pandoc/latex provides pandoc and a minimal TeX Live +FROM pandoc/latex:latest-ubuntu AS builder + +RUN apt-get -y update +# mkdocs is used for the HTML manuals +# Doxygen to convert the Doxygen docs +# The Noto fonts are needed by our PDF generator +RUN DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends mkdocs doxygen git make patch ca-certificates fonts-noto-core fonts-noto-mono fonts-noto-cjk +# The LaTeX packages our PDF headers use beyond the minimal TeX Live +RUN tlmgr update --self && tlmgr install titlesec tocloft fvextra listings fancyhdr +COPY --from=doxybook2 /usr/local/bin/doxybook2 /usr/local/bin/doxybook2 +RUN doxybook2 --version + # Copy the source files into Docker, this and any subsequent steps won't be cached WORKDIR /src/wolfssl COPY . .