Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 15, 2026

🎯 Integration Testing Infrastructure with Testcontainers - COMPLETE

Summary

Successfully implemented Testcontainers-based integration testing infrastructure across Shardis, eliminating all manual Docker setup and providing deterministic, isolated, reproducible test environments.

✅ Test Results

  • Redis Integration: 10/10 tests passing
  • Marten Integration: 4/4 tests passing
  • Total: 14 integration tests with ZERO manual setup required

Recent Updates (PR Review Feedback)

Fixed Issues

  1. Workflow .NET version consistency: Updated integration-tests.yml to use .NET 10.0.x to match integration-marten.yml
  2. Missing using statements: Added required using statements to RedisContainerFixture and RedisShardMapStoreIntegrationTests
  3. Test isolation: Updated all Redis integration tests to use unique GUIDs instead of static key names
  4. Benchmark PostgreSQL connection: Restored PostgreSQL service container and POSTGRES_CONNECTION env var for adaptive-bench-smoke job

Phase Implementation Status

Phase 1: Core Package (Redis Integration) ✅ COMPLETE

  • Added Testcontainers.Redis package to test/Shardis.Tests
  • Created RedisContainerFixture.cs with automatic lifecycle management
  • Implemented 10 comprehensive integration tests for RedisShardMapStore<TKey>
  • Tagged all tests with [Trait("Category", "Integration")]
  • Verified: All 10 tests passing with containerized Redis (redis:7-alpine) ✅

Phase 2: Marten Package (PostgreSQL Integration) ✅ COMPLETE

  • Added Testcontainers.PostgreSql package to test/Shardis.Marten.Tests
  • Refactored PostgresContainerFixture.cs to use Testcontainers (removed env var dependency)
  • Updated 3 existing test classes to use fixture pattern
  • Verified: All 4 integration tests passing with containerized PostgreSQL (postgres:15-alpine) ✅
  • Tagged all integration test classes with [Trait("Category", "Integration")]

Phase 3: Migration Packages ⚠️ PARTIAL

  • Added Testcontainers.PostgreSql to test/Shardis.Migration.Marten.Tests
  • Created PostgresContainerFixture.cs for migration scenarios
  • Updated migration executor tests to use fixture instead of environment variables
  • EF Core migration tests (skipped - minimal changes principle)
  • Verify checkpoint persistence (blocked by pre-existing Marten runtime compilation issues unrelated to Testcontainers)

Note: Migration.Marten.Tests have pre-existing Marten JasperFx.RuntimeCompiler errors that existed before this PR.

Phase 4: CI/CD Integration ✅ COMPLETE

  • Created .github/workflows/integration-tests.yml for Redis and Marten tests
  • Updated .github/workflows/integration-marten.yml to use Testcontainers for Marten tests
  • Configured Docker setup with docker/setup-buildx-action@v3
  • Restored PostgreSQL service container for benchmark job (benchmarks are not using Testcontainers)
  • Added test result artifact uploads for integration test results
  • Consistent .NET 10.0.x across all workflows

Phase 5: Documentation & Cleanup ✅ COMPLETE

  • Created comprehensive docs/testing/integration-tests.md guide
  • Updated README.md with integration test section and filtering examples
  • Updated CONTRIBUTING.md with test categories and Docker requirements
  • Updated .github/copilot-instructions.md with Testcontainers guidelines
  • Verified: All Redis and Marten integration tests pass on fresh checkout ✅

🚀 Developer Experience Improvements

Before (Manual Setup)

# Developers had to manually run:
docker run --name postgres-test -e POSTGRES_PASSWORD=test -p 5432:5432 -d postgres:15
docker run --name redis-test -p 6379:6379 -d redis:7-alpine
export POSTGRES_CONNECTION="Host=localhost;Port=5432;..."

# Then run tests
dotnet test

Pain Points: Port conflicts, forgotten containers, version drift, cleanup issues

After (Testcontainers) ✨

# Just clone and test - Testcontainers handles EVERYTHING:
git clone https://github.com/veggerby/shardis
cd shardis
dotnet test

