gitops-tick

Trigger the homelab GitOps deploy tick manually and read its result from the journal.

2|Updated Mar 3, 2026
One-click install
npx skills add https://github.com/DanielH2018/server --skill gitops-tick-danielh2018
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: gitops-tick
Source: https://github.com/DanielH2018/server/tree/main/.claude/skills/gitops-tick
Command: npx skills add https://github.com/DanielH2018/server --skill gitops-tick-danielh2018

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? The homelab's GitOps pipeline deploys on a 10-minute systemd timer, so a merged change waits for the next tick and a healthy run logs nothing, making it impossible to tell "ticked, nothing to do" from "did not tick at all" from the journal alone. ## Core Features & Use Cases - Manual tick trigger: Runs gitops_tick.sh on daniel-box to start gitops-deploy.service immediately via a polkit-authorized wrapper, executing the real fetch, CI-gate, fast-forward merge, deploy, health-gate, and rollback path. - Result interpretation: Prints last_run, hold_sha, and behind_since from /var/lib/gitops-deploy so a fresh last_run distinguishes an uneventful tick from a tick that never ran. - Concurrency and exit-code handling: Detects when a tick is joined to an already-running one, and surfaces exit code 75 (still running) or 3 (skipped for lock contention). - Use Case: After merging an urgent fix, run the tick by hand instead of waiting ten minutes, then confirm from last_run that the deploy actually executed. ## Quick Start Ask the agent to run ./scripts/deploy_tools/gitops_tick.sh on daniel-box and report the tick's journal output and last_run timestamp.

Frequently Asked Questions about gitops-tick

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I trigger a GitOps deploy manually instead of waiting for the timer?▼

Run ./scripts/deploy_tools/gitops_tick.sh on daniel-box to start gitops-deploy.service immediately. It executes the identical code path as the timer: fetch, CI gate, fast-forward merge, deploy, health gate, and rollback.

Why does the GitOps deploy journal show "No entries" after a run?▼

The deployer only logs on deferrals, alerts, or real deploys, so a healthy uneventful tick prints nothing. Check the last_run timestamp in /var/lib/gitops-deploy to distinguish "ticked, nothing to do" from "did not tick".

Can I run gitops_tick.sh while a deploy is already in progress?▼

Yes, but the tick is joined rather than duplicated. Systemd coalesces the request into the run already activating, and the wrapper detects this and reports it instead of starting a second deploy.

Why does systemctl start gitops-deploy.service fail with an authentication error?▼

It is a system unit, so unprivileged starts are refused with "Interactive authentication required". A polkit rule grants the deploy user only the start verb on this unit, which is why the wrapper script exists.

What do exit codes 75 and 3 from gitops_tick.sh mean?▼

Exit 75 means the tick was still running when the script stopped watching. Exit 3 means the tick was skipped due to lock contention, so nothing deployed and nothing alerted.

Is there a dry-run mode for the GitOps deploy tick?▼

No. The wrapper runs the identical code path as the timer, performing a real fetch, merge, deploy, health gate, and rollback. There is no rehearsal mode.