This is an automated email from the ASF dual-hosted git repository.
hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git
The following commit(s) were added to refs/heads/main by this push:
new a5c16bda2b Issue #5981 (Hop Doc bug fix) (#6173)
a5c16bda2b is described below
commit a5c16bda2b6469609f5a671e3bdbdcde74246290
Author: Matt Casters <[email protected]>
AuthorDate: Fri Dec 12 05:03:58 2025 +0100
Issue #5981 (Hop Doc bug fix) (#6173)
* Issue #5981 (Hop Doc bug fix)
* Issue #5981 (Hop Doc integration test)
---------
Co-authored-by: Matt Casters <[email protected]>
---
.../org/apache/hop/config/HopCommandConfig.java | 7 +
.../apache/hop/encryption/HopCommandEncrypt.java | 2 +
.../java/org/apache/hop/run/HopCommandRun.java | 7 +
.../main/java/org/apache/hop/search/HopSearch.java | 1 +
.../main/java/org/apache/hop/www/HopServer.java | 1 +
.../actions/0009-build-documentation-check.hpl | 373 +++++++++++++++++++++
.../actions/main-0009-build-documentation.hwf | 212 ++++++++++++
.../org/apache/hop/documentation/ActionDoc.java | 2 +-
.../org/apache/hop/documentation/DocBuilder.java | 1 +
.../org/apache/hop/ui/hopgui/HopCommandGui.java | 2 +-
10 files changed, 606 insertions(+), 2 deletions(-)
diff --git a/engine/src/main/java/org/apache/hop/config/HopCommandConfig.java
b/engine/src/main/java/org/apache/hop/config/HopCommandConfig.java
index 7a5051d37a..1f547a681d 100644
--- a/engine/src/main/java/org/apache/hop/config/HopCommandConfig.java
+++ b/engine/src/main/java/org/apache/hop/config/HopCommandConfig.java
@@ -20,6 +20,7 @@ package org.apache.hop.config;
import lombok.Getter;
import lombok.Setter;
+import org.apache.hop.core.Const;
import org.apache.hop.core.config.plugin.ConfigPlugin;
import org.apache.hop.core.exception.HopException;
import org.apache.hop.core.variables.IVariables;
@@ -53,4 +54,10 @@ public class HopCommandConfig extends HopConfigBase
Hop.addMixinPlugins(cmd, ConfigPlugin.CATEGORY_CONFIG);
}
+
+ @Override
+ public void run() {
+ System.setProperty(Const.HOP_PLATFORM_RUNTIME, "CONF");
+ super.run();
+ }
}
diff --git
a/engine/src/main/java/org/apache/hop/encryption/HopCommandEncrypt.java
b/engine/src/main/java/org/apache/hop/encryption/HopCommandEncrypt.java
index f03fde9ebc..e30f92f31b 100644
--- a/engine/src/main/java/org/apache/hop/encryption/HopCommandEncrypt.java
+++ b/engine/src/main/java/org/apache/hop/encryption/HopCommandEncrypt.java
@@ -20,6 +20,7 @@ package org.apache.hop.encryption;
import lombok.Getter;
import lombok.Setter;
+import org.apache.hop.core.Const;
import org.apache.hop.core.encryption.Encr;
import org.apache.hop.core.exception.HopException;
import org.apache.hop.core.variables.IVariables;
@@ -62,6 +63,7 @@ public class HopCommandEncrypt implements Runnable,
IHopCommand {
@Override
public void run() {
try {
+ System.setProperty(Const.HOP_PLATFORM_RUNTIME, "ENCRYPT");
if (passwords == null || passwords.length == 0) {
System.exit(1);
}
diff --git a/engine/src/main/java/org/apache/hop/run/HopCommandRun.java
b/engine/src/main/java/org/apache/hop/run/HopCommandRun.java
index 783edf5998..be1543d674 100644
--- a/engine/src/main/java/org/apache/hop/run/HopCommandRun.java
+++ b/engine/src/main/java/org/apache/hop/run/HopCommandRun.java
@@ -20,6 +20,7 @@ package org.apache.hop.run;
import lombok.Getter;
import lombok.Setter;
+import org.apache.hop.core.Const;
import org.apache.hop.core.config.plugin.ConfigPlugin;
import org.apache.hop.core.exception.HopException;
import org.apache.hop.core.variables.IVariables;
@@ -52,4 +53,10 @@ public class HopCommandRun extends HopRunBase
Hop.addMixinPlugins(cmd, ConfigPlugin.CATEGORY_RUN);
}
+
+ @Override
+ public void run() {
+ System.setProperty(Const.HOP_PLATFORM_RUNTIME, "RUN");
+ super.run();
+ }
}
diff --git a/engine/src/main/java/org/apache/hop/search/HopSearch.java
b/engine/src/main/java/org/apache/hop/search/HopSearch.java
index 1acb6ef215..fb93a263ef 100644
--- a/engine/src/main/java/org/apache/hop/search/HopSearch.java
+++ b/engine/src/main/java/org/apache/hop/search/HopSearch.java
@@ -118,6 +118,7 @@ public class HopSearch implements Runnable,
IHasHopMetadataProvider, IHopCommand
@Override
public void run() {
try {
+ System.setProperty(Const.HOP_PLATFORM_RUNTIME, "SEARCH");
LogChannel logChannel = new LogChannel("hop-search");
logChannel.setSimplified(true);
ILogChannel log = logChannel;
diff --git a/engine/src/main/java/org/apache/hop/www/HopServer.java
b/engine/src/main/java/org/apache/hop/www/HopServer.java
index ff2ab19888..f8882fe7d9 100644
--- a/engine/src/main/java/org/apache/hop/www/HopServer.java
+++ b/engine/src/main/java/org/apache/hop/www/HopServer.java
@@ -256,6 +256,7 @@ public class HopServer implements Runnable,
IHasHopMetadataProvider, IHopCommand
@Override
public void run() {
try {
+ System.setProperty(Const.HOP_PLATFORM_RUNTIME, "SERVER");
log = new LogChannel("HopServer");
log.setLogLevel(determineLogLevel());
log.logDetailed("Start of Hop Server");
diff --git a/integration-tests/actions/0009-build-documentation-check.hpl
b/integration-tests/actions/0009-build-documentation-check.hpl
new file mode 100644
index 0000000000..03ea13b2b2
--- /dev/null
+++ b/integration-tests/actions/0009-build-documentation-check.hpl
@@ -0,0 +1,373 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+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.
+
+-->
+<pipeline>
+ <info>
+ <name>0009-build-documentation-check</name>
+ <name_sync_with_filename>Y</name_sync_with_filename>
+ <description/>
+ <extended_description/>
+ <pipeline_version/>
+ <pipeline_type>Normal</pipeline_type>
+ <parameters>
+ </parameters>
+ <capture_transform_performance>N</capture_transform_performance>
+
<transform_performance_capturing_delay>1000</transform_performance_capturing_delay>
+
<transform_performance_capturing_size_limit>100</transform_performance_capturing_size_limit>
+ <created_user>-</created_user>
+ <created_date>2025/12/11 10:30:25.056</created_date>
+ <modified_user>-</modified_user>
+ <modified_date>2025/12/11 10:30:25.056</modified_date>
+ </info>
+ <notepads>
+ <notepad>
+ <backgroundcolorblue>251</backgroundcolorblue>
+ <backgroundcolorgreen>232</backgroundcolorgreen>
+ <backgroundcolorred>201</backgroundcolorred>
+ <bordercolorblue>90</bordercolorblue>
+ <bordercolorgreen>58</bordercolorgreen>
+ <bordercolorred>14</bordercolorred>
+ <fontbold>N</fontbold>
+ <fontcolorblue>90</fontcolorblue>
+ <fontcolorgreen>58</fontcolorgreen>
+ <fontcolorred>14</fontcolorred>
+ <fontitalic>N</fontitalic>
+ <fontname>Cantarell</fontname>
+ <fontsize>11</fontsize>
+ <height>32</height>
+ <xloc>432</xloc>
+ <yloc>208</yloc>
+ <note>We expect one svg file per pipeline or workflow in this project:
+We expect 2 extra md files for the index and metadata.</note>
+ <width>32</width>
+ </notepad>
+ </notepads>
+ <order>
+ <hop>
+ <from>get md files</from>
+ <to>count md files</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>get svg files</from>
+ <to>count svg files</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>get pipelines/workflows</from>
+ <to>count hop files</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>count md files</from>
+ <to>X</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>count svg files</from>
+ <to>X</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>count hop files</from>
+ <to>X</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>X</from>
+ <to>Check Hop Doc files</to>
+ <enabled>Y</enabled>
+ </hop>
+ </order>
+ <transform>
+ <name>Check Hop Doc files</name>
+ <type>ScriptValueMod</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <optimizationLevel>9</optimizationLevel>
+ <jsScripts>
+ <jsScript>
+ <jsScript_type>0</jsScript_type>
+ <jsScript_name>Script 1</jsScript_name>
+ <jsScript_script>/*
+ We expect one svg file per pipeline or workflow in this project:
+ We expect 2 extra md files for the index and metadata.
+*/
+
+if (nrMd-nrHop != 2) {
+ throw new Error("We expected to find "+(nrHop+2)+" .md files, but only found
"+nrMd);
+}
+
+if (nrSvg-nrHop != 0) {
+ throw new Error("We expected to find "+nrHop+" .svg files, but only found
"+nrSvg);
+}
+</jsScript_script>
+ </jsScript>
+ </jsScripts>
+ <fields> </fields>
+ <attributes/>
+ <GUI>
+ <xloc>512</xloc>
+ <yloc>144</yloc>
+ </GUI>
+ </transform>
+ <transform>
+ <name>X</name>
+ <type>JoinRows</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <cache_size>500</cache_size>
+ <compare>
+ <condition>
+ <conditions>
+</conditions>
+ <function>=</function>
+ <negated>N</negated>
+ <operator>-</operator>
+ </condition>
+ </compare>
+ <directory>%%java.io.tmpdir%%</directory>
+ <prefix>out</prefix>
+ <attributes/>
+ <GUI>
+ <xloc>368</xloc>
+ <yloc>144</yloc>
+ </GUI>
+ </transform>
+ <transform>
+ <name>count hop files</name>
+ <type>GroupBy</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <add_linenr>N</add_linenr>
+ <all_rows>N</all_rows>
+ <directory>${java.io.tmpdir}</directory>
+ <fields>
+ <field>
+ <aggregate>nrHop</aggregate>
+ <subject>filename</subject>
+ <type>COUNT_ALL</type>
+ </field>
+ </fields>
+ <give_back_row>Y</give_back_row>
+ <group>
+</group>
+ <ignore_aggregate>N</ignore_aggregate>
+ <prefix>grp</prefix>
+ <attributes/>
+ <GUI>
+ <xloc>240</xloc>
+ <yloc>224</yloc>
+ </GUI>
+ </transform>
+ <transform>
+ <name>count md files</name>
+ <type>GroupBy</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <add_linenr>N</add_linenr>
+ <all_rows>N</all_rows>
+ <directory>${java.io.tmpdir}</directory>
+ <fields>
+ <field>
+ <aggregate>nrMd</aggregate>
+ <subject>filename</subject>
+ <type>COUNT_ALL</type>
+ </field>
+ </fields>
+ <give_back_row>Y</give_back_row>
+ <group>
+</group>
+ <ignore_aggregate>N</ignore_aggregate>
+ <prefix>grp</prefix>
+ <attributes/>
+ <GUI>
+ <xloc>240</xloc>
+ <yloc>64</yloc>
+ </GUI>
+ </transform>
+ <transform>
+ <name>count svg files</name>
+ <type>GroupBy</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <add_linenr>N</add_linenr>
+ <all_rows>N</all_rows>
+ <directory>${java.io.tmpdir}</directory>
+ <fields>
+ <field>
+ <aggregate>nrSvg</aggregate>
+ <subject>filename</subject>
+ <type>COUNT_ALL</type>
+ </field>
+ </fields>
+ <give_back_row>Y</give_back_row>
+ <group>
+</group>
+ <ignore_aggregate>N</ignore_aggregate>
+ <prefix>grp</prefix>
+ <attributes/>
+ <GUI>
+ <xloc>240</xloc>
+ <yloc>144</yloc>
+ </GUI>
+ </transform>
+ <transform>
+ <name>get md files</name>
+ <type>GetFileNames</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <doNotFailIfNoFile>N</doNotFailIfNoFile>
+ <dynamic_include_subfolders>N</dynamic_include_subfolders>
+ <file>
+ <file_required>Y</file_required>
+ <filemask>.*\.md</filemask>
+ <include_subfolders>Y</include_subfolders>
+ <name>${java.io.tmpdir}/hop-doc/</name>
+ </file>
+ <filefield>N</filefield>
+ <filter>
+ <filterfiletype>all_files</filterfiletype>
+ </filter>
+ <isaddresult>Y</isaddresult>
+ <limit>0</limit>
+ <raiseAnExceptionIfNoFile>N</raiseAnExceptionIfNoFile>
+ <rownum>N</rownum>
+ <attributes/>
+ <GUI>
+ <xloc>112</xloc>
+ <yloc>64</yloc>
+ </GUI>
+ </transform>
+ <transform>
+ <name>get pipelines/workflows</name>
+ <type>GetFileNames</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <doNotFailIfNoFile>N</doNotFailIfNoFile>
+ <dynamic_include_subfolders>N</dynamic_include_subfolders>
+ <file>
+ <file_required>Y</file_required>
+ <filemask>.*\.hpl</filemask>
+ <include_subfolders>Y</include_subfolders>
+ <name>${PROJECT_HOME}/</name>
+ </file>
+ <file>
+ <file_required>Y</file_required>
+ <filemask>.*\.hwf</filemask>
+ <include_subfolders>Y</include_subfolders>
+ <name>${PROJECT_HOME}/</name>
+ </file>
+ <file>
+ <file_required>N</file_required>
+ <include_subfolders>N</include_subfolders>
+ </file>
+ <filefield>N</filefield>
+ <filter>
+ <filterfiletype>all_files</filterfiletype>
+ </filter>
+ <isaddresult>Y</isaddresult>
+ <limit>0</limit>
+ <raiseAnExceptionIfNoFile>N</raiseAnExceptionIfNoFile>
+ <rownum>N</rownum>
+ <attributes/>
+ <GUI>
+ <xloc>112</xloc>
+ <yloc>224</yloc>
+ </GUI>
+ </transform>
+ <transform>
+ <name>get svg files</name>
+ <type>GetFileNames</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <doNotFailIfNoFile>N</doNotFailIfNoFile>
+ <dynamic_include_subfolders>N</dynamic_include_subfolders>
+ <file>
+ <file_required>Y</file_required>
+ <filemask>.*\.svg</filemask>
+ <include_subfolders>Y</include_subfolders>
+ <name>${java.io.tmpdir}/hop-doc/</name>
+ </file>
+ <filefield>N</filefield>
+ <filter>
+ <filterfiletype>all_files</filterfiletype>
+ </filter>
+ <isaddresult>Y</isaddresult>
+ <limit>0</limit>
+ <raiseAnExceptionIfNoFile>N</raiseAnExceptionIfNoFile>
+ <rownum>N</rownum>
+ <attributes/>
+ <GUI>
+ <xloc>112</xloc>
+ <yloc>144</yloc>
+ </GUI>
+ </transform>
+ <transform_error_handling>
+ </transform_error_handling>
+ <attributes/>
+</pipeline>
diff --git a/integration-tests/actions/main-0009-build-documentation.hwf
b/integration-tests/actions/main-0009-build-documentation.hwf
new file mode 100644
index 0000000000..1427bdb2c6
--- /dev/null
+++ b/integration-tests/actions/main-0009-build-documentation.hwf
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+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.
+
+-->
+<workflow>
+ <name>main-0009-build-documentation</name>
+ <name_sync_with_filename>Y</name_sync_with_filename>
+ <description/>
+ <extended_description/>
+ <workflow_version/>
+ <created_user>-</created_user>
+ <created_date>2025/12/11 10:12:29.110</created_date>
+ <modified_user>-</modified_user>
+ <modified_date>2025/12/11 10:12:29.110</modified_date>
+ <parameters>
+ </parameters>
+ <actions>
+ <action>
+ <name>Start</name>
+ <description/>
+ <type>SPECIAL</type>
+ <attributes/>
+ <DayOfMonth>1</DayOfMonth>
+ <doNotWaitOnFirstExecution>N</doNotWaitOnFirstExecution>
+ <hour>12</hour>
+ <intervalMinutes>60</intervalMinutes>
+ <intervalSeconds>0</intervalSeconds>
+ <minutes>0</minutes>
+ <repeat>N</repeat>
+ <schedulerType>0</schedulerType>
+ <weekDay>1</weekDay>
+ <parallel>N</parallel>
+ <xloc>80</xloc>
+ <yloc>64</yloc>
+ <attributes_hac/>
+ </action>
+ <action>
+ <name>Build Documentation</name>
+ <description/>
+ <type>DOCUMENTATION</type>
+ <attributes/>
+ <includingMetadata>Y</includingMetadata>
+ <includingNotes>Y</includingNotes>
+ <includingParameters>Y</includingParameters>
+ <targetParentFolder>${java.io.tmpdir}/hop-doc/</targetParentFolder>
+ <parallel>N</parallel>
+ <xloc>672</xloc>
+ <yloc>64</yloc>
+ <attributes_hac/>
+ </action>
+ <action>
+ <name>/tmp/hop-doc/</name>
+ <description/>
+ <type>CREATE_FOLDER</type>
+ <attributes/>
+ <fail_of_folder_exists>N</fail_of_folder_exists>
+ <foldername>${java.io.tmpdir}/hop-doc/</foldername>
+ <parallel>N</parallel>
+ <xloc>336</xloc>
+ <yloc>64</yloc>
+ <attributes_hac/>
+ </action>
+ <action>
+ <name>delete /tmp/hop-doc</name>
+ <description/>
+ <type>DELETE_FOLDERS</type>
+ <attributes/>
+ <arg_from_previous>N</arg_from_previous>
+ <fields>
+ <field>
+ <name>${java.io.tmpdir}/hop-doc/</name>
+ </field>
+ </fields>
+ <limit_folders>10</limit_folders>
+ <success_condition>success_if_no_errors</success_condition>
+ <parallel>N</parallel>
+ <xloc>208</xloc>
+ <yloc>64</yloc>
+ <attributes_hac/>
+ </action>
+ <action>
+ <name>0009-build-documentation-check</name>
+ <description/>
+ <type>PIPELINE</type>
+ <attributes/>
+ <add_date>N</add_date>
+ <add_time>N</add_time>
+ <clear_files>N</clear_files>
+ <clear_rows>N</clear_rows>
+ <create_parent_folder>N</create_parent_folder>
+ <exec_per_row>N</exec_per_row>
+ <filename>${PROJECT_HOME}/0009-build-documentation-check.hpl</filename>
+ <loglevel>Basic</loglevel>
+ <parameters>
+ <pass_all_parameters>Y</pass_all_parameters>
+ </parameters>
+ <params_from_previous>N</params_from_previous>
+ <run_configuration>local</run_configuration>
+ <set_append_logfile>N</set_append_logfile>
+ <set_logfile>N</set_logfile>
+ <wait_until_finished>Y</wait_until_finished>
+ <parallel>N</parallel>
+ <xloc>384</xloc>
+ <yloc>176</yloc>
+ <attributes_hac/>
+ </action>
+ <action>
+ <name>/tmp/hop-doc empty?</name>
+ <description/>
+ <type>FOLDER_IS_EMPTY</type>
+ <attributes/>
+ <foldername>${java.io.tmpdir}/hop-doc/</foldername>
+ <include_subfolders>Y</include_subfolders>
+ <specify_wildcard>N</specify_wildcard>
+ <parallel>N</parallel>
+ <xloc>496</xloc>
+ <yloc>64</yloc>
+ <attributes_hac/>
+ </action>
+ <action>
+ <name>Abort workflow</name>
+ <description/>
+ <type>ABORT</type>
+ <attributes/>
+ <always_log_rows>N</always_log_rows>
+ <message>We didn't find all the expected files in the generated
documentation.</message>
+ <parallel>N</parallel>
+ <xloc>592</xloc>
+ <yloc>176</yloc>
+ <attributes_hac/>
+ </action>
+ <action>
+ <name>Success</name>
+ <description/>
+ <type>SUCCESS</type>
+ <attributes/>
+ <parallel>N</parallel>
+ <xloc>384</xloc>
+ <yloc>256</yloc>
+ <attributes_hac/>
+ </action>
+ </actions>
+ <hops>
+ <hop>
+ <from>Start</from>
+ <to>delete /tmp/hop-doc</to>
+ <enabled>Y</enabled>
+ <evaluation>Y</evaluation>
+ <unconditional>Y</unconditional>
+ </hop>
+ <hop>
+ <from>delete /tmp/hop-doc</from>
+ <to>/tmp/hop-doc/</to>
+ <enabled>Y</enabled>
+ <evaluation>Y</evaluation>
+ <unconditional>N</unconditional>
+ </hop>
+ <hop>
+ <from>Build Documentation</from>
+ <to>0009-build-documentation-check</to>
+ <enabled>Y</enabled>
+ <evaluation>Y</evaluation>
+ <unconditional>N</unconditional>
+ </hop>
+ <hop>
+ <from>/tmp/hop-doc/</from>
+ <to>/tmp/hop-doc empty?</to>
+ <enabled>Y</enabled>
+ <evaluation>Y</evaluation>
+ <unconditional>N</unconditional>
+ </hop>
+ <hop>
+ <from>/tmp/hop-doc empty?</from>
+ <to>Build Documentation</to>
+ <enabled>Y</enabled>
+ <evaluation>Y</evaluation>
+ <unconditional>N</unconditional>
+ </hop>
+ <hop>
+ <from>0009-build-documentation-check</from>
+ <to>Abort workflow</to>
+ <enabled>Y</enabled>
+ <evaluation>N</evaluation>
+ <unconditional>N</unconditional>
+ </hop>
+ <hop>
+ <from>0009-build-documentation-check</from>
+ <to>Success</to>
+ <enabled>Y</enabled>
+ <evaluation>Y</evaluation>
+ <unconditional>N</unconditional>
+ </hop>
+ </hops>
+ <notepads>
+ </notepads>
+ <attributes/>
+</workflow>
diff --git
a/plugins/misc/documentation/src/main/java/org/apache/hop/documentation/ActionDoc.java
b/plugins/misc/documentation/src/main/java/org/apache/hop/documentation/ActionDoc.java
index ab95cdd6c3..909c0e6dc3 100644
---
a/plugins/misc/documentation/src/main/java/org/apache/hop/documentation/ActionDoc.java
+++
b/plugins/misc/documentation/src/main/java/org/apache/hop/documentation/ActionDoc.java
@@ -121,7 +121,7 @@ public class ActionDoc extends ActionBase implements
Cloneable, IAction {
provider,
getVariable(DocBuilder.VAR_PROJECT_NAME),
getVariable(DocBuilder.VAR_PROJECT_HOME),
- targetParentFolder,
+ resolve(targetParentFolder),
includingParameters,
includingNotes,
includingMetadata);
diff --git
a/plugins/misc/documentation/src/main/java/org/apache/hop/documentation/DocBuilder.java
b/plugins/misc/documentation/src/main/java/org/apache/hop/documentation/DocBuilder.java
index 0e7976854b..29719623d2 100644
---
a/plugins/misc/documentation/src/main/java/org/apache/hop/documentation/DocBuilder.java
+++
b/plugins/misc/documentation/src/main/java/org/apache/hop/documentation/DocBuilder.java
@@ -152,6 +152,7 @@ public class DocBuilder implements Runnable, IHopCommand,
IHasHopMetadataProvide
// Check a few variables...
//
try {
+ System.setProperty(Const.HOP_PLATFORM_RUNTIME, "DOC");
handleMixinActions();
if (StringUtils.isNotEmpty(variables.getVariable(VAR_PROJECT_NAME))) {
diff --git a/ui/src/main/java/org/apache/hop/ui/hopgui/HopCommandGui.java
b/ui/src/main/java/org/apache/hop/ui/hopgui/HopCommandGui.java
index 40a11e7b9b..c78457cb13 100644
--- a/ui/src/main/java/org/apache/hop/ui/hopgui/HopCommandGui.java
+++ b/ui/src/main/java/org/apache/hop/ui/hopgui/HopCommandGui.java
@@ -46,7 +46,6 @@ public class HopCommandGui implements Runnable, IHopCommand {
CommandLine cmd, IVariables variables, MultiMetadataProvider
metadataProvider)
throws HopException {
// Nothing specific
- System.setProperty(Const.HOP_PLATFORM_RUNTIME, "GUI");
}
@Override
@@ -54,6 +53,7 @@ public class HopCommandGui implements Runnable, IHopCommand {
if (unmatchedArguments == null) {
unmatchedArguments = new String[] {};
}
+ System.setProperty(Const.HOP_PLATFORM_RUNTIME, "GUI");
HopGui.main(unmatchedArguments);
}
}