diff --git a/.github/workflows/java-master-deck.yml b/.github/workflows/java-master-deck.yml new file mode 100644 index 0000000..6df936a --- /dev/null +++ b/.github/workflows/java-master-deck.yml @@ -0,0 +1,55 @@ +name: java-master Deck + +# Temporal Essentials (decks/java-master): the code on every slide compiles, +# matches its snippet, parses, lights the lines its bubble talks about, and does +# what the speaker notes claim; then the rendered bubbles sit on those lines. +on: + pull_request: + paths: ["decks/java-master/**", ".github/workflows/java-master-deck.yml"] + push: + branches: [main] + paths: ["decks/java-master/**"] + +# Read-only: both jobs only check out and test. +permissions: + contents: read + +jobs: + snippets: + name: Code slides (compile, drift, parse, walkthrough steps, runtime) + runs-on: ubuntu-latest + defaults: + run: + working-directory: decks/java-master/snippets + steps: + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: actions/setup-java@c5195efecf7bdfc987ee8bae7a71cb8b11521c00 # v4.7.1 + with: + distribution: temurin + java-version: "21" + cache: maven + cache-dependency-path: decks/java-master/snippets/pom.xml + - run: mvn -B -q test + + walkthroughs: + name: Walkthrough bubbles sit on their lines (rendered) + runs-on: ubuntu-latest + defaults: + run: + working-directory: decks/java-master + steps: + - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: 20 + cache: npm + cache-dependency-path: decks/java-master/package-lock.json + - run: npm ci + - run: npx playwright install --with-deps chromium + - name: Start the dev server + run: | + npx slidev --port 3030 > slidev.log 2>&1 & + npx --yes wait-on --timeout 120000 http://localhost:3030 + - run: npm run check:walkthroughs + - if: failure() + run: cat slidev.log diff --git a/CONTEXT.md b/CONTEXT.md index bd32bbd..2d20b1b 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -60,6 +60,17 @@ _Avoid_: validation, verify The Slidev presentation delivered alongside a Workshop. _Avoid_: slides, presentation +**Segment**: +A self-contained section of a Deck, opening with its own divider, that other +Decks import whole. +_Avoid_: chapter, module, section + +**Temporal Essentials**: +The Foundations Deck that holds every Segment, delivered end to end or drawn +from by Workshop Decks. A Deck with no Track, Exercise or Solution of its own, +so it is not a Workshop. +_Avoid_: master deck, the master, Essentials Workshop + **Exercise**: The code tree a learner starts from, with the work left undone as numbered TODOs. Core TODOs are required to finish; Stretch TODOs are optional extras for learners diff --git a/README.md b/README.md index 8176092..daed93b 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,19 @@ All created via code. Use or repurpose the content to fit your next Dev Day! | Workshop | Level | Stack | Deck | Code + Track | Lab | Duration | Author | Model | Deck cost ($) | Track cost ($) | |---|---|---|---|---|---|--:|---|---|--:|--:| -| The Saga Pattern | Advanced | Java · compensation | Pending | [`workshops/saga-order-fulfillment/`](workshops/saga-order-fulfillment/) | [`saga-java`](https://play.instruqt.com/temporal/tracks/saga-java) | 25 min | Nikolay Advolodkin | Opus 5.5 (100%) | Pending | 4.73 | -| Child Workflows | Foundations | Java · child workflows | Pending | [`workshops/child-workflows/`](workshops/child-workflows/) | [`child-workflows-java`](https://play.instruqt.com/temporal/tracks/child-workflows-java) | 15 min | Nikolay Advolodkin | Opus 5.5 (100%) | Pending | 3.98 | -| Continue-As-New | Advanced | Java · event history | Pending | [`workshops/continue-as-new-subscription/`](workshops/continue-as-new-subscription/) | [`continue-as-new-java`](https://play.instruqt.com/temporal/tracks/continue-as-new-java) | 10 min | Nikolay Advolodkin | Opus 5.5 (100%) | Pending | 2.86 | -| Activity Heartbeats | Advanced | Java · activities | Pending | [`workshops/heartbeats-shipment/`](workshops/heartbeats-shipment/) | [`heartbeats-java`](https://play.instruqt.com/temporal/tracks/heartbeats-java) | 10 min | Nikolay Advolodkin | Opus 5.5 (100%) | Pending | 4.45 | +| The Saga Pattern | Advanced | Java · compensation | [`segments/17-saga-*`](decks/java-master/segments/17-saga-01-overview.md) | [`workshops/saga-order-fulfillment/`](workshops/saga-order-fulfillment/) | [`saga-java`](https://play.instruqt.com/temporal/tracks/saga-java) | 25 min | Nikolay Advolodkin | Opus 5.5 (100%) | Pending | 4.73 | +| Child Workflows | Foundations | Java · child workflows | [`segments/14-child-workflows.md`](decks/java-master/segments/14-child-workflows.md) | [`workshops/child-workflows/`](workshops/child-workflows/) | [`child-workflows-java`](https://play.instruqt.com/temporal/tracks/child-workflows-java) | 15 min | Nikolay Advolodkin | Opus 5.5 (100%) | Pending | 3.98 | +| Continue-As-New | Advanced | Java · event history | [`segments/15-continue-as-new.md`](decks/java-master/segments/15-continue-as-new.md) | [`workshops/continue-as-new-subscription/`](workshops/continue-as-new-subscription/) | [`continue-as-new-java`](https://play.instruqt.com/temporal/tracks/continue-as-new-java) | 10 min | Nikolay Advolodkin | Opus 5.5 (100%) | Pending | 2.86 | +| Activity Heartbeats | Advanced | Java · activities | [`segments/16-heartbeating.md`](decks/java-master/segments/16-heartbeating.md) | [`workshops/heartbeats-shipment/`](workshops/heartbeats-shipment/) | [`heartbeats-java`](https://play.instruqt.com/temporal/tracks/heartbeats-java) | 10 min | Nikolay Advolodkin | Opus 5.5 (100%) | Pending | 4.45 | +| Temporal Essentials | Foundations | Java · Workflows, Activities, Workers, Clients, Signals, Queries, Updates, Sagas, versioning, timeouts and retries, observability | [`decks/java-master/`](decks/java-master/) | Deck only; code slides proven in [`snippets/`](decks/java-master/snippets/) | per section, linked in the Deck | Pending | Nikolay Advolodkin | Opus 5.5 (100%) | [112.15](docs/authoring/java-master-deck.md) | — | + +**Temporal Essentials is a Deck, not a Workshop**: it has no Track, Exercise or +Solution of its own, so its Track cost is a dash. It is the Foundations Deck +delivered end to end, and the pool of Segments every Workshop's Deck imports +with `src:`; a Workshop's **Deck** column points at its Segment. See +[ADR 0004](docs/adr/0004-temporal-essentials-is-java-master-ported-from-typescript.md) +and [`snippets/README.md`](decks/java-master/snippets/README.md) for how its +code slides are proven. A Workshop created for this program lives here, under `workshops//` with its Deck in `decks//`. A Workshop that already has a Temporal-owned topic diff --git a/decks/java-master/.prettierrc b/decks/java-master/.prettierrc new file mode 100644 index 0000000..1d4c07a --- /dev/null +++ b/decks/java-master/.prettierrc @@ -0,0 +1,11 @@ +{ + "plugins": ["prettier-plugin-slidev"], + "overrides": [ + { + "files": ["slides.md", "segments/*.md"], + "options": { + "parser": "slidev" + } + } + ] +} diff --git a/decks/java-master/components/ParentClosePolicy.vue b/decks/java-master/components/ParentClosePolicy.vue new file mode 100644 index 0000000..58fb732 --- /dev/null +++ b/decks/java-master/components/ParentClosePolicy.vue @@ -0,0 +1,119 @@ + + + + + + diff --git a/decks/java-master/components/ReplayFlow.vue b/decks/java-master/components/ReplayFlow.vue new file mode 100644 index 0000000..17a8497 --- /dev/null +++ b/decks/java-master/components/ReplayFlow.vue @@ -0,0 +1,421 @@ + + + + + + diff --git a/decks/java-master/components/ResumableTransfer.vue b/decks/java-master/components/ResumableTransfer.vue new file mode 100644 index 0000000..d7f615b --- /dev/null +++ b/decks/java-master/components/ResumableTransfer.vue @@ -0,0 +1,222 @@ + + + + + + diff --git a/decks/java-master/components/SagaFlow.vue b/decks/java-master/components/SagaFlow.vue new file mode 100644 index 0000000..506c3e9 --- /dev/null +++ b/decks/java-master/components/SagaFlow.vue @@ -0,0 +1,59 @@ + + + +