From 07b5c4475b74fe70b808309aa64844f9973704f9 Mon Sep 17 00:00:00 2001 From: lspeechify <289678208+lspeechify@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:46:10 +0100 Subject: [PATCH 1/6] chore: add context7.json with API URL and public key --- context7.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 context7.json diff --git a/context7.json b/context7.json new file mode 100644 index 0000000..c1b8e15 --- /dev/null +++ b/context7.json @@ -0,0 +1,4 @@ +{ + "url": "https://context7.com/speechifyinc/speechify-api-sdk-typescript", + "public_key": "pk_APO3PeuTVigMZ5P69udhE" +} From 489892b67428965e1c6e4dbfe0ec853e66a338cf Mon Sep 17 00:00:00 2001 From: lspeechify <289678208+lspeechify@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:46:46 +0100 Subject: [PATCH 2/6] chore: update .fernignore to include context7.json Added context7.json to the ignore list. --- .fernignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.fernignore b/.fernignore index fcd26fa..5b3cc70 100644 --- a/.fernignore +++ b/.fernignore @@ -1,2 +1,5 @@ # Specify files that shouldn't be modified by Fern -.github/workflows/ci.yml \ No newline at end of file +.github/workflows/ci.yml + +# ignore context7 config file +context7.json From f90d513d011e27ed2103171311b7136b04b58a14 Mon Sep 17 00:00:00 2001 From: lspeechify <289678208+lspeechify@users.noreply.github.com> Date: Mon, 15 Jun 2026 16:59:22 +0100 Subject: [PATCH 3/6] Update API URL in context7.json --- context7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/context7.json b/context7.json index c1b8e15..57f4636 100644 --- a/context7.json +++ b/context7.json @@ -1,4 +1,4 @@ { - "url": "https://context7.com/speechifyinc/speechify-api-sdk-typescript", + "url": "https://context7.com/speechifyinc/speechify-api-sdk-python", "public_key": "pk_APO3PeuTVigMZ5P69udhE" } From 23b1d6cfe0e7b4c9f5c48f4f46da0add88322dba Mon Sep 17 00:00:00 2001 From: lspeechify <289678208+lspeechify@users.noreply.github.com> Date: Wed, 17 Jun 2026 17:16:29 +0100 Subject: [PATCH 4/6] ci: replace ci.yml with release-please workflow - Add .github/workflows/release-please.yml combining compile + test + release-please + publish into a single workflow. - Add release-please-config.json (manifest mode, release-type python, include-v-in-tag false to match existing tag style, extra-files for client_wrapper.py). - Add .release-please-manifest.json seeded with 1.2.3. - Add an x-release-please-version marker comment to the X-Fern-SDK-Version header in src/speechify/core/client_wrapper.py so the generic updater can bump it on every release. - Update .fernignore: - keep .github/workflows/ci.yml so Fern does not recreate it after deletion - add new release-please files and CHANGELOG.md - add src/speechify/core/client_wrapper.py so the marker survives Fern regeneration - Delete .github/workflows/ci.yml. --- .fernignore | 14 +++++ .../workflows/{ci.yml => release-please.yml} | 57 ++++++++++++++----- .release-please-manifest.json | 3 + release-please-config.json | 17 ++++++ src/speechify/core/client_wrapper.py | 2 +- 5 files changed, 77 insertions(+), 16 deletions(-) rename .github/workflows/{ci.yml => release-please.yml} (50%) create mode 100644 .release-please-manifest.json create mode 100644 release-please-config.json diff --git a/.fernignore b/.fernignore index 5b3cc70..9c949d7 100644 --- a/.fernignore +++ b/.fernignore @@ -1,5 +1,19 @@ # Specify files that shouldn't be modified by Fern + +# Legacy CI workflow replaced by release-please.yml — keep listed so Fern +# does not regenerate the file after deletion. .github/workflows/ci.yml +# Release-please owns versioning, releases, and PyPI publish. +.github/workflows/release-please.yml +release-please-config.json +.release-please-manifest.json +CHANGELOG.md + +# release-please bumps the X-Fern-SDK-Version literal in this file via an +# inline `x-release-please-version` marker comment. Fern regen would strip the +# marker, so the file is owned outside of Fern. +src/speechify/core/client_wrapper.py + # ignore context7 config file context7.json diff --git a/.github/workflows/ci.yml b/.github/workflows/release-please.yml similarity index 50% rename from .github/workflows/ci.yml rename to .github/workflows/release-please.yml index 7d41c65..19d852a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/release-please.yml @@ -1,16 +1,24 @@ -name: ci +name: release-please + +on: + push: + branches: [master] + pull_request: + branches: [master] + +permissions: + contents: read -on: [push] jobs: compile: runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: 3.8 + python-version: "3.8" - name: Bootstrap poetry run: | curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 @@ -18,41 +26,60 @@ jobs: run: poetry install - name: Compile run: poetry run mypy . + test: runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: 3.8 + python-version: "3.8" - name: Bootstrap poetry run: | curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 - name: Install dependencies run: poetry install - - name: Test run: poetry run pytest -rP . - publish: + release-please: needs: [compile, test] - if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') + if: github.event_name == 'push' && github.ref == 'refs/heads/master' + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + outputs: + release_created: ${{ steps.release.outputs.release_created }} + tag_name: ${{ steps.release.outputs.tag_name }} + steps: + - name: Run release-please + id: release + uses: googleapis/release-please-action@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + config-file: release-please-config.json + manifest-file: .release-please-manifest.json + + publish: + needs: release-please + if: needs.release-please.outputs.release_created == 'true' runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: - python-version: 3.8 + python-version: "3.8" - name: Bootstrap poetry run: | curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1 - name: Install dependencies run: poetry install - - name: Publish to pypi + - name: Publish to PyPI run: | poetry config pypi-token.pypi ${{ secrets.PYPI_TOKEN }} poetry publish --build diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..b7298f8 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "1.2.3" +} diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..3d10873 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "release-type": "python", + "include-v-in-tag": false, + "include-component-in-tag": false, + "packages": { + ".": { + "package-name": "speechify-api", + "extra-files": [ + { + "type": "generic", + "path": "src/speechify/core/client_wrapper.py" + } + ] + } + } +} diff --git a/src/speechify/core/client_wrapper.py b/src/speechify/core/client_wrapper.py index 71accb2..1c0ca85 100644 --- a/src/speechify/core/client_wrapper.py +++ b/src/speechify/core/client_wrapper.py @@ -22,7 +22,7 @@ def get_headers(self) -> typing.Dict[str, str]: headers: typing.Dict[str, str] = { "X-Fern-Language": "Python", "X-Fern-SDK-Name": "speechify-api", - "X-Fern-SDK-Version": "1.2.3", + "X-Fern-SDK-Version": "1.2.3", # x-release-please-version } token = self._get_token() if token is not None: From 011172daa6a16e26834550e44562c5f14e054504 Mon Sep 17 00:00:00 2001 From: lspeechify <289678208+lspeechify@users.noreply.github.com> Date: Wed, 17 Jun 2026 10:00:41 +0100 Subject: [PATCH 5/6] fix(packaging): make the SDK installable from source [DRG-31] The generated pyproject carried a partial PEP-621 `[project]` table (name only, no version/dependencies) alongside the real `[tool.poetry]` config. PEP-621 build frontends (uv, pip git installs) validate `[project]` and fail ("project.version neither set nor in dynamic"), so `pip install git+...` / uv source installs were broken (PyPI wheels were unaffected). Drop the vestigial `[project]`/`[project.urls]` tables and move the URLs under `[tool.poetry.urls]` so poetry-core fully owns the metadata. `uv build` now produces sdist + wheel. NOTE: hand-patch of a generated file; the durable fix is upstream in the Fern python generator's pyproject emission. --- pyproject.toml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ef5b406..d29a471 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,3 @@ -[project] -name = "speechify-api" - [tool.poetry] name = "speechify-api" version = "1.2.3" @@ -39,7 +36,7 @@ packages = [ { include = "speechify", from = "src"} ] -[project.urls] +[tool.poetry.urls] Documentation = 'https://docs.speechify.ai/api-reference' Homepage = 'https://docs.speechify.ai' Repository = 'https://github.com/speechifyinc/speechify-api-sdk-python' From 80972f525cccf38ae6cdd6cc6871dff7282430e7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2026 16:48:53 +0000 Subject: [PATCH 6/6] chore(master): release 1.2.4 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 10 ++++++++++ pyproject.toml | 2 +- src/speechify/core/client_wrapper.py | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 CHANGELOG.md diff --git a/.release-please-manifest.json b/.release-please-manifest.json index b7298f8..8d35a90 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.2.3" + ".": "1.2.4" } diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ff8b0b7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +## [1.2.4](https://github.com/SpeechifyInc/speechify-api-sdk-python/compare/1.2.3...1.2.4) (2026-06-17) + + +### Bug Fixes + +* **packaging:** make the SDK installable from source [DRG-31] ([ebcf99d](https://github.com/SpeechifyInc/speechify-api-sdk-python/commit/ebcf99db9e60bab42756bcbb837ace03575b9dcf)) +* **packaging:** make the SDK installable from source [DRG-31] ([011172d](https://github.com/SpeechifyInc/speechify-api-sdk-python/commit/011172daa6a16e26834550e44562c5f14e054504)) +* update API URL in context7.json ([62e6ca8](https://github.com/SpeechifyInc/speechify-api-sdk-python/commit/62e6ca8bd459493a04702706ea55d747832aab87)) diff --git a/pyproject.toml b/pyproject.toml index d29a471..99ff485 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "speechify-api" -version = "1.2.3" +version = "1.2.4" description = "Official Speechify API SDK" readme = "README.md" authors = [ diff --git a/src/speechify/core/client_wrapper.py b/src/speechify/core/client_wrapper.py index 1c0ca85..6b0503b 100644 --- a/src/speechify/core/client_wrapper.py +++ b/src/speechify/core/client_wrapper.py @@ -22,7 +22,7 @@ def get_headers(self) -> typing.Dict[str, str]: headers: typing.Dict[str, str] = { "X-Fern-Language": "Python", "X-Fern-SDK-Name": "speechify-api", - "X-Fern-SDK-Version": "1.2.3", # x-release-please-version + "X-Fern-SDK-Version": "1.2.4", # x-release-please-version } token = self._get_token() if token is not None: