diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 602d0381..13049a2b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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, diff --git a/RELEASING.md b/RELEASING.md index 6807434e..b380cc56 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -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:** @@ -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. @@ -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/ @@ -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/). diff --git a/releng/org.eclipse.epp.config/oomph/EPP.setup b/releng/org.eclipse.epp.config/oomph/EPP.setup index 8509783f..0d15044c 100644 --- a/releng/org.eclipse.epp.config/oomph/EPP.setup +++ b/releng/org.eclipse.epp.config/oomph/EPP.setup @@ -473,6 +473,34 @@ + + + <?xml version="1.0" encoding="UTF-8" standalone="no"?> + <launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication"> + <booleanAttribute key="org.eclipse.debug.core.ATTR_FORCE_SYSTEM_CONSOLE_ENCODING" value="false"/> + <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> + <listEntry value="/org.eclipse.epp.releng.updater/src/org/eclipse/epp/releng/updater/Updater.java"/> + </listAttribute> + <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> + <listEntry value="1"/> + </listAttribute> + <listAttribute key="org.eclipse.debug.ui.favoriteGroups"> + <listEntry value="org.eclipse.debug.ui.launchGroup.run"/> + </listAttribute> + <booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/> + <booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/> + <booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/> + <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/> + <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.epp.releng.updater.Updater"/> + <stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="org.eclipse.epp.releng.updater"/> + <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-open-issue"/> + <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.epp.releng.updater"/> + </launchConfiguration> + + + @@ -608,9 +636,11 @@ <launchHistory> <launchGroup id="org.eclipse.debug.ui.launchGroup.debug"> <mruHistory> + <launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Open Issue&quot;/&gt;&#10;"/> <launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Update Versions&quot;/&gt;&#10;"/> </mruHistory> <favorites> + <launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Open Issue&quot;/&gt;&#10;"/> <launch memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;launchConfiguration local=&quot;true&quot; path=&quot;Update Versions&quot;/&gt;&#10;"/> </favorites> </launchGroup> diff --git a/releng/org.eclipse.epp.config/org.eclipse.epp.releng.updater/src/org/eclipse/epp/releng/updater/Updater.java b/releng/org.eclipse.epp.config/org.eclipse.epp.releng.updater/src/org/eclipse/epp/releng/updater/Updater.java index f7a0267c..1ea3767b 100644 --- a/releng/org.eclipse.epp.config/org.eclipse.epp.releng.updater/src/org/eclipse/epp/releng/updater/Updater.java +++ b/releng/org.eclipse.epp.config/org.eclipse.epp.releng.updater/src/org/eclipse/epp/releng/updater/Updater.java @@ -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; @@ -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; @@ -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("\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 contents = new LinkedHashMap<>(); @@ -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); } } @@ -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)); + } }