Ship it from a CI/CD pipeline
Continues from the last build: TaskFlow deploys to EKS when you run helm upgrade by hand from your laptop.
Last rung you got TaskFlow running on EKS, but every release still means SSHing into your own headspace: open a terminal, export the right AWS profile, build and push images, then run helm upgrade --install by hand.
What you'll build
TaskFlow now ships from a GitHub Actions pipeline: every push to main runs backend tests, builds and pushes both images to ECR tagged by commit SHA, and runs helm upgrade to EKS through OIDC with no stored AWS keys, gated by a manual prod approval. You can trace any running pod to an exact commit and roll back deterministically by SHA. No more laptop deploys.
See how we teach, before you sign up
You don't just get code dumped on you. Every starter file and every solution is explained line-by-line, in plain English. Here's one real file from this project:
name: deploy
on:
push:
branches: [main]
# OIDC needs id-token: write; checkout needs contents: read.
permissions:
id-token: write
contents: read
env:
AWS_REGION: eu-west-1
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- working-directory: backend
run: |
pip install -r requirements.txt -r requirements-dev.txt
pytest -q
build:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# TODO: configure-aws-credentials with role-to-assume (OIDC)
# TODO: amazon-ecr-login
# TODO: docker build + push backend and frontend tagged ${{ github.sha }}
deploy:
needs: build
runs-on: ubuntu-latest
environment: prod # gated by required reviewer in repo settings
steps:
- uses: actions/checkout@v4
# TODO: assume OIDC role, update-kubeconfig, helm upgrade --install with SHA tagsReading this file
permissions: id-token: writeAllows the workflow to mint an OIDC token, the prerequisite for keyless AWS auth.needs: testBuild waits for tests; deploy waits for build, enforcing the pipeline order.environment: prodTies the deploy job to the protected prod environment so it pauses for approval.${{ github.sha }}The commit SHA you will use as the image tag for traceable, rollback-able deploys.
The job order (test -> build -> deploy) and OIDC permissions are correct out of the box; you fill the TODOs.
That's 1 of 8 explained code blocks in this single project.
The build, milestone by milestone
- 1
Establish OIDC trust between GitHub and AWS
4 guided stepsUntil now you deployed from your laptop using your personal AWS credentials. A pipeline cannot use your laptop. The naive fix, pasting an access key into GitHub secrets, creates a permanent credential that an attacker keeps forever if it leaks. OIDC removes the standing secret entirely: GitHub proves its identity per run and AWS hands back credentials that expire in minutes.
- 2
Build and push both images to ECR, tagged by git SHA
4 guided stepsA pipeline must produce the exact artifact it will deploy, and that artifact must be uniquely named so you can trace what is running and roll back precisely. Building on the runner with a fresh checkout also kills the works on my machine problem: the image is built from the committed source every time, not from whatever is sitting on your laptop.
- 3
Deploy to EKS with helm upgrade --install from the pipeline
4 guided stepsHand-running helm upgrade from a laptop is unrepeatable and unauditable: nobody knows which values or which image actually shipped, and you cannot deploy when you are offline or on holiday. Moving it into the pipeline makes every deploy identical, logged, and tied to a commit, and it lets you pass the SHA tag so Kubernetes does a real rolling update instead of silently reusing a cached latest.
- 4
Gate prod behind a manual approval
4 guided stepsContinuous deploy to production with zero human checkpoint is risky for a team still building confidence and for changes like schema migrations. An approval gate gives you a recorded human acknowledgement and a chance to time releases, without reverting to laptop deploys. It is a checkpoint, not a substitute for tests.
- 5
Document and prove a SHA-based rollback
4 guided stepsThe point of tagging by SHA is deterministic recovery. When a deploy breaks prod, the fastest safe action is returning to the last known-good image, and that must be a documented, practiced procedure, not improvisation during an outage. Writing the runbook also forces you to articulate the trigger, the stages, and who can approve, which is what an on-call engineer needs at 3am.
What's inside when you start
You'll walk away with
This is portfolio-grade. Build it free.
Sign up to unlock every milestone step-by-step, the code skeletons, full reference solutions, and checkable tasks, with your progress saved as you build.
Start building