Skip to main content

Learning Resources

This module is populated from official docs and canonical external references, supplemented by local chunked books for Git mechanics, shell fluency, CI workflow design, and release culture. Pro Git still anchors the Git mechanics, but Semester 9 now also includes local chunks from GitHub Actions in Action and Software Engineering at Google that are worth using before you open a blog post.

Source Stack

SourceRoleHow to use it in this module
Pro Git (Chacon & Straub)Primary for git mechanicsClusters 1 (branching), 2 (hooks, policy), 4 (tags, signing), 5 (pre-receive, ACL). Read the specific chunks linked below; they are short.
Git from the bottom up (Wiegley)Selective supportCluster 1 branching mental model (commits as snapshots, rebase as replay). Skim once; deep-dive only if branch semantics feel fuzzy.
The Linux Command LineBackground for CI shellShell scripts, environment variables, here-docs, test/defensive programming for runner scripts and deploy scripts.
GitHub Actions in ActionLocal workflow supportUse for workflow structure, reusable jobs, environments, secrets, and release-pipeline examples before dropping to syntax reference pages.
Software Engineering at GoogleLocal engineering-practice supportUse for testing, review culture, change management, and release-discipline framing.
GitHub Actions official docsPrimary for clusters 2 / 5Canonical workflow, OIDC, environments, reusable workflows, and secrets reference.
GitLab CI official docsPrimary for clusters 2 / 5Canonical .gitlab-ci.yml reference and CI/CD concepts.
DORA (dora.dev)Primary for cluster 1The empirical grounding for the four keys and capabilities.
Martin Fowler bliki / articlesPrimary for clusters 1 / 3 / 4Canonical short definitions: ContinuousDelivery, FeatureToggle, Blue-green, Canary, EvodB, ParallelChange, TestPyramid, EradicatingNonDeterminism.
Semver.org / Keep a Changelog / Conventional CommitsPrimary for cluster 4Authoritative specs for versioning and changelogs.
SLSA spec, Sigstore docs, in-totoPrimary for cluster 4Supply-chain integrity, provenance, and signing.
OWASP CI/CD Top 10, Google SLSA threatsPrimary for cluster 5Pipeline threat modeling.
Google SRE WorkbookPrimary for cluster 3Canarying, SLO burn-rate alerting, rollback discipline.

Resource Map by Cluster

Cluster 1: Delivery as a Discipline

NeedBest sourceWhy
branching modelTrunk-Based Development -- introductionThe canonical description
short-lived branches rulesTrunk-Based Development -- short-lived feature branchesConcrete rules for branch lifetimes
scaled trunk-basedTrunk-Based Development -- scaledHow Google/Facebook run it
branching patterns taxonomyMartin Fowler: PatternsForManagingSourceCodeBranchesLong-form taxonomy
GitHub Flow (minimalist trunk-based variant)GitHub FlowSimpler variant
atomic commitsPro Git: Viewing staged changes and committingCommit as the unit of change
branch management in gitPro Git: Branch Management / Long-Running BranchesBridge from TBD concept to git operations
topic branches in practicePro Git: Topic Branches and Remote BranchesShort-lived branch discipline in git vocabulary
pushing / tracking branchesPro Git: Pushing and tracking branchesRemote-tracking mechanics
perils of rebasingPro Git: The perils of rebasingThe one rebase rule you cannot break
distributed workflowsPro Git: Distributed Git workflowsTaxonomy of centralized / integration-manager / dictator
private small team workflowPro Git: Private small teamRealistic small-team TBD reference
private managed team workflowPro Git: Private managed teamRealistic mid-size team workflow
commit identity mental modelGit from the bottom up: A commit by any other nameCommits as content-addressed snapshots
rebase vs merge mental modelGit from the bottom up: Branching and rebaseCleanest explanation of rebase
DORA metrics and capabilitiesDORA -- homepage and DORA -- CapabilitiesThe research body
the four keys in one placeDORA -- Quick CheckSelf-assessment against the four metrics
DORA metric definitionsDORA -- Four keys definitionsPrecise operational definitions
small batchesDORA -- Working in small batchesCapability behind concept 1
SPACE frameworkThe SPACE of Developer Productivity (ACM Queue)Team-experience complement to DORA
CI/CD stanceMartin Fowler: ContinuousDeliveryShort canonical definition
CI disciplineMartin Fowler: ContinuousIntegrationFoundational long-form

