<-Back to Blog
DevOpsGitHub ActionsCI/CD

GitHub Actions Workflows I Use on Every Project

$author: Bio Lumbantoruan
$date: May 21, 2026

GitHub Actions Workflows I Use on Every Project


After setting up CI for dozens of projects, I've converged on a set of GitHub Actions workflows that I copy into every new repository. They're not fancy, but they catch the problems that matter before they reach production.


The Lint Workflow


Runs on every push. ESLint for JavaScript/TypeScript, Prettier for formatting, and type checking with tsc --noEmit. Fails fast — if the code doesn't type-check, don't bother running tests. This saves minutes on every CI run and enforces that type errors are never "we'll fix it later."


The Test Workflow


Runs on every push to main and every pull request. Matrix strategy across Node.js versions. Runs unit tests, integration tests, and coverage reports. Posts coverage to PRs as a comment so reviewers can see at a glance whether the change increases or decreases coverage.


The Build Workflow


Runs on pushes to main. Builds the production artifact, runs any build-time checks, and caches the build output. For Docker-based projects, this is where multi-stage builds happen. For static sites, this is where the export runs. The build artifact is what gets deployed — never rebuild during deployment.


The Deploy Workflow


Triggers on successful build workflow completion on main. Deploys the built artifact to the target environment. Uses environment protection rules for production — required reviewers, wait timers, and deployment locks. No one deploys to production by accident.

The best way to get a project done faster is to start sooner.
— Robert C. Martin (Uncle Bob)