Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @Coding-Cuddles/slides-maintainers
22 changes: 22 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "monthly"
time: "09:00"
timezone: "America/Los_Angeles"
versioning-strategy: "increase"
commit-message:
prefix: "chore"
include: "scope"

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
time: "09:00"
timezone: "America/Los_Angeles"
commit-message:
prefix: "chore"
include: "scope"
42 changes: 33 additions & 9 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,34 @@ on:
- main
pull_request:

permissions:
contents: read
pages: write
id-token: write
permissions: {}

jobs:
build:
lint:
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v7

- uses: actions/setup-node@v7
with:
node-version: 24
cache: npm

- run: npm ci --ignore-scripts

- uses: actions/configure-pages@v5
- run: make check

build:
needs: lint
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- uses: actions/checkout@v7

- name: Install Pandoc and LaTeX
run: |
Expand All @@ -33,12 +48,21 @@ jobs:
run: make -j

- name: Upload artifacts
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@v5

deploy:
needs: build
runs-on: ubuntu-latest
if: ${{ github.ref == 'refs/heads/main' }}
permissions:
pages: write
id-token: write

# Job-level rather than workflow-level: only the deployment needs
# serializing, and a shared group would queue unrelated pull request runs.
concurrency:
group: pages
cancel-in-progress: false

