An alternative to Terraform for SQL databases without using a state.
Project description
Publishing Instructions
Prereqs
- PyPI account (+ TestPyPI account for the dry run)
- API token from https://pypi.org/manage/account/token/ — start with an account-scoped token (project-scoped tokens only work after the project exists on PyPI)
- Both package names available: check https://pypi.org/project/sqliac/ and https://pypi.org/project/sqliac-snowflake/
1. Lock the dependency before publishing
Your tool.uv.sources workspace links (sqliac = { workspace = true }) only resolve locally — outside the workspace, pip/uv fall back to dependencies = ["sqliac"] with no version bound. Pin it now, or a future core release can silently break the published adapter wheel with nothing to stop it:
# sqliac_adapters/sqliac_snowflake/pyproject.toml
dependencies = [
"sqliac>=0.1.0,<0.2",
"snowflake-connector-python[secure-local-storage]",
"cryptography",
]
2. Build both from the workspace root
uv build only builds the root project by default in a workspace — target each member explicitly:
rm -rf dist/
uv build --package sqliac
uv build --package sqliac-snowflake
ls dist/ # expect 4 files: sdist + wheel × 2 packages
3. Dry run on TestPyPI first
This is the step that actually catches the entry-point bug from earlier — TestPyPI install is the only way to confirm sqliac-snowflake resolves outside the workspace, since local dev never exercises the plugin-discovery path for real.
export UV_PUBLISH_TOKEN=<testpypi-token>
uv publish --publish-url https://test.pypi.org/legacy/ dist/sqliac-0.1.0*
uv publish --publish-url https://test.pypi.org/legacy/ dist/sqliac_snowflake-0.1.0*
Verify in a throwaway venv:
uv venv /tmp/sqliac-check && source /tmp/sqliac-check/bin/activate
pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ sqliac-snowflake
sqliac list # must print "snowflake" — confirms the entry point resolves outside the workspace
--extra-index-url is needed because your real dependencies (jinja2, snowflake-connector-python, etc.) aren't on TestPyPI.
4. Publish for real — core first
Order matters for the reason above, not for pip resolution (pip doesn't validate a dependency exists at publish time) — but publishing core first means anyone who installs the adapter mid-release-window gets a working dependency instead of a 404.
export UV_PUBLISH_TOKEN=<pypi-token>
uv publish dist/sqliac-0.1.0*
uv publish dist/sqliac_snowflake-0.1.0*
5. Verify the real thing
uv venv /tmp/sqliac-verify && source /tmp/sqliac-verify/bin/activate
pip install sqliac-snowflake
sqliac list
Strategic note, not tactical
Per rule #2 — manual token exports don't scale past release one. Once this works, move to a GitHub Actions workflow using PyPI Trusted Publishing (OIDC — no long-lived token to rotate or leak) triggered on tag push, running the same uv build + uv publish steps above for each package. That's the point where "publish two packages" stops being a thing a human remembers to do correctly in order, and becomes a thing that can't be done wrong.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sqliac-0.1.2.tar.gz.
File metadata
- Download URL: sqliac-0.1.2.tar.gz
- Upload date:
- Size: 36.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71058525fe24dc964553c70c6df549553607ac262462b072c819ccce86d6e855
|
|
| MD5 |
7eb8d970d2357f565f1cab59707277df
|
|
| BLAKE2b-256 |
e668e0903c2e504d1c329f0515229456abac2834d1c3d83745708453c0d13d33
|
File details
Details for the file sqliac-0.1.2-py3-none-any.whl.
File metadata
- Download URL: sqliac-0.1.2-py3-none-any.whl
- Upload date:
- Size: 38.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7785b04614cb89aee0da07924a001580959e4d35b05560f3216e72b4f79f3f02
|
|
| MD5 |
13e9bce46fd92db0a74a810597fd7277
|
|
| BLAKE2b-256 |
26e0b3348a4536db74789094ccba162ea2e512f4461396cc66fee774f2d74ae7
|