Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions .github/workflows/spanner-lib-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,27 @@ jobs:
- name: Build shared library
working-directory: spannerlib/shared
run: go build -o spannerlib.so -buildmode=c-shared shared_lib.go
- name: Build gRPC server
working-directory: spannerlib/grpc-server
run: |
go build -o grpc_server server.go
chmod +x grpc_server
- name: Copy to Java wrapper
working-directory: spannerlib
run: |
echo "$RUNNER_OS"
if [ "$RUNNER_OS" == "Windows" ]; then
mkdir -p wrappers/spannerlib-java/src/main/resources/win32-x86-64
cp shared/spannerlib.so wrappers/spannerlib-java/src/main/resources/win32-x86-64/spanner.dll
cp grpc-server/grpc_server wrappers/spannerlib-java/src/main/resources/win32-x86-64/grpc_server
elif [ "$RUNNER_OS" == "macOS" ]; then
mkdir -p wrappers/spannerlib-java/src/main/resources/darwin-aarch64
cp shared/spannerlib.so wrappers/spannerlib-java/src/main/resources/darwin-aarch64/libspanner.dylib
cp grpc-server/grpc_server wrappers/spannerlib-java/src/main/resources/darwin-aarch64/grpc_server
else
mkdir -p wrappers/spannerlib-java/src/main/resources/linux-x86-64
cp shared/spannerlib.so wrappers/spannerlib-java/src/main/resources/linux-x86-64/libspanner.so
cp grpc-server/grpc_server wrappers/spannerlib-java/src/main/resources/linux-x86-64/grpc_server
fi
shell: bash
- name: ls spannerlib.so
Expand All @@ -71,3 +79,90 @@ jobs:
run: mvn -Djna.debug_load=true test
working-directory: spannerlib/wrappers/spannerlib-java
shell: bash

dotnet-wrapper:
strategy:
matrix:
go-version: [1.25.x]
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Install dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: 'true'
- name: Build shared library
working-directory: spannerlib/shared
run: go build -o spannerlib.so -buildmode=c-shared shared_lib.go
- name: Copy to .NET wrapper
working-directory: spannerlib
run: |
mkdir -p wrappers/spannerlib-dotnet/spannerlib-dotnet-native/libraries/any
if [ "$RUNNER_OS" == "Windows" ]; then
cp shared/spannerlib.so wrappers/spannerlib-dotnet/spannerlib-dotnet-native/libraries/any/spannerlib.dll
else
cp shared/spannerlib.so wrappers/spannerlib-dotnet/spannerlib-dotnet-native/libraries/any/spannerlib
fi
shell: bash
- name: Build .NET native library package
run: dotnet pack
working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native
shell: bash
- name: Add .NET package source
run: |
if [ "$RUNNER_OS" == "Windows" ]; then
echo ${GITHUB_WORKSPACE}"\spannerlib\wrappers\spannerlib-dotnet\spannerlib-dotnet-native\bin\Release"
dotnet nuget add source ${GITHUB_WORKSPACE}"\spannerlib\wrappers\spannerlib-dotnet\spannerlib-dotnet-native\bin\Release" --name local
else
dotnet nuget add source "$PWD"/bin/Release --name local
fi
working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-native
shell: bash
- name: Build gRPC server
working-directory: spannerlib/grpc-server
run: |
go build -o grpc_server server.go
chmod +x grpc_server
- name: Copy gRPC server to .NET wrapper
working-directory: spannerlib
run: |
mkdir -p wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any
if [ "$RUNNER_OS" == "Windows" ]; then
cp grpc-server/grpc_server wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any/grpc_server.exe
else
cp grpc-server/grpc_server wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server/binaries/any/grpc_server
fi
shell: bash
- name: Build .NET gRPC server package
run: dotnet pack
working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server
shell: bash
- name: Add .NET package source
run: |
if [ "$RUNNER_OS" == "Windows" ]; then
dotnet nuget add source ${GITHUB_WORKSPACE}"\spannerlib\wrappers\spannerlib-dotnet\spannerlib-dotnet-grpc-server\bin\Release" --name local-grpc-server
else
dotnet nuget add source "$PWD"/bin/Release --name local-grpc-server
fi
working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-server
shell: bash
- name: Restore dependencies
run: dotnet restore
working-directory: spannerlib/wrappers/spannerlib-dotnet
shell: bash
- name: Build
run: dotnet build --no-restore
working-directory: spannerlib/wrappers/spannerlib-dotnet
shell: bash
- name: .NET Unit Tests
working-directory: spannerlib/wrappers/spannerlib-dotnet/spannerlib-dotnet-tests
run: dotnet test --no-build --verbosity normal
shell: bash
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "spannerlib/grpc-server/googleapis"]
path = spannerlib/grpc-server/googleapis
url = [email protected]:googleapis/googleapis.git
4 changes: 2 additions & 2 deletions spannerlib/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ require (
cloud.google.com/go/longrunning v0.6.7
cloud.google.com/go/spanner v1.86.0
github.com/google/go-cmp v0.7.0
github.com/google/uuid v1.6.0
github.com/googleapis/go-sql-spanner v1.19.0
google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c
google.golang.org/grpc v1.76.0
google.golang.org/protobuf v1.36.10
)
Expand All @@ -36,7 +38,6 @@ require (
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/s2a-go v0.1.9 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
Expand All @@ -62,6 +63,5 @@ require (
golang.org/x/time v0.13.0 // indirect
google.golang.org/api v0.252.0 // indirect
google.golang.org/genproto v0.0.0-20250804133106-a7a43d27e69b // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect
)
4 changes: 4 additions & 0 deletions spannerlib/grpc-server/build-dotnet-darwin-aarch64.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
go build -o grpc_server server.go
chmod +x grpc_server
cp grpc_server ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc/binaries/any/grpc_server
cp grpc_server ../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc/binaries/osx-arm64/grpc_server
4 changes: 4 additions & 0 deletions spannerlib/grpc-server/build-java-darwin-aarch64.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
go build -o grpc_server server.go
chmod +x grpc_server
mkdir -p ../wrappers/spannerlib-java/src/main/resources/darwin-aarch64
cp grpc_server ../wrappers/spannerlib-java/src/main/resources/darwin-aarch64/grpc_server
25 changes: 25 additions & 0 deletions spannerlib/grpc-server/build-protos.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
PATH="${PATH}:${HOME}/go/bin"
ln -sf "${PWD}"/google/spannerlib googleapis/google/spannerlib
cd googleapis || exit 1
protoc \
--go_out=../ \
--go_opt=paths=source_relative \
--go-grpc_out=../ \
--go-grpc_opt=paths=source_relative \
google/spannerlib/v1/spannerlib.proto
protoc \
--java_out=../../wrappers/spannerlib-java/src/main/java/ \
--plugin=protoc-gen-java-grpc=/Users/loite/protoc-gen-grpc-java-1.75.0-osx-aarch_64.exe \
--java-grpc_out=../../wrappers/spannerlib-java/src/main/java/ \
--java-grpc_opt=paths=source_relative \
google/spannerlib/v1/spannerlib.proto
protoc \
--csharp_out=../../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/ \
--plugin=protoc-gen-csharp_grpc=/Users/loite/.nuget/packages/grpc.tools/2.72.0/tools/macosx_x64/grpc_csharp_plugin \
--csharp_grpc_out=../../wrappers/spannerlib-dotnet/spannerlib-dotnet-grpc-v1/ \
--csharp_opt=file_extension=.g.cs \
--csharp_grpc_opt=no_server \
--proto_path=. \
google/spannerlib/v1/spannerlib.proto
cd .. || exit 1
rm googleapis/google/spannerlib
1 change: 1 addition & 0 deletions spannerlib/grpc-server/google/spannerlib/spannerlib
Loading
Loading