environment:
name: github-pages
Expand All @@ -47,4 +71,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@v5
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
*.pdf
.DS_Store
node_modules/
_site/
1 change: 1 addition & 0 deletions .markdownlint.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"default": true,
"MD013": { "line_length": 150 },
"MD024": false,
"MD025": false,
"MD033": false,
"MD041": false
}
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
_site/
27 changes: 23 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,13 +1,32 @@
OUTDIR ?= _site
MARKDOWNS := $(wildcard **/*.md)

# Decks live in per-curriculum subdirectories; -mindepth 2 keeps README.md out.
MARKDOWNS := $(shell find . -mindepth 2 -name '*.md' \
-not -path './node_modules/*' -not -path './$(OUTDIR)/*' | sed 's|^\./||' | sort)
PDFS := $(patsubst %.md,$(OUTDIR)/%.pdf,$(MARKDOWNS))
MDFLAGS := -f markdown -t beamer -s -H include.tex -V aspectratio:169 -V urlcolor:red
HTMLFLAGS := -f markdown -t html5 -s --template index.template.html --lua-filter index.lua

.PHONY: all check clean format format-check lint

all: $(PDFS) $(OUTDIR)/index.html

check: format-check lint

all: $(PDFS)
format:
npm run format

format-check:
npm run format-check

lint:
npm run lint

$(OUTDIR)/%.pdf: %.md
mkdir -p $(dir $@) && pandoc $(MDFLAGS) --output $@ $^

.PHONY: clean
$(OUTDIR)/index.html: README.md index.template.html index.lua
mkdir -p $(dir $@) && pandoc $(HTMLFLAGS) --output $@ $<

clean:
rm -f $(PDFS)
rm -f $(PDFS) $(OUTDIR)/index.html
69 changes: 42 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,22 @@

## Overview

Here you can find slides for Clean Code conversations or classes.
This repository contains slide decks for Clean Code conversations and classes.

## Development

Install Node.js 24 or later, Pandoc, and LaTeX. Then install the development dependencies and run
the validation and rendering steps:

```shell
npm ci --ignore-scripts
make check
make -j
```

Everything under `_site` is generated. Each deck renders to a PDF, and the published index page is
built from the Curriculum section below via `index.template.html` and `index.lua`, so the tables
here are the only place the curriculum is edited.

## Curriculum

Expand Down Expand Up @@ -38,19 +53,19 @@ Here you can find slides for Clean Code conversations or classes.

### SOLID (Orange Belt)

| # | Session Type | Name |
| --: | ------------ | -------------------------------------------------------------------------------------------- |
| 1 | Discussion | [Foundations of the SOLID principles](solid/01-foundations.md#warmup) |
| 2 | Discussion | [The Single Responsibility Principle](solid/02-srp.md#warmup) |
| 3 | Coding Dojo | Gilded Rose Refactoring Kata ([Python][gilded-rose-python], [C++][gilded-rose-cpp]) |
| 4 | Discussion | The Dependency Inversion Principle |
| 5 | Coding Dojo | Smart Home Refactoring Kata ([Python][smart-home-python], [C++][smart-home-cpp]) |
| 6 | Discussion | The Interface Segregation Principle |
| 7 | Coding Dojo | Media Player Refactoring Kata ([Python][media-player-python], [C++][media-player-cpp]) |
| 8 | Discussion | The Open-Closed Principle |
| 9 | Coding Dojo | Expense Report Refactoring Kata ([Python][expense-report-python], [C++][expense-report-cpp]) |
| 10 | Discussion | The Liskov Substitution Principle |
| 11 | Coding Dojo | Game of Life Refactoring Kata ([Python][game-of-life-python], [C++][game-of-life-cpp]) |
| # | Session Type | Name |
| --: | ------------ | ---------------------------------------------------------------------------------------------------------------------- |
| 1 | Discussion | [Foundations of the SOLID principles](solid/01-foundations.md#warmup) ([worksheet](solid/01-foundations-worksheet.md)) |
| 2 | Discussion | [The Single Responsibility Principle](solid/02-srp.md#warmup) |
| 3 | Coding Dojo | Gilded Rose Refactoring Kata ([Python][gilded-rose-python], [C++][gilded-rose-cpp]) |
| 4 | Discussion | The Dependency Inversion Principle |
| 5 | Coding Dojo | Smart Home Refactoring Kata ([Python][smart-home-python], [C++][smart-home-cpp]) |
| 6 | Discussion | The Interface Segregation Principle |
| 7 | Coding Dojo | Media Player Refactoring Kata ([Python][media-player-python], [C++][media-player-cpp]) |
| 8 | Discussion | The Open-Closed Principle |
| 9 | Coding Dojo | Expense Report Refactoring Kata ([Python][expense-report-python], [C++][expense-report-cpp]) |
| 10 | Discussion | The Liskov Substitution Principle |
| 11 | Coding Dojo | Game of Life Refactoring Kata ([Python][game-of-life-python], [C++][game-of-life-cpp]) |

[gilded-rose-python]: https://github.com/Coding-Cuddles/gilded-rose-refactoring-python-kata
[gilded-rose-cpp]: https://github.com/Coding-Cuddles/gilded-rose-refactoring-cpp-kata
Expand All @@ -70,7 +85,7 @@ Here you can find slides for Clean Code conversations or classes.
| 1 | Discussion | [Advanced TDD](advanced-tdd/01-advanced-tdd.md#warmup) |
| 2 | Coding Dojo | Roman Numerals Kata ([Python][roman-numerals-python], [C++][roman-numerals-cpp]) |
| 3 | Discussion | [Clean Tests](advanced-tdd/03-clean-tests.md#warmup) |
| 4 | Coding Dojo | Mars Rover Kata ([Python][mars-rover-python], [C++][mars-rover-python]) |
| 4 | Coding Dojo | Mars Rover Kata ([Python][mars-rover-python], [C++][mars-rover-cpp]) |
| 5 | Coding Mob | Mars Rover Kata ([Python][mars-rover-python], [C++][mars-rover-cpp]) |
| 6 | Discussion | Test Design / Test Process |
| 7 | Coding Dojo | Hyper-optimized Telemetry Kata ([Python][hyper-optimized-telemetry-python], [C++][hyper-optimized-telemetry-cpp]) |
Expand All @@ -94,15 +109,15 @@ Here you can find slides for Clean Code conversations or classes.

### Legacy Code (Blue Belt)

| # | Session Type | Name |
| --: | ------------ | ------------------------------------------------------------------------------------------------------ |
| 1 | Discussion | [Understanding Legacy Code](legacy-code/01-understanding-legacy.md) |
| 2 | Kata | [Identifying Legacy Code Kata](legacy-code/02-kata-identifying.md) |
| 3 | Discussion | [Building a Safety Net](legacy-code/03-safety-net.md) |
| 4 | Kata | [Characterization Testing Kata](legacy-code/04-kata-characterization-testing.md) |
| 5 | Discussion | [Safe, Non-Invasive Changes](legacy-code/05-safe-changes.md) |
| 6 | Kata | [Sprouting & Wrapping Kata](legacy-code/06-kata-sprouting-wrapping.md) |
| 7 | Discussion | [Core Dependency Breaking Techniques](legacy-code/07-dependency-breaking.md) |
| 8 | Kata | [Dependency Breaking Kata](legacy-code/08-kata-dependency-breaking.md) |
| 9 | Discussion | [Advanced Topics & Large-Scale Strategy](legacy-code/09-advanced-topics.md) |
| 10 | Kata | [Large-Scale Refactoring Kata](legacy-code/10-kata-large-scale-refactoring.md) |
| # | Session Type | Name |
| --: | ------------ | -------------------------------------------------------------------------------- |
| 1 | Discussion | [Understanding Legacy Code](legacy-code/01-understanding-legacy.md) |
| 2 | Kata | [Identifying Legacy Code Kata](legacy-code/02-kata-identifying.md) |
| 3 | Discussion | [Building a Safety Net](legacy-code/03-safety-net.md) |
| 4 | Kata | [Characterization Testing Kata](legacy-code/04-kata-characterization-testing.md) |
| 5 | Discussion | [Safe, Non-Invasive Changes](legacy-code/05-safe-changes.md) |
| 6 | Kata | [Sprouting & Wrapping Kata](legacy-code/06-kata-sprouting-wrapping.md) |
| 7 | Discussion | [Core Dependency Breaking Techniques](legacy-code/07-dependency-breaking.md) |
| 8 | Kata | [Dependency Breaking Kata](legacy-code/08-kata-dependency-breaking.md) |
| 9 | Discussion | [Advanced Topics & Large-Scale Strategy](legacy-code/09-advanced-topics.md) |
| 10 | Kata | [Large-Scale Refactoring Kata](legacy-code/10-kata-large-scale-refactoring.md) |
Loading