Skip to content

feat(nix/docker)Cli docker image size reduce#2019

Merged
samrose merged 21 commits intodevelopfrom
cli-image-reduce
Feb 12, 2026
Merged

feat(nix/docker)Cli docker image size reduce#2019
samrose merged 21 commits intodevelopfrom
cli-image-reduce

Conversation

@samrose
Copy link
Copy Markdown
Collaborator

@samrose samrose commented Jan 26, 2026

  1. latestOnly Parameter Support (d20cab0)
  • Added a latestOnly parameter that flows through makeOurPostgresPkgs → makePostgresBin → makePostgres
  • When latestOnly=true, only the latest version of each extension is built (instead of all historical versions)
  • Creates new psql_17_slim package using this parameter
  1. Extension Updates (db96c62)
  • Updated ~28 extension files in nix/ext/ to support the latestOnly parameter
  • Notable: wrappers alone has 13 versions → 1 when slim, saving significant space
  1. Supporting Files
  • Added nix/packages/image-size-analyzer.nix - tool to analyze image sizes
  • Added docs/plans/2026-01-21-psql-slim-latest-only.md - implementation plan
  • Added nix/docs/image-size-analyzer-usage.md - usage documentation
  • Updated Dockerfiles (Dockerfile-15, Dockerfile-17, Dockerfile-orioledb-17)
  • Various ansible config cleanups and renames

Expected Impact

  • Estimated size reduction: ~1GB+ (~40-60% smaller images)
  • Primary savings from multi-version extensions like wrappers (13→1 versions) + alpine vs ubuntu base image

Refactors Docker image testing and CLI smoke testing into reusable Nix packages that work both locally and in CI, while consolidating duplicated workflow logic.

Changes

New Nix Packages:

  • supabase-cli - Supabase CLI v2.75.0 fetched from GitHub releases (x86_64-linux, aarch64-linux, aarch64-darwin)
  • docker-image-test - Runs pg_regress tests against Docker images (replaces test-docker-image.sh usage)
  • cli-smoke-test - Runs Supabase CLI smoke tests against locally built images

New Shared GitHub Action:

  • .github/actions/check-docker-image-changes - Extracts duplicated change detection logic from both workflows

Updated Workflows:

  • docker-image-test.yml - Uses shared action and nix run .#docker-image-test
  • cli-smoke-test.yml - Uses shared action and nix run .#cli-smoke-test

Added to Nix Checks:

  • cli-smoke-test, docker-image-inputs, docker-image-test, supabase-cli added to flake checks for build validation

Usage

Run Docker image tests locally

nix run .#docker-image-test -- Dockerfile-17
nix run .#docker-image-test -- --no-build Dockerfile-15

Run CLI smoke tests locally

nix run .#cli-smoke-test -- 17
nix run .#cli-smoke-test -- --no-build 15

Benefits

  • Local development: Developers can run the same tests locally that CI runs
  • Single source of truth: Test logic defined once in Nix packages
  • Reduced duplication: Shared action for change detection
  • Better validation: Tooling packages included in nix checks/build matrix

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jan 26, 2026

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • 🔍 Trigger a full review
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch cli-image-reduce

Tip

🧪 Unit Test Generation v2 is now available!

We have significantly improved our unit test generation capabilities.

To enable: Add this to your .coderabbit.yaml configuration:

reviews:
  finishing_touches:
    unit_tests:
      enabled: true

Try it out by using the @coderabbitai generate unit tests command on your code files or under ✨ Finishing Touches on the walkthrough!

Have feedback? Share your thoughts on our Discord thread!


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@samrose samrose force-pushed the cli-image-reduce branch 6 times, most recently from 2cba010 to 48643e8 Compare February 4, 2026 05:15
@samrose samrose marked this pull request as ready for review February 5, 2026 17:57
@samrose samrose requested review from a team as code owners February 5, 2026 17:57
@samrose samrose force-pushed the cli-image-reduce branch 2 times, most recently from b3bd5fd to 5b20cac Compare February 6, 2026 13:27
@samrose
Copy link
Copy Markdown
Collaborator Author

samrose commented Feb 6, 2026

Smoke test results

Details
{
  "access_token": "***",
  "token_type": "bearer",
  "expires_in": 600,
  "expires_at": 1770385513,
  "refresh_token": "qdl6hsnzmfih",
  "user": {
    "id": "67627b90-a298-4b13-b81a-22e70784eb12",
    "aud": "authenticated",
    "role": "authenticated",
    "email": "supadevci@supabase.io",
    "email_confirmed_at": "2026-02-06T13:35:13.456646Z",
    "phone": "",
    "confirmation_sent_at": "2026-02-06T13:35:13.427793Z",
    "confirmed_at": "2026-02-06T13:35:13.456646Z",
    "last_sign_in_at": "2026-02-06T13:35:13.458930675Z",
    "app_metadata": {
      "provider": "email",
      "providers": [
        "email"
      ]
    },
    "user_metadata": {
      "email": "supadevci@supabase.io",
      "email_verified": true,
      "phone_verified": false,
      "sub": "67627b90-a298-4b13-b81a-22e70784eb12"
    },
    "identities": [
      {
        "identity_id": "03e24c37-0c59-4578-a77f-3427ae3bf2a4",
        "id": "67627b90-a298-4b13-b81a-22e70784eb12",
        "user_id": "67627b90-a298-4b13-b81a-22e70784eb12",
        "identity_data": {
          "email": "supadevci@supabase.io",
          "email_verified": true,
          "phone_verified": false,
          "sub": "67627b90-a298-4b13-b81a-22e70784eb12"
        },
        "provider": "email",
        "last_sign_in_at": "2026-02-06T13:35:13.425843Z",
        "created_at": "2026-02-06T13:35:13.425869Z",
        "updated_at": "2026-02-06T13:35:13.425869Z",
        "email": "supadevci@supabase.io"
      }
    ],
    "created_at": "2026-02-06T13:35:13.423155Z",
    "updated_at": "2026-02-06T13:35:13.461787Z",
    "is_anonymous": false
  }
}
{
  "id": 1,
  "slug": "ltzfpawvtongvuyprxwx",
  "name": "supadevci@supabase.io's Org",
  "billing_email": "supadevci@supabase.io",
  "is_owner": true,
  "stripe_customer_id": "cus_TvgYv1pSyOtaVs",
  "subscription_id": "564WiwMZ7Qduz436",
  "plan": {
    "id": "free",
    "name": "Free"
  },
  "usage_billing_enabled": false,
  "organization_requires_mfa": false,
  "organization_missing_address": false
}

