Giter Site home page Giter Site logo

emoflon / emoflon-ibex-eclipse-build Goto Github PK

View Code? Open in Web Editor NEW
3.0 3.0 2.0 1.37 MB

CI and build scripts for eMoflon::IBeX Eclipse installations.

Home Page: https://emoflon.org

License: GNU General Public License v3.0

Shell 100.00%
emoflon eclipse ci ide modeling model-transformations

emoflon-ibex-eclipse-build's Introduction

eMoflon::IBeX Eclipse Build

Build Eclipse eMoflon::IBeX

This repository is used to automatically build an Eclipse eMoflon::IBeX environment.

Name OS eMoflon installed Dark theme installed Splash image Pattern matcher Additional packages
Eclipse eMoflon user Linux ✔️ ✔️ ✔️ HiPE ✔️
Eclipse eMoflon dev Linux ✔️ ✔️ HiPE, *) ✔️
Eclipse eMoflon user CI Linux ✔️ HiPE
Eclipse eMoflon dev CI Linux HiPE, *)
Eclipse eMoflon dev HiPE Linux ✔️ ✔️ *) ✔️
Eclipse eMoflon user Windows ✔️ ✔️ ✔️ HiPE ✔️
Eclipse eMoflon dev Windows ✔️ ✔️ HiPE, *) ✔️
Eclipse eMoflon dev HiPE Windows ✔️ ✔️ *) ✔️
Eclipse eMoflon user macOS ✔️ ✔️ ✔️ HiPE ✔️
Eclipse eMoflon dev macOS ✔️ ✔️ HiPE, *) ✔️
Eclipse eMoflon dev HiPE macOS ✔️ ✔️ *) ✔️
Eclipse eMoflon user macOS (ARM) ✔️ ✔️ ✔️ HiPE ✔️
Eclipse eMoflon dev macOS (ARM) ✔️ ✔️ HiPE, *) ✔️
Eclipse eMoflon dev HiPE macOS (ARM) ✔️ ✔️ *) ✔️

*) Democles will be installed manually via the emoflon-dev-workspace. Furthermore, all pattern matcher integrations for eMoflon::IBeX (HiPE and Democles) will be installed manually via the emoflon-ibex-dev-workspace.

Additional packages are installed for every non-CI build. Currently, the list of additional packages includes:

Feel free to request others, e.g., via Github issues.

Usage/Installation

Quick installation using curl and bash: $ FOLDER="$HOME/eclipse-apps/emt"; mkdir -p $FOLDER && cd $FOLDER && curl https://raw.githubusercontent.com/eMoflon/emoflon-ibex-eclipse-build/main/emoflon-update.sh | bash -s -- $FOLDER

Normal installation

The latest release can be found here. Download an archive for the version you are looking for from the release page and extract it.

Caution

The built Eclipse version for macOS needs further adjustments to execute correctly. Please follow the steps in the respective documentation if you are using macOS.

Updating

You can use the update script to update your installation. Example usage: $ ./emoflon-update.sh ~/eclipse-apps/emt

Runner requirements

Currently, all actions are run by the cloud-hosted Github runners. All required packages get installed by the CI confguration while running.

In order to run the "Github Actions" pipeline on selfhosted runners, you must ensure that you have at least one properly configured Linux, one Windows runner, and one macOS runner added to the Github project.

Required packages (at least):

  • curl
  • wget
  • tar
  • zip
  • AdoptJDK 16.0.2.7-hotspot (may differ, as this is just used to boot-up Eclipse in headless mode)
  • imagemagick
  • fonts-liberation
  • Github Actions runner
  • WSL2 with, e.g., Debian as distribution (in case the runner is Windows-based)
  • coreutils on macOS

emoflon-ibex-eclipse-build's People

Contributors

maxkratz avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

emoflon-ibex-eclipse-build's Issues

Remove hard-coded org.eclipse.emf.mwe2 versions

To resolve #15, I had to add three dependencies to the package install list:

org.eclipse.emf.mwe2.launcher.feature.group
org.eclipse.emf.mwe2.runtime.sdk.feature.group
org.eclipse.emf.mwe2.language.sdk.feature.group

Unfortunately, there was a dependency problem:

Cannot complete the install because one or more required items could not be found.
	Software being installed: MWE2 Launcher 2.12.2.v20220118-1914 (org.eclipse.emf.mwe2.launcher.feature.group 2.12.2.v20220118-1914)
	Missing requirement: MWE2 Launcher 2.12.2.v20220118-1914 (org.eclipse.emf.mwe2.launcher.feature.group 2.12.2.v20220118-1914) requires 'org.eclipse.equinox.p2.iu; org.eclipse.xtext 2.26.0' but it could not be found

