Workshop · 12 chapters · about 3 hours
GitHub Actions: CI/CD from zero.
Take a small app from no automation to tested on every push, released on every tag, shipped as a container and deployed to a live page. Real workflows, running in this repository, explained one chapter at a time.
Push or pull requeston: push, pull_request
Test · Node 22ubuntu-latest
Test · Node 24ubuntu-latest
Test · Node 22windows-latest
Buildartifact: pulse-dist
Containerbuild and smoke test
Status pagedeploy to Pages
And when you push a version tag:
Tag v0.2.0on: push tags
Releasenotes and package
Publish imageghcr.io
The workflows you write.
Every one of these runs in the repository today. You will write each of them yourself.
- Backend CI
.github/workflows/ci.ymlType checks and tests on Node 22 and 24, Linux and Windows, then keeps the build.pushpull_request - Nightly
.github/workflows/nightly.ymlTests against the newest Node.js every night, or on demand with a chosen version.scheduleworkflow_dispatch - Reusable test
.github/workflows/reusable-test.ymlOne test job other workflows call with a Node version.workflow_call - Release
.github/workflows/release.ymlOn a v* tag: check the version, test, pack and publish a GitHub release.push - Container
.github/workflows/container.ymlBuilds and smoke tests the image; a v* tag also publishes it to GHCR.pushpull_request - Status page
.github/workflows/pages.ymlDeploys the status page to GitHub Pages through a protected environment.pushworkflow_dispatch - Frontend
.github/workflows/frontend.ymlLint, types, tests and a production build for this site.pushpull_request
One repository, clear parts.
The app, the automation, the lessons and this site each have their own folder, their own checks and their own owner in the pipeline. Nothing is mixed.
- backend/
- Pulse, the small TypeScript API the pipeline tests, ships and deploys.
- .github/workflows/
- Seven real workflows. One chapter teaches each.
- .github/actions/
- A composite action every backend job shares.
- workshop/
- The chapters, in Markdown. This site renders them.
- frontend/
- This site: Next.js, deployed on its own.
- docs/
- Architecture, facilitator guide and changelog.
12 short chapters.
See them all- 01Why CI/CD10 minutes
- 02Set up10 minutes
- 03Your first workflow15 minutes
- 04Continuous integration20 minutes
- 05Matrix builds15 minutes
- 06Caching and artifacts15 minutes
- 07Schedules and manual runs10 minutes
- 08Reuse: composite actions and reusable workflows15 minutes
- 09Releases on tags15 minutes
- 10Containers20 minutes
- 11Deploy with environments15 minutes
- 12Secure and fast20 minutes
Running in a minute.
You need Node.js 22, git and a GitHub account. Fork the repository so the workflows run under your name, then follow chapter 02.
Fork it on GitHubbash
git clone https://github.com/jars-demo/github-actions-demo.git
cd github-actions-demo/backend
npm ci
npm test
npm start # http://localhost:3000/healthMore from JARS Demo
- TypeScriptTypes, unions, generics and safe parsing.
- FastAPIA production-shaped Python API, step by step.
- gRPCHTTP/2, TLS and gRPC, and how to debug them.
- OpenTelemetryBreak a system, trace it, find the root cause.
- Local AIA full-stack AI app that runs fully offline.
- MCP vs APIOne request through MCP and a classic API.
- CogneeMemory for AI apps with knowledge graphs.
- FalkorDBA fast, open-source graph database.
- PyArmorProtect, verify and ship a Python app.
- MailingKitOne typed email API for any provider.
- Companion KitSmall, accessible companions for web apps.
- JARS SkillsAgent skills for everyday engineering work.