Cluster 2: The CI Pipeline

NeedBest sourceWhy
GitHub Actions fundamentalsWriting workflowsThe entry point for GHA
full workflow YAML referenceWorkflow syntax for GitHub ActionsEvery on:, jobs:, steps: key explained
artifacts between jobsStoring and sharing workflow dataImplementing build-once, promote-everywhere
reusable workflowsGitHub -- Reusable workflowsSharing pipelines across repos
GitLab CI fundamentalsGet started with GitLab CI/CDEntry point for GitLab
GitLab CI YAML reference.gitlab-ci.yml keyword referenceEvery keyword explained
GitLab CI include:GitLab -- include keywordConfig sharing in GitLab
twelve-factor configThe Twelve-Factor App -- III. ConfigWhy config lives outside the artifact
twelve-factor build/release/runThe Twelve-Factor App -- V. Build, release, runSeparation this cluster operationalizes
OCI digest as identityOCI Image spec -- descriptorWhy digests beat tags
test strategyMartin Fowler: TestPyramidFoundational on test shape
flaky testsMartin Fowler: EradicatingNonDeterminismThe essay on flakes
flake rates at scaleGoogle Testing Blog -- Flaky Tests at GoogleReal industry data
contract testsMartin Fowler: ContractTest and Pact docsConsumer-driven contracts in theory and tool
integration with real servicesTestcontainersRealistic integration tests without shared envs
git hooks -- overviewPro Git: Hooks overviewWhat hooks are and where they live
git hooks -- usagePro Git: Basic hooks usageExample client-side hook
server-side hooksPro Git: Server-side hooksPre-receive, update, post-receive
enforcing commit formatPro Git: Enforcing commit messages / ACLThe gate before the pipeline runs
hook-based policy in practicePro Git: Testing it outLive example rejecting bad pushes
shell scripting basicsLinux Command Line: What are shell scriptsBaseline CI shell fluency
shell functionsLinux Command Line: Shell functions and localsReuse in pipeline scripts
env varsLinux Command Line: What is stored in the environmentRuntime config mechanics
here documentsLinux Command Line: Here documentsShaping payloads in CI
defensive scripts & testingLinux Command Line: Defensive programming / testingset -euo pipefail, trap, assertions
script test casesLinux Command Line: Test casesDebugging shell in CI

Cluster 3: The CD Pipeline

NeedBest sourceWhy
blue-green definitionMartin Fowler: BlueGreenDeploymentCanonical
canary definitionMartin Fowler: CanaryReleaseCanonical
Kubernetes rolling updatesKubernetes -- DeploymentsAuthoritative on maxSurge, maxUnavailable, readiness
PodDisruptionBudgetsKubernetes -- PodDisruptionBudgetEviction safety under rolls
ALB weighted target groupsAWS -- ALB weighted target groupsCloud LB traffic split
Kubernetes canary operatorArgo Rollouts -- CanaryProduction-grade canary with analysis
Argo analysis and rollbackArgo Rollouts -- AnalysisAutomated promotion and abort
alternative canary operatorFlaggerGitOps-friendly progressive delivery
feature-flag typesMartin Fowler: FeatureToggleBest short classification
feature-flag implementation patternsPete Hodgson: Feature TogglesLong-form implementation patterns
vendor-neutral flag APIOpenFeatureStandard flag SDK interface
dark launchesLaunchDarkly -- dark launchesPractical walkthroughs
self-host flag serviceUnleash docsOpen-source flag provider
A/B comparison in codeGitHub -- ScientistLibrary for dark-launch comparison
canary + rollback in practiceGoogle SRE Workbook: Canarying ReleasesOperational treatment
burn-rate alertingGoogle SRE Workbook: Alerting on SLOsMulti-window multi-burn-rate
origin of "progressive delivery"RedMonk: Towards Progressive DeliveryJames Governor's coinage

Cluster 4: Release Engineering

