Skip to content

CI: move parity job from trial account to Flagsmith prod Snowflake with a scoped role #2

Description

@khvn26

The engine-parity CI job currently runs against my personal Snowflake trial account under ACCOUNTADMIN. The current trial account is tied to a personal email and expires; production account with billing is the durable home.

What needs to happen

  1. Provision a CI database + schema in the Flagsmith prod Snowflake account. Suggested layout: a dedicated FS_CI database, scratch schema PUBLIC. The parity tests already create per-run transient IDENTITIES_PARITY_<uuid> / TRAITS_PARITY_<uuid> tables there and drop them on teardown, so concurrent runs don't collide.

  2. Create a least-privilege role for CI, e.g. FS_SQL_ENGINE_CI_RW. Required grants:

    USE ROLE SECURITYADMIN;
    CREATE ROLE FS_SQL_ENGINE_CI_RW;
    
    USE ROLE SYSADMIN;
    GRANT USAGE ON DATABASE FS_CI TO ROLE FS_SQL_ENGINE_CI_RW;
    GRANT USAGE ON SCHEMA FS_CI.PUBLIC TO ROLE FS_SQL_ENGINE_CI_RW;
    GRANT CREATE TABLE ON SCHEMA FS_CI.PUBLIC TO ROLE FS_SQL_ENGINE_CI_RW;
    GRANT USAGE ON WAREHOUSE FS_CI_WH TO ROLE FS_SQL_ENGINE_CI_RW;
    
    GRANT ROLE FS_SQL_ENGINE_CI_RW TO USER <ci-user>;
    ALTER USER <ci-user> SET DEFAULT_ROLE = FS_SQL_ENGINE_CI_RW;

    No grants beyond that — the parity tests do CREATE TRANSIENT TABLE, INSERT, SELECT, DROP TABLE and that's it.

  3. Provision a service user for CI (e.g. flagsmith_sql_engine_ci) with key-pair auth. Generate the keypair, register the public key on the user, capture the private key for GH secrets. Disable password auth on the user.

  4. Add a resource monitor on FS_CI_WH capping monthly credit spend (suggest $5-10 / month — current usage is ~$0.05 per CI run, ~$2-5 / month at heavy PR volume).

  5. Update GH secrets in this repo:

    • SNOWFLAKE_ACCOUNT → prod account locator
    • SNOWFLAKE_USERflagsmith_sql_engine_ci
    • SNOWFLAKE_ROLEFS_SQL_ENGINE_CI_RW
    • SNOWFLAKE_WAREHOUSEFS_CI_WH
    • SNOWFLAKE_DATABASEFS_CI
    • SNOWFLAKE_SCHEMAPUBLIC
    • SNOWFLAKE_PRIVATE_KEY → contents of the new key file

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions