Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Contributions are always welcome!
## EPP Committer and Maintainer Policy

For each EPP package,
there is a commiter who is the package _maintainer_.
there is a committer who is the package _maintainer_.
The maintainer is expected to participate in overall project discussions and to be involved in making decisions that affect the maintained package.

If someone is a committer on another Eclipse project,
Expand Down
23 changes: 14 additions & 9 deletions RELEASING.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
# The EPP Release Process

This guide contains the step-by-step process to complete an EPP release.
The guide assumes that you have an IDE provisioned using the [Oomph setup](CONTRIBUTING.md#create-an-eclipse-development-environment).
This guide contains the step-by-step process to complete an EPP release and assumes that you have an IDE provisioned using the [Oomph setup](
https://github.com/eclipse-packaging/packages/blob/master/CONTRIBUTING.md#create-an-eclipse-development-environment).

**Before** copying this file to create a new issue titled `EPP 2026-03 M1` with label `endgame`, update the names and versions, including those in this document.
- [ ] To update names and versions, edit [org.eclipse.epp.releng.updater.Updater](
releng/org.eclipse.epp.config/org.eclipse.epp.releng.updater/src/org/eclipse/epp/releng/updater/Updater.java
) to set the values of `MILESTONE`, `PLATFORM_VERSION`, and possibly `EXECUTION_ENVIRONMENT` to the current appropriate values.
- Use the `Run` toolbar button drop-down menu to launch the `Update Versions` launch configuration
to apply all the necessary name and version changes.
- Use the `Run` toolbar button drop-down menu to launch the `Update Versions` launch configuration to apply all the necessary name and version changes.
- Or use the `Run` toolbar button drop-down menu to launch the `Open Issue` launch configuration to apply all the necessary name and version changes,
and to open a new properly-titled, properly-labeled issue;
the body text is too long to automatically create the body of the issue,
but that text is copied to the system clipboard,
so you can use simply paste it into the body.

The individual releases are tracked with [endgame](https://github.com/eclipse-packaging/packages/labels/endgame) issues on GitHub.

For each release (M1, M2, M3, RC1, RC2) an endgame ticket is created with the appropriate contents from the rest of this document:

EPP releases happen for each milestone and release candidate according to the [Eclipse Simultaneous Release Plan](https://github.com/eclipse-simrel/.github/blob/main/wiki/Simultaneous_Release.md).
EPP releases happen for each milestone and release candidate according to the [Eclipse Simultaneous Release Plan](
https://github.com/eclipse-simrel/.github/blob/main/wiki/SimRel/2026-03.md)

**Steps at the beginning of each release cycle, i.e., before M1:**

Expand All @@ -39,7 +44,7 @@ Scroll down for the per-milestone/RC steps.
See near the end of the build output for a report of `check-incubating.sh` script.
- This item is not currently done per milestone/release because for a while now all packages contain incubating components and until TM4E moves out of incubation this step is redundant.
- The incubating indication should appear in feature.properties `description`, `plugin.xml`'s product `aboutText` and `about.properties` _blurb_.
In the past `-incubation` had to appear in the file name and ` (includes Incubating components)` had to appear in `packageMetaData`.
In the past `-incubation` had to appear in the file name and `(includes Incubating components)` had to appear in `packageMetaData`.
See [Bug 564214](https://bugs.eclipse.org/bugs/show_bug.cgi?id=564214) for documentation/votes on decision making.

- [ ] On RC1 check "new and noteworthy" version numbers.
Expand Down Expand Up @@ -88,7 +93,7 @@ Scroll down for the per-milestone/RC steps.
_This can be done after promotion if time is tight or the notarization fails repeatedly._
_See [Bug 571669](https://bugs.eclipse.org/bugs/show_bug.cgi?id=571669) for an example of failures._
- [ ] Check the build script output to make sure that the curl calls were successful,
e.g. no `curl: (92) HTTP/2 stream 0 was not closed cleanly: INTERNAL_ERROR (err 2) ` messages.
e.g., no `curl: (92) HTTP/2 stream 0 was not closed cleanly: INTERNAL_ERROR (err 2) ` messages.
If there is an error like the above, the .dmg file that is copied to download.eclipse.org is corrupt.
Run [notarize-prepare-to-redo](
https://ci.eclipse.org/packaging/job/notarize-prepare-to-redo/
Expand Down Expand Up @@ -151,8 +156,8 @@ This applies to all releases, i.e. M1, M2, M3, RC1 and R.
Everything except R is typically the Friday around 9:30am Ottawa time and the R is the following Wednesday sometime before 10am in coordination with the SimRel release engineer.

- [ ] Check that this worked:
copy the composite\*M1.jar files over the composite\*.jar files in https://download.eclipse.org/technology/epp/packages/2026-03/ -
this is done automatically with the
copy the composite\*M1.jar files over the composite\*.jar files in https://download.eclipse.org/technology/epp/packages/2026-03/ -
this is done automatically with the
[EPP Make Visible job](https://ci.eclipse.org/packaging/job/epp-makeVisible/)
which is automatically triggered by SimRel's
[SimRel Make Visible Job](https://ci.eclipse.org/simrel/view/All/job/simrel.releng.makeVisible/).
Expand Down
30 changes: 30 additions & 0 deletions releng/org.eclipse.epp.config/oomph/EPP.setup
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,34 @@

</content>
</setupTask>
<setupTask
xsi:type="setup:ResourceCreationTask"
targetURL="${workspace.location|uri}/.metadata/.plugins/org.eclipse.debug.core/.launches/Open%20Issue.launch">
<content>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?>
&lt;launchConfiguration type=&quot;org.eclipse.jdt.launching.localJavaApplication&quot;>
&lt;booleanAttribute key=&quot;org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING&quot; value=&quot;false&quot;/>
&lt;listAttribute key=&quot;org.eclipse.debug.core.MAPPED_RESOURCE_PATHS&quot;>
&lt;listEntry value=&quot;/org.eclipse.epp.releng.updater/src/org/eclipse/epp/releng/updater/Updater.java&quot;/>
&lt;/listAttribute>
&lt;listAttribute key=&quot;org.eclipse.debug.core.MAPPED_RESOURCE_TYPES&quot;>
&lt;listEntry value=&quot;1&quot;/>
&lt;/listAttribute>
&lt;listAttribute key=&quot;org.eclipse.debug.ui.favoriteGroups&quot;>
&lt;listEntry value=&quot;org.eclipse.debug.ui.launchGroup.run&quot;/>
&lt;/listAttribute>
&lt;booleanAttribute key=&quot;org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE&quot; value=&quot;false&quot;/>
&lt;booleanAttribute key=&quot;org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE&quot; value=&quot;true&quot;/>
&lt;booleanAttribute key=&quot;org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES&quot; value=&quot;true&quot;/>
&lt;booleanAttribute key=&quot;org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR&quot; value=&quot;false&quot;/>
&lt;stringAttribute key=&quot;org.eclipse.jdt.launching.MAIN_TYPE&quot; value=&quot;org.eclipse.epp.releng.updater.Updater&quot;/>
&lt;stringAttribute key=&quot;org.eclipse.jdt.launching.MODULE_NAME&quot; value=&quot;org.eclipse.epp.releng.updater&quot;/>
&lt;stringAttribute key=&quot;org.eclipse.jdt.launching.PROGRAM_ARGUMENTS&quot; value=&quot;-open-issue&quot;/>
&lt;stringAttribute key=&quot;org.eclipse.jdt.launching.PROJECT_ATTR&quot; value=&quot;org.eclipse.epp.releng.updater&quot;/>
&lt;/launchConfiguration>

</content>
</setupTask>
<setupTask
xsi:type="setup:ResourceCreationTask"
targetURL="${workspace.location|uri}/.metadata/.plugins/org.eclipse.debug.core/.launches/Build%20%20Clean.launch">
Expand Down Expand Up @@ -608,9 +636,11 @@
&lt;launchHistory>
&lt;launchGroup id=&quot;org.eclipse.debug.ui.launchGroup.debug&quot;>
&lt;mruHistory>
&lt;launch memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;launchConfiguration local=&amp;quot;true&amp;quot; path=&amp;quot;Open Issue&amp;quot;/&amp;gt;&amp;#10;&quot;/>
&lt;launch memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;launchConfiguration local=&amp;quot;true&amp;quot; path=&amp;quot;Update Versions&amp;quot;/&amp;gt;&amp;#10;&quot;/>
&lt;/mruHistory>
&lt;favorites>
&lt;launch memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;launchConfiguration local=&amp;quot;true&amp;quot; path=&amp;quot;Open Issue&amp;quot;/&amp;gt;&amp;#10;&quot;/>
&lt;launch memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;launchConfiguration local=&amp;quot;true&amp;quot; path=&amp;quot;Update Versions&amp;quot;/&amp;gt;&amp;#10;&quot;/>
&lt;/favorites>
&lt;/launchGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,16 @@
*/
package org.eclipse.epp.releng.updater;

import java.awt.Desktop;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.io.IOException;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse.BodyHandlers;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
Expand All @@ -23,6 +28,7 @@
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -72,6 +78,19 @@ public static void main(String[] args) throws IOException {
}
var root = currentWorkingDirectory.resolve("../../..").toRealPath();
new Updater(root).update();
if (List.of(args).contains("-open-issue")) {
var text = Files.readString(root.resolve("RELEASING.md"));
var joinedText = text.replaceAll("([,;:.a-z()-_*])\r?\n +([^-* ])", "$1 $2");
var issueURL = "https://github.com/eclipse-packaging/packages/issues/new?title="
+ encode("EPP " + SIMREL_VERSION + " " + MILESTONE) + "&labels=endgame" + "&body="
+ encode("<!-- paste body from clipboard -->\n");

// Can't do this because the URL is then too long + "&body=" + encode(text);
// So instead copy the text to the clipboard.
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(joinedText), null);

openURL(issueURL);
}
}

private Map<Path, String> contents = new LinkedHashMap<>();
Expand Down Expand Up @@ -253,7 +272,11 @@ private void visit(Path file) throws IOException {
+ " must be created with an empty p2 composite repository pointing to "
+ SIMREL_VERSION_MATCHER + " until M1",
SIMREL_VERSION, SIMREL_NEXT_VERSION, SIMREL_VERSION);
apply(file, "issue titled `EPP " + SIMREL_VERSION_MATCHER + " " + SIMREL_QUALIFIER_MATCHER + "`", SIMREL_VERSION, MILESTONE);
apply(file, "issue titled `EPP " + SIMREL_VERSION_MATCHER + " " + SIMREL_QUALIFIER_MATCHER + "`",
SIMREL_VERSION, MILESTONE);
apply(file,
"https://github.com/eclipse-simrel/.github/blob/main/wiki/SimRel/" + SIMREL_VERSION_MATCHER + ".md",
SIMREL_VERSION);
}
}

Expand Down Expand Up @@ -283,4 +306,12 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) th
Files.writeString(entry.getKey(), entry.getValue());
}
}

private static String encode(String value) {
return URLEncoder.encode(value, StandardCharsets.UTF_8);
}

public static void openURL(String uri) throws IOException {
Desktop.getDesktop().browse(URI.create(uri));
}
}
Loading