Download the LionWeb-MPS version that matches your MPS version from Maven Central.
The artifacts are named io.lionweb.lionweb-mps.lionweb-mps-<MPS release>-lw<LionWeb-version>
.
Currently available are:
- LionWeb version 2023.1
Load them into your MPS project as project library.
-
MPS version 2021.1
-
lioncore-java
For updating to a newer version of this dependency, change the version number in
gradle.properties
and run./gradlew resolveLibs
.
- run
./gradlew resolveLibs
to download required libraries. - In MPS, create path variable
lionweb-mps.home
pointing to the directory containing this readme file.
-
build
The usual build model, to be used with mps-gradle-plugin -
cli
Command-line interface with separate readme -
client
Proof-of-concept of MPS as LionWeb client. Only works if deployed as IDEA plugin. -
lang
The main part of LionWeb-MPS.converter
All conversion code independent of LionWeb-Java (and thus JSON).io.lionweb.mps.converter
Contains converters between deployed / models of MPS languages and LionWeb languages (expressed as instances ofio.lionweb.mps.m3
).io.lionweb.mps.converter.lang
Provides concepts to easily configure and execute all available converters.
json
All JSON-related conversion codeio.lionweb.lionweb.java
Model stubs of LionWeb-Java.io.lionweb.mps.json
Contains converters beween- deployed MPS languages and LionWeb languages in JSON format
- instances of
io.lionweb.mps.m3
and LionWeb languages in JSON format - M1 models in MPS and LionWeb JSON format
m3
Languages to extend and/or implement LionWeb in MPS.io.lionweb.mps.m3
Contains LionCore meta-meta-model as MPS language.io.lionweb.mps.specific
Language to represent MPS-specifics as LionWeb Annotations (e.g.BaseConcept.virtualPackage
).io.lionweb.mps.structure.attribute
Language to represent LionCore-specifics in MPS Languages (e.g.IKeyed.key
orProperty.optional
).
-
server
Teaches MPS to act as a bulk model server / repository. -
test
Tests for all functionality abovedependencies
Test languages to test fine-grained dependencies (FineGrainedClosureLanguage2JsonConverter
)langs
Other test languagessupport
Code to simplify testingio.lionweb.mps.testsupport
Provides useful concepts for testingArbitraryContainer
Can host arbitrary other nodes. Needed because when executing node tests, MPS creates temporary model copies and keeps references perTestNode
. If we need consistent node ids across root nodes, they need to be contained in the sameTestNode
, and thus inside anArbitraryContainer
.AssertMatchVerbose
An extension of MPS' standardassert match
statement. Provides detailled information about differences instead of just failing.
io.lionweb.mps.converter.test
Tests for non-JSON converters.io.lionweb.mps.converter.test.mpsextensions
Tests that depend on MPS-extensions to be deployed. LionWeb-MPS does not depend on MPS-extensions. This solutions contains tests stemming from real-world issues. We don't execute it in CI yet (see gradle-mps-plugin feature request).io.lionweb.mps.converter.test.usebroken
Tests LionWeb-MPS behavior with broken languages. Not executed in CI, as it depends onio.lionweb.mps.converter.TestLangBroken
which cannot be built in CI.io.lionweb.mps.json.test
Tests for JSON-related converters. Contains all reference JSON test files inresources
folder.io.lionweb.mps.lang.test
Tests validators, scopes, and intentions of languages inm3
virtual folder.io.lionweb.mps.server.test
Tests MPS bulk model server. Not executed in CI.
-
xx_broken
Broken modules. Don't expect them to build.bla
Proof-of-Concept model source to use MPS as LionWeb client.io.lionweb.mps.converter.test.disabled
Tests for importing LionWeb Languages as MPS languages. This functionality is currently not maintained, but might be re-activated in the future.io.lionweb.mps.m3.selfdescription
Scratch book.io.lionweb.mps.converter.TestLangBroken
Intentionally broken language for testing purposes.
It is suggested to use JDK 11. Later JDKs could cause errors.
Run:
./gradlew build
Read about LionWeb Extensions on MPS' Language Structure Aspect and LionWeb Converter Language.
Refer to our design document.
We have one "main" branch per supported MPS version, e.g. mps2021.1
.
We use the latest patch of each supported MPS version, e.g. MPS 2021.1.4.
We implement all new functionality on a branch, based on the oldest supported "main" branch.
Example: The new branch niko/great-new-feature
is based on mps2021.1
.
Once we merged the feature branch back to "main" (in the example: mps2021.1
), we merge the changes into the next higher mps version branch.
Example:
- Use MPS 2021.1 to develop on
niko/great-new-feature
, based onmps2021.1
. - Merge
niko/great-new-feature
intomps2021.1
via pull request. - Open MPS 2021.2 on branch
mps2021.2
and mergemps2021.1
intomps2021.2
. Pushmps2021.2
. - Open MPS 2021.3 on branch
mps2021.3
and mergemps2021.2
intomps2021.3
. Pushmps2021.3
. - Release each "main" branch separately, to create new artifacts
lionweb-mps2021.1-lw2023.1
,lionweb-mps2021.2-lw2023.1
, andlionweb-mps2021.3-lw2023.1
.
When merging into a newer MPS version, follow these steps.
The example assumes we merge mps2021.1
into mps2021.2
.
- Open the target MPS version (2021.2) on the target branch (
mps2021.2
). - Merge the source branch (
mps2021.1
) into your current branch (mps2021.2
). - Double-check
gradle.properties
still contains the proper entries formpsVersionSuffix
should be the target MPS version (2021.2
)mpsVersion
full target MPS version (2021.2.6
)mpsExtensionsVersion
latest version of MPS-extensions for the target MPS version (2021.2.2631.1360a64
)
- Run Migration Assistant
- Run all tests
- Update build model
Use the publish
task to publish a snapshot version (i.e., versions ending with -SNAPSHOT
), and the release
task to release an official version.
Note that you must publish/release from branches named mps<yyyy>.<n>
where <yyyy>
, <n>
are the major, resp. minor version numbers of the MPS version targeted.
Currently, <yyyy>
= 2021, and <n>
= 1, 2, or 3.
In order to be able to publish or release, you need to do the following:
- Register on Sonatype. You'll need the corresponding credentials later on, but note that these are different from the user token you'll also need (to create).
- Ask to be added to the list of users authorized to release under
io.lionweb
.
- Create an user token for Sonatype:
-
Log in on https://s01.oss.sonatype.org/ — which is not the same site as Maven Central! —, by clicking on the “Log in” button in the top-right corner
-
Go to your profile by clicking on your username in the top-right corner, and selecting “Profile”
-
Click on the dropdown menu currently showing “Summary”, and select “User Token”
-
Click the “Generate User Token” (or “Access User Token” if you've already made one)
-
Set the username and password shown as the values of the
ossrhUsername
andossrhPassword
properties in~/.gradle/gradle.properties
:ossrhUsername=<username> ossrhPassword=<password>
After that, you should be able to publish/release by first running
./gradlew publish
to publish a snapshot version, or
./gradlew release
to release an official version.
The release
task involves manual input, which should consist of pressing Enter every of the two times it's requested.
After that, perform the following steps in a browser. Note that interacting with this UI requires a bit of patience. It's probably also good to not try and publish/release multiple versions at the same time.
- Go to https://s01.oss.sonatype.org/ and log in with your general Sonatype credentials.
- Click on “Staging Repositories” on the left, then click the “Refresh” button, and wait a while. (I'm afraid you'll have to get used to that particular action.)
- A row with Profile =
io.lionweb
and Status =open
should appear: click the checkbox in front of it, click the “Close” button, and click the “Confirm” button in the modal dialog that appears. Wait. - Click the “Refresh” button once in a while, until Status =
closed
. You can inspect the “Activity” tab to (try and) see (/infer) what's going. - Click the “Release” button, and click the “Confirm” button in the modal dialog that appears. Wait.
- Click the “Refresh” button once in a while, until the row disappears.
- Enter
lionweb
+ Enter in the text input box under “Artifact Search” to see all artifacts related to LionWeb (including the Java ones). - Look up the row with Artifact =
lionweb-mps-<yyyy>.<n>-lw<v>
, and click on the “Show All Versions” link. Here<v>
is the identification of the version of the LionWeb specification targeted — currently,<v>
=2023.1
. - Verify that the version that you wanted to release appears at the top of the resulting list.
To test publishing to Maven Local:
./gradlew publishToMavenLocal