@@ -87,82 +87,63 @@ jobs:
8787 os : [ubuntu-latest, macos-latest, windows-latest]
8888 runs-on : ${{ matrix.os }}
8989 steps :
90- - name : Install dotnet
91- uses : actions/setup-dotnet@v4
92- with :
93- dotnet-version : ' 9.0.x'
94- - name : Install Go
95- uses : actions/setup-go@v5
96- with :
97- go-version : ${{ matrix.go-version }}
9890 - name : Checkout code
9991 uses : actions/checkout@v4
10092 with :
10193 submodules : ' true'
102- - name : Build shared library
103- working-directory : spannerlib/shared
104- run : go build -o spannerlib.so -buildmode=c-shared shared_lib.go
105- - name : Copy to .NET wrapper
106- working-directory : spannerlib
94+ - name : Install dotnet
95+ uses : actions/setup-dotnet@v4
96+ with :
97+ dotnet-version : ' 8.0.x'
98+ - name : Create temporary global.json
99+ # Force the use of .NET 8.0.x by writing that version to a global.json file.
100+ # Otherwise, .NET will default to the latest version on the host.
101+ # .NET 8 has a much smaller chance of crashing when using a native library written in Go
102+ # than .NET 9 has, so using .NET 8 allows us to run the tests using the native library as well.
107103 run : |
108- mkdir -p wrappers/spannerlib-dotnet/spannerlib-dotnet-native/libraries/any
109- if [ "$RUNNER_OS" == "Windows" ]; then
110- cp shared/spannerlib.so wrappers/spannerlib-dotnet/spannerlib-dotnet-native/libraries/any/spannerlib.dll
111- else
112- cp shared/spannerlib.so wrappers/spannerlib-dotnet/spannerlib-dotnet-native/libraries/any/spannerlib
113- fi
114- shell : bash
115- - name : Build .NET native library package
116- run : dotnet pack
117- working-directory : spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native
104+ echo '{"sdk":{"version": "8.0.0", "rollForward": "latestFeature"}}' > ./global.json
118105 shell : bash
119- - name : Add .NET package source
120- run : |
121- if [ "$RUNNER_OS" == "Windows" ]; then
122- echo ${GITHUB_WORKSPACE}"\spannerlib\wrappers\spannerlib-dotnet\spannerlib-dotnet-native\bin\Release"
123- dotnet nuget add source ${GITHUB_WORKSPACE}"\spannerlib\wrappers\spannerlib-dotnet\spannerlib-dotnet-native\bin\Release" --name local
124- else
125- dotnet nuget add source "$PWD"/bin/Release --name local
126- fi
127- working-directory : spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native
106+ - name : .NET Version check
107+ working-directory : spannerlib/wrappers/spannerlib-dotnet
108+ run : dotnet --version
128109 shell : bash
129- - name : Build gRPC server
130- working-directory : spannerlib/grpc-server
131- run : |
132- go build -o grpc_server server.go
133- chmod +x grpc_server
134- - name : Copy gRPC server to .NET wrapper
135- working-directory : spannerlib
110+ - name : Install Go
111+ uses : actions/setup-go@v5
112+ with :
113+ go-version : ${{ matrix.go-version }}
114+ # Install compilers for cross-compiling between operating systems.
115+ - name : Install compilers
136116 run : |
137- mkdir -p wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any
117+ echo "$RUNNER_OS"
138118 if [ "$RUNNER_OS" == "Windows" ]; then
139- cp grpc-server/grpc_server wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any/grpc_server.exe
119+ echo "Windows does not yet support cross compiling"
120+ elif [ "$RUNNER_OS" == "macOS" ]; then
121+ brew tap SergioBenitez/osxct
122+ brew install x86_64-unknown-linux-gnu
123+ brew install mingw-w64
140124 else
141- cp grpc-server/grpc_server wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any/grpc_server
125+ sudo apt-get update
126+ sudo apt install -y g++-mingw-w64-x86-64 gcc-mingw-w64-x86-64
127+ sudo apt-get install -y gcc-arm-linux-gnueabihf
142128 fi
143129 shell : bash
144- - name : Build .NET gRPC server package
145- run : dotnet pack
146- working-directory : spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server
147- shell : bash
148- - name : Add .NET package source
130+ - name : Build the .NET wrapper using the build script
131+ working-directory : spannerlib/wrappers/spannerlib-dotnet
149132 run : |
150- if [ "$RUNNER_OS" == "Windows" ]; then
151- dotnet nuget add source ${GITHUB_WORKSPACE}"\spannerlib\wrappers\spannerlib-dotnet\spannerlib-dotnet-grpc-server\bin\Release" --name local-grpc-server
152- else
153- dotnet nuget add source "$PWD"/bin/Release --name local-grpc-server
154- fi
155- working-directory : spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server
133+ echo "$RUNNER_OS"
134+ ./build.sh
156135 shell : bash
157136 - name : Restore dependencies
158137 run : dotnet restore
159138 working-directory : spannerlib/wrappers/spannerlib-dotnet
160139 shell : bash
161140 - name : Build
162- run : dotnet build --no-restore
141+ run : dotnet build --no-restore -c Release
163142 working-directory : spannerlib/wrappers/spannerlib-dotnet
164143 shell : bash
165144 - name : .NET Unit Tests
166145 working-directory : spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests
167- run : dotnet test --no-build --verbosity normal
146+ run : |
147+ dotnet --version
148+ dotnet test --no-build --verbosity normal -c Release
168149 shell : bash
0 commit comments