Docs · Plan · Report Bug · Request Feature
gh-skyline-python
Python-only MVP of GitHub Skyline generation.
This project can fetch GitHub contribution history, render ASCII output, and generate an STL skyline.
Example Output (ASCII)
╽ ╻ ╻
░ ░ ╻ ╻ ░ ╻╻ ╻
░╻░╻ ░╻ ╻ ╻ ╻░ ╻ ░ ░░ ░
╻╻░░░░ ░░ ╻ ╻░ ╻░╻ ╻░░ ╻ ┃░╻░╽▓░ ╻ ╻ ░╻╻╻
░░░░░░╻░░ ░╻ ╻░░╻ ░░░╻░░░╻░╻ ░░░▒░░░ ╻░╻░ ▒░░░
░░░░░░░░░░░░░░░░░░░░░░▓░░░░░░░ ░░░░░░▒ ░ ░░░░░ ▒░░░
Run this to print an ASCII preview only:
PYTHONPATH=src python -m gh_skyline --year 2024 --user JLSteenwyk --art-only
ASCII Key
╽high activity at column top┃medium activity at column top╻low activity at column top▓high activity in middle/base blocks▒medium activity in middle/base blocks░low activity in middle/base blocks.future dates (not yet reached)<space>zero contributions
Current Status
Python-Only Workflow
This project does not require Go for development, testing, or fixture generation. All parity artifacts and tests are generated/validated using Python tooling in this repo.
- MVP: ready for local skyline generation
- Test status:
52 passed - Not complete yet: final parity tuning and release cutover polish
See migration tracking in:
docs/MIGRATION_PLAN.mddocs/PROGRESS.md
Requirements
- Python 3.11+
- Network access to GitHub GraphQL API
- Auth via one of:
ghCLI auth session (gh auth login)GITHUB_TOKENorGH_TOKEN
Setup
cd gh-skyline-python
python3 -m venv venv
source venv/bin/activate
pip install -U pip
pip install -e .[dev]
Usage
Run as module:
PYTHONPATH=src python -m gh_skyline --year 2024 --user JLSteenwyk --output my-skyline
Or after editable install:
gh-skyline --year 2024 --user JLSteenwyk --output my-skyline
Multiple years
PYTHONPATH=src python -m gh_skyline --user JLSteenwyk --year 2019-2024 --output my-skyline
Full history (join year to now)
PYTHONPATH=src python -m gh_skyline --user JLSteenwyk --full --output my-skyline
ASCII preview only
PYTHONPATH=src python -m gh_skyline --year 2024 --user JLSteenwyk --art-only
Auth Notes
If gh is installed and on PATH, the tool uses it first.
If gh is not installed, set a token:
export GITHUB_TOKEN=YOUR_TOKEN
Optional GHES host override:
export GH_HOST=github.example.com
Testing
source venv/bin/activate
PYTHONPATH=src python -m pytest
Output
- Default output filename pattern:
{username}-{year|year-range}-github-skyline.stl - If
--outputomits.stl, the extension is added automatically.
3D Printing
The generated .stl file is ready for standard 3D-print workflows.
- Import the STL into a slicer (
PrusaSlicer,Cura,Bambu Studio, etc.). - Orient the model flat on the build plate.
- Slice to
gcodeand print.
Starter slicer settings:
- Layer height:
0.20 mm - Walls/perimeters:
2-3 - Top/bottom layers:
4-5 - Infill:
10-15%(grid or gyroid) - Supports:
Off(usually not needed) - Build plate adhesion:
Brimif corners lift
Metadata
Release files for gh-skyline-python 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| gh_skyline_python-0.1.1.tar.gz | 16.6 kB | With provenance | Details for gh_skyline_python-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| gh_skyline_python-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for gh_skyline_python-0.1.1-py3-none-any.whl |
Total release size: 36.6 kB
Release files / gh_skyline_python-0.1.1.tar.gz
| Download URL | gh_skyline_python-0.1.1.tar.gz |
|---|---|
| Size | 16.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
12d1fa4f9d21ce1edaaff64e0728979c652ce965aabf0bb32c25a589b1f6a88b
|
|
BLAKE2b-256 checksum How to use checksums |
6f20add872c2ae5d2451d9ab9d5e48649d775b7f074e4ec3176f591529dccbff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 23, 2026.
Transparency logRelease files / gh_skyline_python-0.1.1-py3-none-any.whl
| Download URL | gh_skyline_python-0.1.1-py3-none-any.whl |
|---|---|
| Size | 20.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a7bf3d28f3d88a11a539171383267cc151535c5791ed1bee6e081f519beee351
|
|
BLAKE2b-256 checksum How to use checksums |
ae9278408c5fe73ba6871c8f14cfbe10ff36060aed9b7e124dae4c95d82369ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 23, 2026.
Transparency logSecurity for gh-skyline-python 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for gh_skyline_python-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 23, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.