From https://datamigrators.slack.com/archives/C01DVR2MRUP/p1652686826148709
Symptom
$ mettleci s2px convert \ -config customRoutine-zodiac.yaml \ -source-dsx animalZodiacJobAndRoutines.dsx -target-dsx target-dsx/zodiac.dsx \ -source-specs /opt/dm/mci/specs/AnimalZodiac/ \ -target-specs target-specs/ MettleCI Command Line (build 128) (C) 2018-2022 Data Migrators Pty Ltd Loading configuration Preprocessing 'animalZodiacJobAndRoutines.dsx' Converting jobs Decomposing AnimalZodiac Translating AnimalZodiacPx Exception in thread "main" java.lang.NullPointerException at java.io.File.<init>(File.java:362) at com.datamigrators.mettle.svpx.translation.UnitTestConverter.convertSpec(UnitTestConverter.java:132) at com.datamigrators.mettle.svpx.translation.UnitTestConverter.convertUnitTest(UnitTestConverter.java:118) at com.datamigrators.mettle.svpx.translation.UnitTestConverter.convert(UnitTestConverter.java:60) at com.datamigrators.mettle.svpx.Bootstrap.convertJobs(Bootstrap.java:274) at com.datamigrators.mettle.svpx.Bootstrap.convert(Bootstrap.java:124) at com.datamigrators.mettle.svpx.MigrationCommand.execute(MigrationCommand.java:54) at com.datamigrators.mettle.shell.Shell.executeCommand(Shell.java:175) at com.datamigrators.mettle.shell.Shell.run(Shell.java:45) at com.datamigrators.mettle.shell.MainClass.main(MainClass.java:173)
Solution
Ah, I see. The system assumes you are passing the whole specs directory during conversion and makes assumptions about the structure based on what MettleCI Workbench produces.
Try using this path:
-source-specs /opt/dm/mci/specs/s2px_original/