diff --git a/.github/workflows/multi-compiler.yml b/.github/workflows/multi-compiler.yml index 3099139c9..48512df29 100644 --- a/.github/workflows/multi-compiler.yml +++ b/.github/workflows/multi-compiler.yml @@ -12,19 +12,32 @@ jobs: include: - CC: gcc-9 CXX: g++-9 + OS: ubuntu-latest - CC: gcc-10 CXX: g++-10 + OS: ubuntu-latest - CC: gcc-11 CXX: g++-11 + OS: ubuntu-latest - CC: gcc-12 CXX: g++-12 + OS: ubuntu-latest + - CC: clang-10 + CXX: clang++-10 + OS: ubuntu-20.04 + - CC: clang-11 + CXX: clang++-11 + OS: ubuntu-20.04 - CC: clang-12 CXX: clang++-12 + OS: ubuntu-20.04 - CC: clang-13 CXX: clang++-13 + OS: ubuntu-latest - CC: clang-14 CXX: clang++-14 - runs-on: ubuntu-latest + OS: ubuntu-latest + runs-on: ${{ matrix.OS }} # This should be a safe limit for the tests to run. timeout-minutes: 4 steps: @@ -34,3 +47,7 @@ jobs: CC: ${{ matrix.CC }} CXX: ${{ matrix.CXX }} run: ./autogen.sh && ./configure && make && make dist + - name: Show log on errors + if: ${{ failure() }} + run: | + cat config.log diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 835d4783c..388169e6d 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -18,6 +18,9 @@ ARG UID=1000 ARG GID=1000 RUN groupadd -f -g ${GID} docker && ( getent passwd ${UID} || useradd -ms /bin/bash ${USER} -u ${UID} -g ${GID} ) +# Add github.com as an SSH known host +RUN ssh -o StrictHostKeyChecking=no -T git@github.com; cat ~/.ssh/known_hosts >> /etc/ssh/ssh_known_hosts + # install ccache RUN mkdir -p /opt/ccache/bin && for prog in gcc g++ cc c++ cpp arm-none-eabi-c++ arm-none-eabi-cpp arm-none-eabi-gcc arm-none-eabi-g++; do ln -s /usr/bin/ccache /opt/ccache/bin/$(basename $prog); done ENV PATH /opt/ccache/bin:$PATH @@ -44,4 +47,7 @@ RUN setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/tcpdump # Allow non-root to use gdb on processes (will need SYS_PTRACE capability when running the container) RUN setcap 'CAP_SYS_PTRACE+eip' /usr/bin/gdb -USER ${UID}:${GID} \ No newline at end of file +# Add in Jenkins userID +RUN for i in $(seq 1001 1010); do ( getent passwd ${i} || useradd -ms /bin/bash jenkins${i} -u ${i} -g ${GID} ); done + +USER ${UID}:${GID} diff --git a/Docker/Dockerfile.cross-compiler b/Docker/Dockerfile.cross-compiler new file mode 100644 index 000000000..a89a9d5b5 --- /dev/null +++ b/Docker/Dockerfile.cross-compiler @@ -0,0 +1,11 @@ +ARG DOCKER_BASE_IMAGE=wolfssl/wolfssl-builder +FROM $DOCKER_BASE_IMAGE + +USER root + +ARG DEPS_TESTING="gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu" +RUN DEBIAN_FRONTEND=noninteractive apt update \ + && apt install -y ${DEPS_TESTING} \ + && apt clean -y && rm -rf /var/lib/apt/lists/* + +USER docker diff --git a/Docker/buildAndPush.sh b/Docker/buildAndPush.sh new file mode 100755 index 000000000..84813ab8a --- /dev/null +++ b/Docker/buildAndPush.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +DOCKER_BUILD_OPTIONS="$1" +if [ "${DOCKER_BASE_IMAGE}" != "" ]; then + DOCKER_BUILD_OPTIONS+=" --build-arg DOCKER_BASE_IMAGE=${DOCKER_BASE_IMAGE}" +fi + +CUR_DATE=$(date -u +%F) +echo "Building wolfssl/wolfssl-builder:${CUR_DATE} as ${DOCKER_BUILD_OPTIONS}" +docker build -t wolfssl/wolfssl-builder:${CUR_DATE} ${DOCKER_BUILD_OPTIONS} "${WOLFSSL_DIR}/Docker" && \ + docker push wolfssl/wolfssl-builder:${CUR_DATE} && \ + docker tag wolfssl/wolfssl-builder:${CUR_DATE} wolfssl/wolfssl-builder:latest && \ + docker push wolfssl/wolfssl-builder:latest && \ + docker build --build-arg DOCKER_BASE_IMAGE=wolfssl/wolfssl-builder:${CUR_DATE} -t wolfssl/testing-cross-compiler:${CUR_DATE} "${WOLFSSL_DIR}/Docker" -f Dockerfile.cross-compiler && \ + docker push wolfssl/testing-cross-compiler:${CUR_DATE} && \ + docker tag wolfssl/testing-cross-compiler:${CUR_DATE} wolfssl/testing-cross-compiler:latest && \ + docker push wolfssl/testing-cross-compiler:latest diff --git a/Docker/include.am b/Docker/include.am index dd78194d4..4dc5f5ff3 100644 --- a/Docker/include.am +++ b/Docker/include.am @@ -3,9 +3,11 @@ # All paths should be given relative to the root EXTRA_DIST+= Docker/Dockerfile +EXTRA_DIST+= Docker/Dockerfile.cross-compiler EXTRA_DIST+= Docker/run.sh EXTRA_DIST+= Docker/README.md +ignore_files+=Docker/buildAndPush.sh ignore_files+=Docker/OpenWRT/Dockerfile ignore_files+=Docker/OpenWRT/runTests.sh ignore_files+=Docker/OpenWRT/README.md diff --git a/Docker/run.sh b/Docker/run.sh index c2f41ac24..3820425bb 100755 --- a/Docker/run.sh +++ b/Docker/run.sh @@ -5,9 +5,9 @@ echo "Running with \"${*}\"..." # Assume we're in wolfssl/Docker WOLFSSL_DIR=$(builtin cd ${BASH_SOURCE%/*}/..; pwd) -docker build -t wolfssl --build-arg UID=$(id -u) --build-arg GID=$(id -g) "${WOLFSSL_DIR}/Docker" && \ - docker run --rm -it -v ${HOME}/.gitconfig:/home/docker/.gitconfig:ro -v ${HOME}/.ssh:/home/docker/.ssh:ro -v "${WOLFSSL_DIR}:/tmp/wolfssl" -w /tmp/wolfssl wolfssl /bin/bash -c "./autogen.sh && ./configure ${*@Q} && make" && \ - docker run --rm -it -v ${HOME}/.gitconfig:/home/docker/.gitconfig:ro -v ${HOME}/.ssh:/home/docker/.ssh:ro -v "${WOLFSSL_DIR}:/tmp/wolfssl" -w /tmp/wolfssl wolfssl /bin/bash +docker build -t wolfssl/wolfssl-builder --build-arg UID=$(id -u) --build-arg GID=$(id -g) "${WOLFSSL_DIR}/Docker" && \ + docker run --rm -it -v ${HOME}/.gitconfig:/home/docker/.gitconfig:ro -v ${HOME}/.ssh:/home/docker/.ssh:ro -v "${WOLFSSL_DIR}:/tmp/wolfssl" -w /tmp/wolfssl wolfssl/wolfssl-builder /bin/bash -c "./autogen.sh && ./configure ${*@Q} && make" && \ + docker run --rm -it -v ${HOME}/.gitconfig:/home/docker/.gitconfig:ro -v ${HOME}/.ssh:/home/docker/.ssh:ro -v "${WOLFSSL_DIR}:/tmp/wolfssl" -w /tmp/wolfssl wolfssl/wolfssl-builder /bin/bash exitval=$? echo "Exited with error code $exitval"