fraiseql-confiture 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fraiseql-confiture might be problematic. Click here for more details.

Files changed (161) hide show
  1. fraiseql_confiture-0.1.0/.github/workflows/ci.yml +147 -0
  2. fraiseql_confiture-0.1.0/.github/workflows/wheels.yml +115 -0
  3. fraiseql_confiture-0.1.0/.gitignore +70 -0
  4. fraiseql_confiture-0.1.0/.python-version +1 -0
  5. fraiseql_confiture-0.1.0/CHANGELOG.md +164 -0
  6. fraiseql_confiture-0.1.0/CI_CD_SUMMARY.md +418 -0
  7. fraiseql_confiture-0.1.0/CLAUDE.md +733 -0
  8. fraiseql_confiture-0.1.0/CONTRIBUTING.md +719 -0
  9. fraiseql_confiture-0.1.0/Cargo.lock +436 -0
  10. fraiseql_confiture-0.1.0/Cargo.toml +29 -0
  11. fraiseql_confiture-0.1.0/LICENSE +21 -0
  12. fraiseql_confiture-0.1.0/PHASE2_SUMMARY.md +289 -0
  13. fraiseql_confiture-0.1.0/PHASES.md +1645 -0
  14. fraiseql_confiture-0.1.0/PKG-INFO +350 -0
  15. fraiseql_confiture-0.1.0/PRD.md +620 -0
  16. fraiseql_confiture-0.1.0/README.md +306 -0
  17. fraiseql_confiture-0.1.0/RELEASE.md +314 -0
  18. fraiseql_confiture-0.1.0/db/schema/00_common/00_extensions.sql +7 -0
  19. fraiseql_confiture-0.1.0/db/schema/00_common/01_confiture_migrations.sql +38 -0
  20. fraiseql_confiture-0.1.0/docs/api/builder.md +57 -0
  21. fraiseql_confiture-0.1.0/docs/api/migrator.md +76 -0
  22. fraiseql_confiture-0.1.0/docs/api/schema-to-schema.md +147 -0
  23. fraiseql_confiture-0.1.0/docs/api/syncer.md +90 -0
  24. fraiseql_confiture-0.1.0/docs/getting-started.md +572 -0
  25. fraiseql_confiture-0.1.0/docs/guides/medium-1-build-from-ddl.md +732 -0
  26. fraiseql_confiture-0.1.0/docs/guides/medium-2-incremental-migrations.md +821 -0
  27. fraiseql_confiture-0.1.0/docs/guides/medium-3-production-sync.md +910 -0
  28. fraiseql_confiture-0.1.0/docs/guides/medium-4-schema-to-schema.md +1396 -0
  29. fraiseql_confiture-0.1.0/docs/guides/migration-decision-tree.md +447 -0
  30. fraiseql_confiture-0.1.0/docs/index.md +184 -0
  31. fraiseql_confiture-0.1.0/docs/meaningful-test-uuids.md +666 -0
  32. fraiseql_confiture-0.1.0/docs/migration-strategies.md +732 -0
  33. fraiseql_confiture-0.1.0/docs/organizing-sql-files.md +608 -0
  34. fraiseql_confiture-0.1.0/docs/performance.md +382 -0
  35. fraiseql_confiture-0.1.0/docs/reference/cli.md +856 -0
  36. fraiseql_confiture-0.1.0/docs/reference/configuration.md +789 -0
  37. fraiseql_confiture-0.1.0/examples/01-basic-migration/.gitignore +29 -0
  38. fraiseql_confiture-0.1.0/examples/01-basic-migration/README.md +530 -0
  39. fraiseql_confiture-0.1.0/examples/01-basic-migration/db/environments/local.yaml +14 -0
  40. fraiseql_confiture-0.1.0/examples/01-basic-migration/db/migrations/001_add_user_bio.py +42 -0
  41. fraiseql_confiture-0.1.0/examples/01-basic-migration/db/schema/00_common/extensions.sql +11 -0
  42. fraiseql_confiture-0.1.0/examples/01-basic-migration/db/schema/10_tables/users.sql +20 -0
  43. fraiseql_confiture-0.1.0/examples/01-basic-migration/db/schema/20_indexes/users_indexes.sql +11 -0
  44. fraiseql_confiture-0.1.0/examples/02-fraiseql-integration/.gitignore +65 -0
  45. fraiseql_confiture-0.1.0/examples/02-fraiseql-integration/README.md +1209 -0
  46. fraiseql_confiture-0.1.0/examples/02-fraiseql-integration/confiture.yaml +151 -0
  47. fraiseql_confiture-0.1.0/examples/02-fraiseql-integration/db/environments/local.yaml +34 -0
  48. fraiseql_confiture-0.1.0/examples/02-fraiseql-integration/db/schema/00_extensions/extensions.sql +22 -0
  49. fraiseql_confiture-0.1.0/examples/02-fraiseql-integration/db/schema/20_indexes/indexes.sql +97 -0
  50. fraiseql_confiture-0.1.0/examples/02-fraiseql-integration/requirements.txt +27 -0
  51. fraiseql_confiture-0.1.0/examples/02-fraiseql-integration/schema.py +526 -0
  52. fraiseql_confiture-0.1.0/examples/03-zero-downtime-migration/README.md +1279 -0
  53. fraiseql_confiture-0.1.0/examples/03-zero-downtime-migration/SCENARIO.md +675 -0
  54. fraiseql_confiture-0.1.0/examples/03-zero-downtime-migration/db/new_schema/01_users_table.sql +43 -0
  55. fraiseql_confiture-0.1.0/examples/03-zero-downtime-migration/db/old_schema/01_users_table.sql +39 -0
  56. fraiseql_confiture-0.1.0/examples/03-zero-downtime-migration/migration_config.yaml +348 -0
  57. fraiseql_confiture-0.1.0/examples/03-zero-downtime-migration/scripts/1_setup_fdw.sh +513 -0
  58. fraiseql_confiture-0.1.0/examples/03-zero-downtime-migration/scripts/2_migrate_data.sh +460 -0
  59. fraiseql_confiture-0.1.0/examples/04-production-sync-anonymization/.gitignore +159 -0
  60. fraiseql_confiture-0.1.0/examples/04-production-sync-anonymization/QUICK_START.md +356 -0
  61. fraiseql_confiture-0.1.0/examples/04-production-sync-anonymization/README.md +1258 -0
  62. fraiseql_confiture-0.1.0/examples/04-production-sync-anonymization/anonymization_config.yaml +521 -0
  63. fraiseql_confiture-0.1.0/examples/04-production-sync-anonymization/db/environments/production.yaml +142 -0
  64. fraiseql_confiture-0.1.0/examples/04-production-sync-anonymization/db/environments/staging.yaml +247 -0
  65. fraiseql_confiture-0.1.0/examples/04-production-sync-anonymization/sync_script.sh +467 -0
  66. fraiseql_confiture-0.1.0/examples/04-production-sync-anonymization/verify_anonymization.sql +640 -0
  67. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/.github/workflows/ci.yml +156 -0
  68. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/.github/workflows/deploy-production.yml +234 -0
  69. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/.github/workflows/deploy-staging.yml +130 -0
  70. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/.gitignore +66 -0
  71. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/Makefile +163 -0
  72. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/README.md +1347 -0
  73. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/db/environments/ci.yaml +34 -0
  74. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/db/environments/local.yaml +26 -0
  75. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/db/environments/production.yaml +52 -0
  76. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/db/environments/staging.yaml +39 -0
  77. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/db/migrations/001_add_user_bio.py +50 -0
  78. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/db/migrations/002_add_project_status.py +63 -0
  79. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/db/migrations/003_add_task_priority.py +62 -0
  80. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/pytest.ini +38 -0
  81. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/scripts/backup_production.sh +104 -0
  82. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/scripts/rollback.sh +93 -0
  83. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/scripts/verify_migration.sh +161 -0
  84. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/tests/conftest.py +57 -0
  85. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/tests/test_data_integrity.py +322 -0
  86. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/tests/test_migrations.py +152 -0
  87. fraiseql_confiture-0.1.0/examples/05-multi-environment-workflow/tests/test_schema_build.py +191 -0
  88. fraiseql_confiture-0.1.0/examples/README.md +376 -0
  89. fraiseql_confiture-0.1.0/examples/basic/.gitignore +29 -0
  90. fraiseql_confiture-0.1.0/examples/basic/README.md +606 -0
  91. fraiseql_confiture-0.1.0/examples/basic/db/environments/local.yaml +9 -0
  92. fraiseql_confiture-0.1.0/examples/basic/db/environments/production.yaml +8 -0
  93. fraiseql_confiture-0.1.0/examples/basic/db/environments/test.yaml +9 -0
  94. fraiseql_confiture-0.1.0/examples/basic/db/migrations/001_create_initial_schema.py +97 -0
  95. fraiseql_confiture-0.1.0/examples/basic/db/schema/00_common/extensions.sql +9 -0
  96. fraiseql_confiture-0.1.0/examples/basic/db/schema/10_tables/comments.sql +25 -0
  97. fraiseql_confiture-0.1.0/examples/basic/db/schema/10_tables/posts.sql +30 -0
  98. fraiseql_confiture-0.1.0/examples/basic/db/schema/10_tables/users.sql +27 -0
  99. fraiseql_confiture-0.1.0/examples/basic/db/seeds/README.md +135 -0
  100. fraiseql_confiture-0.1.0/examples/basic/db/seeds/common/00_users.sql +8 -0
  101. fraiseql_confiture-0.1.0/examples/basic/db/seeds/development/00_posts.sql +31 -0
  102. fraiseql_confiture-0.1.0/examples/basic/db/seeds/development/01_comments.sql +17 -0
  103. fraiseql_confiture-0.1.0/examples/basic/db/seeds/test/00_posts.sql +19 -0
  104. fraiseql_confiture-0.1.0/mkdocs.yml +114 -0
  105. fraiseql_confiture-0.1.0/pyproject.toml +157 -0
  106. fraiseql_confiture-0.1.0/python/confiture/__init__.py +45 -0
  107. fraiseql_confiture-0.1.0/python/confiture/cli/__init__.py +0 -0
  108. fraiseql_confiture-0.1.0/python/confiture/cli/main.py +720 -0
  109. fraiseql_confiture-0.1.0/python/confiture/config/__init__.py +0 -0
  110. fraiseql_confiture-0.1.0/python/confiture/config/environment.py +190 -0
  111. fraiseql_confiture-0.1.0/python/confiture/core/__init__.py +0 -0
  112. fraiseql_confiture-0.1.0/python/confiture/core/builder.py +336 -0
  113. fraiseql_confiture-0.1.0/python/confiture/core/connection.py +120 -0
  114. fraiseql_confiture-0.1.0/python/confiture/core/differ.py +522 -0
  115. fraiseql_confiture-0.1.0/python/confiture/core/migration_generator.py +298 -0
  116. fraiseql_confiture-0.1.0/python/confiture/core/migrator.py +369 -0
  117. fraiseql_confiture-0.1.0/python/confiture/core/schema_to_schema.py +592 -0
  118. fraiseql_confiture-0.1.0/python/confiture/core/syncer.py +540 -0
  119. fraiseql_confiture-0.1.0/python/confiture/exceptions.py +141 -0
  120. fraiseql_confiture-0.1.0/python/confiture/integrations/__init__.py +0 -0
  121. fraiseql_confiture-0.1.0/python/confiture/models/__init__.py +0 -0
  122. fraiseql_confiture-0.1.0/python/confiture/models/migration.py +95 -0
  123. fraiseql_confiture-0.1.0/python/confiture/models/schema.py +203 -0
  124. fraiseql_confiture-0.1.0/python/db/environments/test.yaml +8 -0
  125. fraiseql_confiture-0.1.0/python/db/generated/schema_test.sql +65 -0
  126. fraiseql_confiture-0.1.0/python/db/schema/00_common/extensions.sql +3 -0
  127. fraiseql_confiture-0.1.0/python/db/schema/10_tables/posts.sql +10 -0
  128. fraiseql_confiture-0.1.0/python/db/schema/10_tables/users.sql +9 -0
  129. fraiseql_confiture-0.1.0/python/db/schema/20_views/user_stats.sql +9 -0
  130. fraiseql_confiture-0.1.0/python/tests/e2e/__init__.py +0 -0
  131. fraiseql_confiture-0.1.0/python/tests/integration/__init__.py +0 -0
  132. fraiseql_confiture-0.1.0/python/tests/unit/__init__.py +0 -0
  133. fraiseql_confiture-0.1.0/src/builder.rs +182 -0
  134. fraiseql_confiture-0.1.0/src/hasher.rs +209 -0
  135. fraiseql_confiture-0.1.0/src/lib.rs +20 -0
  136. fraiseql_confiture-0.1.0/tests/conftest.py +380 -0
  137. fraiseql_confiture-0.1.0/tests/e2e/test_cli.py +478 -0
  138. fraiseql_confiture-0.1.0/tests/integration/test_migrator.py +175 -0
  139. fraiseql_confiture-0.1.0/tests/integration/test_schema_to_schema.py +528 -0
  140. fraiseql_confiture-0.1.0/tests/integration/test_syncer.py +262 -0
  141. fraiseql_confiture-0.1.0/tests/integration/test_syncer_anonymization.py +412 -0
  142. fraiseql_confiture-0.1.0/tests/integration/test_syncer_progress.py +348 -0
  143. fraiseql_confiture-0.1.0/tests/performance/README.md +281 -0
  144. fraiseql_confiture-0.1.0/tests/performance/__init__.py +1 -0
  145. fraiseql_confiture-0.1.0/tests/performance/test_rust_speedup.py +165 -0
  146. fraiseql_confiture-0.1.0/tests/performance/test_syncer_benchmarks.py +433 -0
  147. fraiseql_confiture-0.1.0/tests/unit/test_builder.py +511 -0
  148. fraiseql_confiture-0.1.0/tests/unit/test_builder_comprehensive.py +339 -0
  149. fraiseql_confiture-0.1.0/tests/unit/test_builder_error_paths.py +125 -0
  150. fraiseql_confiture-0.1.0/tests/unit/test_cli_error_paths.py +271 -0
  151. fraiseql_confiture-0.1.0/tests/unit/test_config.py +169 -0
  152. fraiseql_confiture-0.1.0/tests/unit/test_connection.py +244 -0
  153. fraiseql_confiture-0.1.0/tests/unit/test_differ.py +346 -0
  154. fraiseql_confiture-0.1.0/tests/unit/test_init.py +122 -0
  155. fraiseql_confiture-0.1.0/tests/unit/test_migration.py +105 -0
  156. fraiseql_confiture-0.1.0/tests/unit/test_migration_edge_cases.py +58 -0
  157. fraiseql_confiture-0.1.0/tests/unit/test_migration_generator.py +367 -0
  158. fraiseql_confiture-0.1.0/tests/unit/test_migration_generator_edge_cases.py +178 -0
  159. fraiseql_confiture-0.1.0/tests/unit/test_migrator_discovery.py +190 -0
  160. fraiseql_confiture-0.1.0/tests/unit/test_migrator_edge_cases.py +191 -0
  161. fraiseql_confiture-0.1.0/tests/unit/test_schema_models.py +362 -0
