Lightweight automation tool designed to streamline the transition from development to distribution.
Project description
pyforge-deploy
pyforge-deploy is a lightweight CLI that automates the Python release pipeline.
It simplifies the transition from development → distribution by handling version management, package builds, Docker image creation, PyPI publishing, and CI workflow setup through a single interface.
Why pyforge-deploy?
Publishing Python projects usually involves multiple manual steps:
bump version
build package
upload to PyPI
create Docker image
configure CI workflow
pyforge-deploy automates this workflow so you can release projects consistently and safely.
Features
Automated Release Workflow
Automates the common Python release pipeline:
version → build → publish → docker → CI
Smart Dependency Detection
Automatically detects project dependencies using:
- AST analysis
pyproject.tomlrequirements.txt
This information is used to generate production-ready Dockerfiles.
Version Management
Safely increments project versions (patch, minor, major) and validates them against the latest version on PyPI to avoid conflicts.
PyPI Deployment
Builds source and wheel distributions and securely publishes them to:
- PyPI
- TestPyPI
Docker Integration
Automatically generates a Dockerfile tailored to your project and builds the image using the detected dependencies and Python version.
GitHub Actions Integration
Generate a ready-to-use CI/CD workflow for automated releases with a single command.
Installation
Install from PyPI:
pip install pyforge-deploy
Docker must be installed and running for Docker-related features.
Quickstart
Initialize release automation for your project:
pyforge-deploy init
Build and publish a new release:
pyforge-deploy deploy-pypi --bump patch
Build a Docker image for the project:
pyforge-deploy docker-build
Usage
View all available commands:
pyforge-deploy --help
Initialize GitHub Workflow
Generate a CI/CD workflow file in your repository:
pyforge-deploy init
This creates:
.github/workflows/pyforge-deploy.yml
Build a Docker Image
Automatically detect project dependencies and build an image.
pyforge-deploy docker-build
Specify entry point and image tag:
pyforge-deploy docker-build \
--entry-point src/pyforge_deploy/cli.py \
--image-tag my-app:1.0.0
Deploy to PyPI
Build and publish a release.
Bump patch version automatically:
pyforge-deploy deploy-pypi --bump patch
Publish a specific version to TestPyPI:
pyforge-deploy deploy-pypi --version 2.1.0 --test
Inspect Project
View detected dependencies:
pyforge-deploy show-deps
Check current project version:
pyforge-deploy show-version
Configuration
PyPI Token
Publishing to PyPI requires an API token.
Create a .env file in your project root:
PYPI_TOKEN=pypi-your-token-here
Or export it as an environment variable:
export PYPI_TOKEN=pypi-your-token-here
GitHub Action
pyforge-deploy includes a reusable GitHub Action for automated releases.
After running:
pyforge-deploy init
A workflow file will be generated.
Example workflow:
name: PyForge Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
permissions:
contents: write
jobs:
release:
name: Build and Publish
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: PyForge Deploy
uses: ertanturk/pyforge-deploy@main
with:
pypi_deploy: 'true'
docker_build: 'true'
bump: 'patch'
target_branch: ${{ github.event.repository.default_branch }}
env:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
To use this workflow, add the following secrets in your repository:
PYPI_TOKEN
DOCKERHUB_USERNAME
DOCKERHUB_TOKEN
Navigate to:
Settings → Secrets and variables → Actions
Architecture
The tool is structured into modular components.
VersionEngine
Responsible for resolving and updating project versions.
Sources include:
pyproject.toml__about__.py.version_cache
It also fetches the latest version from PyPI to prevent version conflicts.
DockerBuilder
Detects project dependencies and Python version, renders a Dockerfile using a template, and builds the Docker image.
PyPIDistributor
Handles package distribution:
- Cleans old build artifacts
- Builds source and wheel distributions
- Uploads them to PyPI or TestPyPI using
twine
License
This project is licensed under the MIT License.
See the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
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 pyforge_deploy-0.4.6.tar.gz.
File metadata
- Download URL: pyforge_deploy-0.4.6.tar.gz
- Upload date:
- Size: 29.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f515d1baa0ee0c64557c5f73be72d468380713afb94b5fa5b137796e7e0c7690
|
|
| MD5 |
3a2323dc1aeee4177ee1378bf9129e68
|
|
| BLAKE2b-256 |
23cdc55b0cfd3721bd9714188a9ecbe1ce3db67fb08069683cd2da57195d9143
|
File details
Details for the file pyforge_deploy-0.4.6-py3-none-any.whl.
File metadata
- Download URL: pyforge_deploy-0.4.6-py3-none-any.whl
- Upload date:
- Size: 24.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85d28c654b74904cf12ee1b7bd1a7116d4ed024385f36f6a8c46d809a7540a4a
|
|
| MD5 |
64fb1da67f80826665310898551dc170
|
|
| BLAKE2b-256 |
6cecace9879010543dabb9e9f7d1237bf03ac579f9aa1894a017c860c0b841ba
|