[squeak-dev] The Trunk: ReleaseBuilder-mt.221.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Dec 9 13:50:13 UTC 2021

Marcel Taeumel uploaded a new version of ReleaseBuilder to project The Trunk:

==================== Summary ====================

Name: ReleaseBuilder-mt.221
Author: mt
Time: 9 December 2021, 2:50:12.537766 pm
UUID: 49557ab7-ea9b-2947-9e3d-cc60cd3212b6
Ancestors: ReleaseBuilder-mt.218, ReleaseBuilder-ct.205, ReleaseBuilder-ct.217, ReleaseBuilder-ct.219, ReleaseBuilder-ct.220

Adds commentary. Merges some fixes from the inbox.

=============== Diff against ReleaseBuilder-mt.218 ===============

Item was changed:
  Object subclass: #ReleaseBuilder
  	instanceVariableNames: ''
  	classVariableNames: 'DeferredTask NextMajorVersion NextMinorVersion NextTask QAndA'
  	poolDictionaries: ''
  	category: 'ReleaseBuilder'!
+ !ReleaseBuilder commentStamp: 'mt 12/9/2021 13:32' prior: 0!
- !ReleaseBuilder commentStamp: 'mt 9/25/2019 09:30' prior: 0!
  I'm the script that prepares a trunk image for release.
  Just do "ReleaseBuilder doNextStep" repeatedly until the next release is done.
  For the final release step:
  - If you want to try it locally, change #releaseLocally to return true.
+ - Most of the code operates (read-only) on the #buildRepository, which is usually the trunk. For releases, there is a #releaseRepository, to which some package versions will be copied from trunk.
+ ***
+ We use GitHub Actions (CI) to bundle .image, .changes, .sources, and appropriate VMs. For more information, visit https://github.com/squeak-smalltalk/squeak-app. The CI scripts will update the image and eventually call:
+ ReleaseBuilder prepareEnvironment.
+ ReleaseBuilder saveAndQuit.
+ Each version's base image (and other files) for a bundle is located here: http://files.squeak.org/base/
+ For a new release's base image, see #saveAsNewRelease, which will be triggered from #step4Release via #doNextStep.!
- - Most of the code operates (read-only) on the #buildRepository, which is usually the trunk. For releases, there is a #releaseRepository, to which some package versions will be copied from trunk.!

Item was changed:
  ----- Method: ReleaseBuilder class>>addAdditionalRepositories (in category 'scripts - support') -----
- 	MCRepositoryGroup default addRepository: self inboxRepository.
  			) collect: [:url |
  				MCRepositoryGroup default addRepository: (MCHttpRepository
  					location: url
  					user: 'squeak'
  					password: 'squeak')].!

Item was added:
+ ----- Method: ReleaseBuilder class>>addGlobalRepository: (in category 'scripts - support') -----
+ addGlobalRepository: anMCRepository
+ 	"Adds the given repository to all working copies in the image. Useful for generic repositories such as trunk, inbox, and treated."
+ 	MCRepositoryGroup default
+ 		addRepository: anMCRepository.
+ 	MCWorkingCopy allManagers
+ 		do: [ :each | each repositoryGroup addRepository: anMCRepository ].!

Item was changed:
  ----- Method: ReleaseBuilder class>>changesBetweenReleases (in category 'scripts - changes') -----
  	| repos configs result |
+ 	repos :=#(53) collect: [:ea |
- 	repos :=#(52) collect: [:ea |
  		    location: 'http://source.squeak.org/squeak', ea
  		    user: 'squeak'
  		    password: 'squeak')].
  	configs := repos collect: [:ea | ea description -> (self firstConfigurationIn: ea map: 'update')].
  	configs := configs, {(self buildRepository description -> self buildConfiguration)}.
+ 	configs do: [:repoToConfig | repoToConfig value updateFromRepositories]. "Update the latest map in each repository with that repository's latest package versions." 
  	result := OrderedDictionary new.
  	configs overlappingPairsDo: [:c1 :c2 |
  			at: c2 key
  			put: (self changesBetween: c1 value and: c2 value)].
  	^ result

