toolframe-sql-postgres 0.2.1__tar.gz → 0.2.2__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.
Files changed (39) hide show
  1. toolframe_sql_postgres-0.2.2/.github/workflows/compatibility.yml +85 -0
  2. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/.github/workflows/publish.yml +7 -11
  3. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/PKG-INFO +7 -4
  4. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/README.md +5 -2
  5. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/docs/releasing.md +11 -10
  6. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/pyproject.toml +2 -2
  7. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/uv.lock +1 -1
  8. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/.github/workflows/ci.yml +0 -0
  9. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/.github/workflows/postgres.yml +0 -0
  10. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/.github/workflows/quality.yml +0 -0
  11. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/.gitignore +0 -0
  12. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/.pre-commit-config.yaml +0 -0
  13. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/CONTRIBUTING.md +0 -0
  14. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/LICENSE +0 -0
  15. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/NOTICE +0 -0
  16. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/cchk.toml +0 -0
  17. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/docs/adr/0001-plugin-storage-boundary.md +0 -0
  18. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/docs/adr/0002-explicit-database-dialects.md +0 -0
  19. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/docs/adr/0003-application-database-boundary.md +0 -0
  20. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/docs/adr/0004-separate-provisioning-credentials.md +0 -0
  21. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/docs/adr/0005-pre-migration-database-backups.md +0 -0
  22. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/docs/development.md +0 -0
  23. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/docs/glossary.md +0 -0
  24. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/docs/operations.md +0 -0
  25. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/docs/storage-contract.md +0 -0
  26. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/scripts/check.py +0 -0
  27. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/scripts/check_branch_name.py +0 -0
  28. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/scripts/validate_release.py +0 -0
  29. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/src/toolframe_sql_postgres/__init__.py +0 -0
  30. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/src/toolframe_sql_postgres/backup.py +0 -0
  31. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/src/toolframe_sql_postgres/cli.py +0 -0
  32. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/src/toolframe_sql_postgres/config.py +0 -0
  33. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/src/toolframe_sql_postgres/plugin.py +0 -0
  34. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/src/toolframe_sql_postgres/provision.py +0 -0
  35. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/src/toolframe_sql_postgres/sql.py +0 -0
  36. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/tests/conftest.py +0 -0
  37. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/tests/test_first_party.py +0 -0
  38. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/tests/test_like_escape.py +0 -0
  39. {toolframe_sql_postgres-0.2.1 → toolframe_sql_postgres-0.2.2}/tests/test_storage.py +0 -0
