Skip to main content

A simple Python library demonstrating how to publish packages to PyPI

Project description

publish-lib-ghp

PyPI version Python versions Tests Code Quality License: MIT

A professional Python library demonstrating best practices for packaging and publishing to PyPI using modern tools and automated CI/CD.

๐Ÿš€ Features

  • Professional packaging with Poetry and pyproject.toml
  • Automated CI/CD with GitHub Actions
  • Comprehensive testing with pytest and coverage reporting
  • Code quality enforcement with Black, isort, flake8, and mypy
  • Trusted publishing to PyPI (no API tokens required)
  • Semantic versioning with automated releases
  • Dynamic versioning using importlib.metadata
  • Security scanning with bandit
  • Pre-commit hooks for code quality

๐Ÿ“ฆ Installation

pip install publish-lib-ghp

๐Ÿ”ง Usage

from publish_lib_ghp import Greeting

# Create a greeting instance
greeting = Greeting()

# Basic hello
message = greeting.say_hello("World")
print(message)  # Output: Hello, World!

# Time-specific greetings
morning_msg = greeting.get_greeting_with_time("Alice", "morning")
print(morning_msg)  # Output: Good morning, Alice!

# Say goodbye
goodbye_msg = greeting.say_goodbye("Bob")
print(goodbye_msg)  # Output: Goodbye, Bob!

๐Ÿ› ๏ธ Development

Prerequisites

Setup

# Clone the repository
git clone https://github.com/ghpascon/publish_lib_ghp.git
cd publish_lib_ghp

# Install dependencies
poetry install

# Install pre-commit hooks
poetry run pre-commit install

Testing

# Run all tests
poetry run pytest

# Run tests with coverage
poetry run pytest --cov=src/publish_lib_ghp --cov-report=html

# Run specific test file
poetry run pytest tests/test_greeting.py

Code Quality

# Format code
poetry run black src tests
poetry run isort src tests

# Lint code
poetry run flake8 src tests

# Type checking
poetry run mypy src

# Run all quality checks
poetry run pre-commit run --all-files

Building

# Build the package
poetry build

# Check the build
poetry run twine check dist/*

๐Ÿ“‹ API Reference

Greeting Class

say_hello(name: str) -> str

Say hello to someone.

Parameters:

  • name (str): The name of the person to greet

Returns:

  • str: A greeting message

Raises:

  • ValueError: If name is empty or not a string

say_goodbye(name: str) -> str

Say goodbye to someone.

Parameters:

  • name (str): The name of the person to say goodbye to

Returns:

  • str: A goodbye message

Raises:

  • ValueError: If name is empty or not a string

get_greeting_with_time(name: str, time_of_day: str) -> str

Get a time-specific greeting.

Parameters:

  • name (str): The name of the person to greet
  • time_of_day (str): Time of day ('morning', 'afternoon', 'evening')

Returns:

  • str: A time-specific greeting message

Raises:

  • ValueError: If name is invalid or time_of_day is not recognized

๐Ÿš€ Release Process

This project uses automated releases via GitHub Actions. See RELEASE.md for detailed instructions.

Quick Release

# Update version
poetry version patch  # or minor/major

# Commit and tag
git add pyproject.toml
git commit -m "Bump version to v$(poetry version --short)"
git push origin main
git tag "v$(poetry version --short)"
git push origin "v$(poetry version --short)"

The CI/CD pipeline will automatically:

  1. Run tests across multiple Python versions
  2. Perform code quality checks
  3. Build the package
  4. Publish to PyPI

๐Ÿ“ Documentation

๐Ÿ—๏ธ Project Structure

publish_lib_ghp/
โ”œโ”€โ”€ .github/
โ”‚   โ””โ”€โ”€ workflows/          # GitHub Actions CI/CD pipelines
โ”œโ”€โ”€ src/
โ”‚   โ””โ”€โ”€ publish_lib_ghp/    # Main package code
โ”œโ”€โ”€ tests/                  # Test suite
โ”œโ”€โ”€ pyproject.toml         # Project configuration (single source of truth)
โ”œโ”€โ”€ README.md              # This file
โ”œโ”€โ”€ CHANGELOG.md           # Version history
โ”œโ”€โ”€ RELEASE.md             # Release process guide
โ”œโ”€โ”€ PUBLISHING.md          # Publishing guide
โ”œโ”€โ”€ CONTRIBUTING.md        # Contribution guidelines
โ”œโ”€โ”€ SECURITY.md            # Security policy
โ””โ”€โ”€ LICENSE                # MIT License

๐Ÿ” Security

This project follows security best practices:

  • โœ… No hardcoded secrets or API tokens
  • โœ… Trusted publishing to PyPI via GitHub Actions
  • โœ… Automated security scanning with bandit
  • โœ… Dependency vulnerability checking
  • โœ… Code signing and verification

See our Security Policy for details.

๐Ÿค Contributing

We welcome contributions! Please see our Contributing Guide for details.

Quick Start

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make your changes and add tests
  4. Run quality checks: poetry run pre-commit run --all-files
  5. Commit your changes: git commit -m 'Add amazing feature'
  6. Push to the branch: git push origin feature/amazing-feature
  7. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

๐Ÿ“Š Project Status

  • โœ… Active Development: This project is actively maintained
  • โœ… Production Ready: Suitable for production use
  • โœ… Well Tested: Comprehensive test coverage
  • โœ… Documented: Complete documentation available
  • โœ… Secure: Follows security best practices

Author: Gabriel Henrique Pascon
Email: gh.pascon@gmail.com
GitHub: @ghpascon

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

publish_lib_ghp-0.1.6.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

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

publish_lib_ghp-0.1.6-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file publish_lib_ghp-0.1.6.tar.gz.

File metadata

  • Download URL: publish_lib_ghp-0.1.6.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.0

File hashes

Hashes for publish_lib_ghp-0.1.6.tar.gz
Algorithm Hash digest
SHA256 f7770551f9d2e2fac6e31aa157f74fe4b50a5f64082a2ebdc32d2dfba7351a70
MD5 35883f60eafa1299da9306fbf76a47e8
BLAKE2b-256 4a24296a76ab7e35a29a6a2ad092b09eb050be6b40fb6564c3549095dda8633d

See more details on using hashes here.

File details

Details for the file publish_lib_ghp-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for publish_lib_ghp-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 af35ced286282ff0a4f2232d4e9c4e7652b6cc92d72de83bf70231fba6db3e78
MD5 7dcdb1258e6929e3a3e23f89bb9afb2b
BLAKE2b-256 82f4571cd37dfd51038d69090a0e140d211b74805cfd6f820ab5c66d363f5fc6

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