Skip to main content

Lightweight automation tool designed to streamline the transition from development to distribution.

Project description

pyforge-deploy

License: MIT PyPI - Version PyPI - Downloads GitHub Actions Workflow Status

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.toml
  • requirements.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:

  1. Cleans old build artifacts
  2. Builds source and wheel distributions
  3. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyforge_deploy-0.3.6.tar.gz (25.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyforge_deploy-0.3.6-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

Details for the file pyforge_deploy-0.3.6.tar.gz.

File metadata

  • Download URL: pyforge_deploy-0.3.6.tar.gz
  • Upload date:
  • Size: 25.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for pyforge_deploy-0.3.6.tar.gz
Algorithm Hash digest
SHA256 db34789f9d3b1af9b8bae53a85ae08c21eeadc36b229f90b7b650094e472068b
MD5 4e0b548b036bf290ad964405a58a5526
BLAKE2b-256 7aff957a41ef90dc5fa22c6d804371fa893976a2111155aa39a261c86f9b15ff

See more details on using hashes here.

File details

Details for the file pyforge_deploy-0.3.6-py3-none-any.whl.

File metadata

  • Download URL: pyforge_deploy-0.3.6-py3-none-any.whl
  • Upload date:
  • Size: 20.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for pyforge_deploy-0.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 5758f7849804958d6d23ab187e7f7c98d65d6f2c76add2f9464cf99f13b1f579
MD5 866d8a355665f0e9d06afe5d10d67fcd
BLAKE2b-256 73b2bd22730fadfc8f943fe554a281d489f24ddc9320cd320cf65471e18cadee

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page