============================================================
Supadev PostgreSQL Engine Smoke Test Suite
============================================================
[INFO] Testing PostgresEngines: 15 17 17-oriole
[INFO] Using region: us-east-1
[INFO] Project prefix: supadev-engine-smoke-1770384916
[INFO] Cache directory: /home/runner/.cache/supadev/postgres
[INFO] GitHub PR URL: https://github.com/supabase/postgres/pull/2019

[STEP] Resolving postgres commit hash...
[SUCCESS] Using postgres commit: 5b20cac26e882d7e73c22e3b3830ed9326064955
[STEP] Cloning supabase/postgres repo (commit 5b20cac2)...
[SUCCESS] Postgres repo cached at 5b20cac2
[INFO] Found 70 SQL test files


============================================================
Testing PostgreSQL Engine: 15
============================================================
[INFO] Project name: supadev-engine-smoke-1770384916-pg15
[INFO] Region: us-east-1
[INFO] Postgres commit: 5b20cac2
[INFO] Start time: 2026-02-06 13:35:18
[STEP] Resolving version from PR for engine 15...
[SUCCESS] Resolved version: 15.14.1.079-dckr-2
[STEP] Creating project with PostgresEngine 15...
UPDATE 0
INSERT 0 1
UPDATE 1
UPDATE 1
  id  |               version                |  region   |   provider_image_id   | release_channel | postgres_engine 
------+--------------------------------------+-----------+-----------------------+-----------------+-----------------
 7717 | supabase-postgres-15.14.1.079-dckr-2 | us-east-1 | ami-0ee4d40652125140b | ga              | 15
(1 row)


Creating project on release channel "ga" with version "15.14.1.079-dckr-2"
Project URL: http://localhost:8082/project/ajlrbwzezjrbdwbcrtaa
Admin URL: http://localhost:4000/projects?identifier=ajlrbwzezjrbdwbcrtaa
Database status is not yet available, waiting...
Database status is currently UNKNOWN, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is now ACTIVE_HEALTHY
[SUCCESS] Project supadev-engine-smoke-1770384916-pg15 created and reached ACTIVE_HEALTHY status
[INFO] Time to ACTIVE_HEALTHY: 493 seconds
[INFO] Sleeping for 10 seconds before checking project health
[STEP] Checking project health for supadev-engine-smoke-1770384916-pg15...
Waiting for all project components to become healthy, 5 retries remaining. Retrying in 2 seconds...
Waiting for all project components to become healthy, 4 retries remaining. Retrying in 4 seconds...
Waiting for all project components to become healthy, 3 retries remaining. Retrying in 8 seconds...
Waiting for all project components to become healthy, 2 retries remaining. Retrying in 16 seconds...
Waiting for all project components to become healthy, 1 retry remaining. Retrying in 32 seconds...
[
  {
    "name": "PostgREST",
    "healthy": false,
    "status": "UNHEALTHY",
    "info": {
      "db_schema": "public,graphql_public"
    },
    "error": "Failed to retrieve project's rest service health"
  },
  {
    "name": "Auth",
    "healthy": true,
    "status": "ACTIVE_HEALTHY",
    "info": {
      "description": "GoTrue is a user registration and authentication API",
      "name": "GoTrue",
      "version": "v2.186.0"
    }
  },
  {
    "name": "Storage",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "Realtime",
    "healthy": true,
    "status": "ACTIVE_HEALTHY",
    "info": {
      "connected_cluster": 0,
      "db_connected": false,
      "healthy": true,
      "node": "realtime@2600:1f18:10cd:e200:dd04:ae9d:d59d:e94a",
      "region": "us-east-1"
    }
  },
  {
    "name": "Postgres (Admin)",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "Postgres (User)",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "Supavisor (TXN)",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "PgBouncer",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  }
]
[STEP] Printing project information for supadev-engine-smoke-1770384916-pg15
{
  "cloud_provider": "AWS",
  "db_host": "db.ajlrbwzezjrbdwbcrtaa.supabase.red",
  "id": 1,
  "inserted_at": "2026-02-06T13:35:21.104519",
  "name": "supadev-engine-smoke-1770384916-pg15",
  "organization_id": 1,
  "ref": "ajlrbwzezjrbdwbcrtaa",
  "region": "us-east-1",
  "status": "ACTIVE_HEALTHY",
  "subscription_id": "564WiwMZ7Qduz436",
  "connectionString": "U2FsdGVkX1/hvIj12Yl5qwkaD9KDCupMWy/gRkmORTATzI706DB2hZL0hbbHGOjOfPip1VvbaSgan/3JYOTtWrXcJ/6Ah2jFCRtqxvy/gnRgzyt7ZbYBsO6FL3dqkadOr7ui0WFo2HQVo4wyLwzCudGcp3V4F74/wHNe4R6Pr+CXd2BdDZ/pkoljeJ9onZx2",
  "restUrl": "https://ajlrbwzezjrbdwbcrtaa.supabase.red/rest/v1/",
  "volumeSizeGb": 8,
  "maxDatabasePreprovisionGb": null,
  "lastDatabaseResizeAt": null,
  "is_branch_enabled": false,
  "is_physical_backups_enabled": true,
  "infra_compute_size": "nano",
  "dbVersion": "15.14.1.079-dckr-2"
}

============================================================
Executing SQL tests (engine: 15)
============================================================
[STEP] Loading prime.sql to initialize extensions...
[SUCCESS] Extensions initialized
[STEP] Executing: auth (nix/tests/sql/auth.sql)
[SUCCESS] auth
[STEP] Executing: docs-array-test (nix/tests/sql/docs-array-test.sql)
[SUCCESS] docs-array-test
[STEP] Executing: docs-cascades-deletes (nix/tests/sql/docs-cascades-deletes.sql)
[SUCCESS] docs-cascades-deletes
[STEP] Executing: docs-connections (nix/tests/sql/docs-connections.sql)
[SUCCESS] docs-connections
[STEP] Executing: docs-enums (nix/tests/sql/docs-enums.sql)
[SUCCESS] docs-enums
[STEP] Executing: docs-full-text-search (nix/tests/sql/docs-full-text-search.sql)
[SUCCESS] docs-full-text-search
[STEP] Executing: docs-functions (nix/tests/sql/docs-functions.sql)
[SUCCESS] docs-functions
[STEP] Executing: docs-indexes (nix/tests/sql/docs-indexes.sql)
[SUCCESS] docs-indexes
[STEP] Executing: docs-json (nix/tests/sql/docs-json.sql)
[SUCCESS] docs-json
[STEP] Executing: docs-partitioning (nix/tests/sql/docs-partitioning.sql)
[SUCCESS] docs-partitioning
[STEP] Executing: docs-tables-and-data (nix/tests/sql/docs-tables-and-data.sql)
[SUCCESS] docs-tables-and-data
[STEP] Executing: docs-triggers (nix/tests/sql/docs-triggers.sql)
[SUCCESS] docs-triggers
[STEP] Executing: docs-webhooks (nix/tests/sql/docs-webhooks.sql)
[SUCCESS] docs-webhooks
[STEP] Executing: enable_tracking (nix/tests/sql/enable_tracking.sql)
[SUCCESS] enable_tracking
[STEP] Executing: evtrigs (nix/tests/sql/evtrigs.sql)
[SUCCESS] evtrigs
[STEP] Executing: extensions_schema (nix/tests/sql/extensions_schema.sql)
[SUCCESS] extensions_schema
[STEP] Executing: http (nix/tests/sql/http.sql)
[SUCCESS] http
[STEP] Executing: hypopg (nix/tests/sql/hypopg.sql)
[SUCCESS] hypopg
[STEP] Executing: index_advisor (nix/tests/sql/index_advisor.sql)
[SUCCESS] index_advisor
[STEP] Executing: pg-safeupdate (nix/tests/sql/pg-safeupdate.sql)
[SUCCESS] pg-safeupdate
[STEP] Executing: pg_graphql (nix/tests/sql/pg_graphql.sql)
[SUCCESS] pg_graphql
[STEP] Executing: pg_hashids (nix/tests/sql/pg_hashids.sql)
[SUCCESS] pg_hashids
[STEP] Executing: pg_jsonschema (nix/tests/sql/pg_jsonschema.sql)
[SUCCESS] pg_jsonschema
[STEP] Executing: pg_net (nix/tests/sql/pg_net.sql)
[SUCCESS] pg_net
[STEP] Executing: pg_partman (nix/tests/sql/pg_partman.sql)
[SUCCESS] pg_partman
[STEP] Executing: pg_plan_filter (nix/tests/sql/pg_plan_filter.sql)
[SUCCESS] pg_plan_filter
[STEP] Executing: pg_repack (nix/tests/sql/pg_repack.sql)
[SUCCESS] pg_repack
[STEP] Executing: pg_tle (nix/tests/sql/pg_tle.sql)
[SUCCESS] pg_tle
[STEP] Executing: pgaudit (nix/tests/sql/pgaudit.sql)
[SUCCESS] pgaudit
[STEP] Executing: pgbouncer (nix/tests/sql/pgbouncer.sql)
[SUCCESS] pgbouncer
[STEP] Executing: pgmq (nix/tests/sql/pgmq.sql)
[SUCCESS] pgmq
[STEP] Executing: pgroonga (nix/tests/sql/pgroonga.sql)
[SUCCESS] pgroonga
[STEP] Executing: pgrouting (nix/tests/sql/pgrouting.sql)
[SUCCESS] pgrouting
[STEP] Executing: pgsodium (nix/tests/sql/pgsodium.sql)
[SUCCESS] pgsodium
[STEP] Executing: pgtap (nix/tests/sql/pgtap.sql)
[SUCCESS] pgtap
[STEP] Executing: plpgsql-check (nix/tests/sql/plpgsql-check.sql)
[SUCCESS] plpgsql-check
[STEP] Executing: postgis (nix/tests/sql/postgis.sql)
[SUCCESS] postgis
[STEP] Executing: postgres_fdw (nix/tests/sql/postgres_fdw.sql)
[SUCCESS] postgres_fdw
[STEP] Executing: realtime (nix/tests/sql/realtime.sql)
[SUCCESS] realtime
[STEP] Executing: roles (nix/tests/sql/roles.sql)
[SUCCESS] roles
[STEP] Executing: security (nix/tests/sql/security.sql)
[SUCCESS] security
[STEP] Executing: storage (nix/tests/sql/storage.sql)
[SUCCESS] storage
[STEP] Executing: vault (nix/tests/sql/vault.sql)
[SUCCESS] vault
[STEP] Executing: wal2json (nix/tests/sql/wal2json.sql)
[SUCCESS] wal2json
[STEP] Executing: z_15_ext_interface (nix/tests/sql/z_15_ext_interface.sql)
[SUCCESS] z_15_ext_interface
[STEP] Executing: z_15_pg_stat_monitor (nix/tests/sql/z_15_pg_stat_monitor.sql)
[SUCCESS] z_15_pg_stat_monitor
[STEP] Executing: z_15_pgjwt (nix/tests/sql/z_15_pgjwt.sql)
[SUCCESS] z_15_pgjwt
[STEP] Executing: z_15_pgvector (nix/tests/sql/z_15_pgvector.sql)
[SUCCESS] z_15_pgvector
[STEP] Executing: z_15_plv8 (nix/tests/sql/z_15_plv8.sql)
[SUCCESS] z_15_plv8
[STEP] Executing: z_15_roles (nix/tests/sql/z_15_roles.sql)
[SUCCESS] z_15_roles
[STEP] Executing: z_15_rum (nix/tests/sql/z_15_rum.sql)
[SUCCESS] z_15_rum
[STEP] Executing: z_15_timescale (nix/tests/sql/z_15_timescale.sql)
[SUCCESS] z_15_timescale
[STEP] Executing: z_15_unhype_timescale_to_partman (nix/tests/sql/z_15_unhype_timescale_to_partman.sql)
[SUCCESS] z_15_unhype_timescale_to_partman
[SUCCESS] All SQL tests executed
[STEP] Deleting project supadev-engine-smoke-1770384916-pg15...
Project deleted
[SUCCESS] Project supadev-engine-smoke-1770384916-pg15 deleted successfully
[SUCCESS] PostgresEngine 15 test completed successfully
[INFO] Total test duration: 733 seconds


