Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
52f5a93
Initial plan
Copilot Mar 31, 2026
e84df5c
tools/lp-queue: add general structure with mock-up functions
Copilot Mar 31, 2026
bfc79be
tools/lp-queue: implement Launchpad queue operations and TUI wiring
Copilot Mar 31, 2026
d20e4ca
tools/lp-queue: simplify subprocess import in test
Copilot Mar 31, 2026
f4015eb
tools/lp-queue: make status bar visible with state-based styling
Copilot Apr 1, 2026
de0bf23
tools/lp-queue: fix displaying of the status bar
Hyask Apr 1, 2026
bf18a0a
tools/lp-queue: display connected user in status bar
Hyask Apr 1, 2026
aea51ea
tools/lp-queue: add toggleable debug panel logging all Launchpad queries
Copilot Apr 1, 2026
56c3dd4
tools/lp-queue: fix self.app.call_from_thread to self.call_from_threa…
Copilot Apr 1, 2026
2e6766c
plan: add confirmation modals and F2 series switcher
Copilot Apr 1, 2026
2d4bf19
tools/lp-queue: add confirmation modals for Accept/Reject and F2 seri…
Copilot Apr 1, 2026
aa6155d
tools/lp-queue: make status bar more robust to unexpected situations
Hyask Apr 2, 2026
0e6a20d
tools/lp-queue: actually show the 'tilde' shortcut
Hyask Apr 2, 2026
9dd547b
tools/lp-queue: fix series choice panel (better UI and exclude Obsole…
Hyask Apr 2, 2026
8387d0f
tools/lp-queue: cache series list, it doesn't change often
Hyask Apr 2, 2026
9b5fbec
tools/lp-queue: add Debian archive fallback for sync package debdiffs
Copilot Apr 2, 2026
fd3a947
tools/lp-queue: narrow exception types in Debian source fallback per …
Copilot Apr 2, 2026
6c425ce
Replace manual Debian archive parsing with Launchpad API
Copilot Apr 2, 2026
871c6b1
Address code review: improve log message and comment clarity
Copilot Apr 2, 2026
805cba8
tools/lp-queue: don't autoscroll the review diff
Hyask Apr 2, 2026
cec68d4
tools/lp-queue: optimize get_debdiff and be nice with LP
Hyask Apr 2, 2026
8617e98
tools/lp-queue: much more useful logging
Hyask Apr 2, 2026
82361c0
tools/lp-queue: also generate a diffoscope HTML output
Hyask Apr 2, 2026
1476123
tools/lp-queue: make use of some caching to be even nicer with LP
Hyask Apr 2, 2026
41fcaec
Fix tests to match refactored launchpad.py
Copilot Apr 2, 2026
b3fb615
Address review: add diffoscope-missing test, fix test name and docstring
Copilot Apr 2, 2026
307a381
tools/lp-queue: add alternative installation steps
Hyask Apr 2, 2026
25d38fa
Add diff syntax highlighter to ReviewScreen
Copilot Apr 2, 2026
81a2cd1
Use public API for lexer assertion in test
Copilot Apr 2, 2026
1ff8fcc
tools/lp-queue: add missing 'diffoscope' from installation instructions
Hyask Apr 2, 2026
272e0be
Add Author(s) column to queue table showing uploader/requestor/sponsor
Copilot Apr 2, 2026
59f7cc9
Add F3 queue status selector modal with Unapproved as default
Copilot Apr 3, 2026
0b7828b
tools/lp-queue: fix DataTable hiding other widget if too big
Hyask Apr 3, 2026
5b0db93
tools/lp-queue: fix is_sync() to actually get that without heuristics
Hyask Apr 13, 2026
8874799
Add 5-minute auto-refresh timer that only fires when no modal is open
Copilot Apr 15, 2026
85187cd
Move AUTO_REFRESH_SECONDS constant to top of QueueApp class
Copilot Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions tools/lp-queue/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.egg-info
.pytest_cache
71 changes: 71 additions & 0 deletions tools/lp-queue/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# LP Queue TUI

A small standalone TUI tool for working with the Ubuntu Launchpad upload queue.

## Features

- **List** all items in the upload queue for a given Ubuntu series
- **Review** packages by viewing the debdiff between the current archive version and the new upload
- **Accept** packages into the archive
- **Reject** packages with a comment explaining the reason

## Installation

```bash
sudo apt install python3-launchpadlib python3-textual
sudo apt install --no-install-recommends diffoscope-minimal
ln -s "$(realpath lp-queue)" ~/.local/bin/lp-queue
```
or
```bash
pip install .
```

For development:

```bash
pip install -e ".[dev]"
```

## Usage

Run the TUI:

```bash
lp-queue
```

Or as a Python module:

```bash
python -m lp_queue
```

## Keybindings

| Key | Action |
|------|-------------------------------------|
| `r` | Review selected package (debdiff) |
| `a` | Accept selected package |
| `j` | Reject selected package (with comment) |
| `F5` | Refresh the queue listing |
| `q` | Quit the application |

## Requirements

- Python 3.10+
- `launchpadlib` for Launchpad API access
- `textual` for the terminal UI framework
- Ubuntu archive access credentials (obtained via Launchpad OAuth)

## How It Works

1. On startup, the tool authenticates with Launchpad using `launchpadlib`
2. It fetches the current upload queue for the configured Ubuntu series
3. Items are displayed in a table with package name, version, component, etc.
4. You can review, accept, or reject packages using the keybindings above

For syncs from Debian, the review shows the debdiff comparing the Debian
version against what is currently in the Ubuntu archive. You can also visit
the Debian tracker at `https://tracker.debian.org/pkg/<package-name>` for
additional context.
6 changes: 6 additions & 0 deletions tools/lp-queue/lp-queue
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/bash

BASE_DIR="$(dirname "$(realpath "$0")")"

cd "$BASE_DIR"
exec python3 -m lp_queue
1 change: 1 addition & 0 deletions tools/lp-queue/lp_queue/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""TUI tool for managing the Ubuntu Launchpad upload queue."""
5 changes: 5 additions & 0 deletions tools/lp-queue/lp_queue/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"""Entry point for running the TUI as a module: python -m lp_queue."""

from lp_queue.app import main

main()
Loading