6.8 KiB
6.8 KiB
Changelog
All notable changes to this project will be documented in this file.
[0.6.1] - 2026-06-22
[0.6.1] - 2026-06-22
[0.6.1] - 2026-06-22
[0.6.1] - 2026-06-22
[0.6.1] - 2026-06-22
Bug Fixes
- Strengthen review process with deeper checks and structured checklist
- Close CI gaps with workflow dry-run, automated configure_repo, aligned timeouts
[0.6.0] - 2026-06-22
Features
- Add self-updating quality badges to README
- Enforce mandatory PR reviews with automated checks
Bug Fixes
- Bridge test suite gaps — lint scripts, include integration tests
- Badge regex patterns and doc_coverage double-percent
- Generate self-contained SVG badges instead of shields.io JSON
- Auto_merge handles single-token workflow (self-approval)
- Workflow timing, timeouts, status polling, and release classification
- API resilience with retry, idempotent releases, and graceful Vikunja errors
- Release pipeline determinism with lock, rebase, and consistent classification
- Enforce conventional commit check in automated PR review
- Molecule-tests matrix runner-index renders as empty for 0
- Use 1-based runner indices for Gitea Actions compatibility
- Molecule-tests static matrix and role_dir path fix
- Auto-merge label condition uses pull_request.labels
- Badges job runs after release to reflect actual state
- Revert review_pr.py to GiteaClient (tea v0.14.1 is interactive-only) (#70)
- Fix broken automation pipeline (auto-merge, Vikunja, CI enforcement)
Refactor
- Consolidate CI workflows to eliminate redundant runs
- Convert shell scripts and inline workflow scripts to Python
- Enforce script separation and document import rules
Revert
- Remove v0.6.0 release (no user-facing changes)
[0.5.0] - 2026-06-21
Packaging
pyproject.tomlnow usesdynamic = ["version"]with setuptoolsattrto source version from__init__.py(single source of truth)- Added
console_scriptsentry point (grm = "gitea_runner_manager.cli:cli")
Bug Fixes
- Arch Linux: pacman cache update now runs separately before package installation (fixes idempotence)
rootless_docker.yml: separatedupdate_cachefrom package installation task
Internal
- Added
GiteaClient.create_issue,GiteaClient.get_pr_files,GiteaClient.create_reviewAPI methods - Added
VikunjaClient.get_taskmethod - Config URLs and repo settings now overridable via environment variables
[0.4.0] - 2026-06-21
Rootless Docker Support
- Full rootless Docker installation and configuration via Ansible
docker_rootless_setupvariable controls whether rootless Docker tasks run- User setup tasks (subuid/subgid, lingering, dockerd-rootless)
- Proper gating of all Docker-dependent and
systemctl --usertasks
Runner Labels
--labelsoption ongrm install— specify runner labels (e.g.,--labels "ubuntu-latest:docker://node:20")- Labels passed through to runner config YAML
Security Fix (CWE-214)
- Critical: Registration tokens and admin tokens are no longer passed via
--extra-varson the command line - Extra-vars are now written to a temporary JSON file with
0600permissions and passed via--extra-vars @tempfile - This prevents secrets from being visible in the process list (
ps aux)
Configuration via Environment Variables
- API URLs and repo configuration in
config.pyare now overridable via environment variables:GRM_GITEA_API_URLGRM_VIKUNJA_API_URLGRM_REPO_OWNERGRM_REPO_NAMEGRM_VIKUNJA_PROJECT_ID
Ansible Role Improvements
- Dead code cleanup (removed
config.yml, legacy system-level service, duplicate task includes) remove-runner.ymlnow disables lingering and removes subuid/subgid entries for complete cleanup- Arch Linux:
gnupgpackage name fix, pacman cache handling - Docker APT repository: deb822 format, proper GPG handling, arch mapping
- Idempotence fixes for user_setup and download tasks
[0.3.0] - 2026-06-21
New CLI Options
--forceflag ongrm remove— remove a runner even when the host is unreachable (skips Ansible playbook, only deregisters via API)--urloption — override the Gitea URL for any command (useful for multiple Gitea instances)--ask-become-passis now the default behavior (no need to pass it explicitly)
Status Detection Fixes
grm listnow correctly retrieves runner status (was showing "unknown" for active runners)- Docker mode status detection via
docker inspect - Host/user context added to status output
Output Improvements
- Colorized output for better visual feedback (green/red/yellow)
- Translated operation reports for success and failure cases
- Dual logging:
click.echo()for user-facing messages,loggingfor debug GRM_LOG_LEVELenvironment variable for controlling verbosity- Full i18n support (all user-facing strings translated)
Internal Refactoring
- Validation moved from CLI layer to business layer
- Centralized API clients and HTTP status codes
- User-friendly Click errors with i18n
[0.2.0] - 2026-06-21
New CLI Commands
grm start <host>— start a runner's systemd servicegrm stop <host>— stop a runner's systemd servicegrm enable <host>— enable a runner to start on bootgrm disable <host>— disable a runner from starting on bootgrm status <host>— check runner service statusgrm remove <host>— deregister and remove a runnergrm list-runners— list all runners from the local registry
Runner Registry
- Runners are tracked in
~/.config/grm/runners.tomlfor simplified CLI usage - No need to specify
--url,--user,--keyfor every command — the registry remembers
Multi-Instance Support
- systemd template units (
gitea-runner@.service) for running multiple runners per host - Per-instance config and data directories
Ansible Role Improvements
- Parameterized all hardcoded configuration values as Ansible variables
- Idempotence fixes for repeated runs
- Runner config converted from TOML to YAML format
- Registration timeout to prevent indefinite hangs
- Docker container entrypoint override and working directory fix for
.runnerpersistence
[0.1.0] - 2026-06-21
Initial Release
The first release of GRM, a lean CLI for managing Gitea Actions runners via SSH.
CLI Commands
grm install <host>— install and register a Gitea Runner on a remote host via SSHgrm token— generate a registration token via the Gitea APIgrm list— list all registered runnersgrm update <host>— update a runner to the latest version
Ansible Role
- Installs Gitea Runner binary in binary or Docker mode
- Registers runner with Gitea instance
- Configures systemd service
- Supports Arch Linux, Ubuntu, and Debian
Features
- SSH-based remote execution via Ansible
- Automatic registration token generation
- Docker and binary installation modes
- Integration test verification after installation