Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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: 1 addition & 1 deletion .bumpversion.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[bumpversion]
current_version = 0.1.0
current_version = 0.2.0
commit = False
tag = False
allow_dirty = True
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
__pycache__/
coverage.xml
*.py[cod]
*.pyo
.venv/
Expand Down
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
<!-- Auto generated. Run 'just release' in order to update -->

# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.2.0] - 2026-09-20

#### 🚀 Features

- xterm.js terminal output, scheduling, cancellation, and execution UX overhaul ([#7](https://github.com/burgdev/django-admin-runner/pull/7))
- **Live terminal output** — stdout/stderr render in an embedded, vendored xterm.js terminal (no CDN): ANSI colors and progress bars display as in a real terminal, replacing the old ANSI-to-HTML conversion; cursor-based delta polling every 250 ms transfers only new characters regardless of output size
- **Scalable output storage** — append-only 512 KB `CommandOutputPart` rows with browser-cacheable sealed parts and a 500 MB retention cap per field (`ADMIN_RUNNER_MAX_OUTPUT`); deterministic terminal layout via `ADMIN_RUNNER_TERM_COLS`/`TERM_ROWS` (exported as `COLUMNS`/`LINES`) and per-command `flush_interval`
- **Scheduling** — interactive "Add schedule" admin UI (cron / interval / one-off) and declarative `@register_command(schedule=…)` via `CronSchedule` / `IntervalSchedule` / `ClockedSchedule`, materialized into django-q2's native periodic tasks with an overlap guard and one-off auto-disable
- **Cancellation & timeouts** — graceful Stop via the output-flush heartbeat escalating to Force Stop (Celery `revoke(terminate=True)`, django-q2 PID-targeted kill); new `TIMEOUT` status with Celery soft-limit mapping (detected by class name regardless of Celery's presence) and a stale-run sweeper that finalizes executions of dead workers
- **Execution page UX** — output/stderr/result tabs, rerun action prefilled with the original parameters, run labels, schedule filter, and status badges on a redesigned changelist

#### 🐛 Fixes

- Improve subtitle in admin view ([#6](https://github.com/burgdev/django-admin-runner/pull/6))
- Fixed parameter type parsing ([#5](https://github.com/burgdev/django-admin-runner/pull/5))

## [0.1.0] - 2026-04-08

### Features
Expand All @@ -11,3 +34,6 @@
- `CommandRunnerModelAdminMixin` for attaching run links to model admin pages
- Plain Django admin and Unfold admin support
- `CommandExecution` model with full audit trail

[0.2.0]: https://github.com/burgdev/django-admin-runner/compare/v0.1.0..v0.2.0
[0.1.0]: https://github.com/burgdev/django-admin-runner/releases/tag/v0.1.0
8 changes: 2 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "django-admin-runner"
version = "0.1.0"
version = "0.2.0"
description = "Run Django management commands from the admin with auto-generated forms and pluggable task runners"
readme = "README.md"
license = { text = "MIT" }
Expand Down Expand Up @@ -46,11 +46,7 @@ docs = [
"mkdocs-section-index>=0.3.9",
"mkdocstrings[python]>=0.22.0",
]
test = [
"pytest>=8.3.4",
"pytest-django>=4.10.0",
"pytest-cov>=4.1.0",
]
test = ["pytest>=8.3.4", "pytest-django>=4.10.0", "pytest-cov>=4.1.0"]

[build-system]
requires = ["hatchling"]
Expand Down
2 changes: 1 addition & 1 deletion src/django_admin_runner/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from django_admin_runner.forms import FileField, FileOrPathField, FileOrPathWidget, ImageField
from django_admin_runner.registry import register_command

__version__ = "0.1.0"
__version__ = "0.2.0"

__all__ = [
"register_command",
Expand Down
Loading