RunCi.hx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import haxe.Exception;
  2. import runci.TestTarget;
  3. import runci.System;
  4. import runci.System.*;
  5. import runci.Config.*;
  6. import runci.Deployment.*;
  7. using StringTools;
  8. /**
  9. Will be run by CI services, currently TravisCI and AppVeyor.
  10. TravisCI:
  11. Setting file: ".travis.yml".
  12. Build result: https://travis-ci.org/HaxeFoundation/haxe
  13. AppVeyor:
  14. Setting file: "appveyor.yml".
  15. Build result: https://ci.appveyor.com/project/HaxeFoundation/haxe
  16. */
  17. class RunCi {
  18. static function main():Void {
  19. Sys.putEnv("OCAMLRUNPARAM", "b");
  20. var args = Sys.args();
  21. var tests:Array<TestTarget> = switch (args.length==1 ? args[0] : Sys.getEnv("TEST")) {
  22. case null:
  23. [Macro];
  24. case env:
  25. [for (v in env.split(",")) v.trim().toLowerCase()];
  26. }
  27. infoMsg('Going to test: $tests');
  28. if (isCi()) {
  29. changeDirectory('echoServer');
  30. runCommand('haxe', ['build.hxml']);
  31. changeDirectory(cwd);
  32. }
  33. for (test in tests) {
  34. switch (ci) {
  35. case TravisCI:
  36. Sys.println('travis_fold:start:test-${test}');
  37. case _:
  38. //pass
  39. }
  40. switch (systemName) {
  41. case "Windows":
  42. // change codepage to UTF-8
  43. runCommand("chcp", ["65001"]);
  44. case _:
  45. //pass
  46. }
  47. //run neko-based http echo server
  48. var echoServer = new sys.io.Process('nekotools', ['server', '-d', 'echoServer/www/', '-p', '20200']);
  49. infoMsg('test $test');
  50. var success = true;
  51. try {
  52. changeDirectory(unitDir);
  53. haxelibInstallGit("haxe-utest", "utest", "master");
  54. var args = switch (ci) {
  55. case null:
  56. [];
  57. case TravisCI:
  58. ["-D","travis"];
  59. case AppVeyor:
  60. ["-D","appveyor"];
  61. case AzurePipelines:
  62. ["-D","azure"];
  63. }
  64. args = args.concat(["-D", systemName]);
  65. switch (test) {
  66. case Macro:
  67. runci.targets.Macro.run(args);
  68. case Neko:
  69. runci.targets.Neko.run(args);
  70. case Php:
  71. runci.targets.Php.run(args);
  72. case Python:
  73. runci.targets.Python.run(args);
  74. case Lua:
  75. runci.targets.Lua.run(args);
  76. case Cpp:
  77. runci.targets.Cpp.run(args, true, true);
  78. case Cppia:
  79. runci.targets.Cpp.run(args, false, true);
  80. case Js:
  81. runci.targets.Js.run(args);
  82. case Java:
  83. runci.targets.Java.run(args);
  84. case Jvm:
  85. runci.targets.Jvm.run(args);
  86. case Cs:
  87. runci.targets.Cs.run(args);
  88. case Flash9:
  89. runci.targets.Flash.run(args);
  90. case Hl:
  91. runci.targets.Hl.run(args);
  92. case t:
  93. throw new Exception("unknown target: " + t);
  94. }
  95. } catch(f:Failure) {
  96. success = false;
  97. }
  98. switch (ci) {
  99. case TravisCI:
  100. Sys.println('travis_fold:end:test-${test}');
  101. case _:
  102. //pass
  103. }
  104. if (success) {
  105. successMsg('test ${test} succeeded');
  106. } else {
  107. failMsg('test ${test} failed');
  108. break;
  109. }
  110. echoServer.kill();
  111. echoServer.close();
  112. }
  113. if (success) {
  114. deploy();
  115. } else {
  116. Sys.exit(1);
  117. }
  118. }
  119. }