GitHub Flow
GitHub Flow
Ett workflow för git + GitHub
Vad är GitHub Flow?
"En lightweight, branch-baserad workflow som bygger på att main-branchen alltid ska vara deploybar"
- Skapad av GitHub 2011 av Scott Chacon
- Designad för team som deployar ofta
- Filosofi: "Ship early, ship often"
OBS!!! GitHub Flow != Git Flow!
"Problem" som GH flow adresserar
- Komplexa branching-strategier
- Långlivade feature branches
- Merge hell och konflikter
- Långsamma release-cykler
GitHub Flow
Feature Branch
→
Pull Request
→
Main Branch
- Enkel: (endast) en 'långlivad' branch (main)
- Transparent: Pull Requests (PR)
- Kvalitet: Code Reviews
- Snabbt: idé till produktion
GitHub Flow vs Git Flow
| Aspekt |
Git Flow |
GitHub Flow |
| Komplexitet |
Hög (5+ olika branches) |
Låg (feature + main) |
| Release-cykel |
Planerade releases |
Kontinuerlig deployment |
| Branch-livslängd |
Veckor/månader |
Dagar/veckor |
| Lämplig för |
Stora team, planerade releaser |
Agila team, web-appar |
GitHub Flow vs Git Flow
"Git Flow - kraftfull men komplex."
"GitHub Flow - enkel men effektiv."
När lämpar sig GitHub Flow?
Bra för:
- Webb-applikationer
- Mindre team (2-10st)
- API:er & microservices
- Open source-projekt
Mindre bra:
- Native desktop/mobil
- Embedded systems
- Enterprise/stora-system med fasta release-cykler
GitHub + GitHub Flow = true
"GitHub själva använder GitHub Flow för github.com
- 15+ deploys per dag"
...och många andra
github.blog/developer-skills
"Nu har vi en bakgrund.
Vi fortsätter med de sex kärnprinciperna
som GitHub Flow baseras på..."
De 6 Principerna
"Kärnprinciper" i GitHub Flow
1 - Main är deploybar
2 - Feature-branches
3 - Commit early, commit often
4 - Öppna PR
5 - Code Review
6 - Merge & Deploy
1. main alltid "deploybar"
för produktion
- All kod - ska vara testad och reviewed
- Inget trasigt - inga experiment på main
Detta är den viktigaste regeln!
2. Arbeta med ny funkonalitet på (nya) feature branches
$ git checkout main
$ git pull origin main
$ git checkout -b feature/user-auth
2.1 Använd "bra" och tydliga namn på feature branches
Ok:
- feature/user-login
- feature/db-conn
- hotfix/security-patch
- improvement/api-performance
Njae:
- efo-leker-ø
- 13saft37
- test123
- new-stuff
3. Commit early, commit often
Tumregel: Små, atomära commits
- Gör en överenskommelse i teamet - hur ofta och när.
- Använd koncisa och tydliga commit messages.
Ok:
- Added user auth endpoint
- Removed null value in user auth token
- Refactor db model
Nej!:
- fixed stuff
- updates
- måste på toa /mvh efo
- as3dfghj
2. Öppna Pull Request
Gör tydliga och beskrivande PR.
Gärna med beskrivande text över innehållet.
Titel/Ämne: Added user auth
Beskrivning: JWT-baserad auth för API
Ändringar:
- Ny AuthController med login/logout endpoints
- JWT token generation och validering
- Middleware för att skydda routes
- xyz...
Öppna gärna PR tidigt - vänta inte för länge
- Feedback tidigt - innan för mycket ändringar gjorts
- Diskussion i teamet - finns andra, bättre lösningar?
- Transparens - alla (teamet) blir uppdaterade och är med i vad som händer
- Ur ett CI-perspektiv - bra om problem upptäcks i ett tidigt skede
5. Code Review & Diskussion
Vad ska granskas/diskuteras för ett PR?
Bestäms av teamet, men förslagsvis:
Kod-kvalitet:
- Läsbarhet och struktur
- Sårbarheter, prestanda etc
- Kodstandarder
Funktionalitet:
- Löses rätt problem?
- Om tester - tillräckliga?
- Ev. dokumentation uppdaterad?
forts 5. Code Review & Diskussion
Kom överens i teamet om när ett PR kan/ska godkännas/"merge:as".
Tips: gör en checklista med punkter som ska uppfyllas för när ett PR kan mergas.
t ex, se föregående slide
minst 2 ok => PR ok
6. Merge och Deploy
När ett PR är klart så är tanken att ev builds och tester görs för att sedan deploy/driftsättas och nya features går "live".
Teamet bör också se till att hämta senaste ändringarna från main;
$ git checkout main
$ git pull origin main
6. forts. Merge och Deploy
I den bästa av världar har vi nu CI/CD pipelines
- CI/CD pipelines som körs automatiskt efter merge
- Tester som validerar att allt fungerar
- Rollback-möjlighet om något går fel
Summering GitHub Flow
↓
feature/new-login
feature branches
↓
forts. Summering GitHub Flow
↓
PR + Code Review ✓
diskussion & godkännande
↓
main (uppdaterad)
→
Production
Nu ska vi leka!
Vi har sett teorin bakom GitHub Flow...
Dags för lite live-demo!
Försökspersoner: efo & msc
nästa del