NeedBest sourceWhy
semantic versioningSemantic Versioning 2.0.0Authoritative spec
changelog formatKeep a Changelog 1.1.0The standard format
commit conventionConventional Commits 1.0.0Drives automated versioning
calendar versioningCalVerWhen date-based version is right
release automationsemantic-releaseEnd-to-end automated versioning
monorepo release automationrelease-pleaseGoogle's release automation
git tagging basicsPro Git: TaggingHow tags work
tag opsPro Git: Listing / creating / deleting tagsOperations on tags
checkout tagsPro Git: Checking out tagsUsing tags to fetch a release
preparing a releasePro Git: Rebasing / cherry-picking workflows and preparing a releaseRelease prep patterns
git shortlog for changelogsPro Git: The shortlogSummarizing commits per release
verifying tagsPro Git: Verifying tagsChecking tag signatures
signing commits and tagsPro Git: Signing your workGPG signing semantics in git
supply-chain provenanceSLSA v1.0 specificationLevels, requirements, definitions
SLSA build levelsSLSA -- Build levelsL1, L2, L3 requirements
keyless signingSigstore docsCosign and Fulcio
attestation formatsin-totoMachine-readable provenance documents
L3 provenance from GH Actionsslsa-github-generatorReady-made SLSA L3 pipeline
SBOM specCycloneDXCommon SBOM format
evolutionary DB designMartin Fowler: EvodBFoundational for migrations alongside code
parallel change patternMartin Fowler: ParallelChangeExpand/contract in pattern form
migration toolsFlyway and LiquibaseCanonical JVM / SQL migration tools
online MySQL schema changegh-ostGitHub's online migration tool
declarative Postgres expand/contractpgrollPostgres equivalent with explicit phases
Postgres lock monitoringPostgres wiki -- Lock monitoringDiagnosing migration locks

Cluster 5: Quality Gates and Safety

NeedBest sourceWhy
OIDC in GitHub ActionsAbout security hardening with OIDCThe concept and flow
OIDC + AWS setupConfiguring OIDC in AWSStep-by-step
GitHub Actions security hardeningSecurity hardening for GitHub ActionsDefense-in-depth guide
GitLab OIDC / ID tokensGitLab -- OIDC for cloudEquivalent for GitLab CI
secrets in ActionsUsing secrets in GitHub ActionsStoring and scoping secrets
environments and approvalsManaging environments for deploymentReviewers, wait timers, branch filters
protected environments in GitLabGitLab -- Protected environmentsApprovals and restrictions
policy-as-codeOpen Policy Agent (OPA)Policy engine for deploy gates
ChatOps deploysGitHub Blog -- Deploying branches at GitHubCanonical ChatOps pattern
CI/CD threat modelOWASP -- CI/CD Top 10Ten real-world attack classes
supply-chain threat modelSLSA -- Threat modelWhat signing + OIDC defend against
CAB effectivenessDORA -- Streamlining change approvalEmpirical view on approval processes
CI observability productDatadog -- CI VisibilityReference implementation of pipeline metrics
deploy-marker APIGrafana -- Annotations APIHow to emit deploy markers
vendor-neutral CI attributesOpenTelemetry -- CI/CD semantic conventionsStandard attribute names
trace-shaped pipelinesOpenTelemetry -- tracing CI/CD pipelinesDistributed-trace model for pipelines
observability as a delivery capabilityDORA -- Monitoring and observabilityWhy this is a delivery concern

Exercise Support

Use these when concepts are understood but fluency is weak:

Use Rules

  • Start with the concept page and the official docs for the feature you are using.
  • Pro Git is the primary book citation for every cluster -- when git mechanics come up (branches, tags, hooks, signing), the chunks linked here are the source of truth.
  • If a Martin Fowler article and an official vendor doc disagree, the vendor doc wins for current syntax and the Fowler article wins for intent.
  • SLSA, Sigstore, and OWASP CI/CD Top 10 are the authoritative references for supply-chain and pipeline security claims -- do not rely on blog posts when these exist.
  • If rereading is not unblocking you, stop and write the thing you are stuck on in your own words for 10 minutes before reading more.