Files
grm/CHANGELOG.md
T
grm-ci-bot a0b03f01ef
Publish Release / publish (push) Failing after 15s
Sync Wiki / sync-wiki (push) Successful in 1m43s
release: v0.5.0
2026-06-22 00:00:01 +02:00

5.9 KiB

Changelog

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

[0.5.0] - 2026-06-21

Features

  • Add mandatory PR review step to workflow
  • Add automated semver versioning, tagging, and releases with git-cliff
  • Fix 12 critical workflow gaps in release pipeline
  • Implement documentation-as-code with wiki sync and doc-coverage
  • Smart CI and release skipping for workflow-only changes
  • Enforce commit naming conventions and workflow discipline

Bug Fixes

  • Move release commit skip check into release.py
  • Install git-cliff to user-writable dir and fix archlinux idempotence
  • Use mktemp for git-cliff extraction to avoid file conflicts
  • Use full path for git-cliff version check in install step
  • Handle same-version update in release.py
  • Skip commit when version file unchanged in release.py
  • Release push permission and notify_failure label IDs
  • Strip git-cliff header from CHANGELOG.md updates
  • Enforce tests pass before tagging a release
  • Bypass commit-msg hook for release commits
  • Use correct Gitea 1.26 wiki API endpoints
  • Set PYTHONPATH=. for release.py to find scripts.ci module (#32)
  • Use content_base64 for Gitea wiki API, add --verify flag (#33)
  • Wiki links, add --strict integrity check for wiki sync (#34)
  • Clean up infrastructure-only releases and fix release classification
  • Rewrite changelog and re-tag releases at user-facing milestones

Refactor

  • Split CI scripts, fix release PYTHONPATH, dynamic runner discovery

[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