From c0cb73d2aaf49cd62435ce688f4b84d3608abb49 Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Tue, 13 Jun 2023 09:48:24 +0200 Subject: [PATCH 1/5] Add script to extract relevant packages to Squeaksource --- .../instance/resumeMessage..st | 6 ++++++ .../methodProperties.json | 1 + .../SBESqueaksource.class/README.md | 0 .../class/extractToRepository..st | 6 ++++++ .../class/extractToRepository.message..st | 14 ++++++++++++++ .../class/extractToRepositorySBE60.st | 6 ++++++ .../SBESqueaksource.class/class/knownIssues.st | 9 +++++++++ .../SBESqueaksource.class/class/packageNames.st | 4 ++++ .../SBESqueaksource.class/methodProperties.json | 9 +++++++++ .../SBESqueaksource.class/properties.json | 14 ++++++++++++++ 10 files changed, 69 insertions(+) create mode 100644 SmalltalkSources/SBE-Extract.package/MCVersionNameAndMessageRequest.extension/instance/resumeMessage..st create mode 100644 SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/README.md create mode 100644 SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepository..st create mode 100644 SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepository.message..st create mode 100644 SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepositorySBE60.st create mode 100644 SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/knownIssues.st create mode 100644 SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/packageNames.st create mode 100644 SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/methodProperties.json create mode 100644 SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/properties.json diff --git a/SmalltalkSources/SBE-Extract.package/MCVersionNameAndMessageRequest.extension/instance/resumeMessage..st b/SmalltalkSources/SBE-Extract.package/MCVersionNameAndMessageRequest.extension/instance/resumeMessage..st new file mode 100644 index 00000000..cae7e75e --- /dev/null +++ b/SmalltalkSources/SBE-Extract.package/MCVersionNameAndMessageRequest.extension/instance/resumeMessage..st @@ -0,0 +1,6 @@ +*SBE-Extract-handling +resumeMessage: aMessage + + ^ self + resumeMessage: aMessage + excluding: #() \ No newline at end of file diff --git a/SmalltalkSources/SBE-Extract.package/MCVersionNameAndMessageRequest.extension/methodProperties.json b/SmalltalkSources/SBE-Extract.package/MCVersionNameAndMessageRequest.extension/methodProperties.json index bc525fa8..bdfe8c87 100644 --- a/SmalltalkSources/SBE-Extract.package/MCVersionNameAndMessageRequest.extension/methodProperties.json +++ b/SmalltalkSources/SBE-Extract.package/MCVersionNameAndMessageRequest.extension/methodProperties.json @@ -3,5 +3,6 @@ }, "instance" : { "resumeExcluding:" : "ct 12/2/2019 17:00", + "resumeMessage:" : "ct 6/12/2023 22:18", "resumeMessage:excluding:" : "ct 12/2/2019 17:01", "resumeName:message:excluding:" : "ct 12/2/2019 17:00" } } diff --git a/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/README.md b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/README.md new file mode 100644 index 00000000..e69de29b diff --git a/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepository..st b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepository..st new file mode 100644 index 00000000..d12b0e7c --- /dev/null +++ b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepository..st @@ -0,0 +1,6 @@ +extracting +extractToRepository: aMCRepository + + ^ self + extractToRepository: aMCRepository + message: 'Updates sources.' \ No newline at end of file diff --git a/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepository.message..st b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepository.message..st new file mode 100644 index 00000000..e36e0afa --- /dev/null +++ b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepository.message..st @@ -0,0 +1,14 @@ +extracting +extractToRepository: aMCRepository message: message + + aMCRepository cacheAllFileNamesDuring: [ + self packageNames do: [:packageName | + | workingCopy version | + workingCopy := MCWorkingCopy forPackage: (MCPackage new name: packageName). + self assert: (workingCopy possiblyNewerVersionsIn: aMCRepository) isEmpty. + version := [workingCopy newVersion] + on: MCRepositoryRequest + do: [:req | req resume: aMCRepository] + on: MCVersionNameAndMessageRequest + do: [:req | req resumeMessage: message]. + aMCRepository storeVersion: version]]. \ No newline at end of file diff --git a/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepositorySBE60.st b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepositorySBE60.st new file mode 100644 index 00000000..9e6075fc --- /dev/null +++ b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/extractToRepositorySBE60.st @@ -0,0 +1,6 @@ +extracting +extractToRepositorySBE60 + + ^ self extractToRepository: + (MCRepositoryGroup default repositories + detect: [:each | each description = 'http://www.squeaksource.com/SqueakByExample60']) \ No newline at end of file diff --git a/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/knownIssues.st b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/knownIssues.st new file mode 100644 index 00000000..bd9da2e8 --- /dev/null +++ b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/knownIssues.st @@ -0,0 +1,9 @@ +as yet unclassified +knownIssues + self flag: #todos. + " + * At least I (ct) had problems writing to the Squeaksource, so I temporarily enabled global write access for writing + * Version numbers are not always monotonically incremented. Not sure why this is, but deleting the files from the package cache and unloading the packages from the image helped me to reset most of the version numbers. + * Might automate this later as part of the CI + * Add support for upcoming editions in the future + " \ No newline at end of file diff --git a/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/packageNames.st b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/packageNames.st new file mode 100644 index 00000000..7d03fef6 --- /dev/null +++ b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/class/packageNames.st @@ -0,0 +1,4 @@ +accessing +packageNames + + ^ #('SBE-Environment' 'SBE-Monticello' 'SBE-Morphic' 'SBE-Quinto' 'SBE-Streams') \ No newline at end of file diff --git a/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/methodProperties.json b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/methodProperties.json new file mode 100644 index 00000000..5df2472d --- /dev/null +++ b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/methodProperties.json @@ -0,0 +1,9 @@ +{ + "class" : { + "extractToRepository:" : "ct 6/12/2023 22:20", + "extractToRepository:message:" : "ct 6/12/2023 22:19", + "extractToRepositorySBE60" : "ct 6/12/2023 22:22", + "knownIssues" : "ct 6/13/2023 09:42", + "packageNames" : "ct 6/12/2023 22:11" }, + "instance" : { + } } diff --git a/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/properties.json b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/properties.json new file mode 100644 index 00000000..d3e12ee2 --- /dev/null +++ b/SmalltalkSources/SBE-Extract.package/SBESqueaksource.class/properties.json @@ -0,0 +1,14 @@ +{ + "category" : "SBE-Extract", + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", + "instvars" : [ + ], + "name" : "SBESqueaksource", + "pools" : [ + ], + "super" : "Object", + "type" : "normal" } From 4c89577990b5dd6dbd26aa399736f96269343acf Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Tue, 13 Jun 2023 10:12:04 +0200 Subject: [PATCH 2/5] Link to new SqueakSource repository --- FirstApp/FirstApp.tex | 6 +++--- SourceControl/SourceControl.tex | 2 +- common.tex | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/FirstApp/FirstApp.tex b/FirstApp/FirstApp.tex index 7328ec97..cc931e1a 100644 --- a/FirstApp/FirstApp.tex +++ b/FirstApp/FirstApp.tex @@ -836,7 +836,7 @@ \subsection{\ind{SqueakSource}: a sharing platform for Monticello} We think that the best way to save your code and share it is to create an account for your project on a SqueakSource server. SqueakSource is like GitHub\footnote{\url{www.github.com}}: It is a web front-end to an HTTP Monticello server that lets you manage your projects. -There is a public SqueakSource server at \url{http://www.squeaksource.com}, and a copy of the code related to our game is stored there at \url{http://www.squeaksource.com/QuintoExampleSBE.html}. +There is a public SqueakSource server at \url{http://www.squeaksource.com}, and a copy of the code related to our game is stored there at \sbeSqueaksourceUrl. You can look at this project with a web browser, but it's a lot more productive to do so from inside \squeak, using the Monticello browser, which lets you manage your packages. \dothis{Open a web browser to \url{www.squeaksource.com}. @@ -853,7 +853,7 @@ \subsection{\ind{SqueakSource}: a sharing platform for Monticello} \needlines{5} \begin{code}{} MCHttpRepository - location: 'http://www.squeaksource.com/!\emph{YourProject}!' + location: '!\sbeSqueaksourceUrl!' user: '!\emph{yourInitials}!' password: '!\emph{yourPassword}!' \end{code} @@ -864,7 +864,7 @@ \subsection{\ind{SqueakSource}: a sharing platform for Monticello} \needlines{5} \begin{code}{} MCHttpRepository - location: 'http://www.squeaksource.com/!\emph{YourProject}!' + location: '!\sbeSqueaksourceUrl!' user: '' password: '' \end{code} diff --git a/SourceControl/SourceControl.tex b/SourceControl/SourceControl.tex index 1e16cbed..1608b711 100644 --- a/SourceControl/SourceControl.tex +++ b/SourceControl/SourceControl.tex @@ -227,7 +227,7 @@ \subsection{Basic Monticello} \needlines{4} \begin{code}{} MCHttpRepository - location: 'http://squeaksource.com/SqueakByExample' + location: '!\sbeSqueaksourceUrl!' user: '' password: '' \end{code} diff --git a/common.tex b/common.tex index b034d18f..c6cf4fbe 100644 --- a/common.tex +++ b/common.tex @@ -118,6 +118,7 @@ \newcommand{\sqmap}{SqueakMap\xspace} \newcommand{\squeak}{Squeak\xspace} \newcommand{\sbeRepoUrl}{\url{https://github.com/hpi-swa-lab/SqueakByExample-english}\xspace} +\newcommand{\sbeSqueaksourceUrl}{\url{http://www.squeaksource.com/SqueakByExample60}\xspace} % FOR LATER: use \SqVersionSwitch here \newcommand{\hpiswa}{\url{hpi.de/swa}\xspace} %============================================================= %:Markup macros for proof-reading From 53c3b2537aa0ee860c73a2c3c6c05a34ebb2c2ea Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Tue, 13 Jun 2023 10:12:42 +0200 Subject: [PATCH 3/5] Slightly revise description of SqueakSource in FirstApp so that the reader does not run into an access denied error --- FirstApp/FirstApp.tex | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/FirstApp/FirstApp.tex b/FirstApp/FirstApp.tex index cc931e1a..13da2ae9 100644 --- a/FirstApp/FirstApp.tex +++ b/FirstApp/FirstApp.tex @@ -834,7 +834,7 @@ \subsection{Saving and loading code with Monticello} \subsection{\ind{SqueakSource}: a sharing platform for Monticello} We think that the best way to save your code and share it is to create an account for your project on a SqueakSource server. -SqueakSource is like GitHub\footnote{\url{www.github.com}}: +SqueakSource is similar to GitHub\footnote{\url{www.github.com}}: It is a web front-end to an HTTP Monticello server that lets you manage your projects. There is a public SqueakSource server at \url{http://www.squeaksource.com}, and a copy of the code related to our game is stored there at \sbeSqueaksourceUrl. You can look at this project with a web browser, but it's a lot more productive to do so from inside \squeak, using the Monticello browser, which lets you manage your packages. @@ -891,13 +891,16 @@ \subsection{\ind{SqueakSource}: a sharing platform for Monticello} \label{fig:monticello3}} \end{figure} -\dothis{Click on \button{Save} to save the first version of your Quinto game on SqueakSource.} - To load a package into your image, you must first select a particular version. You can do this in the repository browser, which you can open using the \button{Open} button or the yellow-button menu. Once you have selected a version, you can load it onto your image. -\dothis{Open the \ct{SBE-Quinto} repository you have just saved.} +\dothis{Load the latest version of the \ct{SBE-Quinto} repository.} + +You can also use the \button{Save} button to save another version of your package to the repository. +This requires you to have write access to the repository. + +\dothis{Select the \ct{package-cache} repository in the repository browser and click on \button{Save} to save the your own version of the Quinto game on your machine.} Monticello has many more capabilities, which will be discussed in depth in \charef{env}. %You can also look at the on-line documentation for Monticello at \url{http://www.wiresong.ca/Monticello/}. From a0e4b0b8786a1911e92c1b60d764443a0766a46d Mon Sep 17 00:00:00 2001 From: Christoph Thiede Date: Tue, 13 Jun 2023 10:41:28 +0200 Subject: [PATCH 4/5] Sketch the release process in the readme --- README.md | 39 ++++++++++++++++++++++++++++++++++++--- gh-actions-release.png | Bin 0 -> 24395 bytes 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 gh-actions-release.png diff --git a/README.md b/README.md index b7965602..5bd43f70 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,37 @@ For more insights into the build process, have a look at the [`Makefile`](/Makef The book has been reformatted to 6"x9" (for Lulu). If you want to print any part of the book, you will find that printing 2 up at 140% works well. +## Release Process + +### 1. Actual release + +- Make sure the CI is green. +- Check the relevant PDF from the latest prerelase manually for any slips (i.e., search for `missing figure` and `??`, check for layout quirks, maybe scan the build log for warnings). +- Trigger a new release from the Actions tab of the GitHub repository and update the settings: + + ![GitHub Actions: Run workflow](gh-actions-release.png) + + - Tick the `Draft` checkbox. + - Specify the Squeak version for the intended edition only (e.g., `["6.0"]`). + - Increase the scale factor to `10` at will. + + Wait for the CI workflow to complete (might take 10 - 20 minutes depending on the scale factor) and recheck the PDF to be sure (esp. for a different scale factor, some figures could look different). + +- Update the sources in the SqueakSource repository (see [SmalltalkSources](#smalltalk-sources)). +- Select the draft release from the Releases section on GitHub, edit it, and publish it. +- Publish the PDF using Lulu or whatever else (maybe we should document this process here as well). +- Announce the new release on the mailing list, squeak.org, etc. + +### 2. Prepare the repository for the next edition + +- Secure the current state of the book in a new release branch (e.g., `release/6.0`). +- Replace the old version with the new version in the CI scripts. +- Drop support for the old edition from the default branch: + - Search the tex sources for all occurrences of `\SqVersionSwitch` and replace them with the argument for the latest version. + - Search the Smalltalk sources (`*.{st,cs}`) for version switches (`(>=|<=) Squeak`) and replace them with the latest version. + - To be sure, search the entire book for mentions of the old Squeak version. +- Update the copyright notice. + --- # Style Rules @@ -212,12 +243,14 @@ When the `make` command is run, the bibliography is automatically built as well. # Smalltalk Sources -The "Squeak by Example" Monticello Repository can be found as a [FileTree](https://github.com/dalehenrich/filetree) repository in the `SmalltalkSources` folder. +The "Squeak by Example" Monticello Repository can be found as a [FileTree](https://github.com/dalehenrich/filetree) repository in the `SmalltalkSources` folder but is best loaded and saved using [Squot](https://github.com/hpi-swa/Squot). -The package SBE-Testing includes as dependencies the code for the hands-on chapters. +The package `SBE-Testing` includes as dependencies the code for the hands-on chapters. It will run all the test code in the latex sources and exercise the hands-on code. -The repository was previously hosted on [squeaksource](http://www.squeaksource.com/@QJbXgqmsC7AwLgNB/jkjcsr-2). +All packages that contain examples relevant to the user are also hosted at SqueakSource at . +Before releasing a new edition of the book, make sure to update these sources using the `SBESqueaksource` class from the `SBE-Extract` package. +The SqueakSource repository is world-readable and can be written by the administrators, which are currently ct and pre. # Coding Style Guide diff --git a/gh-actions-release.png b/gh-actions-release.png new file mode 100644 index 0000000000000000000000000000000000000000..5c57866b2ff4582ac3ec0c26654e3e0aa2b72136 GIT binary patch literal 24395 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 Date: Wed, 14 Jun 2023 14:24:15 +0200 Subject: [PATCH 5/5] partially revert 53c3b2537aa0ee860c73a2c3c6c05a34ebb2c2ea --- FirstApp/FirstApp.tex | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/FirstApp/FirstApp.tex b/FirstApp/FirstApp.tex index 13da2ae9..ea918f36 100644 --- a/FirstApp/FirstApp.tex +++ b/FirstApp/FirstApp.tex @@ -853,7 +853,7 @@ \subsection{\ind{SqueakSource}: a sharing platform for Monticello} \needlines{5} \begin{code}{} MCHttpRepository - location: '!\sbeSqueaksourceUrl!' + location: 'http://www.squeaksource.com/!\emph{YourProject}!' user: '!\emph{yourInitials}!' password: '!\emph{yourPassword}!' \end{code} @@ -864,7 +864,7 @@ \subsection{\ind{SqueakSource}: a sharing platform for Monticello} \needlines{5} \begin{code}{} MCHttpRepository - location: '!\sbeSqueaksourceUrl!' + location: 'http://www.squeaksource.com/!\emph{YourProject}!' user: '' password: '' \end{code} @@ -891,16 +891,13 @@ \subsection{\ind{SqueakSource}: a sharing platform for Monticello} \label{fig:monticello3}} \end{figure} +\dothis{Click on \button{Save} to save the first version of your Quinto game on SqueakSource.} + To load a package into your image, you must first select a particular version. You can do this in the repository browser, which you can open using the \button{Open} button or the yellow-button menu. Once you have selected a version, you can load it onto your image. -\dothis{Load the latest version of the \ct{SBE-Quinto} repository.} - -You can also use the \button{Save} button to save another version of your package to the repository. -This requires you to have write access to the repository. - -\dothis{Select the \ct{package-cache} repository in the repository browser and click on \button{Save} to save the your own version of the Quinto game on your machine.} +\dothis{Open the \ct{SBE-Quinto} repository you have just saved.} Monticello has many more capabilities, which will be discussed in depth in \charef{env}. %You can also look at the on-line documentation for Monticello at \url{http://www.wiresong.ca/Monticello/}.