============================================================
Testing PostgreSQL Engine: 17
============================================================
[INFO] Project name: supadev-engine-smoke-1770384916-pg17
[INFO] Region: us-east-1
[INFO] Postgres commit: 5b20cac2
[INFO] Start time: 2026-02-06 13:47:31
[STEP] Resolving version from PR for engine 17...
[SUCCESS] Resolved version: 17.6.1.079-dckr-2
[STEP] Creating project with PostgresEngine 17...
UPDATE 0
INSERT 0 1
UPDATE 1
UPDATE 1
  id  |               version               |  region   |   provider_image_id   | release_channel | postgres_engine 
------+-------------------------------------+-----------+-----------------------+-----------------+-----------------
 7719 | supabase-postgres-17.6.1.079-dckr-2 | us-east-1 | ami-0164733a853495f3a | ga              | 17
(1 row)


Creating project on release channel "ga" with version "17.6.1.079-dckr-2"
Project URL: http://localhost:8082/project/xaxpqyewstzzcqwwgeub
Admin URL: http://localhost:4000/projects?identifier=xaxpqyewstzzcqwwgeub
Database status is not yet available, waiting...
Database status is currently UNKNOWN, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is now ACTIVE_HEALTHY
[SUCCESS] Project supadev-engine-smoke-1770384916-pg17 created and reached ACTIVE_HEALTHY status
[INFO] Time to ACTIVE_HEALTHY: 253 seconds
[INFO] Sleeping for 10 seconds before checking project health
[STEP] Checking project health for supadev-engine-smoke-1770384916-pg17...
Waiting for all project components to become healthy, 5 retries remaining. Retrying in 2 seconds...
Waiting for all project components to become healthy, 4 retries remaining. Retrying in 4 seconds...
Waiting for all project components to become healthy, 3 retries remaining. Retrying in 8 seconds...
[
  {
    "name": "PostgREST",
    "healthy": true,
    "status": "ACTIVE_HEALTHY",
    "info": {
      "db_schema": "public,graphql_public"
    }
  },
  {
    "name": "Auth",
    "healthy": true,
    "status": "ACTIVE_HEALTHY",
    "info": {
      "description": "GoTrue is a user registration and authentication API",
      "name": "GoTrue",
      "version": "v2.186.0"
    }
  },
  {
    "name": "Storage",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "Realtime",
    "healthy": true,
    "status": "ACTIVE_HEALTHY",
    "info": {
      "connected_cluster": 0,
      "db_connected": false,
      "healthy": true,
      "node": "realtime@2600:1f18:10cd:e200:dd04:ae9d:d59d:e94a",
      "region": "us-east-1"
    }
  },
  {
    "name": "Postgres (Admin)",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "Postgres (User)",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "Supavisor (TXN)",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "PgBouncer",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  }
]
[STEP] Printing project information for supadev-engine-smoke-1770384916-pg17
{
  "cloud_provider": "AWS",
  "db_host": "db.xaxpqyewstzzcqwwgeub.supabase.red",
  "id": 2,
  "inserted_at": "2026-02-06T13:47:34.075013",
  "name": "supadev-engine-smoke-1770384916-pg17",
  "organization_id": 1,
  "ref": "xaxpqyewstzzcqwwgeub",
  "region": "us-east-1",
  "status": "ACTIVE_HEALTHY",
  "subscription_id": "564WiwMZ7Qduz436",
  "connectionString": "U2FsdGVkX1+mKiC5OOYFSogq+KliuaudSu9p9fOC4oJz/YDiSQFKC+C2CgC+XuD2kUd/0lQ78GRWu8RpPlHPoorpHwWGf9Y5Bm5wipWV/1nAVeJ7PBgPi9qrs5QIFHY4hq1VJ0N52QEjQ7MB0QUxcw/dmefsXeIHI5NYq+xfI+XLk3OsByh6dj/cjHjrv4mU",
  "restUrl": "https://xaxpqyewstzzcqwwgeub.supabase.red/rest/v1/",
  "volumeSizeGb": 8,
  "maxDatabasePreprovisionGb": null,
  "lastDatabaseResizeAt": null,
  "is_branch_enabled": false,
  "is_physical_backups_enabled": true,
  "infra_compute_size": "nano",
  "dbVersion": "17.6.1.079-dckr-2"
}

