Metadata-Version: 2.4
Name: python-cicd-demo
Version: 0.1.0
Summary: Dummy package for exercising the scm-python release CI/CD + PyPI flow
Author-email: Palo Alto Networks <devrel@paloaltonetworks.com>
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/PaloAltoNetworks/python-cicd-demo
Project-URL: Repository, https://github.com/PaloAltoNetworks/python-cicd-demo
Project-URL: Issues, https://github.com/PaloAltoNetworks/python-cicd-demo/issues
Project-URL: Changelog, https://github.com/PaloAltoNetworks/python-cicd-demo/blob/main/CHANGELOG.md
Keywords: demo,cicd,release,pypi
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: build>=1.0; extra == "dev"
Requires-Dist: twine>=5.0; extra == "dev"
Dynamic: license-file

# python-cicd-demo

A throwaway Python package whose only purpose is to exercise the **release
CI/CD + PyPI flow** used by `scm-python`, end to end:

- **Version-driven release** — the version in `pyproject.toml` is the single
  source of truth. Merging a version bump into `main` triggers a publish.
- **CHANGELOG-driven notes** — the `## [X.Y.Z]` section becomes the GitHub
  Release body; a missing/empty section fails the release early.
- **PyPI Trusted Publishing (OIDC)** — no stored API tokens; publishing runs in
  an approval-gated `pypi` environment.

## Layout

```
cicd_demo/            # the (flat-layout) package
tests/                # a trivial pytest suite
pyproject.toml        # setuptools build + version of record
CHANGELOG.md          # Keep a Changelog; drives Release notes
.github/workflows/
  test.yml            # CI on develop
  release-python-sdk.yml  # version-triggered release to PyPI
```

## Local use

```bash
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest
cicd-demo            # prints: Hello, world! (python-cicd-demo 0.1.0)
```

## How to cut a release

1. Edit `pyproject.toml` → bump `version`.
2. In `CHANGELOG.md`, promote `## [Unreleased]` to `## [X.Y.Z] - <date>`.
3. Commit on `develop`, open a PR to `main`, merge it.
4. Approve the run in the `pypi` environment → it builds, publishes to PyPI,
   and cuts a `vX.Y.Z` tag + GitHub Release.

See `SETUP.md` for the one-time PyPI/GitHub configuration required first.