To solve this issue, I've hard-coded the versions of the three features:

org.eclipse.emf.mwe2.launcher.feature.group/2.12.1.v20210218-2134
org.eclipse.emf.mwe2.runtime.sdk.feature.group/2.12.1.v20210218-2134
org.eclipse.emf.mwe2.language.sdk.feature.group/2.12.1.v20210218-2134

(See: #25)

This "fix" is only necessary until xtext v2.26.0 will be released (or the dependency to v2.26.0 will be removed from MWE2 launcher). After said release, the hard-coded version value should be removed from the list.

(See: https://github.com/eclipse/xtext-core/tags)

Rework installation routine of com.seeq.eclipse.importprojects

# Install com.seeq.eclipse.importprojects (by hand because there is no update site)
# https://github.com/seeq12/eclipse-import-projects-plugin/raw/master/jar/com.seeq.eclipse.importprojects_1.4.0.jar
wget -P eclipse/plugins https://github.com/seeq12/eclipse-import-projects-plugin/raw/master/jar/com.seeq.eclipse.importprojects_1.4.0.jar

Build version(s) without dark theme

Somehow, the "Darkest Darktheme" or some of its packages crashes if the built Eclipse (Linux) has to start headless without a desktop environment.

Possible solution: Build version(s) without the dark theme for CI builds etc.

!ENTRY com.genuitec.eclipse.theming.core 4 0 2022-01-14 17:30:29.148
!MESSAGE <null>
!STACK 0
Unexpected token RIGHT SQUARE(]) at position 0.
        at org.json.simple.parser.JSONParser.parse(JSONParser.java:257)
        at org.json.simple.parser.JSONParser.parse(JSONParser.java:92)
        at com.genuitec.eclipse.theming.core.services.ImageReplacementService.loadUnknownImages(ImageReplacementService.java:91)
        at com.genuitec.eclipse.theming.core.services.ImageReplacementService.<init>(ImageReplacementService.java:74)
        at com.genuitec.eclipse.theming.core.services.ImageReplacementService.<clinit>(ImageReplacementService.java:38)
        at com.genuitec.eclipse.theming.core.internal.images.URLImageDescriptorWeaver.weave(URLImageDescriptorWeaver.java:23)
        at com.genuitec.eclipse.theming.core.AbstractWeaverExtension.weave(AbstractWeaverExtension.java:51)
        at com.genuitec.eclipse.patches.internal.InstrumentationManager$WeavingExtension.weave(InstrumentationManager.java:429)
        at com.genuitec.eclipse.patches.internal.InstrumentationManager.weave(InstrumentationManager.java:332)
        at com.genuitec.eclipse.patches.internal.InstrumentationWeaver.weave(InstrumentationWeaver.java:15)
        at org.eclipse.osgi.internal.weaving.WovenClassImpl.call(WovenClassImpl.java:187)
        at org.eclipse.osgi.internal.weaving.WovenClassImpl.call(WovenClassImpl.java:1)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyHookPrivileged(ServiceRegistry.java:1321)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyHooksPrivileged(ServiceRegistry.java:1294)
        at org.eclipse.osgi.internal.weaving.WovenClassImpl.callHooks(WovenClassImpl.java:249)
        at org.eclipse.osgi.internal.weaving.WeavingHookConfigurator.processClass(WeavingHookConfigurator.java:80)
        at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.processClass(ClasspathManager.java:735)
        at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.defineClass(ClasspathManager.java:706)
        at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassImpl(ClasspathManager.java:639)
        at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClassImpl(ClasspathManager.java:607)
        at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClassImpl(ClasspathManager.java:587)
        at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:566)
        at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:335)
        at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:384)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:475)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:403)
        at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:168)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
        at org.eclipse.ui.internal.BrandingProperties.getImages(BrandingProperties.java:115)
        at org.eclipse.ui.internal.ProductProperties.getWindowImages(ProductProperties.java:310)
        at org.eclipse.ui.internal.ProductInfo.getWindowImages(ProductInfo.java:100)
        at org.eclipse.ui.internal.WorkbenchPlugin.getWindowImages(WorkbenchPlugin.java:1031)
        at org.eclipse.ui.internal.Workbench.initializeImages(Workbench.java:1795)
        at org.eclipse.ui.internal.Workbench.createDisplay(Workbench.java:753)
        at org.eclipse.ui.PlatformUI.createDisplay(PlatformUI.java:168)
        at org.eclipse.ui.internal.ide.application.IDEApplication.createDisplay(IDEApplication.java:182)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:125)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1440)

Artifact download gives a zip within a zip

