You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2024/06/04 09:14:15 UTC
(causeway) 03/08: CAUSEWAY-2873: introduces configurable tag version for the petclinic tutorial
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-2873
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 24190537c9c2e0529a795f10ae30c5b7f8f880c7
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Thu May 30 06:47:51 2024 +0100
CAUSEWAY-2873: introduces configurable tag version for the petclinic tutorial
---
antora/components/tutorials/antora.yml | 6 +++
.../tutorials/modules/petclinic/pages/.gitignore | 1 +
.../petclinic/pages/010-getting-started.adoc | 13 +++--
.../petclinic/pages/020-the-petclinic-domain.adoc | 26 +++++-----
.../petclinic/pages/030-petowner-entity.adoc | 60 +++++++++++-----------
.../modules/petclinic/pages/040-pet-entity.adoc | 32 ++++++------
.../modules/petclinic/pages/050-visit-entity.adoc | 16 +++---
.../modules/petclinic/pages/060-unit-testing.adoc | 4 +-
.../modules/petclinic/pages/070-modularity.adoc | 4 +-
.../modules/petclinic/pages/080-view-models.adoc | 8 +--
.../petclinic/pages/090-integration-testing.adoc | 4 +-
.../further-business-logic-worked-examples.txt | 28 +++++-----
12 files changed, 104 insertions(+), 98 deletions(-)
diff --git a/antora/components/tutorials/antora.yml b/antora/components/tutorials/antora.yml
index 0352027dbf..c6858d33e1 100644
--- a/antora/components/tutorials/antora.yml
+++ b/antora/components/tutorials/antora.yml
@@ -23,3 +23,9 @@ nav:
- modules/ROOT/nav.adoc
- modules/petclinic/nav.adoc
+asciidoc:
+ attributes:
+ tag-version: 'v2'
+ jdk-version: '11'
+ #tag-version: 'v3'
+ #jdk-version: '21'
diff --git a/antora/components/tutorials/modules/petclinic/pages/.gitignore b/antora/components/tutorials/modules/petclinic/pages/.gitignore
new file mode 100644
index 0000000000..0b76f26d92
--- /dev/null
+++ b/antora/components/tutorials/modules/petclinic/pages/.gitignore
@@ -0,0 +1 @@
+.asciidoctor/
\ No newline at end of file
diff --git a/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc b/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc
index 81729ac643..677e4ffba2 100644
--- a/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/010-getting-started.adoc
@@ -8,7 +8,7 @@
You'll need:
-* Java 11
+* Java {jdk-version}
+
Apache Causeway works up to at least Java 21, but stick with Java 11 for now.
@@ -24,7 +24,6 @@ This has multiple tags for the various checkpoints so you can pick up the tutori
* a Java IDE with support for Maven.
+
The Apache Causeway website has detailed documentation for setting up to use xref:setupguide:intellij:about.adoc[IntelliJ] or xref:setupguide:eclipse:about.adoc[Eclipse].
-+
For this tutorial, also make sure that your IDE is configured to support Lombok.
@@ -42,7 +41,7 @@ We start the tutorial simply with a copy of xref:docs:starters:simpleapp.adoc[Si
* Clone the repo:
+
-[source,bash]
+[source,bash,subs="attributes+"]
----
git clone https://github.com/apache/causeway-app-petclinic
----
@@ -53,9 +52,9 @@ This will make it easier to inspect differences between different tags.
* Checkout the first tag, and build:
+
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/01-01-starter-app
+git checkout tags/{tag-version}/01-01-starter-app
mvn clean install
----
+
@@ -63,7 +62,7 @@ mvn clean install
====
The code at this tag was created by copying the `v2-jpa` tag of xref:docs:starters:simpleapp.adoc[SimpleApp]:
-[source,bash]
+[source,bash,subs="attributes+"]
----
curl https://codeload.github.com/apache/causeway-app-simpleapp/zip/v2-jpa | jar xv
----
@@ -71,7 +70,7 @@ curl https://codeload.github.com/apache/causeway-app-simpleapp/zip/v2-jpa | jar
* run the app:
+
-[source,bash]
+[source,bash,subs="attributes+"]
----
mvn -pl webapp spring-boot:run
----
diff --git a/antora/components/tutorials/modules/petclinic/pages/020-the-petclinic-domain.adoc b/antora/components/tutorials/modules/petclinic/pages/020-the-petclinic-domain.adoc
index 7aa9e49d9f..1301bc73b0 100644
--- a/antora/components/tutorials/modules/petclinic/pages/020-the-petclinic-domain.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/020-the-petclinic-domain.adoc
@@ -51,9 +51,9 @@ We'll also leave the `simple` module untouched, to use as a reference.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/02-01-copies-SimpleObject-to-PetOwner
+git checkout tags/{tag-version}/02-01-copies-SimpleObject-to-PetOwner
mvn clean install
mvn -pl webapp spring-boot:run
----
@@ -106,14 +106,14 @@ In addition, the new Maven module was defined in the top-level `pom.xml`, and in
Confirm that the code still builds:
-[source,bash]
+[source,bash,subs="attributes+"]
----
mvn install
----
However, if you run the app confirm that it is still showing just the original `simpleapp` module:
-[source,bash]
+[source,bash,subs="attributes+"]
----
mvn -pl webapp spring-boot:run
----
@@ -126,7 +126,7 @@ We'll fix this in the next exercise.
We have our new `petowner` module, but we're not actually using it; if we run the application we still see the original `simpleapp` module.
-[source,bash]
+[source,bash,subs="attributes+"]
----
mvn -pl webapp spring-boot:run
----
@@ -136,9 +136,9 @@ In this exercise we'll update the app to include `petowners` as well.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/02-02-configure-the-app-to-include-petowner
+git checkout tags/{tag-version}/02-02-configure-the-app-to-include-petowner
mvn clean install
mvn -pl webapp spring-boot:run
----
@@ -208,9 +208,9 @@ In this exercise we'll add a security role to grant access to our new `petowner`
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/02-03-add-security-role-for-petowner
+git checkout tags/{tag-version}/02-03-add-security-role-for-petowner
mvn clean install
mvn -pl webapp spring-boot:run
----
@@ -305,9 +305,9 @@ Let's now update the menu bar so that the actions to create ``PetOwner``s live u
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/02-04-update-menubar-for-petowners
+git checkout tags/{tag-version}/02-04-update-menubar-for-petowners
mvn clean install
mvn -pl webapp spring-boot:run
----
@@ -357,9 +357,9 @@ This will allow us to quickly create a whole set of `PetOwner` objects from the
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/02-05-setup-demo-petowners
+git checkout tags/{tag-version}/02-05-setup-demo-petowners
mvn clean install
mvn -pl webapp spring-boot:run
----
diff --git a/antora/components/tutorials/modules/petclinic/pages/030-petowner-entity.adoc b/antora/components/tutorials/modules/petclinic/pages/030-petowner-entity.adoc
index f2d9e93527..c5cc45181d 100644
--- a/antora/components/tutorials/modules/petclinic/pages/030-petowner-entity.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/030-petowner-entity.adoc
@@ -14,9 +14,9 @@ We'll also update the fixture script.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-01-adds-PetOwner-knownAs-property
+git checkout tags/{tag-version}/03-01-adds-PetOwner-knownAs-property
mvn clean install
mvn -pl webapp spring-boot:run
----
@@ -116,9 +116,9 @@ To do that, we need to define the title imperatively, using the xref:refguide:ap
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-02-define-PetOwner-title-imperatively
+git checkout tags/{tag-version}/03-02-define-PetOwner-title-imperatively
mvn clean install
mvn -pl webapp spring-boot:run
----
@@ -154,9 +154,9 @@ We'll make these changes in this exercise.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-03-remaining-PetOwner-properties
+git checkout tags/{tag-version}/03-03-remaining-PetOwner-properties
mvn clean install
mvn -pl webapp spring-boot:run
----
@@ -235,9 +235,9 @@ Let's update the app to see some other properties we added in the previous exerc
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-04-list-new-properties-of-PetOwner
+git checkout tags/{tag-version}/03-04-list-new-properties-of-PetOwner
mvn clean install
mvn -pl webapp spring-boot:run
----
@@ -277,9 +277,9 @@ We can also leverage link:https://docs.spring.io/spring-boot/docs/current/refere
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-05-initial-fixture-script
+git checkout tags/{tag-version}/03-05-initial-fixture-script
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -350,9 +350,9 @@ In this exercise, we'll refactor the home page view model to show a list of ``Pe
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-06-update-home-page-to-show-pet-owners
+git checkout tags/{tag-version}/03-06-update-home-page-to-show-pet-owners
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -414,9 +414,9 @@ In this exercise we'll simplify that workflow by allowing the additional details
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-07-modifies-PetOwners-create-action
+git checkout tags/{tag-version}/03-07-modifies-PetOwners-create-action
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -472,9 +472,9 @@ In this exercise we'll change the prompt style for both a service (menu) action,
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-08-prompt-styles
+git checkout tags/{tag-version}/03-08-prompt-styles
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -578,9 +578,9 @@ In this exercise we'll see how easy it is to create such a derived property.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-09-derived-days-since-last-visit-property
+git checkout tags/{tag-version}/03-09-derived-days-since-last-visit-property
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -664,9 +664,9 @@ In this exercise we'll use the same approach, introducing a meta-annotation to c
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-10-use-meta-annotations-to-reduce-duplication
+git checkout tags/{tag-version}/03-10-use-meta-annotations-to-reduce-duplication
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -743,9 +743,9 @@ We can fix this by adding rules to their respective meta-annotations.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-11-validation-rules-using-metaannotations
+git checkout tags/{tag-version}/03-11-validation-rules-using-metaannotations
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -814,9 +814,9 @@ In this exercise we'll move this constraint onto the `@Name` meta-annotation ins
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-12-moves-validation-onto-metaannotation
+git checkout tags/{tag-version}/03-12-moves-validation-onto-metaannotation
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -875,9 +875,9 @@ For email address, we'll use a single string, so it's a scalar value type.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-13-scalar-custom-value-type-for-email-address
+git checkout tags/{tag-version}/03-13-scalar-custom-value-type-for-email-address
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -1082,9 +1082,9 @@ This has the benefit of being dynamic; we can move fields around in the layout w
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-14-use-layout-xml-for-ui-semantics
+git checkout tags/{tag-version}/03-14-use-layout-xml-for-ui-semantics
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -1270,9 +1270,9 @@ In this exercise, we'll replace the icon for `PetOwner`.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/03-15-change-pet-owner-icon-png
+git checkout tags/{tag-version}/03-15-change-pet-owner-icon-png
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
diff --git a/antora/components/tutorials/modules/petclinic/pages/040-pet-entity.adoc b/antora/components/tutorials/modules/petclinic/pages/040-pet-entity.adoc
index fbc2fcea6e..79a15feed1 100644
--- a/antora/components/tutorials/modules/petclinic/pages/040-pet-entity.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/040-pet-entity.adoc
@@ -19,9 +19,9 @@ In this exercise we'll just create the outline of the `Pet` entity, and ensure i
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/04-01-pet-entity-key-properties
+git checkout tags/{tag-version}/04-01-pet-entity-key-properties
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -157,9 +157,9 @@ At the moment we're "flying blind" because we don't have any demo `Pet` instance
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/04-02-pet-ui-and-layout-semantics
+git checkout tags/{tag-version}/04-02-pet-ui-and-layout-semantics
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -299,9 +299,9 @@ In this next exercise we'll add the ``PetOwner``'s collection of ``Pet``s.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/04-03-PetOwner-pets-collection
+git checkout tags/{tag-version}/04-03-PetOwner-pets-collection
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -371,9 +371,9 @@ So in this exercise we'll add two actions on `PetOwner`: one to add a `Pet` and
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/04-04-add-remove-pets
+git checkout tags/{tag-version}/04-04-add-remove-pets
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -424,9 +424,9 @@ In this exercise we'll extend the fixture data so that each of our pet owners ha
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/04-05-extend-fixture-data-to-add-in-pets
+git checkout tags/{tag-version}/04-05-extend-fixture-data-to-add-in-pets
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -485,9 +485,9 @@ In this exercise we'll introduce a simple business rule: every owner's pet must
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/04-06-unique-pet-names-validation
+git checkout tags/{tag-version}/04-06-unique-pet-names-validation
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -552,9 +552,9 @@ So, we need to add a `species`, and some `notes`.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/04-07-pet-remaining-properties
+git checkout tags/{tag-version}/04-07-pet-remaining-properties
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -676,9 +676,9 @@ This is what we'll quickly tackle in this exercise.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/04-08-dynamic-icons
+git checkout tags/{tag-version}/04-08-dynamic-icons
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
diff --git a/antora/components/tutorials/modules/petclinic/pages/050-visit-entity.adoc b/antora/components/tutorials/modules/petclinic/pages/050-visit-entity.adoc
index 54f86354bb..06300e0cc3 100644
--- a/antora/components/tutorials/modules/petclinic/pages/050-visit-entity.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/050-visit-entity.adoc
@@ -20,9 +20,9 @@ In this exercise we'll just create an empty visits module.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/05-01-visit-module
+git checkout tags/{tag-version}/05-01-visit-module
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -122,9 +122,9 @@ In this exercise we'll fix this, so that:
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/05-02-visit-module-dependencies
+git checkout tags/{tag-version}/05-02-visit-module-dependencies
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -204,9 +204,9 @@ We'll start just with the key properties.
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/05-03-visit-entity-key-properties
+git checkout tags/{tag-version}/05-03-visit-entity-key-properties
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -392,9 +392,9 @@ We'll also create a mixin _collection_ to be able to view the visits from a ``Pe
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/05-04-book-visit-action
+git checkout tags/{tag-version}/05-04-book-visit-action
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
diff --git a/antora/components/tutorials/modules/petclinic/pages/060-unit-testing.adoc b/antora/components/tutorials/modules/petclinic/pages/060-unit-testing.adoc
index 16974aebd8..ff83b6846a 100644
--- a/antora/components/tutorials/modules/petclinic/pages/060-unit-testing.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/060-unit-testing.adoc
@@ -16,9 +16,9 @@ In this section we'll write a unit test to verify this logic, using Mockito to "
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/06-01-unit-test-bookVisit-default-time
+git checkout tags/{tag-version}/06-01-unit-test-bookVisit-default-time
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
diff --git a/antora/components/tutorials/modules/petclinic/pages/070-modularity.adoc b/antora/components/tutorials/modules/petclinic/pages/070-modularity.adoc
index 6959ca089c..3e58e536c4 100644
--- a/antora/components/tutorials/modules/petclinic/pages/070-modularity.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/070-modularity.adoc
@@ -35,9 +35,9 @@ In this exercise we'll use domain events to cascade delete or to veto the action
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/07-01-delete-action-events
+git checkout tags/{tag-version}/07-01-delete-action-events
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
diff --git a/antora/components/tutorials/modules/petclinic/pages/080-view-models.adoc b/antora/components/tutorials/modules/petclinic/pages/080-view-models.adoc
index df22c489d2..c66a251ca6 100644
--- a/antora/components/tutorials/modules/petclinic/pages/080-view-models.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/080-view-models.adoc
@@ -18,9 +18,9 @@ In this exercise we'll extend the home page by displaying additional data in new
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/08-01-home-page-additional-collections
+git checkout tags/{tag-version}/08-01-home-page-additional-collections
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
@@ -142,9 +142,9 @@ In this exercise we'll extend the home page by providing a convenience action to
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/08-02-home-page-bookVisit-convenience-action
+git checkout tags/{tag-version}/08-02-home-page-bookVisit-convenience-action
mvn clean install
mvn -pl webapp spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
----
diff --git a/antora/components/tutorials/modules/petclinic/pages/090-integration-testing.adoc b/antora/components/tutorials/modules/petclinic/pages/090-integration-testing.adoc
index c9c00c910f..bc923a72f6 100644
--- a/antora/components/tutorials/modules/petclinic/pages/090-integration-testing.adoc
+++ b/antora/components/tutorials/modules/petclinic/pages/090-integration-testing.adoc
@@ -17,9 +17,9 @@ In this exercise we'll test the `bookVisit` mixin action (on `Pet` entity).
=== Solution
-[source,bash]
+[source,bash,subs="attributes+"]
----
-git checkout tags/09-01-bookVisit-integ-test
+git checkout tags/{tag-version}/09-01-bookVisit-integ-test
mvn clean install
----
diff --git a/antora/components/tutorials/modules/petclinic/pages/further-business-logic-worked-examples.txt b/antora/components/tutorials/modules/petclinic/pages/further-business-logic-worked-examples.txt
index 0a7d8394a3..016e26d378 100644
--- a/antora/components/tutorials/modules/petclinic/pages/further-business-logic-worked-examples.txt
+++ b/antora/components/tutorials/modules/petclinic/pages/further-business-logic-worked-examples.txt
@@ -32,9 +32,9 @@
//
//=== Solution
//
-//[source,bash]
+//[source,bash,subs="attributes+"]
//----
-//git checkout tags/330-enter-an-outcome
+//git checkout tags/{tag-version}/330-enter-an-outcome
//mvn clean package jetty:run
//----
//
@@ -153,9 +153,9 @@
//
//=== Solution
//
-//[source,bash]
+//[source,bash,subs="attributes+"]
//----
-//git checkout tags/340-pay-for-a-visit
+//git checkout tags/{tag-version}/340-pay-for-a-visit
//mvn clean package jetty:run
//----
//
@@ -255,9 +255,9 @@
//
//=== Solution
//
-//[source,bash]
+//[source,bash,subs="attributes+"]
//----
-//git checkout tags/350-prevent-payment-for-a-visit-twice
+//git checkout tags/{tag-version}/350-prevent-payment-for-a-visit-twice
//mvn clean package jetty:run
//----
//
@@ -321,9 +321,9 @@
//
//=== Solution
//
-//[source,bash]
+//[source,bash,subs="attributes+"]
//----
-//git checkout tags/360-find-visits-not-yet-paid-and-overdue
+//git checkout tags/{tag-version}/360-find-visits-not-yet-paid-and-overdue
//mvn clean package jetty:run
//----
//
@@ -439,9 +439,9 @@
//
//=== Solution
//
-//[source,bash]
+//[source,bash,subs="attributes+"]
//----
-//git checkout tags/370-digression-hiding-columns-in-tables
+//git checkout tags/{tag-version}/370-digression-hiding-columns-in-tables
//mvn clean package jetty:run
//----
//
@@ -509,9 +509,9 @@
//
//=== Solution
//
-//[source,bash]
+//[source,bash,subs="attributes+"]
//----
-//git checkout tags/380-another-digression-icons-and-css
+//git checkout tags/{tag-version}/380-another-digression-icons-and-css
//mvn clean package jetty:run
//----
//
@@ -561,9 +561,9 @@
//
//=== Solution
//
-//[source,bash]
+//[source,bash,subs="attributes+"]
//----
-//git checkout tags/390-delete-an-owner-provided-no-unpaid-visits
+//git checkout tags/{tag-version}/390-delete-an-owner-provided-no-unpaid-visits
//mvn clean package jetty:run
//----
//