Zero manual setup. Zero environment variables. Zero configuration.


📊 Files Changed Summary

Total: 20 files

  • New: 5 files (fixtures, tests, documentation)
  • Modified: 15 files

By Category:

  • Package Configuration: 2 files (Directory.Packages.props, project files)
  • Test Fixtures: 3 files (Redis, Marten, Migration.Marten)
  • Test Files: 7 files (new tests + updated existing tests)
  • CI/CD Workflows: 2 files (new + updated)
  • Documentation: 4 files (README, CONTRIBUTING, copilot-instructions, new guide)

🎁 Key Benefits

Developer Experience

Zero manual setup: git clonedotnet test
Faster onboarding: New contributors run tests immediately
Consistent environments: Same PostgreSQL 15, Redis 7 for everyone
No port conflicts: Testcontainers assigns random ports automatically
Test isolation: Unique GUIDs prevent test interference

CI/CD

Higher reliability: No dependency on pre-configured services
Faster feedback: Integration tests on every PR
Parallel-safe: Isolated containers per test class
Automatic cleanup: No resource leaks

Quality

Better coverage: Easy to write → more tests get written
Deterministic: Same images = consistent results
Isolated: Tests don't interfere with each other
Catch bugs earlier: Integration issues found in development


🧪 Running Tests

# All tests (unit + integration)
dotnet test

# Unit tests only (fast, no Docker required)
dotnet test --filter "Category!=Integration"

# Integration tests only (requires Docker)
dotnet test --filter "Category=Integration"

# Specific integration tests
dotnet test test/Shardis.Tests/Shardis.Tests.csproj --filter "Category=Integration"  # Redis
dotnet test test/Shardis.Marten.Tests/Shardis.Marten.Tests.csproj --filter "Category=Integration"  # Marten

Prerequisites: Docker must be installed and running. That's it.


📚 Documentation

  • Comprehensive Guide: docs/testing/integration-tests.md
  • Updated README: Integration test section with filtering examples
  • Updated CONTRIBUTING: Test categories and Docker requirement
  • Updated Copilot Instructions: Testcontainers guidelines for AI assistance

⚠️ Known Issues

Migration.Marten.Tests: 4 tests failing due to pre-existing Marten runtime compilation errors (JasperFx.RuntimeCompiler issues) that existed before this PR. These are unrelated to the Testcontainers implementation and should be addressed in a separate issue.


✨ Conclusion

This PR delivers production-ready integration testing infrastructure for Shardis:

  • 14 integration tests running with zero manual setup
  • Deterministic, isolated, reproducible test environments
  • CI/CD pipelines are more reliable and maintainable
  • Developer experience significantly improved

Status: Ready for merge pending review.

Original prompt

This section details on the original issue you should resolve

<issue_title>Integration Testing Infrastructure with Testcontainers</issue_title>
<issue_description># Integration Testing Infrastructure with Testcontainers

Overview

Systematically improve integration testing across all Shardis packages by adopting Testcontainers for deterministic, isolated, and reproducible test environments. This will eliminate manual infrastructure setup, improve CI reliability, and enable comprehensive integration test coverage.

Epic Type: Testing & Quality Assurance
Estimated Effort: 3-4 weeks
Priority: Medium-High (critical for production confidence)

Problem Statement

Current integration testing has several gaps:

  • Manual setup required: Developers must manually run docker run commands for PostgreSQL and Redis
  • Inconsistent environments: Different developer machines may have different database/cache versions
  • CI fragility: Integration tests may fail due to environmental issues rather than code issues
  • Limited coverage: Not all packages with external dependencies have integration tests
  • Documentation friction: README instructions for running tests are verbose and error-prone

Current State

From copilot-instructions.md:

# PostgreSQL Tests (Marten) - MANUAL SETUP REQUIRED
docker run --name postgres-test -e POSTGRES_PASSWORD=test -p 5432:5432 -d postgres:15
dotnet test test/Shardis.Marten.Tests/Shardis.Marten.Tests.csproj