Currently, there is a Github UI limitation that does not allow the download of individual artifact files from a Github Action run.

  1. Start the pipeline.
  2. actions/upload-artifacts@v2 uploads a single zip file (that our build script generated in the run).
  3. The zip file is registered in "Artifacts".
  4. User downloads the artifact which automatically gets zipped again -> zip in zip.

Related:

CI: Update used GitHub actions to fix warnings

Warnings to resolve, e.g., taken from here: https://github.com/eMoflon/emoflon-eclipse-build/actions/runs/3233212005

collect-github-api-artifacts
Node.js 12 actions are deprecated. For more information see: https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/. Please update the following actions to use Node.js 16: actions/upload-artifact, actions/upload-artifact

create-splash-image
Node.js 12 actions are deprecated. For more information see: https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/. Please update the following actions to use Node.js 16: actions/checkout, actions/upload-artifact, actions/checkout

create-splash-image
The save-state command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

create-splash-image
The save-state command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

create-splash-image
The save-state command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/

Run build jobs in parallel to speed-up the CI pipeline

There is a limitation with Github Actions self-hosted runners: They can only run one job concurrently.

Currently, our build-jobs do not depend on each other. Unfortunately, the build time is much higher than necessary because of the runner limitation.

Possible solutions to solve this:

  • Register more Github Action runners (AFAIK can be on the same VM or physical machine)
  • Change the pipeline to first build the user package, upload it and then install the eMoflon packages (hence, create the dev version)

Find workaround for hard-coded JDK path in CI configuration

https://github.com/maxkratz/emoflon-eclipse-build/blob/feature/basic-ci-config/.github/workflows/ci.yml#L46

It would be nicer if the version could be found dynamically.

Possible solution:

  • Specify a generic environment variable on the Windows system, e.g., JDK_VERSION_INSTALLED.
  • Add this variable to the documentation and set it to the specific JDK version that is installed on the runner system.
  • Update the CI configuration to read the value from JDK_´VERSION_INSTALLED.

macOS-based versions: Eclipse.app: "File/Application is damaged and cannot be opened"

Apparently, newer macOS versions show an error that the downloaded Eclipse.app is broken (which it is not).

This seems to be a workaround:

  • Download the respective ZIP archive
  • Extract it
  • Open a terminal and navigate to the folder containing your extracted Eclipse.app
  • Run xattr -d com.apple.quarantine Eclipse.app
  • The Eclipse.app should now start with a normal double click

Builds are failing because of missing Xtext dependency

Cannot complete the install because one or more required items could not be found.
	Software being installed: MWE2 Launcher 2.14.0.v20221117-1134 (org.eclipse.emf.mwe2.launcher.feature.group 2.14.0.v20221117-1134)
	Missing requirement: MWE2 Launcher 2.14.0.v20221117-1134 (org.eclipse.emf.mwe2.launcher.feature.group 2.14.0.v20221117-1134) requires 'org.eclipse.equinox.p2.iu; org.eclipse.xtext 2.29.0' but it could not be found

https://github.com/eMoflon/emoflon-ibex-eclipse-build/actions/runs/3511564481/jobs/5882457122

Remove VIATRA installation

If we decide to kick VIATRA from eMoflon completely, we have to remove it from the build process of this project:

  • VIATRA itself
  • eMoflon VIATRA plug-in

macOS-based versions: Eclipse.app is not runnable

See #44 (comment).

Currently, the Eclipse.app (macOS-based version) isn't directly runnable after downloading it.
Workaround:

  • Open a terminal on your Mac.
  • Navigate to the folder containing the downloaded Eclipse.app.
  • Run the following command (which will prompt you for your password): sudo xattr -cr ./Eclipse.app

Incompatibility: Add Eclipse PMD plugin again

Currently, the Eclipse PMD plugin is incompatible with Eclipse Modeling Tools 2022-12 R. (I've opened an issue at their repository: pmd/pmd-eclipse-plugin#168)

To resolve this, the merging of #70 will remove it from the build.
(See commit b52cefa.)

Once the dependency issue with the PMD plugin is resolved, we should add it back to the additional plugins in this build. (A revert of b52cefa should be enough!)

Xtext v2.32.0 breaks Eclipse Modeling 2023-06: `com.google.inject`: Missing Constraint: Import-Package: sun.misc; version="0.0.0"

Currently, the latest release (https://github.com/eMoflon/emoflon-ibex-eclipse-build/releases/tag/v1.0.0.202309111048) of this Eclipse build is broken.

When trying to start a runtime Eclipse, the following (validation) error message occurs:

Screenshot from 2023-09-11 13-21-00

Since this not an error of this specific Eclipse build, i.e., it also happens when using the latest Eclipse Modeling 2023-06 build and installing Xtext v2.32.0 manually, I created an upstream issue: eclipse/xtext#2800

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.