Back to blog
EngineeringDate unavailable· min read

Progress Stream Automation: From Gemini CLI to GitHub Actions

How we automated our entire content pipeline with GitHub Actions, Linear integration, and hardened CI—shipping real-time progress updates on every push to main.

Today we're shipping a fundamental upgrade to how StrugCity publishes progress: GitHub Actions now automatically creates stream entries and draft blog posts on every push to main. This replaces our deprecated Gemini CLI and closes the loop on content automation.

What Shipped

Six pull requests across two repositories (PRs #126, #127, #128, #123 in dream-team-strug; PRs #17, #19 in strug-enterprise-site) delivered a complete content automation stack. Every push to main now triggers a workflow that dispatches the sc-content-writer agent, which analyzes the changes and publishes a streamEntry (live) and blogPost (draft) to Sanity.

Two new tools shipped with this update: linear_update_issue and linear_create_comment. Agents can now self-close Linear issues and leave completion summaries—no more MCP dependency for issue lifecycle management.

CI hardening was critical. We added set -euo pipefail for strict error handling, secret validation to prevent empty tokens reaching Supabase, curl timeouts to avoid hanging workflows, EOFMARKER injection prevention, XML sanitization for safe task payloads, and a merge commit git diff fix that ensures accurate change detection.

Why It Matters

This isn't about automating busywork—it's about closing the feedback loop between engineering and storytelling. Every meaningful change now generates a content artifact within seconds of merging. Stream entries go live immediately. Blog drafts land in Sanity ready for polish.

The Linear integration is equally important. Agents can now complete their own work tickets—updating issue status and leaving structured summaries. This reduces context-switching for the team and creates a traceable record of agent-driven work.

The CI hardening prevents an entire class of silent failures. Strict error handling, timeout enforcement, and injection prevention mean we catch issues in CI rather than in production. The merge commit fix ensures we're always analyzing the right diff.

What's Next

Webhooks are registered on three repositories. As we expand coverage, we'll refine the content extraction logic—teaching agents to recognize patterns in commit messages, PR descriptions, and code diffs that signal high-value content.

We'll also iterate on the blog draft quality. Right now, agents produce solid scaffolding. With better prompts and retrieval context, they can generate publication-ready posts that need only light editorial review.

The update_mission_status tool registration fix unblocks all GTM roles—expect to see more autonomous execution across marketing, sales, and support workflows.

Follow along at strugcity.com/progress as we build in public.