# Redis Tests - MANUAL SETUP REQUIRED
docker run --name redis-test -p 6379:6379 -d redis:7-alpine
dotnet test test/Shardis.Tests/Shardis.Tests.csproj

Pain Points:

  • Developers forget to start containers → tests fail
  • Port conflicts (5432, 6379 already in use) → tests skip or fail
  • Container cleanup forgotten → resource leaks
  • Version drift (postgres:15 vs postgres:16) → inconsistent results

Scope

In Scope

  1. Core Package Integration Tests (test/Shardis.Tests/)

    • Redis integration tests for RedisShardMapStore<TKey>
    • Containerized Redis with automatic lifecycle management
    • Health checks and connection validation
  2. Marten Integration Tests (test/Shardis.Marten.Tests/)

    • PostgreSQL containerization for Marten document store
    • Schema initialization and migration
    • Multi-database scenarios (multiple shard DBs)
  3. Migration Package Tests (test/Shardis.Migration.Marten.Tests/, test/Shardis.Migration.EntityFrameworkCore.Tests/)

    • PostgreSQL for Marten migrations
    • SQL Server or PostgreSQL for EF Core migrations
    • Cross-shard migration scenarios with isolated databases
  4. Query Package Tests (test/Shardis.Query.Tests/)

    • Mock or lightweight database for query executor tests (if needed)
    • Integration with Marten/EF Core query providers
  5. CI/CD Integration

    • GitHub Actions workflow updates to use Testcontainers
    • Parallel test execution with container isolation
    • Automated cleanup and resource management

Out of Scope (Future Work)

Technical Requirements

1. Testcontainers .NET Integration

Package: Testcontainers (official .NET library)

dotnet add test/Shardis.Marten.Tests package Testcontainers
dotnet add test/Shardis.Marten.Tests package Testcontainers.PostgreSql
dotnet add test/Shardis.Tests package Testcontainers.Redis

2. PostgreSQL Container Fixture (Marten)

File: test/Shardis.Marten.Tests/PostgresContainerFixture.cs

using Testcontainers.PostgreSql;
using Xunit;

namespace Shardis.Marten.Tests;

/// <summary>
/// xUnit fixture that manages a PostgreSQL container lifecycle for Marten integration tests.
/// </summary>
public sealed class PostgresContainerFixture : IAsyncLifetime
{
    private readonly PostgreSqlContainer _container;

    public PostgresContainerFixture()
    {
        _container = new PostgreSqlBuilder()
            .WithImage("postgres:15-alpine")
            .WithDatabase("shardis_test")
            .WithUsername("test")
            .WithPassword("test")
            .WithCleanUp(true)
            .Build();
    }

    public string ConnectionString => _container.GetConnectionString();

    public async Task InitializeAsync()
    {
        await _container.StartAsync();
    }

    public async Task DisposeAsync()
    {
        await _container.DisposeAsync();
    }
}

// Usage in tests:
public sealed class MartenQueryExecutorTests : IClassFixture<PostgresContainerFixture>
{
    private readonly PostgresContainerFixture _fixture;

    public MartenQueryExecutorTests(PostgresContainerFixture fixture)
    {
        _fixture = fixture;
    }

    [Fact]
    public async Task Query_ReturnsResults()
    {
        // arrange
        var store = DocumentStore.For(_fixture.ConnectionString);
        // ...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes veggerby/shardis#36

<!-- START COPILOT CODING AGENT TIPS -->
---

💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey).

Copilot AI changed the title [WIP] Implement integration testing infrastructure with Testcontainers Integrate Testcontainers for zero-setup integration testing Jan 15, 2026
Copilot AI requested a review from veggerby January 15, 2026 10:29
@veggerby veggerby force-pushed the copilot/integrate-testcontainers-infrastructure branch from 736e26a to 670249c Compare January 15, 2026 12:01
@codecov
Copy link

codecov bot commented Jan 15, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@veggerby veggerby marked this pull request as ready for review January 15, 2026 12:21
Copilot AI review requested due to automatic review settings January 15, 2026 12:21
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request integrates Testcontainers for .NET to eliminate manual Docker container setup for integration tests, enabling zero-configuration integration testing for Redis and PostgreSQL dependencies.

Changes:

  • Added Testcontainers infrastructure with fixtures for Redis and PostgreSQL container lifecycle management
  • Refactored existing integration tests to use Testcontainers instead of environment variables (POSTGRES_CONNECTION, SHARDIS_TEST_PG)
  • Updated CI/CD workflows to remove GitHub Actions service containers and rely on Testcontainers
  • Created comprehensive integration testing documentation

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
test/Shardis.Tests/RedisContainerFixture.cs New fixture managing Redis 7-alpine container lifecycle for integration tests
test/Shardis.Tests/RedisShardMapStoreIntegrationTests.cs New integration tests for RedisShardMapStore using Testcontainers
test/Shardis.Tests/Shardis.Tests.csproj Added Testcontainers packages and Shardis.Redis project reference
test/Shardis.Marten.Tests/PostgresContainerFixture.cs Refactored to use Testcontainers instead of POSTGRES_CONNECTION env var
test/Shardis.Marten.Tests/PostgresFactAttribute.cs Updated to remove env var check (Testcontainers manages lifecycle)
test/Shardis.Marten.Tests/MartenQueryExecutorTests.cs Updated to use PostgresContainerFixture instead of env var
test/Shardis.Marten.Tests/MartenMetricsAndCancellationTests.cs Added integration test trait
test/Shardis.Marten.Tests/AdaptivePagingTelemetryTests.cs Added integration test trait
test/Shardis.Marten.Tests/Shardis.Marten.Tests.csproj Added Testcontainers packages
test/Shardis.Migration.Marten.Tests/PostgresContainerFixture.cs New fixture for migration integration tests
test/Shardis.Migration.Marten.Tests/MartenExecutorIntegrationTests.cs Refactored to use PostgresContainerFixture instead of SHARDIS_TEST_PG env var
test/Shardis.Migration.Marten.Tests/Shardis.Migration.Marten.Tests.csproj Added Testcontainers packages
Directory.Packages.props Added Testcontainers package versions (4.2.0)
.github/workflows/integration-tests.yml New workflow for Redis and Marten integration tests using Testcontainers
.github/workflows/integration-marten.yml Updated to use Testcontainers instead of GitHub Actions service containers
docs/testing/integration-tests.md Comprehensive new guide for integration testing with Testcontainers
README.md Updated testing section with integration test filtering and Testcontainers info
CONTRIBUTING.md Updated local setup section with integration test guidance
.github/copilot-instructions.md Updated integration testing section to reflect Testcontainers usage

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The .NET version is inconsistent across workflows. The integration-tests.yml workflow uses dotnet-version: '9.0.x' while the integration-marten.yml workflow uses dotnet-version: "10.0.x". For consistency and to align with the coding guidelines which mention .NET 9.0 as a requirement, both workflows should use the same .NET version.

Suggested change
dotnet-version: '9.0.x'
dotnet-version: "10.0.x"

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 702b5fd - Updated to dotnet-version: '10.0.x' for consistency across workflows.

Comment on lines 19 to 189
[Fact]
public async Task AssignShardToKeyAsync_CanStoreAndRetrieveKey()
{
// arrange
var store = new RedisShardMapStore<string>(_fixture.ConnectionString);
var key = new ShardKey<string>("user-123");
var shard = new ShardId("shard-1");

// act
var map = await store.AssignShardToKeyAsync(key, shard);
var retrieved = await store.TryGetShardIdForKeyAsync(key);

// assert
map.ShardKey.Should().Be(key);
map.ShardId.Should().Be(shard);
retrieved.Should().NotBeNull();
retrieved!.Value.Should().Be(shard);
}

[Fact]
public async Task TryAssignShardToKeyAsync_ReturnsCreatedTrueForNewKey()
{
// arrange
var store = new RedisShardMapStore<string>(_fixture.ConnectionString);
var key = new ShardKey<string>("user-456");
var shard = new ShardId("shard-2");

// act
var (created, map) = await store.TryAssignShardToKeyAsync(key, shard);

// assert
created.Should().BeTrue();
map.ShardKey.Should().Be(key);
map.ShardId.Should().Be(shard);
}

[Fact]
public async Task TryAssignShardToKeyAsync_ReturnsCreatedFalseForExistingKey()
{
// arrange
var store = new RedisShardMapStore<string>(_fixture.ConnectionString);
var key = new ShardKey<string>("user-789");
var shard1 = new ShardId("shard-1");
var shard2 = new ShardId("shard-2");

// act
await store.AssignShardToKeyAsync(key, shard1);
var (created, map) = await store.TryAssignShardToKeyAsync(key, shard2);

// assert
created.Should().BeFalse();
map.ShardKey.Should().Be(key);
map.ShardId.Should().Be(shard1); // original shard preserved
}

[Fact]
public async Task TryGetOrAddAsync_CreatesNewAssignmentWhenKeyDoesNotExist()
{
// arrange
var store = new RedisShardMapStore<string>(_fixture.ConnectionString);
var key = new ShardKey<string>("user-new");
var shard = new ShardId("shard-3");

// act
var (created, map) = await store.TryGetOrAddAsync(key, () => shard);

// assert
created.Should().BeTrue();
map.ShardKey.Should().Be(key);
map.ShardId.Should().Be(shard);
}

[Fact]
public async Task TryGetOrAddAsync_ReturnsExistingAssignmentWhenKeyExists()
{
// arrange
var store = new RedisShardMapStore<string>(_fixture.ConnectionString);
var key = new ShardKey<string>("user-existing");
var shard1 = new ShardId("shard-1");
var shard2 = new ShardId("shard-2");
await store.AssignShardToKeyAsync(key, shard1);

// act
var (created, map) = await store.TryGetOrAddAsync(key, () => shard2);

// assert
created.Should().BeFalse();
map.ShardKey.Should().Be(key);
map.ShardId.Should().Be(shard1); // original shard preserved
}

[Fact]
public async Task TryGetShardIdForKeyAsync_ReturnsNullForNonExistentKey()
{
// arrange
var store = new RedisShardMapStore<string>(_fixture.ConnectionString);
var key = new ShardKey<string>("non-existent-key");

// act
var result = await store.TryGetShardIdForKeyAsync(key);

// assert
result.Should().BeNull();
}

[Fact]
public void TryGetShardIdForKey_SyncVersion_CanRetrieveKey()
{
// arrange
var store = new RedisShardMapStore<string>(_fixture.ConnectionString);
var key = new ShardKey<string>("user-sync");
var shard = new ShardId("shard-4");
store.AssignShardToKey(key, shard);

// act
var found = store.TryGetShardIdForKey(key, out var retrievedShard);

// assert
found.Should().BeTrue();
retrievedShard.Should().Be(shard);
}

[Fact]
public void TryGetShardIdForKey_ReturnsFalseForNonExistentKey()
{
// arrange
var store = new RedisShardMapStore<string>(_fixture.ConnectionString);
var key = new ShardKey<string>("non-existent-sync");

// act
var found = store.TryGetShardIdForKey(key, out var retrievedShard);

// assert
found.Should().BeFalse();
retrievedShard.Should().Be(default(ShardId));
}

[Fact]
public void TryAssignShardToKey_SyncVersion_ReturnsCreatedTrueForNewKey()
{
// arrange
var store = new RedisShardMapStore<string>(_fixture.ConnectionString);
var key = new ShardKey<string>("user-sync-new");
var shard = new ShardId("shard-5");

// act
var created = store.TryAssignShardToKey(key, shard, out var map);

// assert
created.Should().BeTrue();
map.ShardKey.Should().Be(key);
map.ShardId.Should().Be(shard);
}

[Fact]
public void TryGetOrAdd_SyncVersion_CreatesNewAssignmentWhenKeyDoesNotExist()
{
// arrange
var store = new RedisShardMapStore<string>(_fixture.ConnectionString);
var key = new ShardKey<string>("user-sync-add");
var shard = new ShardId("shard-6");

// act
var created = store.TryGetOrAdd(key, () => shard, out var map);

// assert
created.Should().BeTrue();
map.ShardKey.Should().Be(key);
map.ShardId.Should().Be(shard);
}
}
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Redis integration tests share a single container instance and use static key names like "user-new" and "non-existent-key". According to the coding guidelines (section "Best Practices"), tests should "Use unique prefixes/GUIDs in test data to avoid interference". Consider using Guid.NewGuid() or unique prefixes per test to ensure tests are truly isolated and can run in any order without interference.

