#CI

12 posts

GitHub Actions #10 Operations Patterns: Path Filters, Concurrency, Debugging, and Cost Review
5 min read

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
4 min read

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
4 min read

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
5 min read

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
5 min read

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
5 min read

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
5 min read

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
4 min read

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.

Python Testing #7: Running Tests in CI — People Forget, Machines Don't
5 min read

Python Testing #7: Running Tests in CI — People Forget, Machines Don't

Build a CI workflow that runs pytest automatically with GitHub Actions. Covers uv caching, a Python version matrix, coverage comments on PRs, pre-commit, and separating slow tests to wrap up the series.

Testing #6 E2E with Playwright and CI Integration — Closing the Track
12 min read

Testing #6 E2E with Playwright and CI Integration — Closing the Track

The track's finale. E2E verifies real user flows in a real browser. Playwright setup, where locators fit, the page object pattern in brief, GitHub Actions CI integration, coverage reports, and a recap of all six posts.

AWS in Practice #3: CI/CD — GitHub Actions + ECR + ECS
10 min read

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
8 min read

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.