You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ne...@apache.org on 2019/09/18 15:25:33 UTC
[netbeans] branch master updated: build branding (#1411)
This is an automated email from the ASF dual-hosted git repository.
neilcsmith pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 87528d5 build branding (#1411)
87528d5 is described below
commit 87528d5fbe98d2d4d91779e9bb3d1d10884cbf3c
Author: Eric Barboni <sk...@apache.org>
AuthorDate: Wed Sep 18 17:25:28 2019 +0200
build branding (#1411)
* build modification
* branding by build system
* typo in text
* Work with milestone
* no hash in release means dev
* Add echo to debug on travis
* Work around for PR
* add conditional properties to override url: metabuild.jsonurl
* Remove {$netbeans.hash.code} from URL_Distribution
Remove {$netbeans.hash.code} from URL_Distribution and allow to be specified in metabuild.DistributionURL instead.
---
nb/ide.branding/build.xml | 21 +-
.../org/netbeans/core/startup/Bundle_nb.properties | 2 +-
.../core/windows/view/ui/Bundle_nb.properties | 4 +-
nb/ide.launcher/netbeans.conf | 6 +-
nb/updatecenters/build.xml | 9 +-
.../updatecenters/resources/Bundle.properties | 5 +-
nbbuild/antsrc/org/netbeans/nbbuild/HgExec.java | 2 +-
.../org/netbeans/nbbuild/ParseGitBranch.java | 80 ++++
.../netbeans/nbbuild/ReleaseJsonProperties.java | 401 +++++++++++++++++++++
.../netbeans/nbbuild/SetApidocClustersConfig.java | 54 +++
nbbuild/build.properties | 16 +-
nbbuild/build.xml | 92 ++++-
12 files changed, 666 insertions(+), 26 deletions(-)
diff --git a/nb/ide.branding/build.xml b/nb/ide.branding/build.xml
index 223ce17..18d73ed 100644
--- a/nb/ide.branding/build.xml
+++ b/nb/ide.branding/build.xml
@@ -35,8 +35,16 @@ Contributor(s): Vincent Brabant, Maxym Mykhalchuk
<fileset dir="release-toplevel"/>
</copy>
+ <!-- copy to build folder to do replace -->
+ <delete dir="${build.dir}/branding/core.startup" quiet="true" />
+ <copy todir="${build.dir}/branding/core.startup">
+ <fileset dir="core.startup"/>
+ </copy>
+ <replace file="${build.dir}/branding/core.startup/src/org/netbeans/core/startup/Bundle_nb.properties" value="defaultvalue" propertyFile="${nb_all}/nbbuild/build/netbeansrelease.properties">
+ <replacefilter token="@@metabuild.ComputedSplashVersion@@" property="metabuild.ComputedSplashVersion"/>
+ </replace>
<locjar warnMissingDir="true"
- basedir="core.startup/src"
+ basedir="${build.dir}/branding/core.startup/src"
jarfile="${cluster}/core/core.jar">
<branding name="nb"/>
</locjar>
@@ -52,9 +60,16 @@ Contributor(s): Vincent Brabant, Maxym Mykhalchuk
jarfile="${cluster}/modules/org-netbeans-core-netigso.jar">
<branding name="nb"/>
</locjar>
-
+
+ <delete dir="${build.dir}/branding/core.windows" quiet="true" />
+ <copy todir="${build.dir}/branding/core.windows">
+ <fileset dir="core.windows"/>
+ </copy>
+ <replace file="${build.dir}/branding/core.windows/src/org/netbeans/core/windows/view/ui/Bundle_nb.properties" value="defaultvalue" propertyFile="${nb_all}/nbbuild/build/netbeansrelease.properties">
+ <replacefilter token="@@metabuild.ComputedTitleVersion@@" property="metabuild.ComputedTitleVersion"/>
+ </replace>
<locjar warnMissingDir="true"
- basedir="core.windows/src"
+ basedir="${build.dir}/branding/core.windows/src"
jarfile="${cluster}/modules/org-netbeans-core-windows.jar">
<branding name="nb"/>
</locjar>
diff --git a/nb/ide.branding/core.startup/src/org/netbeans/core/startup/Bundle_nb.properties b/nb/ide.branding/core.startup/src/org/netbeans/core/startup/Bundle_nb.properties
index 0dc16b6..2630e07 100644
--- a/nb/ide.branding/core.startup/src/org/netbeans/core/startup/Bundle_nb.properties
+++ b/nb/ide.branding/core.startup/src/org/netbeans/core/startup/Bundle_nb.properties
@@ -62,7 +62,7 @@ SplashVersionTextHorizontalAlignment=right
###################
LBL_splash_window_title=Starting Apache NetBeans IDE
-currentVersion=Apache NetBeans IDE Dev (Build {0})
+currentVersion=Apache NetBeans IDE @@metabuild.ComputedSplashVersion@@
MSG_warning=NetBeans IDE - Warning
MSG_info=NetBeans IDE - Information
diff --git a/nb/ide.branding/core.windows/src/org/netbeans/core/windows/view/ui/Bundle_nb.properties b/nb/ide.branding/core.windows/src/org/netbeans/core/windows/view/ui/Bundle_nb.properties
index 02d3790..301d0a9 100644
--- a/nb/ide.branding/core.windows/src/org/netbeans/core/windows/view/ui/Bundle_nb.properties
+++ b/nb/ide.branding/core.windows/src/org/netbeans/core/windows/view/ui/Bundle_nb.properties
@@ -17,5 +17,5 @@
# {0} build number
# {1} project name
-CTL_MainWindow_Title={1} - Apache NetBeans IDE Dev {0}
-CTL_MainWindow_Title_No_Project=Apache NetBeans IDE Dev {0}
+CTL_MainWindow_Title={1} - Apache NetBeans IDE @@metabuild.ComputedTitleVersion@@
+CTL_MainWindow_Title_No_Project=Apache NetBeans IDE @@metabuild.ComputedTitleVersion@@
diff --git a/nb/ide.launcher/netbeans.conf b/nb/ide.launcher/netbeans.conf
index 171d19f..d5681a6 100644
--- a/nb/ide.launcher/netbeans.conf
+++ b/nb/ide.launcher/netbeans.conf
@@ -45,8 +45,8 @@
# Cachedir must be different from userdir. The same cachedir and userdir
# would cause problems.
#
-netbeans_default_userdir="${DEFAULT_USERDIR_ROOT}/dev"
-netbeans_default_cachedir="${DEFAULT_CACHEDIR_ROOT}/dev"
+netbeans_default_userdir="${DEFAULT_USERDIR_ROOT}/@@metabuild.RawVersion@@"
+netbeans_default_cachedir="${DEFAULT_CACHEDIR_ROOT}/@@metabuild.RawVersion@@"
# Options used by NetBeans launcher by default:
# (can be overridden by explicit command line switches)
@@ -62,7 +62,7 @@ netbeans_default_cachedir="${DEFAULT_CACHEDIR_ROOT}/dev"
# default command line arguments.
# (see: https://issues.apache.org/jira/browse/NETBEANS-1344)
#
-netbeans_default_options="-J-XX:+UseStringDeduplication -J-Xss2m -J-Dnetbeans.logger.console=true -J-ea -J-Djdk.gtk.version=2.2 -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true -J-Dplugin.manager.check.updates=false -J-Dnetbeans.extbrowser.manual_chrome_plugin_install=yes -J--add-opens=java.base/java.net=ALL-UNNAMED -J--add-opens=java.base/java.lang.ref=ALL-UNNAMED -J-- [...]
+netbeans_default_options="-J-XX:+UseStringDeduplication -J-Xss2m @@metabuild.logcli@@ -J-Djdk.gtk.version=2.2 -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true -J-Dplugin.manager.check.updates=false -J-Dnetbeans.extbrowser.manual_chrome_plugin_install=yes -J--add-opens=java.base/java.net=ALL-UNNAMED -J--add-opens=java.base/java.lang.ref=ALL-UNNAMED -J--add-opens=java.bas [...]
# Default location of JDK:
# (set by installer or commented out if launcher should decide)
diff --git a/nb/updatecenters/build.xml b/nb/updatecenters/build.xml
index 5145b3d..5bdbfbc 100644
--- a/nb/updatecenters/build.xml
+++ b/nb/updatecenters/build.xml
@@ -24,8 +24,13 @@
<import file="../../nbbuild/templates/projectized.xml"/>
- <target name="compile" depends="projectized-common.compile,javafx-nbms"/>
-
+ <target name="compile" depends="projectized-common.compile,javafx-nbms,-branding"/>
+ <target name="-branding">
+ <replace file="${build.dir}/classes/org/netbeans/modules/updatecenters/resources/Bundle.properties" value="defaultvalue" propertyFile="${nb_all}/nbbuild/build/netbeansrelease.properties">
+ <replacefilter token="@@metabuild.DistributionURL@@" property="metabuild.DistributionURL"/>
+ <replacefilter token="@@metabuild.PluginPortalURL@@" property="metabuild.PluginPortalURL"/>
+ </replace>
+ </target>
<target name="javafx-nbms" description="Prepare NBMs for 3rd party libraries" depends="projectized-common.compile">
<tempfile destdir="${build.dir}" prefix="sign" suffix=".ks" property="netbeans.bundled.ks" deleteonexit="true" />
<tempfile destdir="${build.dir}" prefix="sign" suffix=".cert" property="netbeans.bundled.cert" deleteonexit="true"/>
diff --git a/nb/updatecenters/src/org/netbeans/modules/updatecenters/resources/Bundle.properties b/nb/updatecenters/src/org/netbeans/modules/updatecenters/resources/Bundle.properties
index cdc7a70..bc4a0eb 100644
--- a/nb/updatecenters/src/org/netbeans/modules/updatecenters/resources/Bundle.properties
+++ b/nb/updatecenters/src/org/netbeans/modules/updatecenters/resources/Bundle.properties
@@ -28,12 +28,13 @@ Services/AutoupdateType/pluginportal-update-provider.instance=NetBeans Plugin Po
Services/AutoupdateType/82pluginportal-update-provider.instance=NetBeans 8.2 Plugin Portal
#NOI18N
-URL_Distribution=https://netbeans.apache.org/nb/updates/dev/updates.xml.gz?{$netbeans.hash.code}
+URL_Distribution=@@metabuild.DistributionURL@@
#NOI18N
-URL_PluginPortal=https://netbeans.apache.org/nb/plugins/dev/catalog.xml.gz
+URL_PluginPortal=@@metabuild.PluginPortalURL@@
#NOI18N
URL_82PluginPortal=http://updates.netbeans.org/netbeans/updates/8.2/uc/final/distribution/catalog.xml.gz
3rdparty=Third Party Libraries
#NOI18N
URL_3rdparty=nbresloc:/org/netbeans/modules/updatecenters/resources/3rdparty-catalog.xml
+
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/HgExec.java b/nbbuild/antsrc/org/netbeans/nbbuild/HgExec.java
index 85fc930..9aaff2f 100644
--- a/nbbuild/antsrc/org/netbeans/nbbuild/HgExec.java
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/HgExec.java
@@ -68,7 +68,7 @@ public class HgExec extends ExecTask {
}
}
}
- return Collections.singletonList("hg");
+ return Collections.singletonList("git");
}
}
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/ParseGitBranch.java b/nbbuild/antsrc/org/netbeans/nbbuild/ParseGitBranch.java
new file mode 100644
index 0000000..b3b61b7
--- /dev/null
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/ParseGitBranch.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.nbbuild;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import java.io.Reader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.LineNumberReader;
+
+/**
+ *
+ * @author skygo
+ */
+public class ParseGitBranch extends Task {
+
+ /**
+ * data to parse
+ */
+ private String data;
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ /**
+ * properties to set
+ */
+ private String propertyName;
+
+ public void setProperty(String propertyName) {
+ this.propertyName = propertyName;
+ }
+
+ @Override
+ public void execute() throws BuildException {
+ super.execute();
+ Reader dataReader = new StringReader(data);
+ String firstLine = null;
+ String secondLine = null;
+ try (LineNumberReader r = new LineNumberReader(dataReader);) {
+ firstLine = r.readLine();
+ secondLine = r.readLine();
+ } catch (IOException ex) {
+ throw new BuildException("Problem reading information for detached head");
+ }
+ if (secondLine != null) {
+ throw new BuildException("Problem parsing git information for detached head : too many line");
+ }
+ if (firstLine == null || firstLine.trim().isEmpty()) {
+ // PullRequest assume master ?
+ getProject().setProperty(propertyName, "master");
+ } else {
+ String[] splited = firstLine.trim().split(" ");
+ long count = splited[0].chars().filter(ch -> ch == '/').count();
+ if (count != 1) {
+ throw new BuildException("Problem parsing git information" + count);
+ } else {
+ getProject().setProperty(propertyName, splited[0].split("/")[1]);
+ }
+ }
+ }
+}
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/ReleaseJsonProperties.java b/nbbuild/antsrc/org/netbeans/nbbuild/ReleaseJsonProperties.java
new file mode 100644
index 0000000..a51b420
--- /dev/null
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/ReleaseJsonProperties.java
@@ -0,0 +1,401 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE jsonreleaseinfoFile
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this jsonreleaseinfoFile
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this jsonreleaseinfoFile except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.nbbuild;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ *
+ * @author skygo
+ */
+public class ReleaseJsonProperties extends Task {
+
+ /**
+ * current branch we works with
+ */
+ private String branch;
+ /**
+ * current hash we works with
+ */
+ private String hash;
+ /**
+ * cache of json file
+ */
+ private File jsonreleaseinfoFile;
+ /**
+ * xml file containing release information
+ */
+ private File xmlFile;
+
+ /**
+ * xml file containing release information
+ */
+ private File propertiesFile;
+
+ public void setBranch(String branch) {
+ this.branch = branch;
+ }
+
+ public void setHash(String hash) {
+ this.hash = hash;
+ }
+
+ public void setFile(File file) {
+ this.jsonreleaseinfoFile = file;
+ }
+
+ public void setXmloutput(File file) {
+ this.xmlFile = file;
+ }
+
+ public void setPropertiesoutput(File file) {
+ this.propertiesFile = file;
+ }
+
+ @Override
+ public void execute() throws BuildException {
+ super.execute();
+ JSONParser jsonParser = new JSONParser();
+ ReleaseInfo requiredbranchinfo = null;
+ List<ReleaseInfo> ri = new ArrayList<>();
+ //Prepare a xml document containg all the release information */
+ Document doc = XMLUtil.createDocument("releases");
+ Element releasesxml = doc.getDocumentElement();
+
+ //branch parameter
+ if (branch.equals("master") || branch.startsWith("release")) {
+ log("Taking release info from json");
+ } else {
+ log("Branch '" + branch + "' is not having good pattern defaulting to 'master'");
+ branch = "master";
+ }
+ // read all information and store each release in Rel
+ try (FileReader reader = new FileReader(jsonreleaseinfoFile)) {
+ JSONObject releaseList = (JSONObject) jsonParser.parse(reader);
+ log("Processing release: " + releaseList.keySet().toString());
+ for (Object object : releaseList.keySet()) {
+ ri.add(manageRelease(object.toString(), releaseList.get(object)));
+ }
+ } catch (ParseException | IOException ex) {
+ throw new BuildException(ex);
+ }
+ // sort all information
+ Collections.sort(ri);
+ // build a sorted xml
+ for (ReleaseInfo releaseInfo : ri) {
+ log(releaseInfo.toString());
+ for (Object milestone : releaseInfo.milestones) {
+ log(milestone.toString());
+ }
+ Element releasexml = (Element) releasesxml.appendChild(doc.createElement("release"));
+ populatexml(releasexml, releaseInfo);
+ if (releaseInfo.getKey().equals(branch)) {
+ requiredbranchinfo = releaseInfo;
+ releasesxml.setAttribute("position", Integer.toString(releaseInfo.position));
+ // attribute to know position of the requested current branch in the set of release
+ }
+ }
+
+ if (requiredbranchinfo == null) {
+ throw new BuildException("No Release Information found for branch '" + branch + "', update json file section");
+ }
+// populate properties for api changes
+ getProject().setProperty("previous.release.year", Integer.toString(requiredbranchinfo.previousReleaseDate.getYear()));
+ getProject().setProperty("previous.release.month", String.format("%02d", requiredbranchinfo.previousReleaseDate.getMonthValue()));
+ getProject().setProperty("previous.release.day", String.format("%02d", requiredbranchinfo.previousReleaseDate.getDayOfMonth()));
+// version branding + incubating status management for Apache NetBeans 9.0 10 11.0
+ getProject().setProperty("json.maturity", requiredbranchinfo.maturity);
+ getProject().setProperty("json.version", requiredbranchinfo.version);
+ getProject().setProperty("modules-javadoc-date", ReleaseJsonProperties.makeDate(requiredbranchinfo.releaseDate));
+ getProject().setProperty("atom-date", ReleaseJsonProperties.makeAtomDate(requiredbranchinfo.releaseDate));
+ getProject().setProperty("javaapidocurl", requiredbranchinfo.javaapidocurl);
+ log("Writing releasinfo file " + propertiesFile);
+ propertiesFile.getParentFile().mkdirs();
+ try (OutputStream config = new FileOutputStream(propertiesFile)) {
+ String optionnalversion = "";
+ boolean found = false;
+ for (MileStone m : requiredbranchinfo.milestones) {
+ if (m.hash.equals(hash)) {
+ found = true;
+ log("found hash" + hash + "-" + m.vote);
+ // found a milestone
+ if (m.vote != -1) {
+ // vote is set we want the full version
+ } else {
+ optionnalversion = "-" + m.version;
+ }
+
+ }
+ }
+ if (!found && !branch.equals("master")) {
+ // hash no match we are building a dev version of specific branch
+ optionnalversion = "-dev";
+ }
+ config.write(("metabuild.DistributionURL=" + requiredbranchinfo.updateurl.replace(requiredbranchinfo.version, requiredbranchinfo.version + optionnalversion) + "\n").getBytes());
+ config.write(("metabuild.PluginPortalURL=" + requiredbranchinfo.pluginsurl.replace(requiredbranchinfo.version, requiredbranchinfo.version + optionnalversion) + "\n").getBytes());
+ // used for cache and user dir
+ config.write(("metabuild.RawVersion=" + requiredbranchinfo.version + optionnalversion + "\n").getBytes());
+
+ if (branch.equals("master")) {
+ config.write(("metabuild.ComputedSplashVersion=DEV (Build {0})\n").getBytes());
+ config.write(("metabuild.ComputedTitleVersion=DEV {0}\n").getBytes());
+ config.write(("metabuild.logcli=-J-Dnetbeans.logger.console=true -J-ea\n").getBytes());
+ } else {
+ config.write(("metabuild.ComputedSplashVersion=" + requiredbranchinfo.version + optionnalversion + "\n").getBytes());
+ config.write(("metabuild.ComputedTitleVersion=" + requiredbranchinfo.version + optionnalversion + "\n").getBytes());
+ config.write(("metabuild.logcli=\n").getBytes());
+ }
+ } catch (IOException ex) {
+ throw new BuildException("Properties File for release cannot be created");
+ }
+
+ log("Writing releasinfo file " + xmlFile);
+
+ xmlFile.getParentFile().mkdirs();
+ try (OutputStream config = new FileOutputStream(xmlFile)) {
+ XMLUtil.write(doc, config);
+ } catch (IOException ex) {
+ throw new BuildException("XML File for release cannot be created");
+ }
+ }
+
+// add attribute for xml building apidoc enhancement
+ private void populatexml(Element releasesxml, ReleaseInfo releaseInfo) throws DOMException {
+ releasesxml.setAttribute("year", Integer.toString(releaseInfo.releaseDate.getYear()));
+ releasesxml.setAttribute("month", Integer.toString(releaseInfo.releaseDate.getMonthValue()));
+ releasesxml.setAttribute("day", Integer.toString(releaseInfo.releaseDate.getDayOfMonth()));
+ releasesxml.setAttribute("tlp", releaseInfo.maturity);
+ releasesxml.setAttribute("position", Integer.toString(releaseInfo.position));
+ releasesxml.setAttribute("version", releaseInfo.version);
+ releasesxml.setAttribute("apidocurl", releaseInfo.apidocurl);
+ }
+
+ private ReleaseInfo manageRelease(String key, Object arelease) {
+ ReleaseInfo ri = new ReleaseInfo(key);
+ // mandatory element
+ JSONObject jsonrelease = (JSONObject) arelease;
+ ri.setPosition(Integer.parseInt((String) getJSONInfo(jsonrelease, "position", "Order of release starting")));
+ // previous release date
+ JSONObject previousrelease = (JSONObject) getJSONInfo(jsonrelease, "previousreleasedate", "Apidoc: Date of previous Release");
+ ri.setPreviousRelease(
+ (String) getJSONInfo(previousrelease, "day", "Apidoc: day of previous Release"),
+ (String) getJSONInfo(previousrelease, "month", "Apidoc: month of previous Release"),
+ (String) getJSONInfo(previousrelease, "year", "Apidoc: year of previous Release"));
+ // date of release
+ JSONObject releasedate = (JSONObject) getJSONInfo(jsonrelease, "releasedate", "Apidoc: Date of Release vote");
+ ri.setReleaseDate(
+ (String) getJSONInfo(releasedate, "day", "Apidoc: day of previous Release"),
+ (String) getJSONInfo(releasedate, "month", "Apidoc: month of previous Release"),
+ (String) getJSONInfo(releasedate, "year", "Apidoc: year of previous Release"));
+
+ // tlp or not
+ ri.setMaturity((String) getJSONInfo(jsonrelease, "tlp", "Statut of release - TLP or not"));
+ // version name
+ ri.setVersion((String) getJSONInfo(jsonrelease, "versionName", "Version name"));
+ ri.setApidocurl((String) getJSONInfo(jsonrelease, "apidocurl", "Apidoc: URL"));
+ ri.setJavaApiDocurl((String) getJSONInfo(jsonrelease, "jdk_apidoc", "Apidoc: javadoc for java jdk"));
+ ri.setUpdateUrl((String) getJSONInfo(jsonrelease, "update_url", "Update catalog"));
+ ri.setPluginsUrl((String) getJSONInfo(jsonrelease, "plugin_url", "Plugin URL"));
+ // optional section
+ JSONObject milestone = (JSONObject) jsonrelease.get("milestones");
+ if (milestone != null) {
+ for (Object object : milestone.keySet()) {
+ // ri.add(manageRelease(object.toString(), releaseList.get(object)));
+ JSONObject milestonedata = (JSONObject) milestone.get(object);
+ MileStone m = new MileStone((String) object);
+ // mandatory
+ m.setPosition(Integer.parseInt((String) getJSONInfo(milestonedata, "position", "Order of milestone in release")));
+ // optional
+ Object vote = milestonedata.get("vote");
+ if (vote != null) {
+ m.setVote(Integer.parseInt((String) vote));
+ }
+ m.setVersion((String) milestonedata.get("version"));
+ ri.addMileStone(m);
+ }
+ Collections.sort(ri.milestones);
+ }
+
+ return ri;
+ }
+
+ private static String makeDate(LocalDateTime date) {
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d MMM yyyy", Locale.US);
+ return date.format(formatter);
+ }
+
+ private static String makeAtomDate(LocalDateTime date) {
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
+ return date.format(formatter);
+ }
+
+ private Object getJSONInfo(JSONObject json, String key, String info) {
+ Object result = json.get(key);
+ //log("Retriving " + key);
+ if (result == null) {
+ throw new BuildException("Cannot retrieve key " + key + ", this is for" + info);
+ }
+ return result;
+ }
+
+ private static class MileStone implements Comparable<MileStone> {
+
+ private int position;
+ private int vote = -1;
+ private final String hash;
+ private String version;
+
+ public MileStone(String hash) {
+ this.hash = hash;
+ }
+
+ @Override
+ public int compareTo(MileStone o) {
+ return (this.position - o.position);
+ }
+
+ private void setPosition(int position) {
+ this.position = position;
+ }
+
+ private void setVote(int vote) {
+ this.vote = vote;
+ }
+
+ private void setVersion(String version) {
+ this.version = version;
+ }
+
+ @Override
+ public String toString() {
+ return "(" + hash + "," + position + "," + vote + "," + version + ")";
+ }
+ }
+
+ /**
+ *
+ * Comparable on position. Avoir randomness.
+ */
+ private static class ReleaseInfo implements Comparable<ReleaseInfo> {
+
+ private int position;
+ private final String key;
+ private LocalDateTime releaseDate;
+ private LocalDateTime previousReleaseDate;
+ private String maturity;
+ private String version;
+ private String apidocurl;
+ private String javaapidocurl;
+ private String updateurl;
+ private String pluginsurl;
+ private List<MileStone> milestones;
+
+ public ReleaseInfo(String key) {
+ this.key = key;
+ this.milestones = new ArrayList<>();
+ }
+
+ @Override
+ public int compareTo(ReleaseInfo o) {
+ return (this.position - o.position);
+ }
+
+ private void setPosition(int position) {
+ this.position = position;
+ }
+
+ @Override
+ public String toString() {
+ return "(" + key + "," + position + ")";
+ }
+
+ private String getKey() {
+ return key;
+ }
+
+ private LocalDateTime setDate(String day, String month, String year) {
+ LocalDateTime tmp = LocalDateTime.now();
+ try {
+ tmp = LocalDateTime.of(Integer.parseInt(year), Integer.parseInt(month), Integer.parseInt(day), 12, 0);
+ } catch (NumberFormatException e) {
+ }
+ return tmp;
+ }
+
+ private void setPreviousRelease(String day, String month, String year) {
+ previousReleaseDate = setDate(day, month, year);
+ }
+
+ private void setReleaseDate(String day, String month, String year) {
+ releaseDate = setDate(day, month, year);
+ }
+
+ private void setMaturity(String tlp) {
+ this.maturity = tlp;
+ }
+
+ private void setVersion(String version) {
+ if (version.equals("-")) {
+ this.version = "dev";
+ } else {
+ this.version = version;
+ }
+ }
+
+ private void setApidocurl(String apidocurl) {
+ this.apidocurl = apidocurl;
+ }
+
+ private void setJavaApiDocurl(String javaapidocurl) {
+ this.javaapidocurl = javaapidocurl;
+ }
+
+ private void setUpdateUrl(String url) {
+ this.updateurl = url;
+ }
+
+ private void setPluginsUrl(String url) {
+ this.pluginsurl = url;
+ }
+
+ private void addMileStone(MileStone milestone) {
+ this.milestones.add(milestone);
+ }
+
+ }
+
+}
diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/SetApidocClustersConfig.java b/nbbuild/antsrc/org/netbeans/nbbuild/SetApidocClustersConfig.java
new file mode 100644
index 0000000..c190d60
--- /dev/null
+++ b/nbbuild/antsrc/org/netbeans/nbbuild/SetApidocClustersConfig.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE jsonreleaseinfoFile
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this jsonreleaseinfoFile
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this jsonreleaseinfoFile except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.nbbuild;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+/**
+ *
+ * @author skygo
+ */
+public class SetApidocClustersConfig extends Task {
+
+ /**
+ * current branch we works with
+ */
+ private String branch;
+
+ public void setBranch(String branch) {
+ this.branch = branch;
+ }
+
+ @Override
+ public void execute() throws BuildException {
+ super.execute();
+ if (branch.equals("master")) {
+// for master branch, more apidoc to generate
+ getProject().setProperty("config.javadoc.all",
+ getProject().getProperty("config.javadoc.stable") + ","
+ + getProject().getProperty("config.javadoc.deprecated") + ","
+ + getProject().getProperty("config.javadoc.devel") + ","
+ + getProject().getProperty("config.javadoc.friend"));
+ } else {
+// for release branch only stable
+ getProject().setProperty("config.javadoc.all", getProject().getProperty("config.javadoc.stable"));
+ }
+ }
+}
diff --git a/nbbuild/build.properties b/nbbuild/build.properties
index 14d8aae..8725fe3 100644
--- a/nbbuild/build.properties
+++ b/nbbuild/build.properties
@@ -26,9 +26,9 @@ tryme.arg.hack=-J-Dnetbeans.full.hack=true
# Information about branch of previous release
# needed to help us generate list of changes since then
-previous.release.year=2019
-previous.release.month=04
-previous.release.day=04
+#previous.release.year=2019
+#previous.release.month=04
+#previous.release.day=04
# Useful for "always successful" build, when you don't care of some
# particular (and currently broken) modules
@@ -224,11 +224,11 @@ config.javadoc.deprecated=\
# List of all javadocs for development version
# is composed from the javadocs split by stability
# categories, for release it shall contain just stable ones
-config.javadoc.all=\
- ${config.javadoc.stable},\
- ${config.javadoc.devel},\
- ${config.javadoc.friend},\
- ${config.javadoc.deprecated}
+#config.javadoc.all=\
+# ${config.javadoc.stable},\
+# ${config.javadoc.devel},\
+# ${config.javadoc.friend},\
+# ${config.javadoc.deprecated}
# list of modules for jnlp:
config.jnlp.stable=\
diff --git a/nbbuild/build.xml b/nbbuild/build.xml
index 83f7e95..29da259 100644
--- a/nbbuild/build.xml
+++ b/nbbuild/build.xml
@@ -19,12 +19,12 @@
under the License.
-->
-<project name="nbbuild" default="build-nozip" basedir=".">
+<project name="nbbuild" default="build-nozip" basedir="." xmlns:if="ant:if" xmlns:unless="ant:unless">
- <fail message="Please build using Ant 1.8.0 or higher.">
+ <fail message="Please build using Ant 1.9.3 or higher.">
<condition>
<not>
- <antversion atleast="1.8.0"/>
+ <antversion atleast="1.9.3"/>
</not>
</condition>
</fail>
@@ -77,6 +77,7 @@
<include name="nbbuild/external/binaries-list"/>
<include name="platform/libs.junit4/external/binaries-list"/>
<include name="platform/javahelp/external/binaries-list"/>
+ <include name="ide/libs.json_simple/external/binaries-list"/>
</manifest>
</downloadbinaries>
<!--
@@ -93,6 +94,8 @@
<fileset dir="..">
<!-- For JavaHelp indexing and link checking: -->
<include name="platform/javahelp/external/jhall*.jar"/>
+ <!-- For json parsing -->
+ <include name="ide/libs.json_simple/external/json-simple*.jar"/>
</fileset>
</path>
<javac srcdir="antsrc" destdir="${build.ant.classes.dir}" deprecation="true" debug="${build.compiler.debug}" source="1.8" target="1.8">
@@ -110,8 +113,84 @@
<zipfileset dir="${nb_all}/nbbuild" includes="notice-stub.txt" fullpath="META-INF/NOTICE"/>
</jar>
<taskdef name="createlicensesummary" classname="org.netbeans.nbbuild.extlibs.CreateLicenseSummary" classpath="${nbantext.jar}"/>
+ <!-- get all json info we have on apache gitbox -->
+ <property name="metabuild.releasejson" value="${nb_all}/nbbuild/build/netbeansrelease.json"/>
+ <condition property="metabuild.jsonurl" value="https://gitbox.apache.org/repos/asf?p=netbeans-jenkins-lib.git;a=blob_plain;f=meta/netbeansrelease.json">
+ <not>
+ <isset property="metabuild.jsonurl"/>
+ </not>
+ </condition>
+ <get dest="${metabuild.releasejson}" skipexisting="false" src="${metabuild.jsonurl}" />
+ <!-- get branches and git information -->
+ <antcall target="getgitinformation" />
+ <!-- hardcoded item for testing
+<echo file="${nb_all}/nbbuild/build/gitinfo.properties" >metabuild.branch=release111
+metabuild.hash=f56623c16cc2cbc4a381508562545b13de91437e
+</echo>
+ -->
+ <!-- javadoc content filtering -->
+ <taskdef name="setjavadoc" classname="org.netbeans.nbbuild.SetApidocClustersConfig" classpath="${nbantext.jar}"/>
+ <property file="${nb_all}/nbbuild/build/gitinfo.properties"/>
+ <setjavadoc branch="${metabuild.branch}"/>
+ <echo message="${metabuild.branch}"/>
+ <property name="releasejson" value="${nb_all}/nbbuild/build/netbeansrelease.json"/>
+ <property name="xmlrelease" value="${nb_all}/nbbuild/build/netbeansrelease.xml"/>
+ <property name="propertiesrelease" value="${nb_all}/nbbuild/build/netbeansrelease.properties"/>
+ <taskdef name="releasejson" classname="org.netbeans.nbbuild.ReleaseJsonProperties" >
+ <classpath>
+ <pathelement location="${nbantext.jar}"/>
+ <fileset dir="${nb_all}/ide/libs.json_simple/external">
+ <include name="json*.jar"/>
+ </fileset>
+ </classpath>
+ </taskdef>
+ <releasejson file="${releasejson}" xmloutput="${xmlrelease}" propertiesoutput="${propertiesrelease}" branch="${metabuild.branch}" hash="${metabuild.hash}"/>
+ <!--<fail />-->
</target>
-
+ <target name="-git.ispresent">
+ <condition property="metabuild.isgitrepo" value="true" else="false">
+ <available type="dir" file="../.git"/>
+ </condition>
+ </target>
+ <target name="-git.down" unless="${metabuild.isgitrepo}" depends="-git.ispresent">
+ <!-- no git, assuming master, but should try other option -->
+ <echo file="${nb_all}/nbbuild/build/gitinfo.properties" >metabuild.branch=master</echo>
+ </target>
+ <target name="-git.up" if="${metabuild.isgitrepo}" depends="-git.ispresent">
+ <taskdef name="gitexec" classname="org.netbeans.nbbuild.HgExec" classpath="${nbantext.jar}"/>
+ <gitexec outputproperty="git.hash.properties">
+ <arg value="rev-parse"/>
+ <arg value="HEAD"/>
+ </gitexec>
+ <gitexec outputproperty="git.branch.properties">
+ <arg value="rev-parse"/>
+ <arg value="--abbrev-ref"/>
+ <arg value="HEAD"/>
+ </gitexec>
+ <echo message="branch ${git.branch.properties}" />
+ <gitexec outputproperty="git.branchdetached.bulk.properties">
+ <arg value="branch"/>
+ <arg value="--remote"/>
+ <arg value="--verbose"/>
+ <arg value="--no-abbrev"/>
+ <arg value="--contains"/>
+ </gitexec>
+ <echo message="detached ${git.branchdetached.bulk.properties}" />
+ <!-- branch is HEAD implies detached -->
+ <condition property="invalidbranch">
+ <equals arg1="HEAD" arg2="${git.branch.properties}"/>
+ </condition>
+ <taskdef name="parsebranch" classname="org.netbeans.nbbuild.ParseGitBranch" classpath="${nbantext.jar}"/>
+ <parsebranch if:set="invalidbranch" data="${git.branchdetached.bulk.properties}" property="git.branchdetached.parsed.properties" />
+ <!-- keep echo file at begining of line, build git data -->
+ <echo unless:set="invalidbranch" file="${nb_all}/nbbuild/build/gitinfo.properties" >metabuild.branch=${git.branch.properties}
+metabuild.hash=${git.hash.properties}
+</echo>
+ <echo if:set="invalidbranch" file="${nb_all}/nbbuild/build/gitinfo.properties" >metabuild.branch=${git.branchdetached.parsed.properties}
+metabuild.hash=${git.hash.properties}
+</echo>
+ </target>
+ <target name="getgitinformation" depends="-git.up,-git.down" />
<target name="download-all-extbins" unless="ext.binaries.downloaded" depends="bootstrap">
<echo>Downloading external binaries (*/external/ directories)...</echo>
<downloadbinaries cache="${binaries.cache}" server="${binaries.server}">
@@ -378,6 +457,11 @@
<mkdir dir="${netbeans.dest.dir}/etc" />
<copy file="../nb/ide.launcher/netbeans.conf" todir="${netbeans.dest.dir}/etc" overwrite="true"/>
+ <!-- replace -->
+ <replace file="${netbeans.dest.dir}/etc/netbeans.conf" value="defaultvalue" propertyFile="${nb_all}/nbbuild/build/netbeansrelease.properties">
+ <replacefilter token="@@metabuild.RawVersion@@" property="metabuild.RawVersion"/>
+ <replacefilter token="@@metabuild.logcli@@" property="metabuild.logcli"/>
+ </replace>
<copy file="../nb/ide.launcher/netbeans.clusters" todir="${netbeans.dest.dir}/etc" overwrite="true"/>
<mkdir dir="${nb.build.dir}/license-temp" />
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists