Skip to content

Contributing

Farukk57 edited this page Apr 19, 2026 · 1 revision

Contributing

Contributions are welcome. This is a personal homelab project but pull requests, bug reports, and feature suggestions are appreciated.

Reporting bugs

Open an issue at github.com/Farukk57/release-notifier/issues and include:

  • Your version (check docker inspect release-notifier | grep image)
  • Relevant log output (docker logs release-notifier)
  • Your containers.yml (remove any personal info)
  • What you expected vs what happened

Suggesting features

Open an issue with the enhancement label. Describe the use case, not just the feature — it helps to understand why it's needed.

Submitting a pull request

Setup

git clone https://github.com/Farukk57/release-notifier.git
cd release-notifier
cp env.example .env
cp config/containers.yml.example config/containers.yml
# Fill in your test values
docker compose up -d --build

Guidelines

  • Keep changes focused — one feature or fix per PR
  • Test your changes against a real container stack before submitting
  • Update README.md and the wiki if you add or change configuration options
  • Don't commit .env or config/containers.yml

Code style

  • Python 3.12+
  • Follow the existing patterns — singletons cached at module level, httpx for HTTP, no frameworks beyond Flask
  • Add log messages for anything that could help debug problems
  • Security-sensitive paths (URL construction, file writes, user input) should be validated

Project structure

release-notifier/
├── app/
│   ├── main.py          # entire application
│   ├── Dockerfile
│   └── requirements.txt
├── config/
│   └── containers.yml.example
├── .github/
│   └── workflows/
│       └── docker-publish.yml
├── docker-compose.yml       # development (builds locally)
├── docker-compose.hub.yml   # production (pulls from Docker Hub)
├── env.example
├── README.md
└── LICENSE

The entire application lives in app/main.py. It's intentionally kept as a single file to make it easy to audit and deploy.

Credits

Built with the assistance of Claude by Anthropic.

Clone this wiki locally