Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve releng #559

Closed
merks opened this issue Jan 26, 2024 · 36 comments
Closed

Improve releng #559

merks opened this issue Jan 26, 2024 · 36 comments

Comments

@merks
Copy link
Contributor

merks commented Jan 26, 2024

I wanted to establish (agree on) the goals for improving the releng for Nebula.

I assume one goals is to improve the update site structure as was done for other projects such as GEF recently:

https://download.eclipse.org/justj/?file=nebula

Do we want to keep maintaining the distinction between the non-incubating versus non-incubating widgets? If we are to maintain two updates sites, I would prefer each to be rooted in a different child folder of the nebula folder, but with what names?

Another goal is to have the build driven by a multi-branch Jenkinsfile. Probably we can do that with a single job even if we want to produce two separate update sites; I think it would still make sense to produce releases for the incubating widget...

@lcaron @wimjongman

Please share your thoughts about what you would like to see as an end-result.

@laeubi
Copy link
Member

laeubi commented Jan 26, 2024

As a (random) user of nebula I never cared if something is "incubating" or not ... just put everything in one site, if there is a bug it must be fixed, at best by the reporting user if its really critical.

@merks
Copy link
Contributor Author

merks commented Jan 26, 2024

It's certainly easier to maintain one site and it's an interesting and useful data point that as a consumer, a single site is also more convenient. Not only that, a bunch of incubating components have 1.x versions that suggest they are not incubating:

image

The builds don't appear to be using jgit stamping for the qualifier. I wonder if another goal would be to change that?

@wimjongman
Copy link
Contributor

The incubation widgets are not stable. They should be separate or source only. In terms of root naming, we use incubation and release.

@laeubi
Copy link
Member

laeubi commented Jan 26, 2024

@wimjongman does it really matter? I even use the SNPASHOTs an never get any "instability" given that there are not much contributions to nebula one should decide how much LTS support is available for a project.

e.g. for Tycho we always do MAJOR release now, so we don't promise 100% compatibility even though its often only a matter of increase the version number for 99% of the builds.

@merks
Copy link
Contributor Author

merks commented Jan 26, 2024

The incubation widgets are not stable. They should be separate or source only. In terms of root naming, we use incubation and release.

Keep in mind the structure of an update site:

https://download.eclipse.org/justj/?file=tools/gef/classic

image

The red things are legacy things before before JustJ was used for publishing.

So names like mature/stable/ versus incubation at the root. If we don't publish/promote the incubation update site at all (and it's only available via the archive in the build job) that's fine too and then we can maintain a single site in the root directly. I'd just like to keep this simple to reduce the amount of work...

@laeubi
Copy link
Member

laeubi commented Jan 26, 2024

It might be a different category but as said please still provide them (under whatever name)!

@wimjongman
Copy link
Contributor

I see. Ok, whatever is most simple and user-friendly. If we have the incubation widgets in the same repo but in a different update site category, that is also fine by me.

@jantje
Copy link

jantje commented Jan 26, 2024

As a (random) user of nebula I never cared if something is "incubating" or not ...

As a random user I care if something is "incubating" or not.

a bug it must be fixed

As a random user I am very happy that people spend their time developing and maintaining open source.
I think it would be very arrogant of me to demand "bugs to be fixed". Who will fix it? Why would they? Even in many commercial projects there are many bugs that will never be fixed.

If we have the incubation widgets in the same repo but in a different update site category, that is also fine by me.

That would be fine for me to.
Note however that any change in the repo's is very likely to cause incompatibilities in projects using nebula.

@merks
Copy link
Contributor Author

merks commented Jan 27, 2024

@jantje

FYI, the Eclipse infrastructure has some convenient capabilities that will help with modernizing the update sites as we did for GEF in a way that's minimally disruptive to the existing consumers. You can read the details of that effort here if you are interested.

eclipse/gef-classic#313

In particular if one moves something from download.eclipse.org to archive.eclipse.org, the 404 handler for download.eclipse.org will redirect the former to the latter (like a mirror). For example this link redirects in that way:

https://download.eclipse.org/tools/gef/classic/releases/3.18.0

The original URL can be used directly by p2:

image

This works well for simple update sites.

For composites, we can change the URL that it composes.

In this way we can ensure that all the old URLs continue to work while establishing an easier-to-maintain structure. This will allow the developers to spend less time on releng, accommodating more time for actually making code fixes and improvements, and makes it easier to deliver those results.

@jantje
Copy link

jantje commented Jan 27, 2024

@merks
Thanks for the input.
Thanks for caring about existing users.
Thanks for Nebula.
👍

@lcaron lcaron added this to the 3.1.1 milestone Jan 29, 2024
@lcaron lcaron closed this as completed Jan 29, 2024
@merks
Copy link
Contributor Author

merks commented Jan 29, 2024

This isn’t done or even started yet..,

@wimjongman wimjongman reopened this Jan 29, 2024
@lcaron
Copy link
Contributor

lcaron commented Jan 30, 2024

My bad, sorry (I need to sleep)

