fhoeben/hsac-fitnesse-fixtures

4.13.0 release build is not reproducible

hboutemy opened this issue · 11 comments

@hboutemy I upgraded my maven version, source and java doc plugin. I hope that helps.

I can't seem to follow the steps to check locally. When I try to use the buildinfo plugin I get the following error:
ERROR] No plugin found for prefix 'buildinfo' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/Users/fried/.m2/repository), central (https://repo.maven.apache.org/maven2)]

Any thoughts how I should proceed?

@fhoeben sorry, I overlooked your answer

IMHO, the easiest way to check is to checkout reproducible-central repository and reproduce by running

./rebuild.sh ./rebuild.sh content/nl/hsac/hsac-fitnesse-fixtures/hsac-fitnesse-fixtures-4.21.0.buildspec

the only prerequisite is Docker

you'll see at the end:

[INFO] --- maven-artifact-plugin:1.0-SNAPSHOT:buildinfo (default-cli) @ hsac-fitnesse-fixtures ---
[INFO] Saved info on build to /var/maven/app/target/hsac-fitnesse-fixtures-4.21.0.buildinfo
[INFO] Checking against reference build from central...
[WARNING] Reference buildinfo file not found: it will be generated from downloaded reference artifacts
[INFO] Reference build java.version: 1.8 (from MANIFEST.MF Build-Jdk-Spec)
[INFO] Reference build os.name: Unix (from pom.properties newline)
[INFO] Minimal buildinfo generated from downloaded artifacts: /var/maven/app/target/reference/hsac-fitnesse-fixtures-4.21.0.buildinfo
[WARNING] size mismatch hsac-fitnesse-fixtures-4.21.0.jar: investigate with diffoscope target/reference/hsac-fitnesse-fixtures-4.21.0.jar target/hsac-fitnesse-fixtures-4.21.0.jar
[WARNING] size mismatch hsac-fitnesse-fixtures-4.21.0-standalone.zip: investigate with diffoscope target/reference/hsac-fitnesse-fixtures-4.21.0-standalone.zip target/hsac-fitnesse-fixtures-4.21.0-standalone.zip
[WARNING] size mismatch hsac-fitnesse-fixtures-4.21.0-sources.jar: investigate with diffoscope target/reference/hsac-fitnesse-fixtures-4.21.0-sources.jar target/hsac-fitnesse-fixtures-4.21.0-sources.jar
[WARNING] Reproducible Build output summary: 0 files ok, 3 different

then you can go to content/nl/hsac/hsac-fitnesse-fixtures/buildcache/hsac-fitnesse-fixtures directory to see the build and run the proposed diffoscope commands

when I do it on my machine, I get difference on generated .json files:

$ diffoscope target/reference/hsac-fitnesse-fixtures-4.21.0.jar target/hsac-fitnesse-fixtures-4.21.0.jar
--- target/reference/hsac-fitnesse-fixtures-4.21.0.jar
+++ target/hsac-fitnesse-fixtures-4.21.0.jar
├── zipinfo /dev/stdin
│ @@ -1,8 +1,8 @@
│ -Zip file size: 648093 bytes, number of entries: 365
│ +Zip file size: 648125 bytes, number of entries: 365
│  -rw-r--r--  2.0 unx       82 b- defN 20-Jan-01 00:00 META-INF/MANIFEST.MF
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 META-INF/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 META-INF/apidocs/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 js/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 nl/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 nl/hsac/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 nl/hsac/fitnesse/
│ @@ -81,21 +81,21 @@
│  -rw-r--r--  2.0 unx    14927 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.StringFixture.json
│  -rw-r--r--  2.0 unx    11368 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.TimerFixture.json
│  -rw-r--r--  2.0 unx    31186 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.ValuesFileFixture.json
│  -rw-r--r--  2.0 unx     9806 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.XmlFixture.json
│  -rw-r--r--  2.0 unx    54765 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.XmlHttpTest.json
│  -rw-r--r--  2.0 unx    32944 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.YamlFileFixture.json
│  -rw-r--r--  2.0 unx     3054 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.BrowserTest.ConditionBasedRepeatUntil.json
-│ --rw-r--r--  2.0 unx   105679 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.BrowserTest.json
+│ +-rw-r--r--  2.0 unx   105680 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.BrowserTest.json
│  -rw-r--r--  2.0 unx    18460 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.LayoutTest.json
-│ --rw-r--r--  2.0 unx   106948 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.Ng2BrowserTest.json
-│ --rw-r--r--  2.0 unx   111546 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.NgBrowserTest.json
-│ --rw-r--r--  2.0 unx   107187 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.NgBrowserTestBase.json
+│ +-rw-r--r--  2.0 unx   106949 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.Ng2BrowserTest.json
+│ +-rw-r--r--  2.0 unx   111547 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.NgBrowserTest.json
+│ +-rw-r--r--  2.0 unx   107188 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.NgBrowserTestBase.json
│  -rw-r--r--  2.0 unx     4695 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.RichFacesTest.AjaxTimeout.json
-│ --rw-r--r--  2.0 unx   107800 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.RichFacesTest.json
+│ +-rw-r--r--  2.0 unx   107801 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.RichFacesTest.json
│  -rw-r--r--  2.0 unx    16139 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.SeleniumDriverSetup.json
│  -rw-r--r--  2.0 unx     6089 b- defN 20-Jan-01 00:00 META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.TimeoutStopTestException.json
│  -rw-r--r--  2.0 unx    10180 b- defN 20-Jan-01 00:00 js/dragDropSim.js
│  -rw-r--r--  2.0 unx    23891 b- defN 20-Jan-01 00:00 nl/hsac/fitnesse/fixture/Environment.class
│  -rw-r--r--  2.0 unx     1226 b- defN 20-Jan-01 00:00 nl/hsac/fitnesse/fixture/fit/ClearStoredVariablesFixture.class
│  -rw-r--r--  2.0 unx     2091 b- defN 20-Jan-01 00:00 nl/hsac/fitnesse/fixture/fit/CompareValuesFixture.class
│  -rw-r--r--  2.0 unx      254 b- defN 20-Jan-01 00:00 nl/hsac/fitnesse/fixture/fit/MapColumnFixture$1.class
│ @@ -360,8 +360,8 @@
│  -rw-r--r--  2.0 unx      399 b- defN 20-Jan-01 00:00 templates/LBExchangeRate.ftl.xml
│  -rw-r--r--  2.0 unx      401 b- defN 20-Jan-01 00:00 templates/generatedSuite.ftl.wiki
│  -rw-r--r--  2.0 unx       13 b- defN 20-Jan-01 00:00 templates/greeting.ftl
│  -rw-r--r--  2.0 unx       82 b- defN 20-Jan-01 00:00 templates/greeting.ftl.html
│  -rw-r--r--  2.0 unx      268 b- defN 20-Jan-01 00:00 templates/samplePost.ftl.xml
│  -rw-r--r--  2.0 unx    21659 b- defN 20-Jan-01 00:00 META-INF/maven/nl.hsac/hsac-fitnesse-fixtures/pom.xml
│  -rw-r--r--  2.0 unx       65 b- defN 20-Jan-01 00:00 META-INF/maven/nl.hsac/hsac-fitnesse-fixtures/pom.properties
-│ -365 files, 2518811 bytes uncompressed, 578657 bytes compressed:  77.1%
+│ +365 files, 2518816 bytes uncompressed, 578689 bytes compressed:  77.1%
├── META-INF/apidocs/nl.hsac.fitnesse.fixture.slim.web.BrowserTest.json
-│ │   --- /tmp/diffoscope_od2cpn1z/tmpy15u6hzn/nl.hsac.fitnesse.fixture.slim.web.BrowserTest.json
+│ ├── +++ /tmp/diffoscope_od2cpn1z/tmpm1wv4pgn/nl.hsac.fitnesse.fixture.slim.web.BrowserTest.json
-│ │┄ Similarity: 0.0%
-│ │┄ Differences: {
-│ │┄   "replace": {
-│ │┄     "annotations": [],
...

@hboutemy thanks for the clarification. These files are generated by a plugin that I did not even consider when thinking about reproducible builds. It just shows how great it is to have automated checks!

tcnh commented

I'm looking into praegus/fixture-doc-generator#1 but can't seem to reproduce the steps described above on windows or wsl. Is it possible to get an actual diff of th egenerated jsons? That would help me analyze what happens, as I can't immediately figure out what would cause the difference

Edit: nvm, got it running after converting my distro to wsl2

tcnh commented

It seems the actual difference is caused by some charset issue:

"docString": "Set the scroll into view behaviour to '?enter of viewport' (true) or 'auto' (false)",
"docString": "Set the scroll into view behaviour to '\u00e7enter of viewport' (true) or 'auto' (false)",

I think we should be able to prevent this by specifying the charset to be used somewhere, but a quick fix that prevents the reproduction from failing is to replace the (wrongly typed) 'ç' with 'c'. (see: #354)

Thanks for the quick pickup @tcnh! Maybe that ç was not in UTF-8?

tcnh commented

Could be. The funny thing is that the jsons in the reference contained '?enter', and the reproduction from the container contained 'çenter'.. Possibly some environment setting on the gitlab runner?

I didn't check in detail but I assume the reference was from maven central, which I probably built on my mac... (still haven't set up the pipeline to publish to central)

Hi,
I see that release 4.22.0 is out: I rebuilt it and added the results to https://github.com/jvm-repo-rebuild/reproducible-central#nl.hsac:hsac-fitnesse-fixtures
in summary, there are good news but everything is not yet perfect.
First, the good news: hsac-fitnesse-fixtures-4.22.0.jar is reproducible! Nice job!

Then the sad news:

  • hsac-fitnesse-fixtures-4.22.0-sources.jar is not reproducible because newlines inconsistency in nl/hsac/fitnesse/fixture/util/selenium/by/AltBy.java: strange
  • hsac-fitnesse-fixtures-4.22.0-standalone.zip is not reproducible because a few files are missing from rebuild

the remaining issues are much easier to understand: the job you did on the main jar file is awesome

@hboutemy Thanks for the feedback.

I will try to look at the remaining issues. Especially the extra files in the standalone are interesting: I would like to keep this as small as possible so less files seems better. Maybe something wrong in my local build process. Do you have a list of missing files?

$ diffoscope target/reference/hsac-fitnesse-fixtures-4.22.0-standalone.zip target/hsac-fitnesse-fixtures-4.22.0-standalone.zip
--- target/reference/hsac-fitnesse-fixtures-4.22.0-standalone.zip
+++ target/hsac-fitnesse-fixtures-4.22.0-standalone.zip
├── zipinfo /dev/stdin
│ @@ -1,8 +1,8 @@
-│ -Zip file size: 50131282 bytes, number of entries: 644
+│ +Zip file size: 50129124 bytes, number of entries: 638
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 webdrivers/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/FrontPage/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacAcceptanceTests/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacAcceptanceTests/SlimTests/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacAcceptanceTests/SlimTests/BrowserTest/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacAcceptanceTests/SlimTests/BrowserTest/FrameHandlingTests/
│ @@ -17,15 +17,14 @@
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/HttpTests/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/HttpTests/CustomHttpConfig/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/_TestDefinition/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/_TestDefinition/ParameterizedTests/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/HsacExamples/TaggedTestcases/
-│ -drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/MyTests/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 FitNesseRoot/PlugIns/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 fixtures/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 fixtures/META-INF/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 fixtures/META-INF/apidocs/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 fixtures/js/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 fixtures/nl/
│  drwxr-xr-x  2.0 unx        0 b- stor 20-Jan-01 00:00 fixtures/nl/hsac/
│ @@ -203,16 +202,14 @@
│  -rw-r--r--  2.0 unx     5893 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/MockXmlServerTest.wiki
│  -rw-r--r--  2.0 unx      313 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/SuiteSetUp.wiki
│  -rw-r--r--  2.0 unx     5082 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/CompareFixtureTest.wiki
│  -rw-r--r--  2.0 unx     5082 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/DateFormatFixture.wiki
│  -rw-r--r--  2.0 unx     1328 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/DateTimeCalculatorFixture.wiki
│  -rw-r--r--  2.0 unx     8469 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/FileFixture.wiki
│  -rw-r--r--  2.0 unx     2473 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/FreemarkerFixture.wiki
-│ --rw-r--r--  2.0 unx      428 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/EnLocaleTests.wiki
-│ --rw-r--r--  2.0 unx      429 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/NlLocaleTests.wiki
│  -rw-r--r--  2.0 unx     1414 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/SuiteGenerator.wiki
│  -rw-r--r--  2.0 unx      528 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/SuiteSetUp.wiki
│  -rw-r--r--  2.0 unx      110 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/SuiteTearDown.wiki
│  -rw-r--r--  2.0 unx      218 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/_TestDefinition/ParameterizedTests/JsonHttpTest.wiki
│  -rw-r--r--  2.0 unx       40 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/_TestDefinition/ParameterizedTests.wiki
│  -rw-r--r--  2.0 unx      162 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite/_TestDefinition.wiki
│  -rw-r--r--  2.0 unx     1296 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/SlimTests/UtilityFixtures/GeneratedSymbolicLinkSuite.wiki
│ @@ -236,18 +233,15 @@
│  -rw-r--r--  2.0 unx      153 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/TaggedTestcases/T002.wiki
│  -rw-r--r--  2.0 unx      155 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/TaggedTestcases/T003.wiki
│  -rw-r--r--  2.0 unx      155 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/TaggedTestcases/T004.wiki
│  -rw-r--r--  2.0 unx      162 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/TaggedTestcases/T005.wiki
│  -rw-r--r--  2.0 unx      139 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/TaggedTestcases/T006NoTags.wiki
│  -rw-r--r--  2.0 unx     2929 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples/TaggedTestcases.wiki
│  -rw-r--r--  2.0 unx    11732 b- defN 20-Jan-01 00:00 FitNesseRoot/HsacExamples.wiki
-│ --rw-r--r--  2.0 unx      701 b- defN 20-Jan-01 00:00 FitNesseRoot/PlugIns/content.txt
│  -rw-r--r--  2.0 unx      364 b- defN 20-Jan-01 00:00 FitNesseRoot/PlugIns/properties.xml
-│ --rw-r--r--  2.0 unx       10 b- defN 20-Jan-01 00:00 FitNesseRoot/content.txt
-│ --rw-r--r--  2.0 unx      263 b- defN 20-Jan-01 00:00 FitNesseRoot/properties.xml
│  -rw-r--r--  2.0 unx  4863202 b- defN 20-Jan-01 00:00 fitnesse-standalone.jar
│  -rw-r--r--  2.0 unx    15288 b- defN 20-Jan-01 00:00 fixtures/META-INF/apidocs/nl.hsac.fitnesse.fixture.fit.ClearStoredVariablesFixture.json
│  -rw-r--r--  2.0 unx    23591 b- defN 20-Jan-01 00:00 fixtures/META-INF/apidocs/nl.hsac.fitnesse.fixture.fit.CompareValuesFixture.json
│  -rw-r--r--  2.0 unx     2087 b- defN 20-Jan-01 00:00 fixtures/META-INF/apidocs/nl.hsac.fitnesse.fixture.fit.MapColumnFixture.ParameterBinding.json
│  -rw-r--r--  2.0 unx     1717 b- defN 20-Jan-01 00:00 fixtures/META-INF/apidocs/nl.hsac.fitnesse.fixture.fit.MapColumnFixture.SaveBinding.json
│  -rw-r--r--  2.0 unx    21892 b- defN 20-Jan-01 00:00 fixtures/META-INF/apidocs/nl.hsac.fitnesse.fixture.fit.MapColumnFixture.json
│  -rw-r--r--  2.0 unx    22190 b- defN 20-Jan-01 00:00 fixtures/META-INF/apidocs/nl.hsac.fitnesse.fixture.fit.MapDefinitionFixture.json
│ @@ -639,8 +633,8 @@
│  -rw-r--r--  2.0 unx      200 b- defN 20-Jan-01 00:00 webdrivers/internetexplorerdriver-windows-32bit.version
│  -rw-r--r--  2.0 unx      263 b- defN 20-Jan-01 00:00 FitNesseRoot/files/galenExamples/menuHighlight.gspec
│  -rw-r--r--  2.0 unx     1522 b- defN 20-Jan-01 00:00 FitNesseRoot/files/httpPostExamples/test.png
│  -rw-r--r--  2.0 unx       90 b- defN 20-Jan-01 00:00 FitNesseRoot/files/httpPostExamples/testFile.txt
│  -rw-r--r--  2.0 unx      604 b- defN 20-Jan-01 00:00 FitNesseRoot/files/xmlTestExamples/invalid_shiporder.xml
│  -rw-r--r--  2.0 unx     1155 b- defN 20-Jan-01 00:00 FitNesseRoot/files/xmlTestExamples/shiporder_schema.xsd
│  -rw-r--r--  2.0 unx      621 b- defN 20-Jan-01 00:00 FitNesseRoot/files/xmlTestExamples/valid_shiporder.xml
-│ -644 files, 81956525 bytes uncompressed, 49999562 bytes compressed:  39.0%
+│ +638 files, 81954694 bytes uncompressed, 49998456 bytes compressed:  39.0%