============================================================
Executing SQL tests (engine: 17)
============================================================
[STEP] Loading prime.sql to initialize extensions...
[SUCCESS] Extensions initialized
[STEP] Executing: auth (nix/tests/sql/auth.sql)
[SUCCESS] auth
[STEP] Executing: docs-array-test (nix/tests/sql/docs-array-test.sql)
[SUCCESS] docs-array-test
[STEP] Executing: docs-cascades-deletes (nix/tests/sql/docs-cascades-deletes.sql)
[SUCCESS] docs-cascades-deletes
[STEP] Executing: docs-connections (nix/tests/sql/docs-connections.sql)
[SUCCESS] docs-connections
[STEP] Executing: docs-enums (nix/tests/sql/docs-enums.sql)
[SUCCESS] docs-enums
[STEP] Executing: docs-full-text-search (nix/tests/sql/docs-full-text-search.sql)
[SUCCESS] docs-full-text-search
[STEP] Executing: docs-functions (nix/tests/sql/docs-functions.sql)
[SUCCESS] docs-functions
[STEP] Executing: docs-indexes (nix/tests/sql/docs-indexes.sql)
[SUCCESS] docs-indexes
[STEP] Executing: docs-json (nix/tests/sql/docs-json.sql)
[SUCCESS] docs-json
[STEP] Executing: docs-partitioning (nix/tests/sql/docs-partitioning.sql)
[SUCCESS] docs-partitioning
[STEP] Executing: docs-tables-and-data (nix/tests/sql/docs-tables-and-data.sql)
[SUCCESS] docs-tables-and-data
[STEP] Executing: docs-triggers (nix/tests/sql/docs-triggers.sql)
[SUCCESS] docs-triggers
[STEP] Executing: docs-webhooks (nix/tests/sql/docs-webhooks.sql)
[SUCCESS] docs-webhooks
[STEP] Executing: enable_tracking (nix/tests/sql/enable_tracking.sql)
[SUCCESS] enable_tracking
[STEP] Executing: evtrigs (nix/tests/sql/evtrigs.sql)
[SUCCESS] evtrigs
[STEP] Executing: extensions_schema (nix/tests/sql/extensions_schema.sql)
[SUCCESS] extensions_schema
[STEP] Executing: http (nix/tests/sql/http.sql)
[SUCCESS] http
[STEP] Executing: hypopg (nix/tests/sql/hypopg.sql)
[SUCCESS] hypopg
[STEP] Executing: index_advisor (nix/tests/sql/index_advisor.sql)
[SUCCESS] index_advisor
[STEP] Executing: pg-safeupdate (nix/tests/sql/pg-safeupdate.sql)
[SUCCESS] pg-safeupdate
[STEP] Executing: pg_graphql (nix/tests/sql/pg_graphql.sql)
[SUCCESS] pg_graphql
[STEP] Executing: pg_hashids (nix/tests/sql/pg_hashids.sql)
[SUCCESS] pg_hashids
[STEP] Executing: pg_jsonschema (nix/tests/sql/pg_jsonschema.sql)
[SUCCESS] pg_jsonschema
[STEP] Executing: pg_net (nix/tests/sql/pg_net.sql)
[SUCCESS] pg_net
[STEP] Executing: pg_partman (nix/tests/sql/pg_partman.sql)
[SUCCESS] pg_partman
[STEP] Executing: pg_plan_filter (nix/tests/sql/pg_plan_filter.sql)
[SUCCESS] pg_plan_filter
[STEP] Executing: pg_repack (nix/tests/sql/pg_repack.sql)
[SUCCESS] pg_repack
[STEP] Executing: pg_tle (nix/tests/sql/pg_tle.sql)
[SUCCESS] pg_tle
[STEP] Executing: pgaudit (nix/tests/sql/pgaudit.sql)
[SUCCESS] pgaudit
[STEP] Executing: pgbouncer (nix/tests/sql/pgbouncer.sql)
[SUCCESS] pgbouncer
[STEP] Executing: pgmq (nix/tests/sql/pgmq.sql)
[SUCCESS] pgmq
[STEP] Executing: pgroonga (nix/tests/sql/pgroonga.sql)
[SUCCESS] pgroonga
[STEP] Executing: pgrouting (nix/tests/sql/pgrouting.sql)
[SUCCESS] pgrouting
[STEP] Executing: pgsodium (nix/tests/sql/pgsodium.sql)
[SUCCESS] pgsodium
[STEP] Executing: pgtap (nix/tests/sql/pgtap.sql)
[SUCCESS] pgtap
[STEP] Executing: plpgsql-check (nix/tests/sql/plpgsql-check.sql)
[SUCCESS] plpgsql-check
[STEP] Executing: postgis (nix/tests/sql/postgis.sql)
[SUCCESS] postgis
[STEP] Executing: postgres_fdw (nix/tests/sql/postgres_fdw.sql)
[SUCCESS] postgres_fdw
[STEP] Executing: realtime (nix/tests/sql/realtime.sql)
[SUCCESS] realtime
[STEP] Executing: roles (nix/tests/sql/roles.sql)
[SUCCESS] roles
[STEP] Executing: security (nix/tests/sql/security.sql)
[SUCCESS] security
[STEP] Executing: storage (nix/tests/sql/storage.sql)
[SUCCESS] storage
[STEP] Executing: vault (nix/tests/sql/vault.sql)
[SUCCESS] vault
[STEP] Executing: wal2json (nix/tests/sql/wal2json.sql)
[SUCCESS] wal2json
[STEP] Executing: z_17_ext_interface (nix/tests/sql/z_17_ext_interface.sql)
[SUCCESS] z_17_ext_interface
[STEP] Executing: z_17_pg_stat_monitor (nix/tests/sql/z_17_pg_stat_monitor.sql)
[SUCCESS] z_17_pg_stat_monitor
[STEP] Executing: z_17_pgvector (nix/tests/sql/z_17_pgvector.sql)
[SUCCESS] z_17_pgvector
[STEP] Executing: z_17_roles (nix/tests/sql/z_17_roles.sql)
[SUCCESS] z_17_roles
[STEP] Executing: z_17_rum (nix/tests/sql/z_17_rum.sql)
[SUCCESS] z_17_rum
[SUCCESS] All SQL tests executed
[STEP] Deleting project supadev-engine-smoke-1770384916-pg17...
Project deleted
[SUCCESS] Project supadev-engine-smoke-1770384916-pg17 deleted successfully
[SUCCESS] PostgresEngine 17 test completed successfully
[INFO] Total test duration: 382 seconds