@lcaron lcaron removed this from the 3.1.1 milestone Jan 30, 2024
@merks
Copy link
Contributor Author

merks commented Feb 5, 2024

FYI, I have been making progress locally:

image

There are lots of inconsistencies and even typos in the names of bundles and features, so quite a bit to do to make this all clean...

@merks
Copy link
Contributor Author

merks commented Feb 7, 2024

FYI, I plan to ensure that all incubating categories, features, and bundles are clearly marked as incubating in the unified update sites:

image

@lcaron
Copy link
Contributor

lcaron commented Feb 7, 2024

Great ! Thank you your involvement.

@merks
Copy link
Contributor Author

merks commented Feb 7, 2024

I've cleaned up and "normalized" the feature/bundle names:

image

So I'm almost ready to start real builds...

@merks
Copy link
Contributor Author

merks commented Feb 7, 2024

@lcaron @wimjongman

I was making changes so that the two old Maven builds would still work, but it would be cleaner and simpler if I didn't concern myself with that. Are guys okay if I do a deeper cleaning to focus on a single Maven build of the union of all the things?

@wimjongman
Copy link
Contributor

That is fine with me. I think now we have a stable and incubation feature that respectively contains all stable and incubation features, we also present the individual features. Each widget has its own feature. Can you work with that?

@laeubi
Copy link
Member

laeubi commented Feb 8, 2024

Just in case, if each feature has only one bundle you can use the bundle as a feature so no need to duplicate all bundles as features.

merks added a commit to merks/nebula that referenced this issue Feb 8, 2024
merks added a commit to merks/nebula that referenced this issue Feb 8, 2024
merks added a commit to merks/nebula that referenced this issue Feb 8, 2024
merks added a commit to merks/nebula that referenced this issue Feb 8, 2024
merks added a commit to merks/nebula that referenced this issue Feb 8, 2024
@merks
Copy link
Contributor Author

merks commented Feb 8, 2024

FYI, I have the first promoted builds available here:

https://download.eclipse.org/nebula/updates/nightly/latest

It's being built by this job from the "main" branch of my fork:

https://ci.eclipse.org/nebula/job/nebula-build-test/

The Jenkinsfile will be usable as a multi-branch pipeline...

Are there any outstanding concerns before I merge this into master?


This build is building against https://download.eclipse.org/releases/latest but I have tested that https://download.eclipse.org/releases/photon also works. Do we want the build to verify that it can build and run tests against photon? A build with testing and without signing takes about 4.5 minutes...

@wimjongman
Copy link
Contributor

Maybe rename Nebula Widgets SDK to Nebula All Stable Widgets SDK so that it sits on top together with the incubation widgets.

Now the stable widgets all feature is in the bottom.


I don't think that photon is a concern. People can still use the old builds.
"Wow" for the build speed
Do we have active tests in nebula. I remember this not working in the past due to some VNC problems

merks added a commit to merks/nebula that referenced this issue Feb 8, 2024
merks added a commit to merks/nebula that referenced this issue Feb 9, 2024
merks added a commit to merks/nebula that referenced this issue Feb 9, 2024
merks added a commit to merks/nebula that referenced this issue Feb 9, 2024
@merks
Copy link
Contributor Author

merks commented Feb 9, 2024

@wimjongman @lcaron

The multi-branch pipeline is working:

https://ci.eclipse.org/nebula/job/nebula-build/job/master/

I've copied over all the existing releases to the archive:

https://archive.eclipse.org/justj/?file=nebula/releases

I've tested locally that I can copy the most recent release into the new update structure and that I can redirect (via composites) the other "moving target" repositories into the new structure:

image

As such, I can delete these folders and replace them with the content of the above screen capture:

image

Via the composites and via the download.eclipse.org server's 404 handler, no existing clients using any of the legacy URLs should see any errors.

I've made a temporary copy of everything in case something goes horribly wrong:

https://download.eclipse.org/justj/?file=nebula/archive

If you have concerns, scream quickly because I'm ready to pull the plugin...

@merks
Copy link
Contributor Author

merks commented Feb 9, 2024

I've tested that the following legacy URLs work:

All are redirections to the following:

https://download.eclipse.org/nebula/updates/nightly/latest

I've also tested that the following legacy URL works:

https://download.eclipse.org/nebula/releases/latest/

It is a redirection to the following:

https://download.eclipse.org/nebula/updates/release/latest

Which in turn currently redirects to:

https://download.eclipse.org/nebula/updates/release/3.1.1

The new update site location https://download.eclipse.org/nebula/updates is complete in that it includes even a latest release, allowing downstream consumers to migrate to the new structure at their leisure:

image

Note that I assumed the next release would be 3.1.2 which is determined by the version of this "branding feature":

But then I noticed that the next planned version is 3.2.0:

https://projects.eclipse.org/projects/technology.nebula/releases/3.2.0

So we'll need to change that version if that's the plan...

Please don't be afraid to ask questions!!


Almost all the jobs for https://ci.eclipse.org/nebula/ can be deleted now. Any concerns about deleting these?

image

I ran a report and things look to be in very good shape; lack of branding images is no big deal:

https://download.eclipse.org/oomph/archive/reports-extra/nebula-nightly/download.eclipse.org/nebula/updates/nightly/latest/index.html

@wimjongman
Copy link
Contributor

wimjongman commented Feb 9, 2024

Wow, Ed, this is just great. I can't believe how professional all this looks. Thank you!! 🙏

I will make an issue for creating the branding images with the Nebula logo.

So we'll need to change that version if that's the plan...

Yes, the next version is 3.2.0. We reserve the last digit for maintenance releases.

Please go ahead and delete the builds.

@merks
Copy link
Contributor Author

merks commented Feb 9, 2024

It's suggest not worry about the branding images because the overhead for these things is stupid. Somehow the feature then gets a bunch of information from the branding plugin so unless each feature has its own branding plugin, it's kind of a confusing mess. Also, I don't think downstream consumers generally redistribute the feature making the time and overhead really not a good return on investment...

Look here

https://download.eclipse.org/staging/2024-03/buildInfo/archive/download.eclipse.org/staging/2024-03/index.html

image

The only visible impact to the user is no icon on the Help -> About dialog...

@wimjongman
Copy link
Contributor

Ok, good to know.

@merks
Copy link
Contributor Author

merks commented Feb 10, 2024

FYI, I have added a .project file to the repository root. To avoid having the same files appear more than once in the workspace (which I find super annoying, especially for searches), I have filtered that project's contents so that nested folders corresponding to projects that are themselves imported into the workspace are displayed without children:

image

I thought it best to explain this in case you wondered and were confused by it...


There is also a launcher for replicating the build locally:

image

@merks
Copy link
Contributor Author

merks commented Feb 10, 2024

The build server https://ci.eclipse.org/nebula/ is cleaned up:

image

And each job has documentation:

image

image

PR builds will kick in manually. Such builds do not sign and do not publish results, though they do archive the unsigned repository contents. Branch builds are kicked of like this:

image

There are three choices of build type:

image

Give thought to the branding version

<version>3.1.2-SNAPSHOT</version>

As this is what you'll see in the update sites:

image

And this will determine the release version number when you finally do a release build.

Note that a release build does a full build, but ignores the result repository. It will promote, byte-for-byte, the most recent milestone build. Do not do a release build without ensuring that the most recent commit is in the most recent milestone build and that the version number is the intended version of the release

image

@merks
Copy link
Contributor Author

merks commented Feb 10, 2024

@ewillink

FYI, here is a recent example of using JustJ's p2.manager with detailed descriptions. Here is the meaty part of the pom.xml

<![CDATA[
-consoleLog
-application org.eclipse.justj.p2.manager
-data @None
-nosplash
${org.eclipse.justj.p2.manager.args}
-retain 5
-label "Nebula"
-build-url
${org.eclipse.justj.p2.manager.build.url}
-root ${project.build.directory}/nebula-sync
-relative
${org.eclipse.justj.p2.manager.relative}
-version-iu org.eclipse.nebula.feature.feature.group
-commit
https://github.com/eclipse/nebula/commit/${git.commit}
-target-url
https://download.eclipse.org/nebula
-promote
${project.basedir}/../target/repository
-timestamp ${build.timestamp}
-type ${build.type}
-breadcrumb "Nebula
https://projects.eclipse.org/projects/tools.nebula"
-mapping nebula->Nebula
-favicon
https://eclipse.dev/nebula/favicon.ico
-body-image
https://eclipse.dev/nebula/images/nebula_logo_main_300.png
-title-image
https://eclipse.dev/nebula/images/nebula_logo_main_300.png
${org.eclipse.justj.p2.manager.extra.args}
]]>

It is just like the provided example:

https://eclipse.dev/justj/?page=tools#p2-manager-maven

@wimjongman
Copy link
Contributor

Great stuff, Ed. I can't thank you enough.

@merks
Copy link
Contributor Author

merks commented Feb 11, 2024

@wimjongman @lcaron

This action fails:

https://github.com/eclipse/nebula/actions/workflows/github-code-scanning/codeql

I appears that it needs to use a newer version of Java. I have no clue how this is configured.

@wimjongman
Copy link
Contributor

I'm not sure either. I have not seen this before. Should it not come from https://github.com/eclipse/nebula/blob/master/.github/workflows/maven.yaml ?

@merks
Copy link
Contributor Author

merks commented Feb 11, 2024

I would have thought so too, but that's only for this as far as I can tell:

https://github.com/eclipse/nebula/actions/workflows/maven.yaml

Maybe the foundation was asked to set this up and we are not able to configure it ourselves? Maybe we we should moving to an eclipse-nebula organization?

@wimjongman
Copy link
Contributor

Yes. I have filed the request here: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/issues/4275

@lcaron
Copy link
Contributor

lcaron commented Feb 11, 2024

@merks Your work is just awesome. Thank you very very much :)

@merks
Copy link
Contributor Author

merks commented Apr 8, 2024

I'll close this and we can do other stuff if/when we have our own org.

@merks merks closed this as completed Apr 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants