diff --git a/.github/workflows/integration-test-callable-from-server-repo.yml b/.github/workflows/integration-test-callable-from-server-repo.yml
new file mode 100644
index 00000000..c6179c1c
--- /dev/null
+++ b/.github/workflows/integration-test-callable-from-server-repo.yml
@@ -0,0 +1,61 @@
+name: Integration Test
+
+on:
+ workflow_call:
+ inputs:
+ speckle-sharp-sdk-ref:
+ required: true
+ type: string
+
+jobs:
+ integration-test:
+ env:
+ CLIENT_DIR: "./client"
+ CLIENT_REPO: "specklesystems/speckle-sharp-sdk"
+ SERVER_DIR: "./server"
+ SERVER_REPO: "specklesystems/speckle-server-internal"
+ SOLUTION: "Speckle.Sdk.sln"
+ SPECKLE_SERVER_IMAGE: "speckle-server:local"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout ${{ env.CLIENT_REPO }}
+ uses: actions/checkout@v6
+ with:
+ path: ${{ env.CLIENT_DIR }}
+ repository: ${{ env.CLIENT_REPO }}
+ ref: ${{ inputs.speckle-sharp-sdk-ref }}
+
+ - name: Checkout ${{ env.SERVER_REPO }}
+ uses: actions/checkout@v6
+ with:
+ repository: ${{ env.SERVER_REPO }}
+ path: ${{ env.SERVER_DIR }}
+
+ - name: Setup .NET SDK
+ uses: actions/setup-dotnet@v5
+ with:
+ dotnet-version: 8.x.x
+ # cache: true
+ # cache-dependency-path: "**/packages.lock.json"
+
+ - name: 🏗️ Build Server
+ run: docker build --file "./packages/server/Dockerfile" --tag ${{ env.SPECKLE_SERVER_IMAGE }} .
+ working-directory: ${{ env.SERVER_DIR }}
+
+ - name: ⚙️ Spin up Server
+ run: docker compose --file "../${{ env.CLIENT_DIR }}/docker-compose-internal.yml" up --wait
+ working-directory: ${{ env.SERVER_DIR }}
+ env:
+ SPECKLE_SERVER_IMAGE: ${{ env.SPECKLE_SERVER_IMAGE }}
+
+ - name: 📦 Restore .NET Solution
+ run: dotnet restore ${{ env.SOLUTION }} --locked-mode
+ working-directory: ${{ env.CLIENT_DIR }}
+
+ - name: 🏗️ Build .NET Solution
+ run: dotnet build ${{ env.SOLUTION }} --configuration Release --no-restore -warnaserror
+ working-directory: ${{ env.CLIENT_DIR }}
+
+ - name: 🔨 Run .NET Integration Tests
+ run: dotnet test ${{ env.SOLUTION }} --filter "(Category=Integration)&(Server!=Public)" --configuration Release --no-build --no-restore --verbosity=normal
+ working-directory: ${{ env.CLIENT_DIR }}
diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml
index ec74abd5..3ed1c7b8 100644
--- a/.github/workflows/integration-test.yml
+++ b/.github/workflows/integration-test.yml
@@ -37,7 +37,7 @@ jobs:
password: ${{ github.token }}
- name: ⚙️ Spin up Server
- run: docker compose -f ${{ inputs.docker-compose-file }} up --wait
+ run: docker compose --file ${{ inputs.docker-compose-file }} up --wait
- name: 📦 Restore
run: dotnet restore ${{ env.Solution }} --locked-mode
diff --git a/Speckle.Sdk.slnx b/Speckle.Sdk.slnx
index 3f7ded3f..2461b2a0 100644
--- a/Speckle.Sdk.slnx
+++ b/Speckle.Sdk.slnx
@@ -18,6 +18,7 @@
+
diff --git a/docker-compose-internal.yml b/docker-compose-internal.yml
index a4eee0df..11d2d9b6 100644
--- a/docker-compose-internal.yml
+++ b/docker-compose-internal.yml
@@ -52,7 +52,7 @@ services:
start_period: 10s
speckle-server:
- image: ghcr.io/specklesystems/speckle-server:latest
+ image: ${SPECKLE_SERVER_IMAGE:-ghcr.io/specklesystems/speckle-server:latest}
restart: always
healthcheck:
test:
diff --git a/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs b/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs
index 94034402..ab14c650 100644
--- a/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs
+++ b/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs
@@ -106,7 +106,7 @@ public class ProjectResourceExceptionalTests : IAsyncLifetime
ProjectUpdateRoleInput input = new(_secondUser.Account.id.NotNull(), "NonExistentProject", newRole);
var ex = await Assert.ThrowsAsync(async () => _ = await Sut.UpdateRole(input));
- ex.InnerExceptions.Single().Should().BeOfType();
+ ex.InnerExceptions.Single().Should().BeAssignableTo(); //v3 server responds with SpeckleGraphQLStreamNotFoundException exception, v2 reponds with SpeckleGraphQLForbiddenException
}
[Theory]
diff --git a/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/SubscriptionResourceTests.cs b/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/SubscriptionResourceTests.cs
index 3ef89104..dff86650 100644
--- a/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/SubscriptionResourceTests.cs
+++ b/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/SubscriptionResourceTests.cs
@@ -15,7 +15,7 @@ public class SubscriptionResourceTests : IAsyncLifetime
#else
private const int WAIT_PERIOD = 400; // For CI runs, a much smaller wait time is acceptable
#endif
- private const int TIMEOUT = WAIT_PERIOD + 1000;
+ private const int TIMEOUT = WAIT_PERIOD + WAIT_PERIOD + 600;
private IClient _testUser;
private Project _testProject;
private Model _testModel;