Item was added:
+ ----- Method: ReleaseBuilder class>>cleanUp: (in category 'class initialization') -----
+ cleanUp: aggressive
+ 	"Ignore. Do not corrupt state during release preparation, which includes system-wide clean-up but must ignore the receiver."
+ !

Item was changed:
  ----- Method: ReleaseBuilder class>>fileOutChangesBetweenReleases (in category 'scripts - changes') -----
  	"Generate mark-down files with all commit messages by release. To be used to write release notes."
  	| fileNames |
  	fileNames := OrderedCollection new.
  	self changesBetweenReleases keysAndValuesDo: [:location :c |
  		fileNames add: ('commits-{1}.md' format: {(location findTokens: '/') last}).
  		FileStream forceNewFileNamed: fileNames last do: [:strm |
+ 		c withKeysSortedSafely keysAndValuesDo: [:pkg :changes |
- 		c keysAndValuesDo: [:pkg :changes |
  			strm nextPutAll: '# '; nextPutAll: pkg name; cr.
+ 			(changes withKeysSorted: #dateAndTime ascending) keysAndValuesDo: [:ver :msg |
+ 				strm
+ 					nextPutAll: '- **';
+ 					nextPutAll: ver name;
+ 					nextPutAll: ':** '.
+ 				msg lines withIndexDo: [:line :index | line ifNotEmpty: [:m |
+ 					index > 1 ifTrue: [strm nextPutAll: '  '].
+ 					strm nextPutAll: m.
+ 					strm cr]]]]]].
- 			changes keysAndValuesDo: [:ver :msg |
- 				msg linesDo: [:line | line withBlanksTrimmed ifNotEmpty: [:m |
- 					(m first isDigit or: [{$*. $-} includes: m first])
- 						ifTrue: [strm nextPutAll: '   ', m]
- 						ifFalse: [strm nextPutAll: ' - ', m].
- 					strm cr]].
- 				strm nextPutAll: '------------------'; cr]]]].
  	self inform: 'Files written:\' withCRs, (fileNames joinSeparatedBy: String cr).!

Item was changed:
  ----- Method: ReleaseBuilder class>>requestNextReleaseVersion (in category 'manual') -----
  	"self requestNextReleaseVersion"
