From 47f6283e7f04d94df919a0a268ad68d0ebb36dbf Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Fri, 16 Apr 2021 11:11:28 +0200 Subject: [PATCH 1/2] run csharp tests under aarch64 emulator --- kokoro/linux/aarch64/test_csharp_aarch64.sh | 29 +++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100755 kokoro/linux/aarch64/test_csharp_aarch64.sh diff --git a/kokoro/linux/aarch64/test_csharp_aarch64.sh b/kokoro/linux/aarch64/test_csharp_aarch64.sh new file mode 100755 index 0000000000000..91e30ceac3ab2 --- /dev/null +++ b/kokoro/linux/aarch64/test_csharp_aarch64.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +set -ex + +# go to the repo root +cd $(dirname $0)/../../.. + +if [[ -t 0 ]]; then + DOCKER_TTY_ARGS="-it" +else + # The input device on kokoro is not a TTY, so -it does not work. + DOCKER_TTY_ARGS= +fi + +# First, build protobuf C# tests under x86_64 docker image +# Tests are built "dotnet publish" because we want all the dependencies to the copied to the destination directory +# (we want to avoid references to ~/.nuget that won't be available in the subsequent docker run) +CSHARP_BUILD_COMMAND="dotnet publish -c Release -f net50 csharp/src/Google.Protobuf.Test/Google.Protobuf.Test.csproj" +docker run $DOCKER_TTY_ARGS --rm --user "$(id -u):$(id -g)" -e "HOME=/home/fake-user" -e "DOTNET_CLI_TELEMETRY_OPTOUT=true" -e "DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true" -v "$(mktemp -d):/home/fake-user" -v "$(pwd)":/work -w /work mcr.microsoft.com/dotnet/sdk:5.0.202-buster-slim bash -c "$CSHARP_BUILD_COMAND" + +# Use an actual aarch64 docker image to run protobuf C# tests with an emulator. "dotnet vstest" allows +# running tests from a pre-built project. +# * mount the protobuf root as /work to be able to access the crosscompiled files +# * to avoid running the process inside docker as root (which can pollute the workspace with files owned by root), we force +# running under current user's UID and GID. To be able to do that, we need to provide a home directory for the user +# otherwise the UID would be homeless under the docker container and pip install wouldn't work. For simplicity, +# we just run map the user's home to a throwaway temporary directory +CSHARP_TEST_COMMAND="dotnet vstest csharp/src/Google.Protobuf.Test/bin/Release/net50/publish/Google.Protobuf.Test.dll" +docker run $DOCKER_TTY_ARGS --rm --user "$(id -u):$(id -g)" -e "HOME=/home/fake-user" -e "DOTNET_CLI_TELEMETRY_OPTOUT=true" -e "DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true" -v "$(mktemp -d):/home/fake-user" -v "$(pwd)":/work -w /work mcr.microsoft.com/dotnet/sdk:5.0.202-buster-slim-arm64v8 bash -c "$CSHARP_TEST_COMMAND" From b2c71571b332c5cbfd20b0c217b8a05291c40047 Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Fri, 16 Apr 2021 11:15:22 +0200 Subject: [PATCH 2/2] add kokoro configs for csharp aarch64 --- kokoro/linux/csharp_aarch64/build.sh | 16 ++++++++++++++++ kokoro/linux/csharp_aarch64/continuous.cfg | 11 +++++++++++ kokoro/linux/csharp_aarch64/presubmit.cfg | 11 +++++++++++ 3 files changed, 38 insertions(+) create mode 100755 kokoro/linux/csharp_aarch64/build.sh create mode 100644 kokoro/linux/csharp_aarch64/continuous.cfg create mode 100644 kokoro/linux/csharp_aarch64/presubmit.cfg diff --git a/kokoro/linux/csharp_aarch64/build.sh b/kokoro/linux/csharp_aarch64/build.sh new file mode 100755 index 0000000000000..db3fc21f0ff65 --- /dev/null +++ b/kokoro/linux/csharp_aarch64/build.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# +# This is the top-level script we give to Kokoro as the entry point for +# running the "continuous" and "presubmit" jobs. + +set -ex + +# Change to repo root +cd $(dirname $0)/../../.. + +# Initialize any submodules. +git submodule update --init --recursive + +kokoro/linux/aarch64/qemu_helpers/prepare_qemu.sh + +kokoro/linux/aarch64/test_csharp_aarch64.sh diff --git a/kokoro/linux/csharp_aarch64/continuous.cfg b/kokoro/linux/csharp_aarch64/continuous.cfg new file mode 100644 index 0000000000000..df28ef368fee2 --- /dev/null +++ b/kokoro/linux/csharp_aarch64/continuous.cfg @@ -0,0 +1,11 @@ +# Config file for running tests in Kokoro + +# Location of the build script in repository +build_file: "protobuf/kokoro/linux/csharp_aarch64/build.sh" +timeout_mins: 120 + +action { + define_artifacts { + regex: "**/sponge_log.xml" + } +} diff --git a/kokoro/linux/csharp_aarch64/presubmit.cfg b/kokoro/linux/csharp_aarch64/presubmit.cfg new file mode 100644 index 0000000000000..df28ef368fee2 --- /dev/null +++ b/kokoro/linux/csharp_aarch64/presubmit.cfg @@ -0,0 +1,11 @@ +# Config file for running tests in Kokoro + +# Location of the build script in repository +build_file: "protobuf/kokoro/linux/csharp_aarch64/build.sh" +timeout_mins: 120 + +action { + define_artifacts { + regex: "**/sponge_log.xml" + } +}