├── .github ├── release-drafter.yml └── workflows │ ├── jenkins-security-scan.yml │ └── release-drafter.yml ├── .gitignore ├── COPYRIGHT.txt ├── Jenkinsfile ├── LICENSE.txt ├── README.txt ├── doc ├── CHANGELOG.md ├── README.md └── images │ ├── build_page.png │ ├── config1.png │ ├── detailed.png │ ├── log_fail_open.png │ ├── project_page.png │ ├── robot_summary_table.png │ ├── robot_view_column.png │ └── sidepanel.png ├── pom.xml └── src ├── main ├── java │ └── hudson │ │ └── plugins │ │ └── robot │ │ ├── AggregatedRobotAction.java │ │ ├── RobotBuildAction.java │ │ ├── RobotConfig.java │ │ ├── RobotParser.java │ │ ├── RobotProjectAction.java │ │ ├── RobotPublisher.java │ │ ├── RobotResultAggregator.java │ │ ├── RobotStep.java │ │ ├── RobotStepExecution.java │ │ ├── blueocean │ │ └── BlueRobotTestResult.java │ │ ├── graph │ │ ├── RobotBuildLabel.java │ │ ├── RobotGraph.java │ │ └── RobotGraphHelper.java │ │ ├── model │ │ ├── RobotCaseComparator.java │ │ ├── RobotCaseResult.java │ │ ├── RobotResult.java │ │ ├── RobotResultStatistics.java │ │ ├── RobotSuiteResult.java │ │ └── RobotTestObject.java │ │ ├── tokens │ │ ├── RobotFailTokenMacro.java │ │ ├── RobotFailedCasesTokenMacro.java │ │ ├── RobotPassPercentageTokenMacro.java │ │ ├── RobotPassRatioTokenMacro.java │ │ ├── RobotPassTokenMacro.java │ │ ├── RobotReportLinkTokenMacro.java │ │ └── RobotTotalTokenMacro.java │ │ └── view │ │ └── RobotListViewColumn.java ├── resources │ ├── hudson │ │ └── plugins │ │ │ └── robot │ │ │ ├── AggregatedRobotAction │ │ │ ├── index.jelly │ │ │ ├── notfound.jelly │ │ │ ├── notfound.properties │ │ │ ├── summary.jelly │ │ │ └── summary.properties │ │ │ ├── Messages.properties │ │ │ ├── RobotBuildAction │ │ │ ├── notfound.jelly │ │ │ ├── notfound.properties │ │ │ ├── summary.jelly │ │ │ └── summary.properties │ │ │ ├── RobotConfig │ │ │ └── config.jelly │ │ │ ├── RobotProjectAction │ │ │ ├── floatingBox.jelly │ │ │ ├── floatingBox.properties │ │ │ ├── jobMain.jelly │ │ │ ├── jobMain.properties │ │ │ ├── nodata.jelly │ │ │ └── nodata.properties │ │ │ ├── RobotPublisher │ │ │ ├── config.jelly │ │ │ ├── config.properties │ │ │ ├── help-disableArchiveOutput.html │ │ │ ├── help-enableCache.html │ │ │ ├── help-logFileLink.html │ │ │ ├── help-logFileName.html │ │ │ ├── help-otherFiles.html │ │ │ ├── help-outputFileName.html │ │ │ ├── help-overwriteXAxisLabel.html │ │ │ ├── help-reportFileName.html │ │ │ └── help.html │ │ │ ├── RobotStep │ │ │ ├── config.jelly │ │ │ ├── config.properties │ │ │ ├── help-disableArchiveOutput.html │ │ │ ├── help-enableCache.html │ │ │ ├── help-logFileLink.html │ │ │ ├── help-logFileName.html │ │ │ ├── help-otherFiles.html │ │ │ ├── help-outputFileName.html │ │ │ ├── help-overwriteXAxisLabel.html │ │ │ ├── help-reportFileName.html │ │ │ └── help.html │ │ │ ├── model │ │ │ ├── RobotCaseResult │ │ │ │ ├── index.jelly │ │ │ │ └── summary.jelly │ │ │ ├── RobotResult │ │ │ │ ├── index.jelly │ │ │ │ ├── notfound.jelly │ │ │ │ ├── notfound.properties │ │ │ │ └── sidepanel.jelly │ │ │ ├── RobotSuiteResult │ │ │ │ └── index.jelly │ │ │ └── RobotTestObject │ │ │ │ └── robotcss.jelly │ │ │ ├── tokens │ │ │ ├── RobotFailTokenMacro │ │ │ │ └── help.jelly │ │ │ ├── RobotFailedCasesTokenMacro │ │ │ │ └── help.jelly │ │ │ ├── RobotPassPercentageTokenMacro │ │ │ │ └── help.jelly │ │ │ ├── RobotPassRatioTokenMacro │ │ │ │ └── help.jelly │ │ │ ├── RobotPassTokenMacro │ │ │ │ └── help.jelly │ │ │ ├── RobotReportLinkTokenMacro │ │ │ │ └── help.jelly │ │ │ └── RobotTotalTokenMacro │ │ │ │ └── help.jelly │ │ │ ├── util │ │ │ ├── failedCases.jelly │ │ │ ├── robotsummary.jelly │ │ │ ├── robotsummary.properties │ │ │ └── taglib │ │ │ └── view │ │ │ └── RobotListViewColumn │ │ │ ├── column.jelly │ │ │ └── columnHeader.jelly │ └── index.jelly └── webapp │ ├── help-thresholds.html │ ├── robot-large.png │ ├── robot.js │ └── robot.png └── test ├── java └── hudson │ └── plugins │ └── robot │ ├── RobotParserTest.java │ ├── RobotProjectActionTest.java │ ├── RobotPublisherSystemTest.java │ ├── RobotPublisherTest.java │ ├── SilentIncorrectnessListener.java │ ├── blueocean │ ├── BlueRobotTestResultForRobot4Test.java │ └── BlueRobotTestResultTest.java │ ├── graph │ └── RobotGraphHelperTest.java │ ├── model │ ├── RobotResultTest.java │ └── RobotSuiteResultTest.java │ └── tokens │ ├── RobotFailTokenMacroTest.java │ ├── RobotFailedCasesTokenMacroTest.java │ ├── RobotPassPercentageTokenMacroTest.java │ ├── RobotPassRatioTokenMacroTest.java │ ├── RobotPassTokenMacroTest.java │ ├── RobotReportLinkTokenMacroTest.java │ └── RobotTotalTokenMacroTest.java └── resources └── hudson └── plugins └── robot ├── RobotPublisherSystemTest ├── config.xml └── jobs │ ├── collisions │ ├── config.xml │ └── workspace │ │ └── output.xml │ ├── disable-archive-output-xml │ ├── config.xml │ └── workspace │ │ ├── dummy.file │ │ ├── log-001.html │ │ ├── log-001.js │ │ ├── log.html │ │ ├── log.js │ │ ├── output-001.xml │ │ ├── output.xml │ │ ├── report-001.html │ │ ├── report.html │ │ ├── screenshot.png │ │ └── subfolder │ │ └── screenshot2.png │ ├── dont-copy │ ├── config.xml │ └── workspace │ │ ├── dummy.file │ │ ├── output-001.xml │ │ └── output.xml │ ├── failingtests │ ├── .config.xml.swp │ ├── builds │ │ ├── 1 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ └── log │ │ ├── 2 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ ├── log │ │ │ └── robot-plugin │ │ │ │ └── output.xml │ │ ├── 3 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ ├── log │ │ │ └── robot-plugin │ │ │ │ └── output.xml │ │ ├── 4 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ ├── log │ │ │ └── robot-plugin │ │ │ │ └── output.xml │ │ ├── 2011-04-06_14-16-58 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ └── log │ │ ├── 2011-04-06_14-26-58 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ ├── log │ │ │ └── robot-plugin │ │ │ │ └── output.xml │ │ ├── 2011-04-06_14-27-03 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ ├── log │ │ │ └── robot-plugin │ │ │ │ └── output.xml │ │ └── 2011-04-06_14-27-08 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ ├── log │ │ │ └── robot-plugin │ │ │ └── output.xml │ ├── config.xml │ ├── lastStable │ │ ├── build.xml │ │ ├── changelog.xml │ │ ├── log │ │ └── robot-plugin │ │ │ └── output.xml │ ├── lastSuccessful │ │ ├── build.xml │ │ ├── changelog.xml │ │ ├── log │ │ └── robot-plugin │ │ │ └── output.xml │ ├── nextBuildNumber │ └── workspace │ │ └── output.xml │ ├── files-with-env-vars │ ├── config.xml │ └── workspace │ │ ├── log_1.html │ │ ├── output_1.xml │ │ └── report_1.html │ ├── matrix-robot │ ├── builds │ │ ├── 2 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ └── log │ │ └── 2013-08-01_14-36-42 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ └── log │ ├── config.xml │ ├── configurations │ │ └── axis-FOO │ │ │ ├── bar │ │ │ ├── builds │ │ │ │ ├── 2 │ │ │ │ │ ├── build.xml │ │ │ │ │ ├── changelog.xml │ │ │ │ │ ├── log │ │ │ │ │ ├── robot-plugin │ │ │ │ │ │ ├── output.xml │ │ │ │ │ │ └── report.html │ │ │ │ │ └── robot_results.xml │ │ │ │ └── 2013-08-01_14-36-42 │ │ │ │ │ ├── build.xml │ │ │ │ │ ├── changelog.xml │ │ │ │ │ ├── log │ │ │ │ │ ├── robot-plugin │ │ │ │ │ ├── output.xml │ │ │ │ │ └── report.html │ │ │ │ │ └── robot_results.xml │ │ │ ├── config.xml │ │ │ ├── lastStable │ │ │ │ ├── build.xml │ │ │ │ ├── changelog.xml │ │ │ │ ├── log │ │ │ │ ├── robot-plugin │ │ │ │ │ ├── output.xml │ │ │ │ │ └── report.html │ │ │ │ └── robot_results.xml │ │ │ └── lastSuccessful │ │ │ │ ├── build.xml │ │ │ │ ├── changelog.xml │ │ │ │ ├── log │ │ │ │ ├── robot-plugin │ │ │ │ ├── output.xml │ │ │ │ └── report.html │ │ │ │ └── robot_results.xml │ │ │ └── baz │ │ │ ├── builds │ │ │ ├── 2 │ │ │ │ ├── build.xml │ │ │ │ ├── changelog.xml │ │ │ │ ├── log │ │ │ │ ├── robot-plugin │ │ │ │ │ ├── output.xml │ │ │ │ │ └── report.html │ │ │ │ └── robot_results.xml │ │ │ └── 2013-08-01_14-36-42 │ │ │ │ ├── build.xml │ │ │ │ ├── changelog.xml │ │ │ │ ├── log │ │ │ │ ├── robot-plugin │ │ │ │ ├── output.xml │ │ │ │ └── report.html │ │ │ │ └── robot_results.xml │ │ │ ├── config.xml │ │ │ ├── lastStable │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ ├── log │ │ │ ├── robot-plugin │ │ │ │ ├── output.xml │ │ │ │ └── report.html │ │ │ └── robot_results.xml │ │ │ └── lastSuccessful │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ ├── log │ │ │ ├── robot-plugin │ │ │ ├── output.xml │ │ │ └── report.html │ │ │ └── robot_results.xml │ ├── lastStable │ │ ├── build.xml │ │ ├── changelog.xml │ │ └── log │ ├── lastSuccessful │ │ ├── build.xml │ │ ├── changelog.xml │ │ └── log │ ├── nextBuildNumber │ └── workspace │ │ └── FOO │ │ ├── bar │ │ ├── output.xml │ │ └── report.html │ │ └── baz │ │ ├── output.xml │ │ └── report.html │ ├── oldrobotbuild │ ├── builds │ │ ├── 1 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ ├── log │ │ │ └── robot-plugin │ │ │ │ ├── log.html │ │ │ │ ├── output.xml │ │ │ │ └── report.html │ │ └── 2010-12-02_00-34-45 │ │ │ ├── build.xml │ │ │ ├── changelog.xml │ │ │ ├── log │ │ │ └── robot-plugin │ │ │ ├── log.html │ │ │ ├── output.xml │ │ │ └── report.html │ ├── config.xml │ ├── nextBuildNumber │ └── workspace │ │ ├── log-001.html │ │ ├── log.html │ │ ├── output-001.xml │ │ ├── output.xml │ │ ├── report-001.html │ │ └── report.html │ ├── robot │ ├── config.xml │ └── workspace │ │ ├── dummy.file │ │ ├── log-001.html │ │ ├── log-001.js │ │ ├── log.html │ │ ├── log.js │ │ ├── output-001.xml │ │ ├── output.xml │ │ ├── report-001.html │ │ ├── report.html │ │ ├── screenshot.png │ │ └── subfolder │ │ └── screenshot2.png │ ├── robot29output │ ├── config.xml │ └── workspace │ │ └── output.xml │ └── several-outputs │ ├── config.xml │ └── workspace │ ├── submodule1 │ ├── TEST-Suites.xml │ ├── log.html │ ├── output.xml │ └── report.html │ └── submodule2 │ ├── TEST-Suites.xml │ ├── log.html │ ├── output.xml │ └── report.html ├── blueocean ├── blue_skip.xml └── output.xml ├── empty_args-output.xml ├── graph └── output.xml ├── low_failure_output.xml ├── model ├── collisions.xml ├── new_critical_output.xml ├── output.xml ├── robot4_empty_suite_name.xml ├── robot4_skip.xml ├── suite-setup-and-teardown.xml ├── teardown_fail.xml ├── testfile-001.xml ├── testfile-002.xml └── testfile.xml ├── nested_output.xml ├── nested_output2.xml ├── rebot_output.xml ├── robot4_if_output.xml ├── robot4_nested_output.xml ├── robot4_output.xml ├── robot5 └── basic_new_features_output.xml ├── robot7 └── inline_var_output.xml └── xxe_output.xml /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | _extends: .github 2 | name-template: $NEXT_PATCH_VERSION 3 | tag-template: robot-$NEXT_VERSION_VERSION 4 | version-template: $MAJOR.$MINOR.$PATCH 5 | categories: 6 | - title: '🚀 Features' 7 | labels: 8 | - 'feature' 9 | - 'enhancement' 10 | - title: '🐛 Bug Fixes' 11 | labels: 12 | - 'fix' 13 | - 'bugfix' 14 | - 'bug' 15 | - title: '🧰 Maintenance' 16 | label: 'maintenance' 17 | exclude-labels: 18 | - 'skip-changelog' -------------------------------------------------------------------------------- /.github/workflows/jenkins-security-scan.yml: -------------------------------------------------------------------------------- 1 | name: Jenkins Security Scan 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | types: [ opened, synchronize, reopened ] 9 | workflow_dispatch: 10 | 11 | permissions: 12 | security-events: write 13 | contents: read 14 | actions: read 15 | 16 | jobs: 17 | security-scan: 18 | uses: jenkins-infra/jenkins-security-scan/.github/workflows/jenkins-security-scan.yaml@v2 19 | with: 20 | java-cache: 'maven' # Optionally enable use of a build dependency cache. Specify 'maven' or 'gradle' as appropriate. 21 | # java-version: 21 # Optionally specify what version of Java to set up for the build, or remove to use a recent default. 22 | -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yml: -------------------------------------------------------------------------------- 1 | # Note: additional setup is required, see https://github.com/jenkinsci/.github/blob/master/.github/release-drafter.adoc 2 | 3 | name: Release Drafter 4 | 5 | on: 6 | push: 7 | branches: 8 | - master 9 | 10 | jobs: 11 | update_release_draft: 12 | runs-on: ubuntu-latest 13 | steps: 14 | # Drafts your next Release notes as Pull Requests are merged into the default branch 15 | - uses: release-drafter/release-drafter@v5 16 | env: 17 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | .classpath 3 | .project 4 | .settings 5 | .idea 6 | .DS_Store 7 | *.iml 8 | /work/ 9 | -------------------------------------------------------------------------------- /COPYRIGHT.txt: -------------------------------------------------------------------------------- 1 | Copyright 2008-2014 Nokia Solutions and Networks Oy 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env groovy 2 | 3 | /* `buildPlugin` step provided by: https://github.com/jenkins-infra/pipeline-library */ 4 | buildPlugin( 5 | useContainerAgent: true, 6 | configurations: [ 7 | [platform: 'linux', jdk: 21], 8 | [platform: 'linux', jdk: 17], 9 | [platform: 'windows', jdk: 17], 10 | ]) 11 | -------------------------------------------------------------------------------- /README.txt: -------------------------------------------------------------------------------- 1 | Copyright 2008-2014 Nokia Solutions and Networks Oy 2 | 2018- Eficode Oy 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | 16 | ================== 17 | 18 | This plugin publishes Robot Framework (https://robotframework.org/) 19 | test reports for Jenkins (2.277.4 or newer). 20 | 21 | See https://plugins.jenkins.io/robot for more information. 22 | -------------------------------------------------------------------------------- /doc/images/build_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/robot-plugin/dbd6d98720b807cf4576dfaf30c2f4fe26e52fb9/doc/images/build_page.png -------------------------------------------------------------------------------- /doc/images/config1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/robot-plugin/dbd6d98720b807cf4576dfaf30c2f4fe26e52fb9/doc/images/config1.png -------------------------------------------------------------------------------- /doc/images/detailed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/robot-plugin/dbd6d98720b807cf4576dfaf30c2f4fe26e52fb9/doc/images/detailed.png -------------------------------------------------------------------------------- /doc/images/log_fail_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/robot-plugin/dbd6d98720b807cf4576dfaf30c2f4fe26e52fb9/doc/images/log_fail_open.png -------------------------------------------------------------------------------- /doc/images/project_page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/robot-plugin/dbd6d98720b807cf4576dfaf30c2f4fe26e52fb9/doc/images/project_page.png -------------------------------------------------------------------------------- /doc/images/robot_summary_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/robot-plugin/dbd6d98720b807cf4576dfaf30c2f4fe26e52fb9/doc/images/robot_summary_table.png -------------------------------------------------------------------------------- /doc/images/robot_view_column.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/robot-plugin/dbd6d98720b807cf4576dfaf30c2f4fe26e52fb9/doc/images/robot_view_column.png -------------------------------------------------------------------------------- /doc/images/sidepanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/robot-plugin/dbd6d98720b807cf4576dfaf30c2f4fe26e52fb9/doc/images/sidepanel.png -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/RobotConfig.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot; 2 | 3 | import hudson.Extension; 4 | import jenkins.model.GlobalConfiguration; 5 | import net.sf.json.JSONObject; 6 | import org.kohsuke.stapler.StaplerRequest2; 7 | 8 | @Extension 9 | public class RobotConfig extends GlobalConfiguration { 10 | 11 | private boolean robotResultsColumnEnabled = true; 12 | private int buildsToShowInResultsColumn = 15; 13 | private String xAxisLabelFormat = "#$build"; 14 | 15 | public RobotConfig() { 16 | load(); 17 | } 18 | 19 | public static RobotConfig getInstance() { 20 | return GlobalConfiguration.all().get(RobotConfig.class); 21 | } 22 | 23 | @Override 24 | public boolean configure(StaplerRequest2 req, JSONObject o) throws FormException { 25 | // Get Robot Framework section 26 | o = o.getJSONObject("robotFramework"); 27 | 28 | robotResultsColumnEnabled = o.getBoolean("robotResultsColumnEnabled"); 29 | buildsToShowInResultsColumn = o.getInt("buildsToShowInResultsColumn"); 30 | xAxisLabelFormat = o.getString("xAxisLabelFormat"); 31 | 32 | save(); 33 | return super.configure(req, o); 34 | } 35 | 36 | public int getBuildsToShowInResultsColumn() { 37 | return buildsToShowInResultsColumn; 38 | } 39 | public boolean isRobotResultsColumnEnabled() { 40 | return robotResultsColumnEnabled; 41 | } 42 | public String getXAxisLabelFormat() { return xAxisLabelFormat; } 43 | 44 | public void setBuildsToShowInResultsColumn(int buildsToShowInResultsColumn) { 45 | this.buildsToShowInResultsColumn = buildsToShowInResultsColumn; 46 | } 47 | 48 | public void setRobotResultsColumnEnabled(boolean robotResultsColumnEnabled) { 49 | this.robotResultsColumnEnabled = robotResultsColumnEnabled; 50 | } 51 | 52 | public void setXAxisLabelFormat(String xAxisLabelFormat) { 53 | this.xAxisLabelFormat = xAxisLabelFormat; 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/RobotResultAggregator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2008-2014 Nokia Siemens Networks Oyj 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package hudson.plugins.robot; 17 | 18 | import hudson.matrix.MatrixAggregator; 19 | import hudson.matrix.MatrixBuild; 20 | import hudson.matrix.MatrixRun; 21 | import hudson.model.BuildListener; 22 | import hudson.Launcher; 23 | 24 | public class RobotResultAggregator extends MatrixAggregator { 25 | 26 | public RobotResultAggregator(MatrixBuild build, Launcher launcher, BuildListener listener){ 27 | super(build, launcher, listener); 28 | } 29 | 30 | @Override 31 | public boolean endBuild(){ 32 | AggregatedRobotAction action = new AggregatedRobotAction(build); 33 | for (MatrixRun run : build.getExactRuns()) { 34 | RobotBuildAction robotAction = run.getAction(RobotBuildAction.class); 35 | if (robotAction != null){ 36 | action.addResult(robotAction.getResult()); 37 | } 38 | } 39 | build.addAction(action); 40 | return true; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/RobotStepExecution.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot; 2 | 3 | import java.io.Serial; 4 | import java.util.logging.Logger; 5 | 6 | import hudson.EnvVars; 7 | import org.jenkinsci.plugins.workflow.steps.StepContext; 8 | import org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution; 9 | 10 | import hudson.FilePath; 11 | import hudson.Launcher; 12 | import hudson.model.Run; 13 | import hudson.model.TaskListener; 14 | 15 | public class RobotStepExecution extends SynchronousNonBlockingStepExecution { 16 | 17 | private static final Logger logger = Logger.getLogger(RobotStepExecution.class.getName()); 18 | 19 | @Serial 20 | private static final long serialVersionUID = 1L; 21 | 22 | private transient final RobotStep step; 23 | 24 | RobotStepExecution(RobotStep step, StepContext context) { 25 | super(context); 26 | this.step = step; 27 | } 28 | 29 | @Override protected Void run() throws Exception { 30 | FilePath workspace = getContext().get(FilePath.class); 31 | workspace.mkdirs(); 32 | RobotPublisher rp = new RobotPublisher(step.getArchiveDirName(), step.getOutputPath(), step.getOutputFileName(), step.getDisableArchiveOutput(), step.getReportFileName(), step.getLogFileName(), step.getPassThreshold(), step.getUnstableThreshold(), step.getCountSkippedTests(), step.getOtherFiles(), step.getEnableCache(), step.getOverwriteXAxisLabel()); 33 | rp.perform(getContext().get(Run.class), workspace, getContext().get(EnvVars.class), getContext().get(Launcher.class), getContext().get(TaskListener.class)); 34 | return null; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/blueocean/BlueRobotTestResult.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot.blueocean; 2 | 3 | import java.util.stream.Collectors; 4 | 5 | import hudson.Extension; 6 | import hudson.model.Run; 7 | import hudson.plugins.robot.RobotBuildAction; 8 | import hudson.plugins.robot.model.RobotCaseResult; 9 | import io.jenkins.blueocean.rest.Reachable; 10 | import io.jenkins.blueocean.rest.factory.BlueTestResultFactory; 11 | import io.jenkins.blueocean.rest.hal.Link; 12 | import io.jenkins.blueocean.rest.model.BlueTestResult; 13 | 14 | public class BlueRobotTestResult extends BlueTestResult { 15 | 16 | protected final RobotCaseResult result; 17 | 18 | public BlueRobotTestResult(RobotCaseResult result, Link parent) { 19 | super(parent); 20 | this.result = result; 21 | } 22 | 23 | @Override 24 | public String getName() { 25 | return result.getDisplayName(); 26 | } 27 | 28 | @Override 29 | public Status getStatus() { 30 | if (result.isPassed()) return Status.PASSED; 31 | if (result.isSkipped()) return Status.SKIPPED; 32 | return Status.FAILED; 33 | } 34 | 35 | @Override 36 | public State getTestState() { 37 | return State.UNKNOWN; 38 | } 39 | 40 | @Override 41 | public float getDuration() { 42 | // Blue ocean uses seconds instead of milliseconds 43 | return result.getDuration() / (float)1000; 44 | } 45 | 46 | @Override 47 | public String getErrorStackTrace() { 48 | return result.getStackTrace(); 49 | } 50 | 51 | @Override 52 | public String getErrorDetails() { 53 | return result.getErrorMsg() == null ? "" : result.getErrorMsg(); 54 | } 55 | 56 | @Override 57 | public String getUniqueId() { 58 | return result.getId(); 59 | } 60 | 61 | @Override 62 | public int getAge() { 63 | return result.getAge(); 64 | } 65 | 66 | @Override 67 | public String getStdErr() { 68 | return ""; 69 | } 70 | 71 | @Override 72 | public String getStdOut() { 73 | return ""; 74 | } 75 | 76 | @Override 77 | public boolean hasStdLog() { 78 | return false; 79 | } 80 | 81 | @Extension(optional = true) 82 | public static class FactoryImpl extends BlueTestResultFactory { 83 | @Override 84 | public Result getBlueTestResults(Run run, final Reachable parent) { 85 | RobotBuildAction action = run.getAction(RobotBuildAction.class); 86 | if (action == null) { 87 | return Result.notFound(); 88 | } 89 | return Result.of(action.getAllTests().stream().map(t-> new BlueRobotTestResult(t, parent.getLink())).collect(Collectors.toList())); 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/graph/RobotBuildLabel.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot.graph; 2 | 3 | import hudson.model.Run; 4 | import hudson.plugins.robot.model.RobotTestObject; 5 | 6 | import java.text.SimpleDateFormat; 7 | import java.util.Date; 8 | 9 | 10 | public class RobotBuildLabel implements Comparable 11 | { 12 | private final Run run; 13 | private final String buildLabel; 14 | 15 | public RobotBuildLabel(RobotTestObject obj, String format) { 16 | run = obj.getOwner(); 17 | buildLabel = formatBuildLabel(format, run.getTime()); 18 | } 19 | 20 | private String formatBuildLabel(String format, Date startTime) { 21 | String pattern = format.replace("$build",""+run.number); 22 | pattern = pattern.replace("$display_name", run.getDisplayName()); 23 | return new SimpleDateFormat(pattern).format(startTime); 24 | } 25 | 26 | @Override 27 | public int compareTo(RobotBuildLabel that) { 28 | return this.run.number-that.run.number; 29 | } 30 | 31 | @Override 32 | public boolean equals(Object o) { 33 | if(!(o instanceof RobotBuildLabel that)) return false; 34 | return run==that.run; 35 | } 36 | 37 | @Override 38 | public int hashCode() { 39 | return run.hashCode(); 40 | } 41 | 42 | @Override 43 | public String toString() { return buildLabel; } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/model/RobotCaseComparator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2008-2014 Nokia Solutions and Networks Oy 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package hudson.plugins.robot.model; 17 | 18 | import java.io.Serial; 19 | import java.io.Serializable; 20 | import java.util.Comparator; 21 | 22 | public class RobotCaseComparator implements Comparator, Serializable { 23 | 24 | @Serial 25 | private static final long serialVersionUID = 1L; 26 | 27 | @Override 28 | public int compare(RobotCaseResult result1, RobotCaseResult result2) { 29 | if (!result1.isPassed()) { 30 | if (result2.isPassed()) 31 | return -1; 32 | } else if (!result2.isPassed()) 33 | return 1; 34 | return result1.getRelativePackageName(result1).compareTo(result2.getRelativePackageName(result2)); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/model/RobotResultStatistics.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2008-2014 Nokia Solutions and Networks Oy 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package hudson.plugins.robot.model; 17 | 18 | import java.io.Serial; 19 | import java.io.Serializable; 20 | 21 | /** 22 | * Class representing a single testsuite/category. 23 | * 24 | */ 25 | public class RobotResultStatistics implements Serializable { 26 | 27 | @Serial 28 | private static final long serialVersionUID = 1L; 29 | 30 | private long pass; 31 | private long fail; 32 | private long skip; 33 | 34 | //backwards compatibility with old builds 35 | private transient String name; 36 | 37 | public long getPass() { 38 | return pass; 39 | } 40 | 41 | public void setPass(long pass) { 42 | this.pass = pass; 43 | } 44 | 45 | public long getFail() { 46 | return fail; 47 | } 48 | 49 | public void setFail(long fail) { 50 | this.fail = fail; 51 | } 52 | 53 | public long getSkip() { 54 | return skip; 55 | } 56 | 57 | public void setSkip(long skip) { 58 | this.skip = skip; 59 | } 60 | 61 | public long getTotal(){ 62 | return fail + pass + skip; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/tokens/RobotFailTokenMacro.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot.tokens; 2 | 3 | import hudson.Extension; 4 | import hudson.FilePath; 5 | import hudson.model.AbstractBuild; 6 | import hudson.model.Run; 7 | import hudson.model.TaskListener; 8 | import hudson.plugins.robot.RobotBuildAction; 9 | import hudson.plugins.robot.model.RobotResult; 10 | import org.jenkinsci.plugins.tokenmacro.DataBoundTokenMacro; 11 | import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException; 12 | 13 | import java.io.IOException; 14 | 15 | @Extension(optional = true) 16 | public class RobotFailTokenMacro extends DataBoundTokenMacro { 17 | 18 | @Override 19 | public String evaluate(AbstractBuild context, TaskListener listener, 20 | String macroName) throws MacroEvaluationException, IOException, 21 | InterruptedException { 22 | return evaluate(context, context.getWorkspace(), listener, macroName); 23 | } 24 | 25 | // Required for pipeline 26 | @Override 27 | public String evaluate(Run context, FilePath workspace, TaskListener listener, String macroName) throws MacroEvaluationException { 28 | RobotBuildAction action = context.getAction(RobotBuildAction.class); 29 | if(action!=null){ 30 | RobotResult result = action.getResult(); 31 | return Long.toString(result.getOverallFailed()); 32 | } 33 | return ""; 34 | } 35 | 36 | @Override 37 | public boolean acceptsMacroName(String macroName) { 38 | return macroName.equals("ROBOT_FAILED"); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/tokens/RobotFailedCasesTokenMacro.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot.tokens; 2 | 3 | import hudson.Extension; 4 | import hudson.FilePath; 5 | import hudson.model.Run; 6 | import hudson.model.TaskListener; 7 | import hudson.model.AbstractBuild; 8 | import hudson.plugins.robot.RobotBuildAction; 9 | import hudson.plugins.robot.model.RobotCaseResult; 10 | import hudson.plugins.robot.model.RobotResult; 11 | 12 | import java.io.IOException; 13 | 14 | import org.jenkinsci.plugins.tokenmacro.DataBoundTokenMacro; 15 | import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException; 16 | 17 | @Extension(optional = true) 18 | public class RobotFailedCasesTokenMacro extends DataBoundTokenMacro { 19 | 20 | @Parameter 21 | public boolean addErrorMessages; 22 | 23 | @Override 24 | public String evaluate(AbstractBuild context, TaskListener listener, 25 | String macroName) throws MacroEvaluationException, IOException, 26 | InterruptedException { 27 | return evaluate(context, context.getWorkspace(), listener, macroName); 28 | } 29 | 30 | // Required for pipeline 31 | @Override 32 | public String evaluate(Run context, FilePath workspace, TaskListener listener, String macroName) throws MacroEvaluationException { 33 | RobotBuildAction action = context.getAction(RobotBuildAction.class); 34 | if (action!=null){ 35 | RobotResult result = action.getResult(); 36 | StringBuilder builder = new StringBuilder(); 37 | 38 | String newline = ""; 39 | for (RobotCaseResult failedCase : result.getAllFailedCases()){ 40 | builder.append(newline).append(failedCase.getRelativePackageName(result)); 41 | if (addErrorMessages && failedCase.getErrorMsg() != null && !failedCase.getErrorMsg().isEmpty()) { 42 | builder.append(": ").append(failedCase.getErrorMsg()); 43 | } 44 | newline = "\n"; 45 | } 46 | 47 | return builder.toString(); 48 | } 49 | return ""; 50 | } 51 | 52 | @Override 53 | public boolean acceptsMacroName(String macroName) { 54 | return macroName.equals("ROBOT_FAILEDCASES"); 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/tokens/RobotPassPercentageTokenMacro.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot.tokens; 2 | 3 | import hudson.Extension; 4 | import hudson.FilePath; 5 | import hudson.model.Run; 6 | import hudson.model.TaskListener; 7 | import hudson.model.AbstractBuild; 8 | import hudson.plugins.robot.RobotBuildAction; 9 | import hudson.plugins.robot.model.RobotResult; 10 | 11 | import java.io.IOException; 12 | 13 | import org.jenkinsci.plugins.tokenmacro.DataBoundTokenMacro; 14 | import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException; 15 | 16 | @Extension(optional = true) 17 | public class RobotPassPercentageTokenMacro extends DataBoundTokenMacro { 18 | 19 | @Parameter 20 | public boolean countSkippedTests; 21 | 22 | @Override 23 | public String evaluate(AbstractBuild context, TaskListener listener, 24 | String macroName) throws MacroEvaluationException, IOException, 25 | InterruptedException { 26 | return evaluate(context, context.getWorkspace(), listener, macroName); 27 | } 28 | 29 | // Required for pipeline 30 | @Override 31 | public String evaluate(Run context, FilePath workspace, TaskListener listener, String macroName) 32 | throws MacroEvaluationException { 33 | RobotBuildAction action = context.getAction(RobotBuildAction.class); 34 | 35 | if (action!=null){ 36 | RobotResult result = action.getResult(); 37 | return String.valueOf(result.getPassPercentage(countSkippedTests)); 38 | } 39 | return ""; 40 | } 41 | 42 | @Override 43 | public boolean acceptsMacroName(String macroName) { 44 | return macroName.equals("ROBOT_PASSPERCENTAGE"); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/tokens/RobotPassRatioTokenMacro.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot.tokens; 2 | 3 | import hudson.Extension; 4 | import hudson.FilePath; 5 | import hudson.model.Run; 6 | import hudson.model.TaskListener; 7 | import hudson.model.AbstractBuild; 8 | import hudson.plugins.robot.RobotBuildAction; 9 | import hudson.plugins.robot.model.RobotResult; 10 | 11 | import java.io.IOException; 12 | 13 | import org.jenkinsci.plugins.tokenmacro.DataBoundTokenMacro; 14 | import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException; 15 | 16 | @Extension(optional = true) 17 | public class RobotPassRatioTokenMacro extends DataBoundTokenMacro { 18 | 19 | // Default to true to retain previous behavior, false to ignore skipped tests as part of the total 20 | @Parameter 21 | public boolean countSkippedTests = true; 22 | 23 | @Override 24 | public String evaluate(AbstractBuild context, TaskListener listener, 25 | String macroName) throws MacroEvaluationException, IOException, 26 | InterruptedException { 27 | return evaluate(context, context.getWorkspace(), listener, macroName); 28 | } 29 | 30 | // Required for pipeline 31 | @Override 32 | public String evaluate(Run context, FilePath workspace, TaskListener listener, String macroName) 33 | throws MacroEvaluationException { 34 | RobotBuildAction action = context.getAction(RobotBuildAction.class); 35 | if(action!=null){ 36 | RobotResult result = action.getResult(); 37 | long passed = result.getOverallPassed(); 38 | long total = countSkippedTests ? result.getOverallTotal() : result.getOverallTotal() - result.getOverallSkipped(); 39 | return passed + " / " + total; 40 | } 41 | return ""; 42 | } 43 | 44 | @Override 45 | public boolean acceptsMacroName(String macroName) { 46 | return macroName.equals("ROBOT_PASSRATIO"); 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/tokens/RobotPassTokenMacro.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot.tokens; 2 | 3 | import hudson.Extension; 4 | import hudson.FilePath; 5 | import hudson.model.AbstractBuild; 6 | import hudson.model.Run; 7 | import hudson.model.TaskListener; 8 | import hudson.plugins.robot.RobotBuildAction; 9 | import hudson.plugins.robot.model.RobotResult; 10 | import org.jenkinsci.plugins.tokenmacro.DataBoundTokenMacro; 11 | import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException; 12 | 13 | import java.io.IOException; 14 | 15 | @Extension(optional = true) 16 | public class RobotPassTokenMacro extends DataBoundTokenMacro { 17 | 18 | @Override 19 | public String evaluate(AbstractBuild context, TaskListener listener, 20 | String macroName) throws MacroEvaluationException, IOException, 21 | InterruptedException { 22 | return evaluate(context, context.getWorkspace(), listener, macroName); 23 | } 24 | 25 | // Required for pipeline 26 | @Override 27 | public String evaluate(Run context, FilePath workspace, TaskListener listener, String macroName) 28 | throws MacroEvaluationException { 29 | RobotBuildAction action = context.getAction(RobotBuildAction.class); 30 | if(action!=null){ 31 | RobotResult result = action.getResult(); 32 | return Long.toString(result.getOverallPassed()); 33 | } 34 | return ""; 35 | } 36 | 37 | @Override 38 | public boolean acceptsMacroName(String macroName) { 39 | return macroName.equals("ROBOT_PASSED"); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/tokens/RobotReportLinkTokenMacro.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot.tokens; 2 | 3 | import hudson.Extension; 4 | import hudson.FilePath; 5 | import hudson.model.Run; 6 | import hudson.model.TaskListener; 7 | import hudson.model.AbstractBuild; 8 | import hudson.plugins.robot.RobotBuildAction; 9 | import jenkins.model.Jenkins; 10 | 11 | import java.io.IOException; 12 | 13 | import org.jenkinsci.plugins.tokenmacro.DataBoundTokenMacro; 14 | import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException; 15 | 16 | @Extension(optional = true) 17 | public class RobotReportLinkTokenMacro extends DataBoundTokenMacro { 18 | 19 | @Override 20 | public String evaluate(AbstractBuild context, TaskListener listener, 21 | String macroName) throws MacroEvaluationException, IOException, 22 | InterruptedException { 23 | return evaluate(context, context.getWorkspace(), listener, macroName); 24 | } 25 | 26 | // Required for pipeline 27 | @Override 28 | public String evaluate(Run context, FilePath workspace, TaskListener listener, String macroName) 29 | throws MacroEvaluationException { 30 | RobotBuildAction action = context.getAction(RobotBuildAction.class); 31 | if (action!=null){ 32 | String rootURL = (Jenkins.getInstanceOrNull() != null) ? Jenkins.get().getRootUrl() : ""; 33 | if (action.getLogFileLink() == null) 34 | return rootURL + context.getUrl()+ action.getUrlName() + "/report/"; 35 | else 36 | return rootURL + context.getUrl()+ action.getUrlName() + "/report/" + action.getLogFileLink(); 37 | } 38 | return ""; 39 | } 40 | 41 | @Override 42 | public boolean acceptsMacroName(String macroName) { 43 | return macroName.equals("ROBOT_REPORTLINK"); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/hudson/plugins/robot/tokens/RobotTotalTokenMacro.java: -------------------------------------------------------------------------------- 1 | package hudson.plugins.robot.tokens; 2 | 3 | import hudson.Extension; 4 | import hudson.FilePath; 5 | import hudson.model.AbstractBuild; 6 | import hudson.model.Run; 7 | import hudson.model.TaskListener; 8 | import hudson.plugins.robot.RobotBuildAction; 9 | import hudson.plugins.robot.model.RobotResult; 10 | import org.jenkinsci.plugins.tokenmacro.DataBoundTokenMacro; 11 | import org.jenkinsci.plugins.tokenmacro.MacroEvaluationException; 12 | 13 | import java.io.IOException; 14 | 15 | @Extension(optional = true) 16 | public class RobotTotalTokenMacro extends DataBoundTokenMacro { 17 | 18 | @Override 19 | public String evaluate(AbstractBuild context, TaskListener listener, 20 | String macroName) throws MacroEvaluationException, IOException, 21 | InterruptedException { 22 | return evaluate(context, context.getWorkspace(), listener, macroName); 23 | } 24 | 25 | // Required for pipeline 26 | @Override 27 | public String evaluate(Run context, FilePath workspace, TaskListener listener, String macroName) 28 | throws MacroEvaluationException { 29 | RobotBuildAction action = context.getAction(RobotBuildAction.class); 30 | if(action!=null){ 31 | RobotResult result = action.getResult(); 32 | return Long.toString(result.getOverallTotal()); 33 | } 34 | return ""; 35 | } 36 | 37 | @Override 38 | public boolean acceptsMacroName(String macroName) { 39 | return macroName.equals("ROBOT_TOTAL"); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/AggregatedRobotAction/index.jelly: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 |

