7.5 KiB
7.5 KiB
Changelog
All notable changes to this project will be documented in this file.
[0.4.0] - 2026-06-21
Features
- Smart CI and release skipping for workflow-only changes
Bug Fixes
- 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)
Other
- V0.3.2
Refactor
- Split CI scripts, fix release PYTHONPATH, dynamic runner discovery
[0.3.2] - 2026-06-21
Bug Fixes
- Set PYTHONPATH=. for release.py to find scripts.ci module (#32)
Other
- Smart CI and release skipping for workflow-only changes
- Split CI scripts, fix release PYTHONPATH, dynamic runner discovery
[0.3.1] - 2026-06-21
Bug Fixes
- Use correct Gitea 1.26 wiki API endpoints
[0.3.0] - 2026-06-21
Features
- Implement documentation-as-code with wiki sync and doc-coverage
[0.2.2] - 2026-06-21
Bug Fixes
- Enforce tests pass before tagging a release
- Bypass commit-msg hook for release commits
[0.2.1] - 2026-06-21
Bug Fixes
- Strip git-cliff header from CHANGELOG.md updates
[0.2.0] - 2026-06-21
Features
- Fix 12 critical workflow gaps in release pipeline
Bug Fixes
- Release push permission and notify_failure label IDs
[Unreleased]
Added
- Automated semver versioning and releases:
scripts/release.py— CI script that uses git-cliff to calculate the next version from conventional commits, update version files, create a release commit, tag, and push. cliff.toml— git-cliff configuration for conventional commit parsing, semver bumping, and changelog generation.- Release workflow (
.gitea/workflows/release.yml) — triggers on push to master, runsscripts/release.pyto automatically version and tag releases. publish.pynow uses git-cliff to generate release notes for Gitea releases (falls back to generic message if git-cliff is not available).pyproject.tomlnow usesdynamic = ["version"]with setuptoolsattrto source version from__init__.py(single source of truth — release script only updates__init__.py).- Mandatory PR review step:
scripts/review_pr.py— CLI to post Gitea PR reviews (COMMENT, APPROVE, REQUEST_CHANGES) with inline comments via--comments-jsonor--comments-stdin. GiteaClient.get_pr_files,GiteaClient.get_pr_commits,GiteaClient.create_review— API methods for PR review workflow.VikunjaClient.get_task— fetch a single task by numeric ID.- PR title format:
GRM-N: <vikunja task title>(colon-separated, human-friendly). - Merge commit format:
GRM-N <conventional commit message>(space-separated, conventional). auto_merge.pynow extracts the conventional commit message from PR commits and constructs the merge title asGRM-N <conventional commit>.post_merge.pyextract_conventional_msgnow handles both legacy (GRM-N: <msg>) and current (GRM-N <msg>) merge commit formats.- Full PR workflow documented in
AGENTS.mdandREADME.md(Vikunja task → branch → implement → commit → PR → review → address comments → approve → merge).
Changed
- Parameterized all hardcoded configuration values as Ansible variables in
defaults/main.yml:gitea_runner_data_dir— Runtime data directorygitea_runner_config_dir— Config directorygitea_runner_binary_path— Binary install pathgitea_runner_prune_until— Prune age filtergitea_runner_prune_schedule— Prune timer schedulegitea_runner_prune_label— Docker label for pruninggitea_runner_service_restart_sec— systemd restart intervalgitea_runner_service_user— Service usergitea_runner_log_level— Runner log levelgitea_runner_container_label— Container labelgitea_runner_file— Runner metadata filedocker_gpg_key_path— Docker GPG key path
- Added
console_scriptsentry point inpyproject.toml(grm = "gitea_runner_manager.cli:cli"). - Added shared
molecule/common/prepare.ymlto eliminate duplicated prepare playbooks. - Extracted repeated systemd availability check into
tasks/systemd_check.yml. - Added idempotence checks to all Molecule scenarios.
- Comprehensive README overhaul with Architecture, Configuration, Development, Testing, and Troubleshooting sections.
- API URLs and repo configuration in
config.pyare now overridable via environment variables (GRM_GITEA_API_URL,GRM_VIKUNJA_API_URL,GRM_REPO_OWNER,GRM_REPO_NAME,GRM_VIKUNJA_PROJECT_ID). remove-runner.ymlnow disables lingering and removes subuid/subgid entries for complete cleanup.
Security
- Critical fix: Registration tokens and admin tokens are no longer passed via
--extra-varson the command line (CWE-214). Extra-vars are now written to a temporary JSON file with0600permissions and passed via--extra-vars @tempfile, which is deleted after execution. This prevents secrets from being visible in the process list (ps aux).
Changed
- Replaced legacy runner terminology with
gitea_runner/gitea-runner/Gitea Runner. - Updated default Docker image from
gitea/gitea_runnertogitea/runner. Makefilenow uses the installedgrmconsole script instead ofpython grm.pyproject.tomlruff and pyright target versions updated frompy311topy312to matchrequires-python = ">=3.12".BRANCH_PROTECTION_CONFIGupdated with correct Gitea Actions status check contexts (including(pull_request)suffix) andrequired_approvals: 0for auto-merge.CONVENTIONAL_REno longer matchesBREAKING CHANGEas a commit type (it is a footer, not a type).rootless_docker.ymlapt cache update now only runs when the Docker repo file changes (idempotent, but always refreshes on first add).service.ymlandprune.ymltemplate creation tasks are not guarded bydocker_rootless_setup(templates just create files, they don't need Docker; molecule tests setdocker_rootless_setup: falsebut still verify the service file exists).molecule_all.shnow sources the platform list fromdistribute_molecule.pyto avoid duplication.
Removed
- Deleted
setup.py(redundant withpyproject.toml). - Deleted
grmshell entrypoint script (replaced byconsole_scripts). - Deleted
initial-plan.mdandtests/integration/test_provision.py(dead code). - Removed empty
__init__.pyfiles fromtests/directories. - Removed unused
runner_validatedfact fromvalidate.yml. - Removed duplicate
prune.ymlandintegration_test.ymlincludes frominstall_runner.yml(already included frommain.yml). - Removed dead
tasks/config.yml(never included by any playbook). - Removed dead
templates/gitea-runner.service.j2(legacy system-level service, replaced by rootlessgitea-runner-user.service.j2). - Removed dead "Reload systemd" handler (system-level reload, never notified, wrong scope for user services).
- Removed dead
scripts/run_molecule_parallel.pyand its test (replaced bymolecule_ci_guard.py).
Fixed
- Molecule idempotence failures caused by non-idempotent service restart.
- Missing
/etc/dockerdirectory handling in Molecule tests. ansible-lintformatting warnings (yaml empty lines).- Verify playbooks now explicitly load role defaults so parameterized variables are available during verification.
- Duplicate execution of prune and integration test tasks during installation (were included from both
main.ymlandinstall_runner.yml). - apt cache update reporting
changedon every run due tocache_valid_time: 0.