Catalog PyPI
Back to packageRELEASE DETAILS

0.2.0

PyPI

action-aperture

Terminal UI for inspecting GitHub Actions logs

cigithub-actionslogspytesttestingtui
Published11 Feb 2026
Direct dependencies2
Transitive dependenciesNot calculated

README

Version 0.2.0 documentation

Action Aperture 🔍

Action Aperture is a terminal-based UI (TUI) for inspecting and analyzing GitHub Actions logs. View test results, warnings, coverage reports, and raw logs in an intuitive, keyboard-driven interface.

Preview

Features

  • 📊 Intelligent Log Parsing: Automatically detects and parses different log formats
  • 🧪 Pytest Support: Built-in parser for pytest logs with slowest tests, warnings, and coverage
  • 🚀 Fast Navigation: Keyboard shortcuts for quick browsing through workflows, runs, and jobs
  • 📋 Copy to Clipboard: Easily copy log sections for sharing or further analysis
  • 🔌 Extensible: Plugin-based architecture for adding support for more log types
  • 💻 GitHub CLI Integration: Uses gh CLI for seamless GitHub Actions access

Installation

uv tool install action-aperture

Or skip install entirely with:

uvx --from action-aperture actap

From source

gh repo clone williambdean/action-aperture
cd action-aperture
uv tool install .

Prerequisites

Usage

Basic Usage

Launch the TUI in the current repository:

actap

Specify a repository:

actap owner/repo

Advanced Options

Open a specific workflow run:

actap --run-id 123456789
actap --run-url https://github.com/owner/repo/actions/runs/123456789

Pre-select a specific job:

actap --run-id 123456789 --job-id 987654321

Environment Variables

Set a default repository with the APERTURE_REPO environment variable:

export APERTURE_REPO=owner/repo
actap

Keyboard Shortcuts

Navigation

  • j/k or ↑/↓: Navigate jobs
  • ←/→: Switch between log sections
  • t/T: Cycle through sections forward/backward
  • u/d: Page up/down in logs
  • Enter: Refresh current job

Views

  • F: Toggle fullscreen detail view
  • c: Copy current log section to clipboard

General

  • r: Refresh jobs list
  • Esc: Go back / Exit
  • q: Quit application

Supported Log Parsers

Pytest (Built-in)

Automatically detects pytest test logs and extracts:

  • Slowest Tests: Duration analysis for optimization
  • Warnings: Summary of all warnings
  • Coverage: Test coverage reports
  • Raw Logs: Full unprocessed output

Future Parsers

Action Aperture is designed to support multiple log formats. Planned additions include:

  • ESLint/Prettier logs
  • TypeScript compiler output
  • Ruff/mypy linting results
  • Release logs
  • Custom workflow logs

Contributing

We welcome contributions! To add a new log parser:

  1. Create a new parser class in src/aperture/parsers/
  2. Inherit from LogParser base class
  3. Implement detection and parsing logic
  4. Register in src/aperture/parsers/__init__.py

See src/aperture/parsers/pytest.py for a complete example.

Development

Setup

gh repo fork williambdean/action-aperture
cd action-aperture
uv sync

Running from source

uv run python -m aperture.tui

Linting

uvx ruff check .
uvx ruff format .

License

MIT License - see LICENSE file for details.

Credits

Built with Textual by Will McGugan.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 2

Native requirements
2 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
textual
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
textual>=0.70.0runtime
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pytest>=8.0.0; extra == "dev"runtime

Distribution files

2 collected
action_aperture-0.2.0-py3-none-any.whl

bdist_wheel · 19.22 KB · Python py3

Source file
action_aperture-0.2.0.tar.gz

sdist · 44.34 KB · Python source

Source file

Repository

PENDING
williambdean/action-aperture

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 18:32 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:1fb04c5a11b9e25e14d31b11d8ed22eb3fc7f61e0943aa9e2fc754eb97f5e242

Other collected versions

View all collected versions →