A visual guide to CI/CD on your own infrastructure
CI (Continuous Integration) = every time you push code, a machine automatically checks if your code still works. No manual testing. No forgetting. Here's the difference:
Three machines are involved. Here's how they connect:
Key insight: Your server reaches out to GitHub (outbound HTTPS). GitHub never reaches into your server. This means no ports need to be opened on your firewall.
The full journey from typing git push to seeing your result:
Your runner doesn't sit and wait for GitHub to call it. Instead, it polls every few seconds: "Hey GitHub, got any jobs for me?" Here's the exact conversation:
Organization structure: The runner is registered at the org level, so it serves every repo in the org.
The workflow file must be in a specific location. GitHub only looks here:
Rule: No .github/workflows/*.yml file = no CI. The runner sits idle even if it's online. The YAML file is the instruction manual that tells the runner what to do.
Steps run one after another (sequentially). Each bar below shows how long that step takes. If one fails, everything after it is skipped:
Mistyped a variable name. Compiler catches it.
Code compiles, but your function returns wrong results.
Works, but Clippy spots a likely mistake.
Everything works. This is what healthy output looks like.
Small ✅ or ❌ icon next to each commit message on the repo page
Full list of every CI run with detailed logs for each step
Status shown at the bottom of every Pull Request page
Move repo from personal account to jojomojo-org. Private repos stay private.
gh api --method POST repos/jojomojo786/REPO/transfer -f new_owner="jojomojo-org"
Create the ci.yml file in .github/workflows/. Copy the YAML from section 07.
mkdir -p .github/workflows && cp ci.yml .github/workflows/
Every push to main now auto-builds and tests. No cloud minutes used.
git push origin main → ✅ CI runs
Current setup — what happens right now:
The runner only validates your code. It reports ✅ or ❌. It does not deploy, block pushes, or send notifications.
Could add later (not active):