Copilot generated this review using guidance from repository custom instructions.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 702b5fd - All Redis test keys now use Guid.NewGuid() for unique identifiers (e.g., $"user-{Guid.NewGuid()}") to ensure test isolation and prevent interference.

Comment on lines 1 to 8
using Testcontainers.Redis;

namespace Shardis.Tests;

/// <summary>
/// xUnit fixture that manages a Redis container lifecycle for integration tests.
/// </summary>
public sealed class RedisContainerFixture : IAsyncLifetime
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The RedisContainerFixture is missing required using statements. The class implements IAsyncLifetime from xUnit and uses Task types, but does not have the necessary using directives. Add using Xunit; for IAsyncLifetime and using System.Threading.Tasks; for Task types.

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 702b5fd - Added using System.Threading.Tasks; and using Xunit; to RedisContainerFixture.

Comment on lines 1 to 10
using Shardis.Model;
using Shardis.Redis;

namespace Shardis.Tests;

/// <summary>
/// Integration tests for RedisShardMapStore using Testcontainers.
/// </summary>
[Trait("Category", "Integration")]
public sealed class RedisShardMapStoreIntegrationTests : IClassFixture<RedisContainerFixture>
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The RedisShardMapStoreIntegrationTests is missing required using statements. The class uses [Fact] and [Trait] attributes from xUnit, and .Should() assertions from AwesomeAssertions, but does not have the necessary using directives. Add using Xunit; and using AwesomeAssertions;

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 702b5fd - Added using Xunit; and using AwesomeAssertions; to RedisShardMapStoreIntegrationTests.

