diff --git a/.github/workflows/build-checks-preview-riscv64.yaml b/.github/workflows/build-checks-preview-riscv64.yaml new file mode 100644 index 0000000000..a1f3fef47e --- /dev/null +++ b/.github/workflows/build-checks-preview-riscv64.yaml @@ -0,0 +1,98 @@ +# This yaml is designed to be used until all components listed in +# `build-checks.yaml` are supported +on: + workflow_dispatch: + inputs: + instance: + default: "riscv-builder" + description: "Default instance when manually triggering" + workflow_call: + inputs: + instance: + required: true + type: string + +name: Build checks preview riscv64 +jobs: + check: + runs-on: ${{ inputs.instance }} + strategy: + fail-fast: false + matrix: + component: + - agent-ctl + - trace-forwarder + - genpolicy + command: + - "make vendor" + - "make check" + - "make test" + - "sudo -E PATH=\"$PATH\" make test" + include: + - component: agent-ctl + component-path: src/tools/agent-ctl + - component: trace-forwarder + component-path: src/tools/trace-forwarder + - install-libseccomp: no + - component: genpolicy + component-path: src/tools/genpolicy + steps: + - name: Adjust a permission for repo + run: | + sudo chown -R "$USER":"$USER" "$GITHUB_WORKSPACE" "$HOME" + sudo rm -rf "$GITHUB_WORKSPACE"/* || { sleep 10 && sudo rm -rf "$GITHUB_WORKSPACE"/*; } + sudo rm -f /tmp/kata_hybrid* # Sometime we got leftover from test_setup_hvsock_failed() + + - name: Checkout the code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install yq + run: | + ./ci/install_yq.sh + env: + INSTALL_IN_GOPATH: false + - name: Install golang + if: ${{ matrix.component == 'runtime' }} + run: | + ./tests/install_go.sh -f -p + echo "/usr/local/go/bin" >> "$GITHUB_PATH" + - name: Install rust + if: ${{ matrix.component != 'runtime' }} + run: | + ./tests/install_rust.sh + echo "${HOME}/.cargo/bin" >> "$GITHUB_PATH" + - name: Install musl-tools + if: ${{ matrix.component != 'runtime' }} + run: sudo apt-get -y install musl-tools + - name: Install devicemapper + if: ${{ matrix.command == 'make check' && matrix.component == 'agent' }} + run: sudo apt-get -y install libdevmapper-dev + - name: Install libseccomp + if: ${{ matrix.command != 'make vendor' && matrix.command != 'make check' && matrix.install-libseccomp == 'yes' }} + run: | + libseccomp_install_dir=$(mktemp -d -t libseccomp.XXXXXXXXXX) + gperf_install_dir=$(mktemp -d -t gperf.XXXXXXXXXX) + ./ci/install_libseccomp.sh "${libseccomp_install_dir}" "${gperf_install_dir}" + echo "Set environment variables for the libseccomp crate to link the libseccomp library statically" + echo "LIBSECCOMP_LINK_TYPE=static" >> "$GITHUB_ENV" + echo "LIBSECCOMP_LIB_PATH=${libseccomp_install_dir}/lib" >> "$GITHUB_ENV" + - name: Install protobuf-compiler + if: ${{ matrix.command != 'make vendor' && (matrix.component == 'agent' || matrix.component == 'genpolicy' || matrix.component == 'agent-ctl') }} + run: sudo apt-get -y install protobuf-compiler + - name: Install clang + if: ${{ matrix.command == 'make check' && (matrix.component == 'agent' || matrix.component == 'agent-ctl') }} + run: sudo apt-get -y install clang + - name: Setup XDG_RUNTIME_DIR for the `runtime` tests + if: ${{ matrix.command != 'make vendor' && matrix.command != 'make check' && matrix.component == 'runtime' }} + run: | + XDG_RUNTIME_DIR=$(mktemp -d "/tmp/kata-tests-$USER.XXX" | tee >(xargs chmod 0700)) + echo "XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR}" >> "$GITHUB_ENV" + - name: Running `${{ matrix.command }}` for ${{ matrix.component }} + run: | + cd ${{ matrix.component-path }} + ${{ matrix.command }} + env: + RUST_BACKTRACE: "1" + SKIP_GO_VERSION_CHECK: "1" diff --git a/.github/workflows/static-checks-self-hosted.yaml b/.github/workflows/static-checks-self-hosted.yaml index a4402603d5..254e6dd7fc 100644 --- a/.github/workflows/static-checks-self-hosted.yaml +++ b/.github/workflows/static-checks-self-hosted.yaml @@ -32,3 +32,15 @@ jobs: uses: ./.github/workflows/build-checks.yaml with: instance: ${{ matrix.instance }} + + build-checks-preview: + needs: skipper + if: ${{ needs.skipper.outputs.skip_static != 'yes' }} + strategy: + fail-fast: false + matrix: + instance: + - "riscv-builder" + uses: ./.github/workflows/build-checks-preview-riscv64.yaml + with: + instance: ${{ matrix.instance }} diff --git a/tests/common.bash b/tests/common.bash index 4a80d58c62..5f7443dc54 100644 --- a/tests/common.bash +++ b/tests/common.bash @@ -836,6 +836,7 @@ function arch_to_golang() { case "${arch}" in aarch64) echo "arm64";; ppc64le) echo "${arch}";; + riscv64) echo "${arch}";; x86_64) echo "amd64";; s390x) echo "s390x";; *) die "unsupported architecture: ${arch}";; @@ -849,6 +850,7 @@ function arch_to_rust() { case "${arch}" in aarch64) echo "${arch}";; ppc64le) echo "powerpc64le";; + riscv64) echo "riscv64gc";; x86_64) echo "${arch}";; s390x) echo "${arch}";; *) die "unsupported architecture: ${arch}";; diff --git a/tests/install_rust.sh b/tests/install_rust.sh index b44b94be7e..65a075ba98 100755 --- a/tests/install_rust.sh +++ b/tests/install_rust.sh @@ -35,11 +35,11 @@ export PATH="${PATH}:${HOME}/.cargo/bin" ## this command will not take too long to run. rustup toolchain install ${version} rustup default ${version} -if [ "${rustarch}" == "powerpc64le" ] || [ "${rustarch}" == "s390x" ] ; then - rustup target add ${rustarch}-unknown-linux-gnu -else +if [ "${rustarch}" == "x86_64" ] || [ "${rustarch}" == "aarch64" ] ; then rustup target add ${rustarch}-unknown-linux-musl $([ "$(whoami)" != "root" ] && echo sudo) ln -sf /usr/bin/g++ /bin/musl-g++ +else + rustup target add ${rustarch}-unknown-linux-gnu fi rustup component add rustfmt rustup component add clippy diff --git a/utils.mk b/utils.mk index 3b44658d66..a842dd3c7e 100644 --- a/utils.mk +++ b/utils.mk @@ -151,6 +151,12 @@ ifeq ($(ARCH), ppc64le) $(warning "WARNING: powerpc64le-unknown-linux-musl target is unavailable") endif +ifeq ($(ARCH), riscv64) + override LIBC = gnu + override ARCH = riscv64gc + $(warning "WARNING: riscv64gc-unknown-linux-musl target is unavailable") +endif + ifeq ($(ARCH), s390x) override LIBC = gnu $(warning "WARNING: s390x-unknown-linux-musl target is unavailable")