============================================================
Testing PostgreSQL Engine: 17-oriole
============================================================
[INFO] Project name: supadev-engine-smoke-1770384916-pg17_oriole
[INFO] Region: us-east-1
[INFO] Postgres commit: 5b20cac2
[INFO] Start time: 2026-02-06 13:53:53
[STEP] Resolving version from PR for engine 17-oriole...
[SUCCESS] Resolved version: 17.6.0.036-orioledb-dckr-2
[STEP] Creating project with PostgresEngine 17-oriole...
UPDATE 0
INSERT 0 1
UPDATE 1
UPDATE 1
  id  |                   version                    |  region   |   provider_image_id   | release_channel | postgres_engine 
------+----------------------------------------------+-----------+-----------------------+-----------------+-----------------
 7721 | supabase-postgres-17.6.0.036-orioledb-dckr-2 | us-east-1 | ami-00489b13519fc5007 | preview         | 17-oriole
(1 row)


Creating project on release channel "preview" with version "17.6.0.036-orioledb-dckr-2"
Project URL: http://localhost:8082/project/xqsjvagtuswizgtttinv
Admin URL: http://localhost:4000/projects?identifier=xqsjvagtuswizgtttinv
Database status is not yet available, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is currently COMING_UP, waiting...
Database status is now ACTIVE_HEALTHY
[SUCCESS] Project supadev-engine-smoke-1770384916-pg17_oriole created and reached ACTIVE_HEALTHY status
[INFO] Time to ACTIVE_HEALTHY: 314 seconds
[INFO] Sleeping for 10 seconds before checking project health
[STEP] Checking project health for supadev-engine-smoke-1770384916-pg17_oriole...
[
  {
    "name": "PostgREST",
    "healthy": true,
    "status": "ACTIVE_HEALTHY",
    "info": {
      "db_schema": "public,graphql_public"
    }
  },
  {
    "name": "Auth",
    "healthy": true,
    "status": "ACTIVE_HEALTHY",
    "info": {
      "description": "GoTrue is a user registration and authentication API",
      "name": "GoTrue",
      "version": "v2.186.0"
    }
  },
  {
    "name": "Storage",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "Realtime",
    "healthy": true,
    "status": "ACTIVE_HEALTHY",
    "info": {
      "connected_cluster": 0,
      "db_connected": false,
      "healthy": true,
      "node": "realtime@2600:1f18:10cd:e201:5d6:e3c1:f467:ae33",
      "region": "us-east-1"
    }
  },
  {
    "name": "Postgres (Admin)",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "Postgres (User)",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "Supavisor (TXN)",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  },
  {
    "name": "PgBouncer",
    "healthy": true,
    "status": "ACTIVE_HEALTHY"
  }
]
[STEP] Printing project information for supadev-engine-smoke-1770384916-pg17_oriole
{
  "cloud_provider": "AWS",
  "db_host": "db.xqsjvagtuswizgtttinv.supabase.red",
  "id": 3,
  "inserted_at": "2026-02-06T13:53:56.784134",
  "name": "supadev-engine-smoke-1770384916-pg17_oriole",
  "organization_id": 1,
  "ref": "xqsjvagtuswizgtttinv",
  "region": "us-east-1",
  "status": "ACTIVE_HEALTHY",
  "subscription_id": "564WiwMZ7Qduz436",
  "connectionString": "U2FsdGVkX19DubkwYrahsX47++oegVaEZOIp23bqf42akm8QOZzCdIiwEFR9g22s8MO1JmgLdRQO40q8GxFCzEvXavHkW5ywuvTKyljfmquqKku4eizW77EDOs+X/mw8LolgDBpWsDqIGGQwS/h6B1wh3/L/sgtaqwrLWgxcVvjj1B+61uhLIlGYg29duJEb",
  "restUrl": "https://xqsjvagtuswizgtttinv.supabase.red/rest/v1/",
  "volumeSizeGb": 8,
  "maxDatabasePreprovisionGb": null,
  "lastDatabaseResizeAt": null,
  "is_branch_enabled": false,
  "is_physical_backups_enabled": true,
  "infra_compute_size": "nano",
  "dbVersion": "17.6.0.036-orioledb-dckr-2"
}