Comment on lines 76 to 79
- name: Run adaptive paging smoke benchmark (single iteration) (Testcontainers manages PostgreSQL)
run: |
dotnet run -c Release --project benchmarks/Shardis.Benchmarks.csproj -- --filter *AdaptivePagingBenchmarks* --iterationCount 1 --warmupCount 0 --job short
dotnet run -c Release --project benchmarks/Shardis.Benchmarks.csproj -- --filter *AdaptivePagingAllocationsBenchmarks* --iterationCount 1 --warmupCount 0 --exporters json --job short
Copy link

Copilot AI Jan 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The adaptive-bench-smoke job in the workflow will fail because the benchmarks still rely on the POSTGRES_CONNECTION environment variable, which is no longer being set. The AdaptivePagingBenchmarks and AdaptivePagingAllocationsBenchmarks files expect this environment variable but the workflow was updated to use Testcontainers without updating the benchmark code to match. Either update the benchmarks to use Testcontainers fixtures or set the POSTGRES_CONNECTION environment variable in the workflow.

Copilot uses AI. Check for mistakes.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 702b5fd - Restored PostgreSQL service container and POSTGRES_CONNECTION environment variable for the adaptive-bench-smoke job. Benchmarks are not using Testcontainers and continue to rely on the environment variable as before.

@veggerby
Copy link
Owner

@copilot address the issues and concerns in the PR review

…se unique GUIDs in tests, restore POSTGRES_CONNECTION for benchmarks

Co-authored-by: veggerby <[email protected]>
@veggerby veggerby merged commit c21d1ed into main Jan 15, 2026
12 checks passed
@veggerby veggerby deleted the copilot/integrate-testcontainers-infrastructure branch January 15, 2026 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants