Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[che-dev] Eclipse Che software factory

Hello.
I believe that most of you should agree that in the modern world
the speed of software development is constantly increasing.
That means not only faster features implementation but also
a faster way to deliver them. Things that were ok decades ago
 - several releases per year, can't satisfy customers and
developers need anymore. Now we are releasing 1-2 times
per iteration (3weeks). But I'm sure we can and should do it faster
 1-2 releases per day and such a speed should not surprise anybody.
I believe our ultimate goals should be release and deliver of each commit.
But that is probably long term goal, that we should aspire.

In this letter, I would like to concentrate on problems
and solutions that can help us to achieve the goal of several
releases per day. One of the bottlenecks
that I'm aware of is the maven releases complexity multiplied
by a number of mavenised projects. I think Nick and Mykhailo are
doing a tremendous job to automate that. However, due to
the nature of the maven and Maven Central, I think we are
very close to the physical limit and can't significantly decrease
the time of this process. That is why I would
like to propose an alternative that can help us
release faster.
 
I believe that the main source of improvement can
be in a fact that most of the mavenised projects
that we release now are don't have to be maven artifacts.
That is:
- che-docs
- che-dashboard
- che-loader
- new dashboard ???
Some of them may be released not that often like: che-parent.
 

I can see several possible alternatives for che-docs,che-dashboard,che-loader

- Github releases.
  Tags: Can be released as zip archives attached in Github releases.
        That archives can be reused during che server docker image build.
  Snapshots: To build che server with the master version of  che-docs,
        che-dashboard, che-loader we can build them all together
        and use relative paths like
        here https://github.com/eclipse/che/blob/master/dockerfiles/che/build.sh#L18
        for example   ${DIR}/../../che-dashboard/dist/
- Github Maven/NPM repository.
   I believe the synergy of integration with
   Github's actions + Github artifact repository can give a significant increase in release time.
   The only drawback I see that to consume these artifacts you have to provide  Github token all the time.

- Docker images.
  We can reuse quay.io and Docker images as the format of redistribution of che-docs,che-dashboard,che-loader.
  For example, we can have Github action that can build a docker image with the apache server and
content of these repositories on each commit and each tag. 
 Che server docker build can reuse these images as builder images.
 Later we can talk about reusing these images as individual servers as we have with che-plugin-registry or che-devfile-registry.
 Or these servers with static content can be combined with a single Apache-based container. 
These docker images can be also parameters of CR of che-operator.
 That can allow having Happy-path testing on multiple repository PR checks.
 
Personally I prefer a docker-image based approach.

With che-parent we can do several things
 - Move dependencies management from che-parent to che.
    Like https://github.com/quarkusio/quarkus/blob/master/bom/runtime/pom.xml
   That can allow us to not release che-parent that often.
 - We can replace che-parent with jboss-parent
   Like this: https://github.com/quarkusio/quarkus/blob/master/pom.xml#L5-L10
   With that, we can deprecate che-parent at all and have maven user experience
   from best in class maven engineers  https://github.com/jboss/jboss-parent-pom

wdyt?

--

Sergii Kabashniuk

Principal Software Engineer, DevTools 

Red Hat

skabashniuk@xxxxxxxxxx    


Back to the top