Hello team,
I'd like to share the way how to develop che-theia on
che.openshift.io
where we have a restriction on disk space for projects in one
gigabyte.
The main idea is using temporary directory in the root where the
limitation
of disk space is 3 gigabytes, which is pretty enough to build
the project.
The development flow includes:
- workspace creation, cloning theia sources
- copying sources to /tmp/theia directory
- initializing che-theia
- building
- launching
- making and applying changes
# Workspace creation, cloning theia sources
To create a workspace I use devdile[1], which has a set of
commands helping
me to operate with source code. After starting, my workspace has
cloned two theia and che-theia projects. I’m focused on
developing
packages in theia core, that’s why sources of che-theia
temporary are not used.
# Copying sources to '/tmp/theia' directory
To copy sources to '/tmp/theia' directory I use rsync, running
in che-dev container.
As eclipse/che-theia-dev image does not have rsync tool, I had
to extend
that image[2] and install rsync. The devfile has '1 Rsync Theia'
command to easily
synchronizing '/protects/theia' directory with '/tmp/theia'.
$ rsync -rtv --exclude='node_mobules' /projects/theia/
/tmp/theia/;
# Initlalizing che-theia
To initialize che-theia we need to run 'che:theia init' in
'/tmp/theia' directory.
The '2 Init che:theia' command does that in one click.
# Building
'3 Build che:theia' command runs 'yarn' in '/tmp/theia'
directory.
# Launching
For Che-Theia I prefer to use dedicated directories for plugins,
default plugins and
for projects, which is used as Theia workspace directory. In the
directory with default
plugins I copy all the plugins from '/default-theia-plugins',
which is accessible only from
'theia-ide'. That's why '4.1 Prepare theia-* dirs' command
is running in that container.
$ mkdir -v /projects/theia-default-plugins
$ mkdir -v /projects/theia-plugins
$ mkdir -v /projects/theia-projects-dir
$ cd /default-theia-plugins
$ cp -v * /projects/theia-default-plugins/
'4.2 Launch' command sets necessary variables and launches
Che-Theia
in 'che-dev' container.
$ cd /tmp/theia/examples/assembly
$ export CHE_PROJECTS_ROOT="/projects/theia-projects-dir"
$ export
THEIA_DEFAULT_PLUGINS="local-dir:///projects/theia-default-plugins"
$ export
THEIA_PLUGINS="local-dir:///projects/theia-plugins"
$ export THEIA_PLUGIN_ENDPOINT_DISCOVERY_PORT='2506'
$ theia start /projects/theia-projects-dir
--hostname=0.0.0.0 --port=3010
To open Che-Theia, click 'che-dev/theia-dev-flow' node in My
Workspace view.
# Making and applying changes
Each time after doing changes, I synchronize sources from
'/projects/theia' with
sources in '/tmp/theia' using '1 Rsync Theia' command.
Then I build Theia with '3 Build che:theia' and launch with
'4.2 Launch'.
## Solve problem with build
If you try to repeat this flow, you may face a problem with
building of Che-Theia.
It’s because some build scripts in Theia upstream have been
changed[3], but Che-Theia
is still not updated.
The solution is to checkout to the previous commit 'e1d08d00f'
immediately after workspace startup.
[1] -
https://github.com/vitaliy-guliy/che.openshift.io-resources/blob/master/devfile.yaml
[2] -
https://github.com/vitaliy-guliy/che.openshift.io-resources/blob/master/Dockerfile
[3] -
https://github.com/eclipse/che/issues/15851