From 3f420701362744d3e5e33131bd7df7fb1ea92bc6 Mon Sep 17 00:00:00 2001 From: Markus Schirp Date: Wed, 13 May 2026 22:37:50 +0000 Subject: [PATCH] Change to not cache workspace contents anymore --- .github/workflows/ci.yml | 14 +++----------- pg-ephemeral/tests/base.rs | 17 +++++++++-------- pg-ephemeral/tests/cache.rs | 2 +- pg-ephemeral/tests/common.rs | 24 ++++++++++++++++-------- pg-ephemeral/tests/seed.rs | 12 ++++++------ 5 files changed, 35 insertions(+), 34 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9c452e3f..08ea5b4c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,13 +28,10 @@ jobs: - if: ${{ endsWith(matrix.os.cargo_build_target, '-musl') }} run: sudo apt-get update && sudo apt-get install --yes musl-tools - if: ${{ startsWith(matrix.os.version, 'ubuntu-') }} - run: sudo apt-get update && sudo apt-get install --yes postgresql-client git-restore-mtime - - if: ${{ startsWith(matrix.os.version, 'macos-') }} - run: brew install git-tools + run: sudo apt-get update && sudo apt-get install --yes postgresql-client - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - - run: git restore-mtime - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: | @@ -43,12 +40,11 @@ jobs: - uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 with: path: | - target/ ~/.cargo/bin/ ~/.cargo/git/db/ ~/.cargo/registry/cache/ ~/.cargo/registry/index/ - key: ${{ matrix.os.version }}-build-${{ matrix.os.cargo_build_target }}-${{ hashFiles('.github/workflows/ci.yml', '**/Cargo.lock', 'rust-toolchain.toml') }} + key: ${{ matrix.os.version }}-cargo-${{ matrix.os.cargo_build_target }}-${{ hashFiles('.github/workflows/ci.yml', '**/Cargo.lock', 'rust-toolchain.toml') }} - name: Run fmt run: cargo --verbose fmt --check @@ -63,9 +59,7 @@ jobs: run: target/${{ matrix.os.cargo_build_target }}/release/manager repository-lint rust-version - name: Verify stratosphere generated code is committed - run: | - target/${{ matrix.os.cargo_build_target }}/release/manager stratosphere sync --reject-dirty - git restore-mtime + run: target/${{ matrix.os.cargo_build_target }}/release/manager stratosphere sync --reject-dirty - name: Run clippy run: cargo --verbose clippy --all-features --all-targets --release @@ -224,11 +218,9 @@ jobs: permissions: contents: write steps: - - run: sudo apt-get update && sudo apt-get install --yes git-restore-mtime - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - - run: git restore-mtime - name: Download all artifacts uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 diff --git a/pg-ephemeral/tests/base.rs b/pg-ephemeral/tests/base.rs index 90ef5d08..641360e4 100644 --- a/pg-ephemeral/tests/base.rs +++ b/pg-ephemeral/tests/base.rs @@ -21,7 +21,7 @@ async fn pull_test_images() { async fn test_base_feature() { let backend = ociman::test_backend_setup!(); - common::test_definition(backend) + common::test_definition(backend, "base-feature".parse().unwrap()) .with_container(async |container| { container .with_connection(async |connection| { @@ -41,7 +41,7 @@ async fn test_base_feature() { async fn test_ssl_generated() { let backend = ociman::test_backend_setup!(); - common::test_definition(backend) + common::test_definition(backend, "ssl-generated".parse().unwrap()) .ssl_config(pg_ephemeral::definition::SslConfig::Generated { hostname: "postgresql.example.com".parse().unwrap(), }) @@ -64,11 +64,12 @@ async fn test_ssl_generated() { async fn test_ssl_parameter_conflict_rejected() { let backend = ociman::test_backend_setup!(); - let mut definition = common::test_definition(backend).ssl_config( - pg_ephemeral::definition::SslConfig::Generated { - hostname: "postgresql.example.com".parse().unwrap(), - }, - ); + let mut definition = + common::test_definition(backend, "ssl-parameter-conflict".parse().unwrap()).ssl_config( + pg_ephemeral::definition::SslConfig::Generated { + hostname: "postgresql.example.com".parse().unwrap(), + }, + ); definition.parameters.insert( pg_client::parameter::Name::from_static_or_panic("ssl"), pg_client::parameter::Value::from_static_or_panic("off"), @@ -276,7 +277,7 @@ async fn test_run_env() { let backend = ociman::test_backend_setup!(); - common::test_definition(backend) + common::test_definition(backend, "run-env".parse().unwrap()) .with_container(async |container| { // Use sh -c to emit both PG* and DATABASE_URL let output = cmd_proc::Command::new("sh") diff --git a/pg-ephemeral/tests/cache.rs b/pg-ephemeral/tests/cache.rs index e8f55be6..edca6145 100644 --- a/pg-ephemeral/tests/cache.rs +++ b/pg-ephemeral/tests/cache.rs @@ -926,7 +926,7 @@ async fn test_container_script_with_pg_cron() { async fn test_stale_connection_terminated_before_stop() { let backend = ociman::test_backend_setup!(); - let definition = common::test_definition(backend); + let definition = common::test_definition(backend, "stale-connection".parse().unwrap()); // with_container returns the JoinHandle; stop() runs before it returns. let sleep_handle = definition diff --git a/pg-ephemeral/tests/common.rs b/pg-ephemeral/tests/common.rs index 5964c7dd..0ff38636 100644 --- a/pg-ephemeral/tests/common.rs +++ b/pg-ephemeral/tests/common.rs @@ -21,15 +21,21 @@ pub static NODE_IMAGE: std::sync::LazyLock = /// Create a test definition with extended timeout. /// /// CI environments may be slow, so we use 30s instead of the default 10s. +/// +/// Each caller passes a distinct `instance_name` so the resulting +/// `pg-ephemeral/` cache image namespace is unique per test. +/// Tests share seed-chain prefixes (e.g. the same SQL fixture), which +/// produces identical cache hashes — under a shared instance name those +/// hashes collide on the same `pg-ephemeral/test:` reference and +/// race in the backend daemon when tests run in parallel. #[allow(dead_code)] #[must_use] -pub fn test_definition(backend: ociman::Backend) -> pg_ephemeral::Definition { - pg_ephemeral::Definition::new( - backend, - pg_ephemeral::Image::default(), - "test".parse().unwrap(), - ) - .wait_available_timeout(std::time::Duration::from_secs(30)) +pub fn test_definition( + backend: ociman::Backend, + instance_name: pg_ephemeral::InstanceName, +) -> pg_ephemeral::Definition { + pg_ephemeral::Definition::new(backend, pg_ephemeral::Image::default(), instance_name) + .wait_available_timeout(std::time::Duration::from_secs(30)) } /// Run pg-ephemeral with the given arguments and assert success. @@ -196,7 +202,9 @@ pub async fn test_database_url_integration( ) { let backend = ociman::test_backend_setup!(); - let definition = test_definition(backend.clone()).cross_container_access(true); + let instance_name: pg_ephemeral::InstanceName = + format!("database-url-{language}").parse().unwrap(); + let definition = test_definition(backend.clone(), instance_name).cross_container_access(true); definition .with_container(async |container| { diff --git a/pg-ephemeral/tests/seed.rs b/pg-ephemeral/tests/seed.rs index cce01ee2..da57a6bb 100644 --- a/pg-ephemeral/tests/seed.rs +++ b/pg-ephemeral/tests/seed.rs @@ -64,7 +64,7 @@ async fn assert_environment_matches( async fn test_command_seed_receives_environment() { let backend = ociman::test_backend_setup!(); - let definition = common::test_definition(backend) + let definition = common::test_definition(backend, "command-seed-env".parse().unwrap()) .apply_file( "create-table".parse().unwrap(), "tests/fixtures/create_seed_env_table.sql".into(), @@ -99,7 +99,7 @@ async fn test_command_seed_receives_environment() { async fn test_script_seed_receives_environment() { let backend = ociman::test_backend_setup!(); - let definition = common::test_definition(backend) + let definition = common::test_definition(backend, "script-seed-env".parse().unwrap()) .apply_file( "create-table".parse().unwrap(), "tests/fixtures/create_seed_env_table.sql".into(), @@ -128,7 +128,7 @@ async fn test_script_seed_receives_environment() { async fn test_sql_statement_seed_multi_statement() { let backend = ociman::test_backend_setup!(); - let definition = common::test_definition(backend) + let definition = common::test_definition(backend, "sql-statement-multi".parse().unwrap()) .apply_sql_statement( "schema-and-data".parse().unwrap(), indoc::indoc! {r#" @@ -161,7 +161,7 @@ async fn test_sql_statement_seed_multi_statement() { async fn test_csv_file_seed() { let backend = ociman::test_backend_setup!(); - let definition = common::test_definition(backend) + let definition = common::test_definition(backend, "csv-file-seed".parse().unwrap()) .apply_file( "create-table".parse().unwrap(), "tests/fixtures/create_users_table.sql".into(), @@ -206,7 +206,7 @@ async fn test_csv_file_seed() { async fn test_csv_file_seed_column_reorder() { let backend = ociman::test_backend_setup!(); - let definition = common::test_definition(backend) + let definition = common::test_definition(backend, "csv-column-reorder".parse().unwrap()) .apply_file( "create-table".parse().unwrap(), "tests/fixtures/create_users_table_serial.sql".into(), @@ -251,7 +251,7 @@ async fn test_csv_file_seed_column_reorder() { async fn test_csv_file_seed_header_mismatch() { let backend = ociman::test_backend_setup!(); - let definition = common::test_definition(backend) + let definition = common::test_definition(backend, "csv-header-mismatch".parse().unwrap()) .apply_file( "create-table".parse().unwrap(), "tests/fixtures/create_users_table_serial.sql".into(),