============================================================
Executing SQL tests (engine: 17-oriole)
============================================================
[STEP] Loading prime.sql to initialize extensions...
[SUCCESS] Extensions initialized
[STEP] Executing: auth (nix/tests/sql/auth.sql)
[SUCCESS] auth
[STEP] Executing: docs-array-test (nix/tests/sql/docs-array-test.sql)
[SUCCESS] docs-array-test
[STEP] Executing: docs-cascades-deletes (nix/tests/sql/docs-cascades-deletes.sql)
[SUCCESS] docs-cascades-deletes
[STEP] Executing: docs-connections (nix/tests/sql/docs-connections.sql)
[SUCCESS] docs-connections
[STEP] Executing: docs-enums (nix/tests/sql/docs-enums.sql)
[SUCCESS] docs-enums
[STEP] Executing: docs-full-text-search (nix/tests/sql/docs-full-text-search.sql)
[SUCCESS] docs-full-text-search
[STEP] Executing: docs-functions (nix/tests/sql/docs-functions.sql)
[SUCCESS] docs-functions
[STEP] Executing: docs-indexes (nix/tests/sql/docs-indexes.sql)
[SUCCESS] docs-indexes
[STEP] Executing: docs-json (nix/tests/sql/docs-json.sql)
[SUCCESS] docs-json
[STEP] Executing: docs-partitioning (nix/tests/sql/docs-partitioning.sql)
[SUCCESS] docs-partitioning
[STEP] Executing: docs-tables-and-data (nix/tests/sql/docs-tables-and-data.sql)
[SUCCESS] docs-tables-and-data
[STEP] Executing: docs-triggers (nix/tests/sql/docs-triggers.sql)
[SUCCESS] docs-triggers
[STEP] Executing: docs-webhooks (nix/tests/sql/docs-webhooks.sql)
[SUCCESS] docs-webhooks
[STEP] Executing: enable_tracking (nix/tests/sql/enable_tracking.sql)
[SUCCESS] enable_tracking
[STEP] Executing: evtrigs (nix/tests/sql/evtrigs.sql)
[SUCCESS] evtrigs
[STEP] Executing: extensions_schema (nix/tests/sql/extensions_schema.sql)
[SUCCESS] extensions_schema
[STEP] Executing: http (nix/tests/sql/http.sql)
[SUCCESS] http
[STEP] Executing: hypopg (nix/tests/sql/hypopg.sql)
[SUCCESS] hypopg
[STEP] Executing: index_advisor (nix/tests/sql/index_advisor.sql)
[SUCCESS] index_advisor
[STEP] Executing: pg-safeupdate (nix/tests/sql/pg-safeupdate.sql)
[SUCCESS] pg-safeupdate
[STEP] Executing: pg_graphql (nix/tests/sql/pg_graphql.sql)
[SUCCESS] pg_graphql
[STEP] Executing: pg_hashids (nix/tests/sql/pg_hashids.sql)
[SUCCESS] pg_hashids
[STEP] Executing: pg_jsonschema (nix/tests/sql/pg_jsonschema.sql)
[SUCCESS] pg_jsonschema
[STEP] Executing: pg_net (nix/tests/sql/pg_net.sql)
[SUCCESS] pg_net
[STEP] Executing: pg_partman (nix/tests/sql/pg_partman.sql)
[SUCCESS] pg_partman
[STEP] Executing: pg_plan_filter (nix/tests/sql/pg_plan_filter.sql)
[SUCCESS] pg_plan_filter
[STEP] Executing: pg_repack (nix/tests/sql/pg_repack.sql)
[SUCCESS] pg_repack
[STEP] Executing: pg_tle (nix/tests/sql/pg_tle.sql)
[SUCCESS] pg_tle
[STEP] Executing: pgaudit (nix/tests/sql/pgaudit.sql)
[SUCCESS] pgaudit
[STEP] Executing: pgbouncer (nix/tests/sql/pgbouncer.sql)
[SUCCESS] pgbouncer
[STEP] Executing: pgmq (nix/tests/sql/pgmq.sql)
[SUCCESS] pgmq
[STEP] Executing: pgroonga (nix/tests/sql/pgroonga.sql)
[SUCCESS] pgroonga
[STEP] Executing: pgrouting (nix/tests/sql/pgrouting.sql)
[SUCCESS] pgrouting
[STEP] Executing: pgsodium (nix/tests/sql/pgsodium.sql)
[SUCCESS] pgsodium
[STEP] Executing: pgtap (nix/tests/sql/pgtap.sql)
[SUCCESS] pgtap
[STEP] Executing: plpgsql-check (nix/tests/sql/plpgsql-check.sql)
[SUCCESS] plpgsql-check
[STEP] Executing: postgis (nix/tests/sql/postgis.sql)
[SUCCESS] postgis
[STEP] Executing: postgres_fdw (nix/tests/sql/postgres_fdw.sql)
[SUCCESS] postgres_fdw
[STEP] Executing: realtime (nix/tests/sql/realtime.sql)
[SUCCESS] realtime
[STEP] Executing: roles (nix/tests/sql/roles.sql)
[SUCCESS] roles
[STEP] Executing: security (nix/tests/sql/security.sql)
[SUCCESS] security
[STEP] Executing: storage (nix/tests/sql/storage.sql)
[SUCCESS] storage
[STEP] Executing: vault (nix/tests/sql/vault.sql)
[SUCCESS] vault
[STEP] Executing: wal2json (nix/tests/sql/wal2json.sql)
[SUCCESS] wal2json
[STEP] Executing: z_orioledb-17_docs-cascades-deletes (nix/tests/sql/z_orioledb-17_docs-cascades-deletes.sql)
[SUCCESS] z_orioledb-17_docs-cascades-deletes
[STEP] Executing: z_orioledb-17_docs-full-text-search (nix/tests/sql/z_orioledb-17_docs-full-text-search.sql)
[SUCCESS] z_orioledb-17_docs-full-text-search
[STEP] Executing: z_orioledb-17_docs-functions (nix/tests/sql/z_orioledb-17_docs-functions.sql)
[SUCCESS] z_orioledb-17_docs-functions
[STEP] Executing: z_orioledb-17_docs-indexes (nix/tests/sql/z_orioledb-17_docs-indexes.sql)
[SUCCESS] z_orioledb-17_docs-indexes
[STEP] Executing: z_orioledb-17_docs-partitioning (nix/tests/sql/z_orioledb-17_docs-partitioning.sql)
[SUCCESS] z_orioledb-17_docs-partitioning
[STEP] Executing: z_orioledb-17_ext_interface (nix/tests/sql/z_orioledb-17_ext_interface.sql)
[SUCCESS] z_orioledb-17_ext_interface
[STEP] Executing: z_orioledb-17_extensions_schema (nix/tests/sql/z_orioledb-17_extensions_schema.sql)
[SUCCESS] z_orioledb-17_extensions_schema
[STEP] Executing: z_orioledb-17_pg_stat_monitor (nix/tests/sql/z_orioledb-17_pg_stat_monitor.sql)
[SUCCESS] z_orioledb-17_pg_stat_monitor
[STEP] Executing: z_orioledb-17_pgroonga (nix/tests/sql/z_orioledb-17_pgroonga.sql)
[SUCCESS] z_orioledb-17_pgroonga
[STEP] Executing: z_orioledb-17_pgvector (nix/tests/sql/z_orioledb-17_pgvector.sql)
[SUCCESS] z_orioledb-17_pgvector
[STEP] Executing: z_orioledb-17_verify_orioledb (nix/tests/sql/z_orioledb-17_verify_orioledb.sql)
[SUCCESS] z_orioledb-17_verify_orioledb
[SUCCESS] All SQL tests executed
[STEP] Deleting project supadev-engine-smoke-1770384916-pg17_oriole...
Project deleted
[SUCCESS] Project supadev-engine-smoke-1770384916-pg17_oriole deleted successfully
[SUCCESS] PostgresEngine 17-oriole test completed successfully
[INFO] Total test duration: 438 seconds