@@ -0,0 +1,85 @@
1
+ name: SDK compatibility
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+ schedule:
8
+ - cron: '17 4 * * *'
9
+ workflow_dispatch:
10
+ workflow_call:
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ wheel:
17
+ name: Build the shared plugin wheel
18
+ runs-on: ubuntu-24.04
19
+ timeout-minutes: 10
20
+ steps:
21
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
22
+ with:
23
+ persist-credentials: false
24
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
25
+ with:
26
+ python-version: '3.14.7'
27
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
28
+ with:
29
+ version: '0.12.8'
30
+ enable-cache: false
31
+ - run: uv build --no-sources --wheel --out-dir build/compatibility-wheel
32
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
33
+ with:
34
+ name: compatibility-wheel
35
+ path: build/compatibility-wheel/*.whl
36
+ if-no-files-found: error
37
+ retention-days: 7
38
+
39
+ compatibility:
40
+ name: SDK ${{ matrix.sdk }}
41
+ needs: wheel
42
+ runs-on: ubuntu-24.04
43
+ timeout-minutes: 20
44
+ strategy:
45
+ fail-fast: false
46
+ matrix:
47
+ sdk: [minimum, latest]
48
+ steps:
49
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
50
+ with:
51
+ persist-credentials: false
52
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
53
+ with:
54
+ python-version: '3.14.7'
55
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
56
+ with:
57
+ version: '0.12.8'
58
+ enable-cache: false
59
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
60
+ with:
61
+ name: compatibility-wheel
62
+ path: build/compatibility-wheel
63
+ - name: Select the unchanged wheel
64
+ id: wheels
65
+ shell: bash
66
+ run: |
67
+ plugin=(build/compatibility-wheel/toolframe_sql_postgres-*.whl)
68
+ test "${#plugin[@]}" = 1
69
+ echo "plugin=${plugin[0]}" >> "$GITHUB_OUTPUT"
70
+ - name: Verify installed wheel and package tests
71
+ uses: toolframe/toolframe-sdk/.github/actions/plugin-compatibility@2e2a3d79f35fbdb04249e8351fe9c75fc2164269
72
+ with:
73
+ mode: ${{ matrix.sdk }}
74
+ wheel: ${{ steps.wheels.outputs.plugin }}
75
+ output: build/compatibility-${{ matrix.sdk }}
76
+ - name: Retain compatibility evidence
77
+ if: always()
78
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
79
+ with:
80
+ name: compatibility-${{ matrix.sdk }}
81
+ path: |
82
+ build/compatibility-${{ matrix.sdk }}/report.json
83
+ build/compatibility-${{ matrix.sdk }}/pytest.xml
84
+ if-no-files-found: warn
85
+ retention-days: 14
@@ -2,19 +2,12 @@ name: Publish Python distribution
2
2
 
3
3
  on:
4
4
  workflow_dispatch:
5
- inputs:
6
- index:
7
- description: Package index; run against the matching vVERSION tag
8
- type: choice
9
- options: [testpypi, pypi]
10
- default: testpypi
11
- required: true
12
5
 
13
6
  permissions:
14
7
  contents: read
15
8
 
16
9
  concurrency:
17
- group: publish-${{ inputs.index }}
10
+ group: publish-pypi
18
11
  cancel-in-progress: false
19
12
 
20
13
  jobs:
@@ -45,12 +38,15 @@ jobs:
45
38
  uses: ./.github/workflows/ci.yml
46
39
  secrets: inherit
47
40
 
41
+ compatibility:
42
+ uses: ./.github/workflows/compatibility.yml
43
+
48
44
  publish:
49
- needs: [release-tag, validate]
45
+ needs: [release-tag, validate, compatibility]
50
46
  runs-on: ubuntu-24.04
51
47
  timeout-minutes: 10
52
48
  environment:
53
- name: ${{ inputs.index }}
49
+ name: pypi
54
50
  permissions:
55
51
  contents: read
56
52
  id-token: write
@@ -62,4 +58,4 @@ jobs:
62
58
  - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
63
59
  with:
64
60
  packages-dir: dist/
65
- repository-url: ${{ inputs.index == 'testpypi' && 'https://test.pypi.org/legacy/' || 'https://upload.pypi.org/legacy/' }}
61
+ repository-url: https://upload.pypi.org/legacy/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: toolframe-sql-postgres
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Managed PostgreSQL stores for Toolframe plugins
5
5
  Project-URL: Homepage, https://github.com/toolframe/toolframe-sql-postgres
6
6
  Project-URL: Repository, https://github.com/toolframe/toolframe-sql-postgres
@@ -13,7 +13,7 @@ License-File: NOTICE
13
13
  Requires-Python: >=3.14
14
14
  Requires-Dist: pglast==8.4
15
15
  Requires-Dist: psycopg[binary]<4,>=3.3
16
- Requires-Dist: toolframe-sdk<0.5,>=0.4
16
+ Requires-Dist: toolframe-sdk<1,>=0.4.0
17
17
  Description-Content-Type: text/markdown
18
18
 
19
19
  # Toolframe PostgreSQL storage
@@ -40,7 +40,7 @@ Install the host and provider CLI from PyPI:
40
40
  ```sh
41
41
  uv venv --python 3.14.7 .venv
42
42
  uv pip install --python .venv/bin/python \
43
- toolframe-core==0.7.0 toolframe-sql-postgres==0.2.1
43
+ toolframe-core==0.7.0 toolframe-sql-postgres==0.2.2
44
44
  .venv/bin/toolframe-core --home ./app init
45
45
  ```
46
46
 
@@ -61,7 +61,7 @@ Add the provider to `app/toolframe.toml`:
61
61
 
62
62
  ```toml
63
63
  [plugins.sql-postgres]
64
- source = "pypi:toolframe-sql-postgres==0.2.1"
64
+ source = "pypi:toolframe-sql-postgres==0.2.2"
65
65
  enabled = true
66
66
 
67
67
  [bindings]
@@ -102,3 +102,6 @@ For release validation and Trusted Publisher setup, see [releasing](docs/releasi
102
102
  Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
103
103
 
104
104
  For development hooks and contribution rules, see [Contributing](CONTRIBUTING.md).
105
+
106
+ Plugin dependencies allow compatible SDK 0.x updates from the declared minimum.
107
+ See the [SDK compatibility policy](https://github.com/toolframe/toolframe-sdk/blob/main/docs/compatibility.md) for API guarantees and minimum/latest verification.
@@ -22,7 +22,7 @@ Install the host and provider CLI from PyPI:
22
22
  ```sh
23
23
  uv venv --python 3.14.7 .venv
24
24
  uv pip install --python .venv/bin/python \
25
- toolframe-core==0.7.0 toolframe-sql-postgres==0.2.1
25
+ toolframe-core==0.7.0 toolframe-sql-postgres==0.2.2
26
26
  .venv/bin/toolframe-core --home ./app init
27
27
  ```
28
28
 
@@ -43,7 +43,7 @@ Add the provider to `app/toolframe.toml`:
43
43
 
44
44
  ```toml
45
45
  [plugins.sql-postgres]
46
- source = "pypi:toolframe-sql-postgres==0.2.1"
46
+ source = "pypi:toolframe-sql-postgres==0.2.2"
47
47
  enabled = true
48
48
 
49
49
  [bindings]
@@ -84,3 +84,6 @@ For release validation and Trusted Publisher setup, see [releasing](docs/releasi
84
84
  Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
85
85
 
86
86
  For development hooks and contribution rules, see [Contributing](CONTRIBUTING.md).
87
+
88
+ Plugin dependencies allow compatible SDK 0.x updates from the declared minimum.
89
+ See the [SDK compatibility policy](https://github.com/toolframe/toolframe-sdk/blob/main/docs/compatibility.md) for API guarantees and minimum/latest verification.
@@ -19,13 +19,14 @@ metadata and licenses, runs Ruff and package tests against an installed wheel,
19
19
  and installs each distribution into a separate fresh consumer environment.
20
20
  Optional database/service integrations require their documented fixtures.
21
21
 
22
- Publish `toolframe-sdk==0.4.1` first. The coordinated order and native CLI channels are documented in
22
+ Publish any newly required SDK version before the plugin. Compatible Core or SDK
23
+ updates alone do not require a plugin release. The coordinated order and native CLI channels are documented in
23
24
  [Toolframe's release guide](https://github.com/toolframe/toolframe-core/blob/main/docs/releasing.md).
24
25
 
25
26
  ## Trusted Publishers
26
27
 
27
- Create GitHub environments named `testpypi` and `pypi`. On each corresponding
28
- package index, configure a normal or pending Trusted Publisher with these values:
28
+ Create a GitHub environment named `pypi`. On PyPI, configure a normal or
29
+ pending Trusted Publisher with these values:
29
30
 
30
31
  | Field | Value |
31
32
  | --- | --- |
@@ -33,7 +34,7 @@ package index, configure a normal or pending Trusted Publisher with these values
33
34
  | GitHub owner | `toolframe` |
34
35
  | GitHub repository | `toolframe-sql-postgres` |
35
36
  | Workflow filename | `publish.yml` |
36
- | Environment | `testpypi` or `pypi`, matching the index |
37
+ | Environment | `pypi` |
37
38
 
38
39
  If publishing from another owner, use that actual owner in the publisher binding.
39
40
  Follow [PyPI's Trusted Publishing guide](https://docs.pypi.org/trusted-publishers/using-a-publisher/).
@@ -49,7 +50,7 @@ sibling owner where the workflow exposes that variable.
49
50
  ## Publish and verify
50
51
 
51
52
  After the release commit and matching tag are available remotely, manually run
52
- `publish.yml` at `v0.2.1`, selecting `testpypi` first and then `pypi`.
53
+ `publish.yml` at the matching `v<project.version>` tag to publish to PyPI.
53
54
  A branch or mismatched tag is rejected. Downloaded files are the artifacts from
54
55
  that run; the publishing job does not rebuild them. Published files cannot be
55
56
  replaced under the same version.
@@ -58,11 +59,11 @@ After PyPI publication, verify a clean installation:
58
59
 
59
60
  ```sh
60
61
  uv venv --python 3.14.7 build/consumer
61
- uv pip install --python build/consumer/bin/python 'toolframe-sql-postgres==0.2.1'
62
+ uv pip install --python build/consumer/bin/python 'toolframe-sql-postgres==0.2.2'
62
63
  uv pip check --python build/consumer/bin/python
63
64
  ```
64
65
 
65
- TestPyPI does not mirror dependencies. Test the specific artifact against an
66
- explicit dependency source; a local or TestPyPI check alone does not demonstrate
67
- that production PyPI resolution works. Keep logs, hashes and exact revisions in
68
- CI artifacts or ignored local evidence directories.
66
+ Test the specific artifact with dependencies from PyPI. Local artifact checks
67
+ alone do not demonstrate that the published package resolves correctly from
68
+ PyPI. Keep logs, hashes and exact revisions in CI artifacts or ignored local
69
+ evidence directories.
@@ -4,14 +4,14 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "toolframe-sql-postgres"
7
- version = "0.2.1"
7
+ version = "0.2.2"
8
8
  description = "Managed PostgreSQL stores for Toolframe plugins"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
11
11
  license-files = ["LICENSE", "NOTICE"]
12
12
  authors = [{ name = "byfb", email = "62798989+byfb@users.noreply.github.com" }]
13
13
  requires-python = ">=3.14"
14
- dependencies = ["toolframe-sdk>=0.4,<0.5", "psycopg[binary]>=3.3,<4", "pglast==8.4"]
14
+ dependencies = ["toolframe-sdk>=0.4.0,<1", "psycopg[binary]>=3.3,<4", "pglast==8.4"]
15
15
 
16
16
  [project.urls]
17
17
  Homepage = "https://github.com/toolframe/toolframe-sql-postgres"
@@ -725,7 +725,7 @@ dev = [
725
725
 
726
726
  [[package]]
727
727
  name = "toolframe-sql-postgres"
728
- version = "0.2.1"
728
+ version = "0.2.2"
729
729
  source = { editable = "." }
730
730
  dependencies = [
731
731
  { name = "pglast" },