Interested in contributing to the ES4X? Want to report a bug? Before you do, please read the following guidelines.
# Submission context
# Got a question or problem?
For quick questions there's no need to open an issue as you can reach us on gitter.im (opens new window).
# Found a bug?
If you found a bug in the source code, you can help us by submitting an issue to the issue tracker (opens new window) in our GitHub repository. Even better, you can submit a Pull Request with a fix. However, before doing so, please read the submission guidelines.
# Missing a feature?
You can request a new feature by submitting an issue to our GitHub Repository. If you would like to implement a new feature, please submit an issue with a proposal for your work first, to be sure that it is of use for everyone, as the Material theme is highly opinionated. Please consider what kind of change it is:
For a major feature, first open an issue and outline your proposal so that it can be discussed. This will also allow us to better coordinate our efforts, prevent duplication of work, and help you to craft the change so that it is successfully accepted into the project.
Small features and bugs can be crafted and directly submitted as a Pull Request. However, there is no guarantee that your feature will make it into the master, as it's always a matter of opinion whether if benefits the overall functionality of the theme.
# Submission guidelines
# Submitting an issue
Before you submit an issue, please search the issue tracker, maybe an issue for your problem already exists and the discussion might inform you of workarounds readily available.
We want to fix all the issues as soon as possible, but before fixing a bug we need to reproduce and confirm it. In order to reproduce bugs we will systematically ask you to provide a minimal reproduction scenario using the custom issue template. Please stick to the issue template.
Unfortunately we are not able to investigate / fix bugs without a minimal reproduction scenario, so if we don't hear back from you we may close the issue.
# Submitting a Pull Request (PR)
Search GitHub for an open or closed PR that relates to your submission. You don't want to duplicate effort. If you do not find a related issue or PR, go ahead.
Development: Fork the project, make your changes in a separate git branch and add descriptive messages to your commits.
Build: Before submitting a pull requests, build the project. This is a mandatory requirement for your PR to get accepted, as the theme should at all times be installable through GitHub.
Pull Request: After building the theme, commit the compiled output, push your branch to GitHub and send a PR to
es4x:develop. If we suggest changes, make the required updates, rebase your branch and push the changes to your GitHub repository, which will automatically update your PR.
After your PR is merged, you can safely delete your branch and pull the changes from the main (upstream) repository.
# Building the world
In order to build the
world you will need several tools installed in your host
- GraalVM (opens new window)
- Apache Maven (opens new window)
- Node.js (opens new window)
- NPM (opens new window)
If you have
Maven installed you might skip the installation of
NPM although the
node binary included with
GraalVM is known to have some
performance issues with some of
npm packages such as
This projects is composed of several main modules/components:
- es4x (opens new window) the main java code that bootstraps the GraalJS and Vert.x
- pm (opens new window) the package manager utility
- codegen (opens new window) the codegen library
that will generate the
npmpackage counterparts for
- generator (opens new window) maven script that
npmfull package for a given
- docs (opens new window) the directory you're seeing right now.
# Build the Java part
Building the java part is as simple as:
mvn -Pcodegen install
Use the profile
codegen if you want to generate the npm modules too. Otherwise only:
# Deploying the NPM modules
During development you might want to deploy to a local NPM registry, one of these registries you can use is verdaccio (opens new window).
npm install -g verdaccio
Once you have it installed follow the instructions to login:
npm adduser --registry "http://localhost:4873"
package upload limits
pm package is quite large and will not be handled by default by
verdaccio in order to get the upload to work you will need to update the default config and restart.
Edit the file
~/.config/verdaccio/config.yaml and add:
# max package size max_body_size: 100mb
Once you have a local registry configured you can deploy the
npm packages locally:
cd generator mvn -Dnpm-registry="http://localhost:4873" \ clean \ generate-sources \ exec:[email protected]
If you would like to have API docs for the generated packages then you will need a few extra tools and an extra maven.
# install the API doc generator npm install -g typedoc # deploy to verdaccio and generate docs to the docs folder cd generator mvn -Dnpm-registry="http://localhost:4873" \ clean \ generate-sources \ exec:[email protected] \ exec:[email protected]
# Deploy PM to npm
For convenience, the
pm project can also be deployed to the NPM registry, in order to achieve this:
cd pm mvn package ./publish.sh local
This will generate the maven fat jar and the final script will convert it to a npm package and deploy to your local verdaccio installation.