+ 	| nextMinor nextMajor current next |
- 	| nextMinor nextMajor current |
  	current := {
  		SystemVersion current majorVersionNumber.
  		SystemVersion current minorVersionNumber}.
  	nextMinor := {
  		current first.
  		current second + 1}.
  	nextMajor := {
  		current first + 1.
+ 	next := Project uiManager
+ 		chooseFromLabeledValues: (OrderedDictionary new
+ 			at: ('{1}.{2}' format: {nextMinor first. nextMinor second}) put: nextMinor;
+ 			at: ('{1}.{2}' format: {nextMajor first. nextMajor second}) put: nextMajor;
+ 			yourself)
+ 		title: 'Please Choose Next Version'.
+ 	next ifNil: [^ self requestNextReleaseVersion].
+ 	NextMajorVersion := next first.
+ 	NextMinorVersion := next second.!
- 	(UIManager default
- 		chooseFrom: {
- 			'{1}.{2}' format: {nextMinor first. nextMinor second}.
- 			'{1}.{2}' format: {nextMajor first. nextMajor second}}
- 		title: 'Please Choose Next Version') in: [:answer |
- 			answer ifNil: [^ self requestNextReleaseVersion].
- 			answer = 1 ifTrue: [
- 				NextMinorVersion := nextMinor second].
- 			answer = 2 ifTrue: [
- 				NextMajorVersion := nextMajor first.
- 				NextMinorVersion := 0]].!

Item was changed:
  ----- Method: ReleaseBuilder class>>saveClean (in category 'saving') -----
+ 	"Use this to clean up the current image and save it under a new name."
- 	"Use this to create clean up the current image and save it under a new name."
  	(Project uiManager
  		confirm: 'This will update and clean-up the current (!!) image,\which is then saved under the same (!!) name.\\Do you want to continue?' withCRs
  		title: 'Clean Image') == true ifFalse: [^ self].
  	self saveAndQuit.!

Item was changed:
  ----- Method: ReleaseBuilder class>>setPreferences (in category 'scripts') -----
  	"Preferences class defaultValueTableForCurrentRelease"
  "	Preferences outOfTheBox."  "<-- uncomment after #defaultValueTableForCurrentRelease is fixed up."
  	"General User interaction"
  		enable: #generalizedYellowButtonMenu ;
  		enable: #swapMouseButtons;
  		disable: #mouseOverForKeyboardFocus.
  	Morph indicateKeyboardFocus: true.
  	Project uiManager openToolsAttachedToMouseCursor: false.
  	SearchBar useScratchPad: false.
  	HandMorph sendMouseWheelToKeyboardFocus: false.
  	HandMorph synthesizeMouseWheelEvents: true.
  	"Text input."
  		 autoEnclose: true ;
  		 autoIndent: true ;
  		 encloseSelection: false ;
  		 destructiveBackWord: false ;
  		 blinkingCursor: true ;
  		 dumbbellCursor: false.
  	PluggableTextMorph simpleFrameAdornments: false.
  	TextMorphForEditView draggableTextSelection: true.
  	SystemWindow reuseWindows: false.
  	SystemWindow windowsRaiseOnClick: true.
  	SystemWindow windowTitleActiveOnFirstClick: true.
  	Model windowActiveOnFirstClick: false. "Not good for little screen real estate."
  	Model useColorfulWindows: false. 
  		disable: #fastDragWindowForMorphic.
  		gripThickness: 4;
  		handleLength: 25.
  		drawCornerResizeHandles: false;
  		drawEdgeResizeHandles: false.
  		showSplitterHandles: false;
  		smartHorizontalSplitters: false;
  		smartVerticalSplitters: false.
  	"Scroll bars."
  		enable: #scrollBarsNarrow;
  		enable: #scrollBarsOnRight;
  		enable: #alwaysHideHScrollbar;
  		disable: #alwaysShowHScrollbar;
  		disable: #alwaysShowVScrollbar.
  		scrollBarsWithoutArrowButtons: true;
  		scrollBarsWithoutMenuButton: true.
  		useRetractableScrollBars: false.
  	"Rounded corners."
  	Morph preferredCornerRadius: 8.
  	SystemWindow roundedWindowCorners: false.
  	DialogWindow roundedDialogCorners: false.
  	MenuMorph roundedMenuCorners: false.
  	PluggableButtonMorph roundedButtonCorners: false.
  	ScrollBar roundedScrollBarLook: false.
  	SystemWindow gradientWindow: false.
  	DialogWindow gradientDialog: false.
  	MenuMorph gradientMenu: false.
  	PluggableButtonMorph gradientButton: false.
  	ScrollBar gradientScrollBar: false.
  	Preferences enable: #menuAppearance3d.
  	Morph useSoftDropShadow: true.
  	"Lists and Trees"
  		filterableLists: true;
  		clearFilterAutomatically: false;
  		clearFilterDelay: 500;
  		highlightHoveredRow: true;
  		highlightPreSelection: false;
  		menuRequestUpdatesSelection: true.
  		filterByLabelsOnly: false;
  		maximumSearchDepth: 1.
  	"Standard Tools"
  		showWorldMainDockingBar: true;
  		showSecondsInClock: true;
  		twentyFourHourClock: true.
  	SearchBar useSmartSearch: true.
  	Workspace shouldStyle: false.
  		forceUpdate: true;
  		redirectToStdOut: false;
  		characterLimit: 20000.
  		listClassesHierarchically: true;
  		showClassIcons: true;
  		showMessageIcons: true;
  		sortMessageCategoriesAlphabetically: true.
  	SystemBrowser browseWithDragNDrop: true.
  	MessageSet useUnifiedMessageLabels: true.
  		enable: #annotationPanes;
  		defaultAnnotationRequests: #(timeStamp author messageCategory implementorsCount allChangeSets);
  		enable: #optionalButtons;
  		disable: #diffsWithPrettyPrint;
  		enable: #traceMessages;
  		enable: #alternativeBrowseIt;
  		enable: #menuWithIcons;
+ 		enable: #visualExplorer;
+ 		disable: #showSharedFlaps.
- 		enable: #visualExplorer.
  	Preferences disable: #debugLogTimestamp.
  		enable: #showBoundsInHalo ;
  		disable: #alternateHandlesLook;
  		disable: #showDirectionHandles.
  		haloForAll: true;
  		metaMenuForAll: true.
  	NetNameResolver enableIPv6: false.
  		allowUnderscoreAsAssignment: true;
  		prefAllowUnderscoreSelectors: true.
  	Deprecation showDeprecationWarnings: true
  	"that's all, folks"!

Item was changed:
  ----- Method: ReleaseBuilder class>>step0AssureAlpha (in category 'manual - steps') -----
  	"Re-open the trunk again."
+ 	[self requestNextReleaseVersion.
+ 	self setNewSystemVersion: self versionStringAlpha]
+ 		ensure: [NextMajorVersion := NextMinorVersion := nil].!
- 	self requestNextReleaseVersion.
- 	self setNewSystemVersion: self versionString, 'alpha'.!

Item was changed:
  ----- Method: ReleaseBuilder class>>step4Release (in category 'manual - steps') -----
+ 	"Creates the release. New file, cleaned up."
- 	"Creates the release. New file, clean-ed up."
  	(UIManager default
  		confirm: ('Do you want release {1}{2}?' withCRs format: {
  						self versionString.
  						(self releaseLocally ifTrue: [' locally'] ifFalse: [''])})
  		title: 'Release Builder Step 4 of 4: The Release')
  		 ifFalse: [^ self].
  	"If you re-open the current trunk image again, it will be an alpha version for the next release."
  	DeferredTask := [self step0AssureAlpha].
  	"We continue with preparing the release image."
  	NextTask := [self saveAsNewRelease].
  	"Now save it but do not quit."
  	Smalltalk snapshot: true andQuit: false.!

Item was changed:
  ----- Method: ReleaseBuilder class>>switchToNewRepository: (in category 'scripts - support') -----
+ switchToNewRepository: anMCRepository
- switchToNewRepository: anMCRepository 
  	MCMcmUpdater defaultUpdateURL: anMCRepository description.
  	MCRepositoryGroup reset.
+ 	MCWorkingCopy allManagers
+ 		do: [ :each | each repositoryGroup: MCRepositoryGroup new ].
+ 	self
+ 		addGlobalRepository: anMCRepository;
+ 		addGlobalRepository: MCRepository inbox;
+ 		addGlobalRepository: MCRepository treated.!
- 	MCRepositoryGroup default addRepository: anMCRepository.
- 	MCWorkingCopy allManagers do:
- 		[ : each | each repositoryGroup:
- 			(MCRepositoryGroup new
- 				 addRepository: anMCRepository ;
- 				 addRepository: MCRepository inbox ;
- 				 addRepository: MCRepository treated ;
- 				 yourself) ]!

Item was changed:
+ (PackageInfo named: 'ReleaseBuilder') postscript: 'ReleaseBuilder classPool
+ 	at: #NextMajorVersion put: nil;
+ 	at: #NextMinorVersion put: nil.'!
- (PackageInfo named: 'ReleaseBuilder') postscript: '"See forum.world.st/NOTICE-Duplicate-Monticello-version-names-td5117695.html"
- MCMcmUpdater default dependentPackages do: [:package |
- 	package workingCopy repositoryGroup
- 		addRepository: MCRepository inbox;
- 		addRepository: MCRepository treated].
- '!

More information about the Squeak-dev mailing list