#CI/CD
10 posts
GitHub Actions #10 Operations Patterns: Path Filters, Concurrency, Debugging, and Cost Review
Waking only the workflows for changed paths in a monorepo with paths filters — and where they fall short; how to decide on concurrency groups and cancel-in-progress to clean up overlapping runs; and why timeout-minutes should be a default habit. We also cover debugging tools like debug logs and re-runs, plus cost review on the usage screen, gathering the patterns of day-to-day operations to close out the series.
GitHub Actions #8 Self-Hosted Runners: When to Adopt, Registration, and Security Principles
Three situations where hosted runners fall short — internal network access, cost, and special hardware — organized into adoption criteria, plus the registration procedure and routing jobs with labels. We cover why self-hosted runners must never be connected to public repositories, the ephemeral runner operating principle, and actions-runner-controller for auto-scaling runners on Kubernetes.
GitHub Actions #5 Reuse: Composite Actions and Reusable Workflows
Two ways to turn the step bundles repeated across workflows and repositories into components. We cover how to write action.yml for a composite action that packages a bundle of steps, reusable workflows that expose an entire job via workflow_call with inputs and secrets passing, the criteria for choosing between the two, and the pattern of standardizing on a shared repository at the organization level.
GitHub Actions #4 Matrix, Cache, and Artifacts: Combination Runs and Saving Time and Money
We expand a single job definition into combinations of versions and operating systems with the matrix strategy, covering the include, exclude, and fail-fast options, then cut dependency install time with the key and restore-keys design of actions/cache and the built-in cache options of the setup actions. We finish with artifacts for passing files between jobs — upload, download, and retention settings — all through the lens of reducing run time and runner cost.
GitHub Actions #3 Secrets, Variables, and Environments: secrets vs vars and Environment Approval Gates
The two channels for feeding secret and configuration values into workflows — secrets and vars — with the rule for choosing between them, and the priority across the organization, repository, and environment layers. We cover what log masking protects and why not to over-trust it, how environment protection rules put required reviewers and wait timers in front of deploys, and what the automatically issued GITHUB_TOKEN really is.
GitHub Actions #2 Core Syntax: Contexts, Expressions, if Conditions, and Passing Values
A systematic pass over workflow YAML syntax. We cover contexts like github, env, and steps along with expression syntax, if conditions with the success, failure, and always functions for running steps selectively, passing values between steps with GITHUB_OUTPUT, and wiring order and data between jobs with needs and outputs.
GitHub Actions #1 Anatomy of a Workflow: Events, Jobs, Runners, and Your First Run
Automating the tests and builds you have been repeating by hand on every push. We map out the five concepts that make up GitHub Actions — workflow, event, job, step, runner — write a first workflow that runs Python tests, and learn to read results in the Actions tab, add a status badge, survey the trigger events, and understand the runner free-tier basics.
Terraform Operations #1 Team Workflow: plan Review on PRs, apply via GitHub Actions
Local apply concentrates strong credentials on individual laptops and skips review — problems that surface fast on a team. This post builds the standard workflow with GitHub Actions: PRs get the plan output as a comment, and merging to main triggers apply in CI. We wire up OIDC role assumption, automate plan comments on PRs, and use concurrency to prevent simultaneous applies — the first step toward removing human hands from apply.
AWS in Practice #3: CI/CD — GitHub Actions + ECR + ECS
GitHub Actions without access keys via OIDC, ECR push, automatic Task Definition updates, ECS Service rolling deployments, deployment circuit breakers and auto-rollback, and a touch of CodeDeploy blue/green — a deployment flow that ends with a single git push.
Docker in Practice #4: Building Images in CI — GitHub Actions and BuildKit Cache
The standard for building and pushing Docker images in GitHub Actions. docker/build-push-action, BuildKit GHA cache (type=gha), multi-arch (amd64+arm64) builds, build-time secrets, and build-time optimization — all in a single workflow.