v0.6.0 tag was deleted (no user-facing changes). Revert version in __init__.py and remove v0.6.0 section from CHANGELOG.md to match the actual state: latest tag/release is v0.5.0. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
144 lines
5.2 KiB
Markdown
144 lines
5.2 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to this project will be documented in this file.
|
|
|
|
## [0.5.0] - 2026-06-21
|
|
|
|
### Packaging
|
|
|
|
- `pyproject.toml` now uses `dynamic = ["version"]` with setuptools `attr` to source version from `__init__.py` (single source of truth)
|
|
- Added `console_scripts` entry 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`: separated `update_cache` from package installation task
|
|
|
|
### Internal
|
|
|
|
- Added `GiteaClient.create_issue`, `GiteaClient.get_pr_files`, `GiteaClient.create_review` API methods
|
|
- Added `VikunjaClient.get_task` method
|
|
- 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_setup` variable controls whether rootless Docker tasks run
|
|
- User setup tasks (subuid/subgid, lingering, dockerd-rootless)
|
|
- Proper gating of all Docker-dependent and `systemctl --user` tasks
|
|
|
|
### Runner Labels
|
|
|
|
- `--labels` option on `grm 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-vars` on the command line
|
|
- Extra-vars are now written to a temporary JSON file with `0600` permissions 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.py` are now overridable via environment variables:
|
|
- `GRM_GITEA_API_URL`
|
|
- `GRM_VIKUNJA_API_URL`
|
|
- `GRM_REPO_OWNER`
|
|
- `GRM_REPO_NAME`
|
|
- `GRM_VIKUNJA_PROJECT_ID`
|
|
|
|
### Ansible Role Improvements
|
|
|
|
- Dead code cleanup (removed `config.yml`, legacy system-level service, duplicate task includes)
|
|
- `remove-runner.yml` now disables lingering and removes subuid/subgid entries for complete cleanup
|
|
- Arch Linux: `gnupg` package 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
|
|
|
|
- `--force` flag on `grm remove` — remove a runner even when the host is unreachable (skips Ansible playbook, only deregisters via API)
|
|
- `--url` option — override the Gitea URL for any command (useful for multiple Gitea instances)
|
|
- `--ask-become-pass` is now the default behavior (no need to pass it explicitly)
|
|
|
|
### Status Detection Fixes
|
|
|
|
- `grm list` now 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, `logging` for debug
|
|
- `GRM_LOG_LEVEL` environment 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 service
|
|
- `grm stop <host>` — stop a runner's systemd service
|
|
- `grm enable <host>` — enable a runner to start on boot
|
|
- `grm disable <host>` — disable a runner from starting on boot
|
|
- `grm status <host>` — check runner service status
|
|
- `grm remove <host>` — deregister and remove a runner
|
|
- `grm list-runners` — list all runners from the local registry
|
|
|
|
### Runner Registry
|
|
|
|
- Runners are tracked in `~/.config/grm/runners.toml` for simplified CLI usage
|
|
- No need to specify `--url`, `--user`, `--key` for 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 `.runner` persistence
|
|
|
|
## [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 SSH
|
|
- `grm token` — generate a registration token via the Gitea API
|
|
- `grm list` — list all registered runners
|
|
- `grm 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
|