Robot overview for configurations

23 | 24 |
25 |

Configuration: ${run.parent.displayName}

26 |
27 |
28 |

Show bigger image

29 |
30 | 31 |
32 |
33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/AggregatedRobotAction/notfound.jelly: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 |

${%notfound.header}

23 |

${%notfound.message(it.reportFileName)}

24 |
25 |
26 |
27 | -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/AggregatedRobotAction/notfound.properties: -------------------------------------------------------------------------------- 1 | # Copyright 2008-2014 Nokia Siemens Networks Oyj 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | notfound.header=No Robot html report found! 15 | notfound.message=This build was associated with "{0}" which was not found. Please check your configuration to make sure the report will appear in future builds. -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/AggregatedRobotAction/summary.jelly: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 |

${%summary.header}

21 | 22 |
23 |
-------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/AggregatedRobotAction/summary.properties: -------------------------------------------------------------------------------- 1 | # Copyright 2008-2014 Nokia Siemens Networks Oyj 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | summary.header=Robot Test Summary: -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/Messages.properties: -------------------------------------------------------------------------------- 1 | # Copyright 2008-2014 Nokia Solutions and Networks Oy 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | robot.sidebar.link=Robot Results 15 | robot.description=Publish Robot Framework test results 16 | 17 | robot.publisher.started=Robot results publisher started... 18 | robot.publisher.parsing=-Parsing output xml: 19 | robot.publisher.copying=-Copying log files to build dir: 20 | robot.publisher.assigning=-Assigning results to build: 21 | robot.publisher.checking=-Checking thresholds: 22 | robot.publisher.finished=Done publishing Robot results. 23 | robot.publisher.done= Done! 24 | robot.publisher.fail= Failed! 25 | 26 | robot.publisher.file_not_found=WARNING! Could not find file: 27 | 28 | robot.config.percentvalidation=Entry must be percentage value between 0-100 29 | 30 | robot.trendgraph.passed=Passed 31 | robot.trendgraph.failed=Failed 32 | robot.trendgraph.skipped=Skipped 33 | robot.trendgraph.testcases=Number of test cases 34 | robot.trendgraph.builds=Build 35 | -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/RobotBuildAction/notfound.jelly: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 |

${%notfound.header}

23 |

${%notfound.message(it.reportFileName)}

24 |
25 |
26 |
27 | -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/RobotBuildAction/notfound.properties: -------------------------------------------------------------------------------- 1 | # Copyright 2008-2014 Nokia Solutions and Networks Oy 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | notfound.header=No Robot html report found! 15 | notfound.message=This build was associated with "{0}" which was not found. Please check your configuration to make sure the report will appear in future builds. 16 | -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/RobotBuildAction/summary.jelly: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 |

${%summary.header}

21 | 22 |
23 |
24 | -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/RobotBuildAction/summary.properties: -------------------------------------------------------------------------------- 1 | # Copyright 2008-2014 Nokia Solutions and Networks Oy 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | summary.header=Robot Test Summary: 15 | -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/RobotConfig/config.jelly: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | Display "Robot Results" column in the job list view 22 | 23 | 24 | Amount of runs to show in trend preview of "Robot Results" column 25 | 26 | 27 | Pattern to format x axis label in trend graphs. You can use $build for build number and $display_name for build display name beside all letters from java class DateTimeFormatter (e.g. MM-dd HH:mm). Already created and cached images are not affected. 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/main/resources/hudson/plugins/robot/RobotProjectAction/floatingBox.jelly: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 |