@@ -0,0 +1,147 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ jobs:
15
+ test:
16
+ name: Test Python 3.11 on Linux
17
+ runs-on: ubuntu-latest
18
+
19
+ services:
20
+ postgres:
21
+ image: postgres:15
22
+ env:
23
+ POSTGRES_PASSWORD: postgres
24
+ POSTGRES_USER: postgres
25
+ POSTGRES_DB: confiture_test
26
+ options: >-
27
+ --health-cmd pg_isready
28
+ --health-interval 10s
29
+ --health-timeout 5s
30
+ --health-retries 5
31
+ ports:
32
+ - 5432:5432
33
+
34
+ steps:
35
+ - uses: actions/checkout@v4
36
+
37
+ - name: Set up Python
38
+ uses: actions/setup-python@v5
39
+ with:
40
+ python-version: '3.11'
41
+
42
+ - name: Install Rust toolchain
43
+ uses: dtolnay/rust-toolchain@stable
44
+
45
+ - name: Install uv
46
+ uses: astral-sh/setup-uv@v5
47
+
48
+ - name: Install dependencies
49
+ run: uv sync --all-extras
50
+
51
+ - name: Build Rust extension
52
+ run: uv run maturin develop
53
+
54
+ - name: Create test databases
55
+ run: |
56
+ PGPASSWORD=postgres psql -h localhost -U postgres -c "CREATE DATABASE confiture_test;"
57
+ PGPASSWORD=postgres psql -h localhost -U postgres -c "CREATE DATABASE confiture_source_test;"
58
+ PGPASSWORD=postgres psql -h localhost -U postgres -c "CREATE DATABASE confiture_target_test;"
59
+
60
+ - name: Run tests
61
+ env:
62
+ DATABASE_URL: postgresql://postgres:postgres@localhost:5432/confiture_test
63
+ SOURCE_DB_URL: postgresql://postgres:postgres@localhost:5432/confiture_source_test
64
+ TARGET_DB_URL: postgresql://postgres:postgres@localhost:5432/confiture_target_test
65
+ POSTGRES_HOST: localhost
66
+ POSTGRES_PORT: 5432
67
+ POSTGRES_USER: postgres
68
+ POSTGRES_PASSWORD: postgres
69
+ POSTGRES_DB: confiture_test
70
+ run: uv run pytest tests/ -v --cov=confiture --cov-report=xml --cov-report=term
71
+
72
+ - name: Upload coverage to Codecov
73
+ uses: codecov/codecov-action@v5
74
+ with:
75
+ file: ./coverage.xml
76
+ flags: unittests
77
+ name: codecov-umbrella
78
+ continue-on-error: true
79
+
80
+ lint:
81
+ name: Lint and format
82
+ runs-on: ubuntu-latest
83
+ steps:
84
+ - uses: actions/checkout@v4
85
+
86
+ - name: Set up Python
87
+ uses: actions/setup-python@v5
88
+ with:
89
+ python-version: '3.11'
90
+
91
+ - name: Install uv
92
+ uses: astral-sh/setup-uv@v5
93
+
94
+ - name: Install dependencies
95
+ run: uv sync --all-extras
96
+
97
+ - name: Run ruff check
98
+ run: uv run ruff check .
99
+
100
+ - name: Run ruff format check
101
+ run: uv run ruff format --check .
102
+
103
+ - name: Run mypy
104
+ run: uv run mypy python/confiture/
105
+
106
+ test-pure-python:
107
+ name: Test pure Python fallback
108
+ runs-on: ubuntu-latest
109
+ steps:
110
+ - uses: actions/checkout@v4
111
+
112
+ - name: Set up Python
113
+ uses: actions/setup-python@v5
114
+ with:
115
+ python-version: '3.11'
116
+
117
+ - name: Install uv
118
+ uses: astral-sh/setup-uv@v5
119
+
120
+ - name: Install dependencies and package (Python only)
121
+ run: |
122
+ uv sync --all-extras
123
+ # Remove Rust extension if built
124
+ rm -f python/confiture/_core.*.so || true
125
+
126
+ - name: Run tests (Python fallback)
127
+ run: |
128
+ uv run python -c "from confiture.core.builder import HAS_RUST; assert not HAS_RUST, 'Rust extension should not be loaded'; print('✓ Testing pure Python fallback')"
129
+ uv run pytest tests/unit/ -v -k "not performance"
130
+
131
+ cargo-test:
132
+ name: Cargo test (Rust)
133
+ runs-on: ubuntu-latest
134
+ steps:
135
+ - uses: actions/checkout@v4
136
+
137
+ - name: Install Rust toolchain
138
+ uses: dtolnay/rust-toolchain@stable
139
+
140
+ - name: Run cargo clippy
141
+ run: cargo clippy -- -D warnings
142
+
143
+ - name: Run cargo fmt check
144
+ run: cargo fmt --check
145
+
146
+ # Note: cargo test is skipped because PyO3 tests require Python context
147
+ # Python integration tests are run in the main test job with maturin
@@ -0,0 +1,115 @@
1
+ name: Build Wheels
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+ pull_request:
8
+ branches:
9
+ - main
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ build-wheels:
17
+ name: Build wheels on Linux
18
+ runs-on: ubuntu-latest
19
+
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: '3.11'
27
+
28
+ - name: Install Rust toolchain
29
+ uses: dtolnay/rust-toolchain@stable
30
+
31
+ - name: Install maturin
32
+ run: pip install maturin
33
+
34
+ - name: Build wheels
35
+ run: maturin build --release --out dist
36
+
37
+ - name: Upload wheels
38
+ uses: actions/upload-artifact@v4
39
+ with:
40
+ name: wheels-linux-py311
41
+ path: dist/*.whl
42
+
43
+ build-sdist:
44
+ name: Build source distribution
45
+ runs-on: ubuntu-latest
46
+ steps:
47
+ - uses: actions/checkout@v4
48
+
49
+ - name: Set up Python
50
+ uses: actions/setup-python@v5
51
+ with:
52
+ python-version: '3.11'
53
+
54
+ - name: Install maturin
55
+ run: pip install maturin
56
+
57
+ - name: Build sdist
58
+ run: maturin sdist --out dist
59
+
60
+ - name: Upload sdist
61
+ uses: actions/upload-artifact@v4
62
+ with:
63
+ name: sdist
64
+ path: dist/*.tar.gz
65
+
66
+ test-wheels:
67
+ name: Test wheels
68
+ needs: [build-wheels]
69
+ runs-on: ubuntu-latest
70
+
71
+ steps:
72
+ - uses: actions/checkout@v4
73
+
74
+ - name: Set up Python
75
+ uses: actions/setup-python@v5
76
+ with:
77
+ python-version: '3.11'
78
+
79
+ - name: Download wheels
80
+ uses: actions/download-artifact@v4
81
+ with:
82
+ name: wheels-linux-py311
83
+ path: dist
84
+
85
+ - name: Install wheel
86
+ run: pip install --find-links dist confiture
87
+
88
+ - name: Test import
89
+ run: python -c "from confiture import _core; print('✓ Rust extension available')"
90
+
91
+ - name: Test CLI
92
+ run: confiture --help
93
+
94
+ publish:
95
+ name: Publish to PyPI
96
+ needs: [build-wheels, build-sdist, test-wheels]
97
+ runs-on: ubuntu-latest
98
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
99
+ environment:
100
+ name: pypi
101
+ url: https://pypi.org/p/confiture
102
+ permissions:
103
+ id-token: write
104
+
105
+ steps:
106
+ - name: Download all artifacts
107
+ uses: actions/download-artifact@v4
108
+ with:
109
+ path: dist
110
+ merge-multiple: true
111
+
112
+ - name: Publish to PyPI
113
+ uses: pypa/gh-action-pypi-publish@release/v1
114
+ with:
115
+ packages-dir: dist/
@@ -0,0 +1,70 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+
23
+ # Virtual environments
24
+ venv/
25
+ ENV/
26
+ env/
27
+ .venv
28
+
29
+ # uv
30
+ .uv/
31
+ uv.lock
32
+
33
+ # Testing
34
+ .pytest_cache/
35
+ .coverage
36
+ coverage.json
37
+ htmlcov/
38
+ .tox/
39
+ .hypothesis/
40
+
41
+ # IDEs
42
+ .vscode/
43
+ .idea/
44
+ *.swp
45
+ *.swo
46
+ *~
47
+
48
+ # OS
49
+ .DS_Store
50
+ Thumbs.db
51
+
52
+ # Project specific
53
+ db/generated/
54
+ *.db
55
+ *.sqlite
56
+ *.sql.bak
57
+
58
+ # Rust (Phase 2)
59
+ target/
60
+ Cargo.lock
61
+
62
+ # Documentation
63
+ docs/_build/
64
+ site/
65
+
66
+ # Internal development notes (do not commit)
67
+ *ANALYSIS*.md
68
+ *_ANALYSIS.md
69
+ RUST_BINDINGS.md
70
+ SEED_DATA_ANALYSIS.md
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,164 @@
1
+ # Changelog
2
+
3
+ All notable changes to Confiture will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+ - GitHub Actions CI/CD for multi-platform wheel building
12
+ - Automated PyPI publishing via trusted publisher
13
+ - CI workflow for continuous testing across platforms
14
+
15
+ ## [0.2.0-alpha] - 2025-10-11
16
+
17
+ ### Added
18
+ - **Rust performance layer** with PyO3 bindings (Phase 2)
19
+ - Fast schema builder using parallel file I/O (rayon)
20
+ - Fast SHA256 hashing (30-60x faster than Python)
21
+ - Graceful fallback to Python when Rust unavailable
22
+ - Performance benchmarks in `tests/performance/`
23
+ - Maturin build system for binary wheels
24
+ - Support for Python 3.11, 3.12, 3.13
25
+ - Comprehensive test coverage (212 tests, 91.76%)
26
+
27
+ ### Changed
28
+ - `SchemaBuilder.build()` now uses Rust for 10-50x speedup
29
+ - `SchemaBuilder.compute_hash()` now uses Rust for 30-60x speedup
30
+ - Build system migrated from hatchling to maturin
31
+ - Version bumped to 0.2.0-alpha
32
+
33
+ ### Performance
34
+ - Schema building: 5-10x faster with Rust
35
+ - Hash computation: 30-60x faster with Rust
36
+ - Parallel file operations on multi-core systems
37
+
38
+ ### Documentation
39
+ - Added PHASE2_SUMMARY.md (Rust layer documentation)
40
+ - Added performance benchmarking guide
41
+ - Updated README with Rust installation notes
42
+
43
+ ## [0.1.0-alpha] - 2025-10-11
44
+
45
+ ### Added
46
+ - **Core schema builder** (Medium 1: Build from DDL)
47
+ - Environment configuration system with YAML
48
+ - SQL file discovery and concatenation
49
+ - Deterministic file ordering (alphabetical)
50
+ - Schema hash computation (SHA256)
51
+ - File exclusion filtering
52
+ - Multiple include directories support
53
+ - Relative path calculation for nested structures
54
+
55
+ ### Added - CLI Commands
56
+ - `confiture init` - Initialize project structure
57
+ - `confiture build` - Build schema from DDL files
58
+ - `--env` flag for environment selection
59
+ - `--output` flag for custom output path
60
+ - `--show-hash` flag for schema hash display
61
+ - `--schema-only` flag to exclude seed data
62
+
63
+ ### Added - Migration System
64
+ - Migration base class with up/down methods
65
+ - Migration executor with transaction support
66
+ - Migration discovery and tracking
67
+ - Schema diff detection (basic)
68
+ - Migration generator from schema diffs
69
+ - Migration status command
70
+ - Version sequencing
71
+
72
+ ### Added - Testing
73
+ - 212 unit tests with 91.76% coverage
74
+ - Integration test framework
75
+ - Test fixtures for schema files
76
+ - Comprehensive error path testing
77
+ - Edge case coverage
78
+
79
+ ### Added - Configuration
80
+ - Environment config (db/environments/*.yaml)
81
+ - Include/exclude directory patterns
82
+ - Database URL configuration
83
+ - Project directory support
84
+
85
+ ### Added - Documentation
86
+ - README with quick start guide
87
+ - PHASES.md with development roadmap
88
+ - CLAUDE.md with AI development guide
89
+ - PRD.md with product requirements
90
+ - Code examples in examples/
91
+
92
+ ### Infrastructure
93
+ - Python 3.11+ support
94
+ - pytest test framework
95
+ - ruff linting and formatting
96
+ - mypy type checking
97
+ - pre-commit hooks
98
+ - uv package manager integration
99
+
100
+ ## [0.0.1] - 2025-10-10
101
+
102
+ ### Added
103
+ - Initial project structure
104
+ - Basic package scaffolding
105
+ - Development environment setup
106
+
107
+ ---
108
+
109
+ ## Version History Summary
110
+
111
+ | Version | Date | Key Features |
112
+ |---------|------|--------------|
113
+ | 0.2.0-alpha | 2025-10-11 | Rust performance layer, 10-50x speedup |
114
+ | 0.1.0-alpha | 2025-10-11 | Core schema builder, CLI, migrations |
115
+ | 0.0.1 | 2025-10-10 | Initial setup |
116
+
117
+ ## Migration Guide
118
+
119
+ ### From 0.1.0 to 0.2.0
120
+
121
+ No breaking changes! Upgrade is seamless:
122
+
123
+ ```bash
124
+ pip install --upgrade confiture
125
+ ```
126
+
127
+ **What's New:**
128
+ - Rust extension auto-detected and used for performance
129
+ - Falls back to Python if Rust unavailable
130
+ - All existing code continues to work unchanged
131
+
132
+ **To verify Rust extension:**
133
+ ```python
134
+ from confiture.core.builder import HAS_RUST
135
+ print(f"Rust available: {HAS_RUST}")
136
+ ```
137
+
138
+ **Performance improvements:**
139
+ - `SchemaBuilder.build()`: 5-10x faster
140
+ - `SchemaBuilder.compute_hash()`: 30-60x faster
141
+
142
+ ## Deprecations
143
+
144
+ No deprecated features yet.
145
+
146
+ ## Security
147
+
148
+ No security advisories yet.
149
+
150
+ To report security vulnerabilities, please email security@fraiseql.com or create a private security advisory on GitHub.
151
+
152
+ ---
153
+
154
+ ## Links
155
+
156
+ - [GitHub Repository](https://github.com/fraiseql/confiture)
157
+ - [Issue Tracker](https://github.com/fraiseql/confiture/issues)
158
+ - [PyPI Package](https://pypi.org/project/confiture/)
159
+ - [Documentation](https://github.com/fraiseql/confiture)
160
+ - [FraiseQL](https://github.com/fraiseql/fraiseql)
161
+
162
+ ---
163
+
164
+ *Making jam from strawberries, one version at a time.* 🍓