Conversation
Agent-Logs-Url: https://github.com/Warnes-Innovations/duckflow/sessions/605070d7-5d9a-4ae0-9392-e6bb78d0c143 Co-authored-by: warnes <6144863+warnes@users.noreply.github.com>
Agent-Logs-Url: https://github.com/Warnes-Innovations/duckflow/sessions/605070d7-5d9a-4ae0-9392-e6bb78d0c143 Co-authored-by: warnes <6144863+warnes@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Prepares the duckflow package and repository metadata for an initial PyPI release, including packaging metadata updates, release notes, and an automated publish workflow.
Changes:
- Update
pyproject.tomlproject metadata (license format, keywords, classifiers, URLs) and expanddevextras for release tooling. - Add an initial
CHANGELOG.mdfollowing Keep a Changelog format. - Add a GitHub Actions workflow to build and publish distributions to PyPI on GitHub Release publish, plus README install/badges updates.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
README.md |
Adds PyPI-facing badges and a primary pip install duckflow install path. |
pyproject.toml |
Updates packaging metadata for PyPI readiness and adds build/publish tooling to dev extras. |
CHANGELOG.md |
Introduces a v0.1.0 changelog entry and standard compare/release links. |
.github/workflows/publish.yml |
Adds CI workflow to build, check, and publish to PyPI via Trusted Publishing (OIDC). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| name: Build distribution | ||
| runs-on: ubuntu-latest | ||
| permissions: | ||
| contents: read |
There was a problem hiding this comment.
The workflow sets explicit permissions for the build job but only grants contents: read. actions/upload-artifact typically requires actions: write on the job’s GITHUB_TOKEN; without it, the artifact upload can fail with permission errors. Add actions: write (or remove the restrictive permissions block if repo defaults are acceptable).
| contents: read | |
| contents: read | |
| actions: write |
| environment: | ||
| name: pypi | ||
| url: https://pypi.org/project/duckflow/ | ||
| permissions: | ||
| id-token: write # required for Trusted Publisher (OIDC) | ||
|
|
||
| steps: | ||
| - name: Download distribution artifacts | ||
| uses: actions/download-artifact@v4 | ||
| with: |
There was a problem hiding this comment.
The publish job sets permissions to only id-token: write, which can leave the job without the actions: read permission needed for actions/download-artifact to fetch artifacts from the build job. Consider adding actions: read (and any other required scopes) alongside id-token: write.
| requires-python = ">=3.10" | ||
| license = { text = "AGPL-3.0-or-later" } | ||
| license = "AGPL-3.0-or-later" | ||
| authors = [ | ||
| { name = "Gregory R. Warnes" } | ||
| ] | ||
| keywords = [ | ||
| "dataflow", | ||
| "code-annotation", | ||
| "mermaid", | ||
| "static-analysis", | ||
| "architecture", | ||
| ] | ||
| classifiers = [ | ||
| "Development Status :: 3 - Alpha", | ||
| "Intended Audience :: Developers", | ||
| "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", | ||
| "Operating System :: OS Independent", | ||
| "Programming Language :: Python :: 3", |
There was a problem hiding this comment.
license was changed to an SPDX expression string and the license classifier was removed, but [build-system].requires still allows setuptools>=69. Your PR description notes behavior for setuptools>=77; if older setuptools versions are used, metadata generation may differ or fail. Either raise the minimum setuptools version in [build-system].requires to match the metadata expectations, or keep the older license/classifier format for broader compatibility.
Summary
Prepares the
duckflowpackage for submission to PyPI.Changes
pyproject.tomllicenseto use a SPDX string ("AGPL-3.0-or-later") — the modern format that avoids setuptools deprecation warnings and aligns with PEP 639License ::classifier (setuptools ≥ 77 auto-generates it from the SPDX expression)keywordsfor PyPI discoverability[project.urls]— Homepage, Source, Bug Tracker, ChangelogOperating System :: OS Independent,Python :: 3.13,Topic :: Software Development :: Documentation,Topic :: Software Development :: Libraries :: Python Modules,Typing :: Typedbuild>=1.0andtwine>=5.0to the[dev]extras so maintainers can build and verify locallyCHANGELOG.md(new).github/workflows/publish.yml(new)contents: read) builds andtwine checks the distribution, then uploads as a workflow artifactid-token: write) downloads the artifact and publishes viapypa/gh-action-pypi-publishREADME.mdpip install duckflowas the primary install path (with dev editable install as secondary)Verification
python -m build— clean build, no warningstwine check dist/*— PASSED for both wheel and sdistpytest— all 8 existing tests passNext steps before publishing
Warnes-Innovations/duckflowrepository targeting thepublish.ymlworkflow and thepypienvironmentpypienvironment in GitHub repository Settings → Environmentsgit tag v0.1.0 && git push origin v0.1.0) and publish it on GitHub to trigger the workflow