============================================================
Cleaning Up: Withdrawing Inserted Versions
============================================================
[STEP] Withdrawing version 15.14.1.079-dckr-2 for engine 15...
UPDATE 0
INSERT 0 0
UPDATE 1
UPDATE 1
  id  |               version                |  region   |   provider_image_id   | release_channel | postgres_engine 
------+--------------------------------------+-----------+-----------------------+-----------------+-----------------
 7722 | supabase-postgres-15.14.1.079-dckr-2 | us-east-1 | ami-0ee4d40652125140b | withdrawn       | 15
(1 row)


[SUCCESS] Version 15.14.1.079-dckr-2 marked as withdrawn
[STEP] Withdrawing version 17.6.1.079-dckr-2 for engine 17...
UPDATE 0
INSERT 0 0
UPDATE 1
UPDATE 1
  id  |               version               |  region   |   provider_image_id   | release_channel | postgres_engine 
------+-------------------------------------+-----------+-----------------------+-----------------+-----------------
 7723 | supabase-postgres-17.6.1.079-dckr-2 | us-east-1 | ami-0164733a853495f3a | withdrawn       | 17
(1 row)


[SUCCESS] Version 17.6.1.079-dckr-2 marked as withdrawn
[STEP] Withdrawing version 17.6.0.036-orioledb-dckr-2 for engine 17-oriole...
UPDATE 0
INSERT 0 0
UPDATE 1
UPDATE 1
  id  |                   version                    |  region   |   provider_image_id   | release_channel | postgres_engine 
------+----------------------------------------------+-----------+-----------------------+-----------------+-----------------
 7724 | supabase-postgres-17.6.0.036-orioledb-dckr-2 | us-east-1 | ami-00489b13519fc5007 | withdrawn       | 17-oriole
(1 row)


[SUCCESS] Version 17.6.0.036-orioledb-dckr-2 marked as withdrawn

============================================================
Test Summary
============================================================

ENGINE          RESULT
------          ------
15              PASSED (733s)
17              PASSED (382s)
17-oriole       PASSED (438s)

============================================================
Total: 3 | Passed: 3 | Failed: 0
============================================================

[INFO] Postgres commit: 5b20cac26e882d7e73c22e3b3830ed9326064955
[INFO] Cache location: /home/runner/.cache/supadev/postgres/5b20cac26e882d7e73c22e3b3830ed9326064955
[SUCCESS] All tests passed!

@samrose samrose enabled auto-merge February 6, 2026 18:08
@samrose samrose force-pushed the cli-image-reduce branch 2 times, most recently from 4b83c22 to 53caf27 Compare February 10, 2026 22:23
@samrose samrose added this pull request to the merge queue Feb 11, 2026
@samrose samrose removed this pull request from the merge queue due to a manual request Feb 11, 2026
@samrose
Copy link
Copy Markdown
Collaborator Author

samrose commented Feb 11, 2026

passed smoke tests, and cli image tests merging now

@samrose samrose enabled auto-merge February 11, 2026 19:18
@samrose samrose added this pull request to the merge queue Feb 11, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Feb 11, 2026
@samrose samrose enabled auto-merge February 12, 2026 01:13
Add latestOnly parameter that flows through makeOurPostgresPkgs,
makePostgresBin, and makePostgres functions. When true, this parameter
will enable building only the latest version of each extension.

Also adds psql_17_slim package that uses latestOnly=true.

feat(ext): add latestOnly support to pgvector

feat(ext): add latestOnly support to wrappers

Add latestOnly parameter to wrappers extension that:
- Filters versionsToUse when latestOnly=true to build only latest version
- Skips migration SQL file generation when latestOnly=true
- Skips previously packaged version symlinks when latestOnly=true
- Updates library count verification for slim builds (expects 2 files)
- Updates passthru metadata with versionsBuilt and latestOnly flag

This is part of the psql_17_slim implementation to reduce image size.

feat(ext): add latestOnly support to pg_graphql

feat(ext): add latestOnly support to pg_net
@samrose samrose added this pull request to the merge queue Feb 12, 2026
Merged via the queue into develop with commit 91b803c Feb 12, 2026
110 checks passed
@samrose samrose deleted the cli-image-reduce branch February 12, 2026 06:14
encima pushed a commit that referenced this pull request Feb 23, 2026
* feat(nix): add latestOnly parameter support to postgres.nix

Add latestOnly parameter that flows through makeOurPostgresPkgs,
makePostgresBin, and makePostgres functions. When true, this parameter
will enable building only the latest version of each extension.

Also adds psql_17_slim package that uses latestOnly=true.

feat(ext): add latestOnly support to pgvector

feat(ext): add latestOnly support to wrappers

Add latestOnly parameter to wrappers extension that:
- Filters versionsToUse when latestOnly=true to build only latest version
- Skips migration SQL file generation when latestOnly=true
- Skips previously packaged version symlinks when latestOnly=true
- Updates library count verification for slim builds (expects 2 files)
- Updates passthru metadata with versionsBuilt and latestOnly flag

This is part of the psql_17_slim implementation to reduce image size.

feat(ext): add latestOnly support to pg_graphql

feat(ext): add latestOnly support to pg_net

* feat: variant of pkgs for image size reduce

* fix: deal with systemd in slim vs regular

* feat: slimmed image with tests and image analysis tool

* tests: workflow to check image size and test images with pg_regress

* fix: running docker test ci

* fix: running apps fix

* fix: pg_isready in proper place

* docs: add pg-startup-profiler design document

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: add pg-startup-profiler implementation plan

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(pg-startup-profiler): scaffold project structure

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(pg-startup-profiler): add pluggable rules system

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(pg-startup-profiler): add Docker client wrapper

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(pg-startup-profiler): add log parser

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat: docker startup profiler

* cli smoke test, nix package to trigger test runs

* feat: shared action use nix derivation to check changes and run test if change in inputs

* feat: local and ci cli-smoke and image tests

* chore: test suffix

* fix: use http_mock_host

* fix: match develop branch on these changes

fix: docker image test

fix: resolve merge conflicts

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
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.

3 participants