How Moose manages stable versions
developmentv8, v9, v10). These branches are intended for bugfixes and cherry-picked features rather than active development. The development branch is considered unstable and is where the latest work occurs.repository·development·Indexed 41 days ago
https://github.com/moosetechnology/mooseAn open-source platform for software and data analysis providing services for importing, parsing, modeling, measuring, querying, and mining data. It integrates with Pharo and supports various Famix generators for analyzing languages such as Java, C#, .NET, SAP, Fortran, and C/C++. The platform includes tools for static analysis, such as identifying tested methods and extracting REST services from Java Spring applications.
v8, v9, v10). These branches are intended for bugfixes and cherry-picked features rather than active development. The development branch is considered unstable and is where the latest work occurs.To find all methods within specific packages that carry a particular pragma or annotation, follow this workflow:
AnnotationType in your model (e.g., use FamixStAnnotationType for Pharo code).AnnotationType to match your target (e.g., by name, such as "example").AnnotationInstance objects for that type.annotatedEntity property of those instances to get the actual methods or entities being annotated.Example:
Searching for the example pragma in a Rubric package model returns specific methods like RubFloatingEditorBuilder>>exampleCommandLauncher.
If a stable Moose version requires specific commits from related repositories (like Famix, FamixTagging, or MooseIDE), follow these steps in those repositories:
vX.Y.Z) via the GitHub interface.vX.x.x and vX.Y.x to point to the release commit. This must be done via the command line or a Git tool (not the GitHub UI):Ensure you have three tags pointing to the release commit: the specific version, the major/minor tag, and the patch tag.
You can determine if a specific method is likely tested by analyzing its incoming invocations.
Steps to perform this analysis:
Example Scenario:
In a model containing Collections-Atomic and Collections-Atomic-Tests, you can check if LIFOQueue>>nextOrNil or WaitfreeQueue>>nextOrNil are tested by verifying if they are directly invoked by test methods.
You can extract the available REST services, including their methods and parameters, from a Java Spring project by analyzing annotations:
@Path annotation.@Path and identify their path parameters.@GET, @POST).@Path annotations applied directly to the methods.Note: This requires a Java model, which can be generated using VerveineJ.
You can load Moose into an existing Pharo image using Metacello. The command you use depends on the version of Pharo you are running and the version of Moose you wish to install.
#### Latest version: Moose 13 (Pharo 13 or 14)
Metacello new
baseline: 'Moose';
repository: 'github://moosetechnology/Moose:development/src';
onWarningLog;
load
#### Stable version: Moose 12 (Pharo 12 or 13)
[ Metacello new
baseline: 'Moose';
repository: 'github://moosetechnology/Moose:v12.x.x/src';
load ]
on: MCMergeOrLoadWarning
do: [ :warning | warning load ]
#### Old stable version: Moose 11 (Pharo 11 or 12)
[ Metacello new
baseline: 'Moose';
repository: 'github://moosetechnology/Moose:v11.x.x/src';
load ]
on: MCMergeOrLoadWarning
do: [ :warning | warning load ]To make new Moose images available in Pharo Launcher, you must define them in a sources.list format.
mysources.listCreate a local mysources.list file to verify your configuration. Example structure:
[
PhLTemplateSource {
#type : #URLGroup,
#name : 'Moose 9 - stable',
#templates : [
PhLTemplateSource {
#type : #URL,
#name : 'Moose9',
#url : 'https://github.com/moosetechnology/Moose/releases/download/v9.x.x/Moose9-stable-Pharo64-10.zip'
}
]
}
]pharo-launcher repository.sources.list to include your new Moose sources and remove obsolete versions.pharo-launcher repository.https://files.pharo.org. If the update is not processed, contact the Pharo Launcher maintainers (Christophe Demarrey, Markus Denker, Guille Polito, or Stéphane Ducasse).[
PhLTemplateSource {
#type : #URLGroup,
#name : 'Moose 9 - stable',
#templates : [
PhLTemplateSource {
#type : #URL,
#name : 'Moose9',
#url : 'https://github.com/moosetechnology/Moose/releases/download/v9.x.x/Moose9-stable-Pharo64-10.zip'
}
]
}
]To map out where a class (and its inheritance hierarchy) is being instantiated, use the following logic:
new MyClass() in Java).Use Case: This is useful for determining all widget creation points in a GUI application. For Java models, use the VerveineJ parser.
When creating a new stable branch (e.g., v10) from development, perform the following updates:
Update MooseVersion>>#initialize in the Smalltalk source to reflect the new major version number. This ensures MooseHelp and the Moose welcome window display the correct version.
Update Moose/.github/workflows/versions.json with:
vN.x.x).To build a new image after every push to the stable branch, update Moose/.github/workflows/continuous.yml in the development branch:
on: push:
branches:
- development
- v9
- # new stable branch vNIn GitHub Settings > Branches, add a rule for the new branch:
Moose supports various Famix generators to parse and model different programming languages for software analysis. Available generators include: