main.yml 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860
  1. # DO NOT EDIT. Generated from /extra/github-actions
  2. # TODO: support skip ci (https://github.community/t/github-actions-does-not-respect-skip-ci/17325/8)
  3. name: CI
  4. on: [push, pull_request]
  5. jobs:
  6. windows64-build:
  7. runs-on: windows-latest
  8. env:
  9. ACTIONS_ALLOW_UNSECURE_COMMANDS: true
  10. PLATFORM: windows64
  11. ARCH: 64
  12. MINGW_ARCH: x86_64
  13. CYG_ROOT: D:\cygwin
  14. steps:
  15. - uses: actions/checkout@main
  16. with:
  17. submodules: recursive
  18. - name: choco install nsis
  19. uses: nick-invision/retry@v3
  20. with:
  21. timeout_minutes: 10
  22. max_attempts: 10
  23. command: choco install --no-progress nsis.portable --version 3.09 -y
  24. - name: choco install things
  25. shell: pwsh
  26. run: choco install --no-progress curl wget 7zip.portable -y
  27. - name: Prepend Chocolatey path
  28. shell: pwsh
  29. run: Write-Host "::add-path::C:\ProgramData\chocolatey\bin"
  30. - name: Install Neko from S3
  31. shell: pwsh
  32. run: |
  33. Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip
  34. Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP
  35. $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-*
  36. echo "$NEKOPATH" >> $env:GITHUB_PATH
  37. echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV
  38. - name: Print Neko version
  39. run: neko -version 2>&1
  40. - name: Setup ocaml
  41. uses: ocaml/[email protected]
  42. with:
  43. ocaml-compiler: 4
  44. opam-local-packages: |
  45. haxe.opam
  46. - name: Install dependencies
  47. shell: pwsh
  48. env:
  49. MBEDTLS_VERSION: 2.16.3
  50. run: |
  51. curl.exe -fsSL -o "libmbedtls.tar.xz" --retry 3 `
  52. https://github.com/Simn/mingw64-mbedtls/releases/download/${{ env.MBEDTLS_VERSION }}/mingw64-${{ env.MINGW_ARCH }}-mbedtls-${{ env.MBEDTLS_VERSION }}-1.tar.xz
  53. ${{ env.CYG_ROOT }}\bin\tar.exe -C ${{ env.CYG_ROOT }} -xvf libmbedtls.tar.xz
  54. - name: Install OCaml libraries
  55. shell: pwsh
  56. run: |
  57. Set-PSDebug -Trace 1
  58. # stop after any command returns an error
  59. $PSNativeCommandUseErrorActionPreference = $true
  60. $ErrorActionPreference = 'Stop'
  61. # see: https://github.com/aantron/luv/issues/162
  62. $env:PATH="${env:CYG_ROOT}\bin;${env:CYG_ROOT}\usr\x86_64-w64-mingw32\bin;${env:PATH}"
  63. opam install haxe --deps-only
  64. opam list
  65. - name: Set ADD_REVISION=1 for non-release
  66. if: ${{ !startsWith(github.ref, 'refs/tags/') }}
  67. shell: pwsh
  68. run: echo "ADD_REVISION=1" >> $Env:GITHUB_ENV
  69. - name: Build Haxe
  70. shell: pwsh
  71. run: |
  72. Set-PSDebug -Trace 1
  73. # stop after any command returns an error
  74. $PSNativeCommandUseErrorActionPreference = $true
  75. $ErrorActionPreference = 'Stop'
  76. opam exec -- make -s -f Makefile.win -j"$env:NUMBER_OF_PROCESSORS" haxe
  77. opam exec -- make -s -f Makefile.win haxelib
  78. opam exec -- make -f Makefile.win echo_package_files package_bin package_installer_win package_choco
  79. cygcheck ./haxe.exe
  80. cygcheck ./haxelib.exe
  81. ls ./out
  82. - name: Upload artifact
  83. uses: actions/upload-artifact@v4
  84. with:
  85. name: win${{env.ARCH}}Binaries
  86. path: out
  87. linux-build:
  88. runs-on: ubuntu-20.04
  89. env:
  90. PLATFORM: linux64
  91. OPAMYES: 1
  92. strategy:
  93. fail-fast: false
  94. matrix:
  95. ocaml: ["4.08.1", "5.0.0"]
  96. steps:
  97. - uses: actions/checkout@main
  98. with:
  99. submodules: recursive
  100. - name: Cache opam
  101. id: cache-opam
  102. uses: actions/cache@v4
  103. with:
  104. path: ~/.opam/
  105. key: ${{ runner.os }}-${{ matrix.ocaml }}-${{ hashFiles('./haxe.opam', './libs/') }}
  106. - name: Install Neko from S3
  107. run: |
  108. set -ex
  109. curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz
  110. tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP
  111. NEKOPATH=`echo $RUNNER_TEMP/neko-*-*`
  112. sudo mkdir -p /usr/local/bin
  113. sudo mkdir -p /usr/local/include
  114. sudo mkdir -p /usr/local/lib/neko
  115. sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/
  116. sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/
  117. sudo ln -s $NEKOPATH/include/* /usr/local/include/
  118. sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/
  119. echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV
  120. - name: Print Neko version
  121. run: neko -version 2>&1
  122. - name: Install dependencies
  123. run: |
  124. set -ex
  125. sudo add-apt-repository ppa:avsm/ppa -y # provides OPAM 2
  126. sudo add-apt-repository ppa:haxe/ocaml -y # provides newer version of mbedtls
  127. sudo apt-get update -qqy
  128. sudo apt-get install -qqy ocaml-nox opam libpcre2-dev zlib1g-dev libgtk2.0-dev libmbedtls-dev ninja-build
  129. - name: Install OCaml libraries
  130. if: steps.cache-opam.outputs.cache-hit != 'true'
  131. run: |
  132. set -ex
  133. opam init # --disable-sandboxing
  134. opam update
  135. opam switch create ${{ matrix.ocaml }}
  136. opam pin add haxe . --no-action
  137. opam install haxe --deps-only --assume-depexts
  138. opam list
  139. ocamlopt -v
  140. - name: Set ADD_REVISION=1 for non-release
  141. if: ${{ !startsWith(github.ref, 'refs/tags/') }}
  142. run: echo "ADD_REVISION=1" >> $GITHUB_ENV
  143. - name: Build Haxe
  144. run: |
  145. set -ex
  146. eval $(opam env)
  147. opam config exec -- make -s -j`nproc` STATICLINK=1 haxe
  148. opam config exec -- make -s haxelib
  149. make -s package_unix
  150. ls -l out
  151. ldd -v ./haxe
  152. ldd -v ./haxelib
  153. # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions
  154. - name: Extract branch name
  155. id: extract_branch
  156. shell: bash
  157. run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT
  158. - name: Build xmldoc
  159. if: matrix.ocaml == '4.08.1'
  160. run: |
  161. set -ex
  162. make -s xmldoc
  163. cat >extra/doc/info.json <<EOL
  164. {
  165. "commit": "$GITHUB_SHA",
  166. "branch": "${{ steps.extract_branch.outputs.branch }}"
  167. }
  168. EOL
  169. - name: Upload artifact
  170. uses: actions/upload-artifact@v4
  171. with:
  172. name: linuxBinaries${{ (matrix.ocaml == '5.0.0' && '_ocaml5') || '' }}
  173. path: out
  174. - name: Upload xmldoc artifact
  175. uses: actions/upload-artifact@v4
  176. if: matrix.ocaml == '4.08.1'
  177. with:
  178. name: xmldoc
  179. path: extra/doc
  180. linux-test:
  181. needs: linux-build
  182. runs-on: ubuntu-20.04
  183. env:
  184. PLATFORM: linux64
  185. TEST: ${{matrix.target}}
  186. HXCPP_COMPILE_CACHE: ~/hxcache
  187. HAXE_STD_PATH: /usr/local/share/haxe/std
  188. strategy:
  189. fail-fast: false
  190. matrix:
  191. ocaml: ["4.08.1", "5.0.0"]
  192. target: [macro, js, hl, cpp, jvm, php, python, lua, flash, neko]
  193. include:
  194. - target: hl
  195. APT_PACKAGES: cmake ninja-build libturbojpeg-dev
  196. - target: cpp
  197. APT_PACKAGES: gcc-multilib g++-multilib
  198. - target: lua
  199. APT_PACKAGES: ncurses-dev
  200. - target: flash
  201. APT_PACKAGES: libglib2.0-0 libgtk2.0-0 libfreetype6 xvfb
  202. steps:
  203. - uses: actions/checkout@main
  204. with:
  205. submodules: recursive
  206. - uses: actions/download-artifact@v4
  207. with:
  208. name: linuxBinaries${{ (matrix.ocaml == '5.0.0' && '_ocaml5') || '' }}
  209. path: linuxBinaries
  210. - name: Install Neko from S3
  211. run: |
  212. set -ex
  213. curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz
  214. tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP
  215. NEKOPATH=`echo $RUNNER_TEMP/neko-*-*`
  216. sudo mkdir -p /usr/local/bin
  217. sudo mkdir -p /usr/local/include
  218. sudo mkdir -p /usr/local/lib/neko
  219. sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/
  220. sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/
  221. sudo ln -s $NEKOPATH/include/* /usr/local/include/
  222. sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/
  223. echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV
  224. - name: Print Neko version
  225. run: neko -version 2>&1
  226. - name: Setup Haxe
  227. run: |
  228. sudo apt install -qqy libmbedtls-dev
  229. set -ex
  230. tar -xf linuxBinaries/*_bin.tar.gz -C linuxBinaries --strip-components=1
  231. sudo mkdir -p /usr/local/bin/
  232. sudo mkdir -p /usr/local/share/haxe/
  233. sudo ln -s `pwd`/linuxBinaries/haxe /usr/local/bin/haxe
  234. sudo ln -s `pwd`/linuxBinaries/haxelib /usr/local/bin/haxelib
  235. sudo ln -s `pwd`/linuxBinaries/std /usr/local/share/haxe/std
  236. - name: Print Haxe version
  237. run: haxe -version
  238. - name: Setup haxelib
  239. run: |
  240. set -ex
  241. mkdir ~/haxelib
  242. haxelib setup ~/haxelib
  243. - name: Install apt packages
  244. if: matrix.APT_PACKAGES
  245. run: |
  246. set -ex
  247. sudo apt update -qqy
  248. sudo apt install -qqy ${{matrix.APT_PACKAGES}}
  249. - name: Flash setup
  250. if: matrix.target == 'flash'
  251. run: export DISPLAY=:99.0
  252. - name: Test
  253. run: haxe RunCi.hxml
  254. working-directory: ${{github.workspace}}/tests
  255. test-docgen:
  256. needs: linux-build
  257. runs-on: ubuntu-20.04
  258. env:
  259. PLATFORM: linux64
  260. HXCPP_COMPILE_CACHE: ~/hxcache
  261. steps:
  262. - uses: actions/checkout@main
  263. with:
  264. submodules: recursive
  265. - uses: actions/download-artifact@v4
  266. with:
  267. name: linuxBinaries
  268. path: linuxBinaries
  269. - name: Download xmldoc artifact
  270. uses: actions/download-artifact@v4
  271. with:
  272. name: xmldoc
  273. path: xmldoc
  274. - name: Install Neko from S3
  275. run: |
  276. set -ex
  277. curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz
  278. tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP
  279. NEKOPATH=`echo $RUNNER_TEMP/neko-*-*`
  280. sudo mkdir -p /usr/local/bin
  281. sudo mkdir -p /usr/local/include
  282. sudo mkdir -p /usr/local/lib/neko
  283. sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/
  284. sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/
  285. sudo ln -s $NEKOPATH/include/* /usr/local/include/
  286. sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/
  287. echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV
  288. - name: Print Neko version
  289. run: neko -version 2>&1
  290. - name: Setup Haxe
  291. run: |
  292. sudo apt install -qqy libmbedtls-dev
  293. set -ex
  294. tar -xf linuxBinaries/*_bin.tar.gz -C linuxBinaries --strip-components=1
  295. sudo mkdir -p /usr/local/bin/
  296. sudo mkdir -p /usr/local/share/haxe/
  297. sudo ln -s `pwd`/linuxBinaries/haxe /usr/local/bin/haxe
  298. sudo ln -s `pwd`/linuxBinaries/haxelib /usr/local/bin/haxelib
  299. sudo ln -s `pwd`/linuxBinaries/std /usr/local/share/haxe/std
  300. - name: Print Haxe version
  301. run: haxe -version
  302. - name: Setup haxelib
  303. run: |
  304. set -ex
  305. mkdir ~/haxelib
  306. haxelib setup ~/haxelib
  307. - name: Test documentation generation
  308. run: |
  309. set -ex
  310. haxelib git dox https://github.com/HaxeFoundation/dox.git
  311. haxelib git hxtemplo https://github.com/Simn/hxtemplo.git
  312. haxelib git hxargs https://github.com/Simn/hxargs.git
  313. haxelib git markdown https://github.com/dpeek/haxe-markdown.git
  314. haxelib git hxcpp https://github.com/HaxeFoundation/hxcpp.git
  315. cd $(haxelib libpath hxcpp)/tools/hxcpp
  316. haxe compile.hxml
  317. cd -
  318. haxe dox.hxml
  319. mkdir resources
  320. cp ../../src-json/* resources
  321. cpp/Dox -i ../../xmldoc -ex microsoft -ex javax -theme $(haxelib libpath dox)/themes/default
  322. working-directory: ${{github.workspace}}/tests/docgen
  323. linux-arm64:
  324. runs-on: ubuntu-20.04
  325. permissions:
  326. packages: write
  327. env:
  328. FORCE_COLOR: 1
  329. steps:
  330. - name: Login to GitHub Container Registry
  331. uses: docker/login-action@v3
  332. with:
  333. registry: ghcr.io
  334. username: ${{ github.actor }}
  335. password: ${{ secrets.GITHUB_TOKEN }}
  336. - name: Install Earthly
  337. run: sudo /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.6.13/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly && /usr/local/bin/earthly bootstrap --with-autocomplete'
  338. - name: Set up QEMU
  339. id: qemu
  340. uses: docker/setup-qemu-action@v3
  341. with:
  342. image: tonistiigi/binfmt:latest
  343. platforms: all
  344. - uses: actions/checkout@main
  345. with:
  346. submodules: recursive
  347. - name: Set CONTAINER_ vars
  348. run: |
  349. echo "CONTAINER_REG=$(echo ${{ github.repository }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV;
  350. echo "CONTAINER_TAG=$(echo ${{ github.ref_name }} | sed -e 's/[^A-Za-z0-9\.]/-/g')" >> $GITHUB_ENV;
  351. - name: Build devcontainer
  352. run: earthly --platform=linux/arm64 +devcontainer --IMAGE_NAME="ghcr.io/${CONTAINER_REG}_devcontainer" --IMAGE_TAG="${CONTAINER_TAG}-arm64" --IMAGE_CACHE="ghcr.io/haxefoundation/haxe_devcontainer:development-arm64"
  353. env:
  354. EARTHLY_PUSH: "${{ github.event_name == 'push' }}"
  355. EARTHLY_USE_INLINE_CACHE: true
  356. EARTHLY_SAVE_INLINE_CACHE: true
  357. - name: Set ADD_REVISION=1 for non-release
  358. if: ${{ !startsWith(github.ref, 'refs/tags/') }}
  359. run: echo "ADD_REVISION=1" >> $GITHUB_ENV
  360. - name: Build
  361. run: earthly --platform=linux/arm64 +build --ADD_REVISION="$ADD_REVISION" --SET_SAFE_DIRECTORY="true"
  362. env:
  363. EARTHLY_PUSH: "${{ github.event_name == 'push' }}"
  364. EARTHLY_REMOTE_CACHE: "ghcr.io/${{env.CONTAINER_REG}}_cache:build-${{env.CONTAINER_TAG}}-arm64"
  365. - name: Upload artifact
  366. uses: actions/upload-artifact@v4
  367. with:
  368. name: linuxArm64Binaries
  369. path: out/linux/arm64
  370. mac-build:
  371. strategy:
  372. fail-fast: false
  373. matrix:
  374. os: [macos-14, macos-13]
  375. runs-on: ${{ matrix.os }}
  376. env:
  377. PLATFORM: mac${{ matrix.os == 'macos-14' && '-arm64' || '' }}
  378. OPAMYES: 1
  379. MACOSX_DEPLOYMENT_TARGET: 10.13
  380. OCAML_VERSION: 5.1.1
  381. steps:
  382. - uses: actions/checkout@main
  383. with:
  384. submodules: recursive
  385. - name: Cache opam
  386. id: cache-opam
  387. uses: actions/cache@v4
  388. with:
  389. path: ~/.opam/
  390. key: ${{ matrix.os }}-${{ hashFiles('./haxe.opam', './libs/') }}-1
  391. - name: Install Neko from S3
  392. run: |
  393. set -ex
  394. curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz
  395. tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP
  396. NEKOPATH=`echo $RUNNER_TEMP/neko-*-*`
  397. sudo mkdir -p /usr/local/bin
  398. sudo mkdir -p /usr/local/include
  399. sudo mkdir -p /usr/local/lib/neko
  400. sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/
  401. sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/
  402. sudo ln -s $NEKOPATH/include/* /usr/local/include/
  403. sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/
  404. echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV
  405. - name: Print Neko version
  406. run: neko -version 2>&1
  407. - name: Install dependencies
  408. env:
  409. # For compatibility with macOS 10.13
  410. ZLIB_VERSION: 1.3.1
  411. MBEDTLS_VERSION: 2.28.5
  412. PCRE2_VERSION: 10.42
  413. run: |
  414. set -ex
  415. brew update
  416. brew bundle --file=tests/Brewfile --no-upgrade
  417. curl -L https://github.com/madler/zlib/releases/download/v$ZLIB_VERSION/zlib-$ZLIB_VERSION.tar.gz | tar xz
  418. cd zlib-$ZLIB_VERSION
  419. ./configure
  420. sudo make && sudo make install
  421. cd ..
  422. curl -L https://github.com/ARMmbed/mbedtls/archive/v$MBEDTLS_VERSION.tar.gz | tar xz
  423. cd mbedtls-$MBEDTLS_VERSION
  424. sudo make && sudo make install
  425. cd ..
  426. curl -L https://github.com/PCRE2Project/pcre2/releases/download/pcre2-$PCRE2_VERSION/pcre2-$PCRE2_VERSION.tar.gz | tar xz
  427. cd pcre2-$PCRE2_VERSION
  428. ./configure --enable-unicode --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicode-properties --enable-pcre2grep-libz --enable-pcre2grep-libbz2 --enable-jit
  429. sudo make && sudo make install
  430. cd ..
  431. - name: Install OCaml libraries
  432. if: steps.cache-opam.outputs.cache-hit != 'true'
  433. run: |
  434. set -ex
  435. opam init # --disable-sandboxing
  436. opam update
  437. opam switch create ${{env.OCAML_VERSION}}
  438. eval $(opam env)
  439. opam env
  440. opam pin add haxe . --no-action
  441. opam install haxe --deps-only --assume-depexts
  442. opam list
  443. ocamlopt -v
  444. - name: Set ADD_REVISION=1 for non-release
  445. if: ${{ !startsWith(github.ref, 'refs/tags/') }}
  446. run: echo "ADD_REVISION=1" >> $GITHUB_ENV
  447. - name: Build Haxe
  448. run: |
  449. set -ex
  450. eval $(opam env)
  451. opam config exec -- make -s -j`sysctl -n hw.ncpu` STATICLINK=1 "LIB_PARAMS=/usr/local/lib/libz.a /usr/local/lib/libpcre2-8.a /usr/local/lib/libmbedtls.a /usr/local/lib/libmbedcrypto.a /usr/local/lib/libmbedx509.a -cclib '-framework Security -framework CoreFoundation'" haxe
  452. opam config exec -- make -s haxelib
  453. make -s package_unix package_installer_mac
  454. ls -l out
  455. otool -L ./haxe
  456. otool -L ./haxelib
  457. - name: Upload artifact (x64)
  458. if: runner.arch == 'X64'
  459. uses: actions/upload-artifact@v4
  460. with:
  461. name: macX64Binaries
  462. path: out
  463. - name: Upload artifact (arm)
  464. if: runner.arch == 'ARM64'
  465. uses: actions/upload-artifact@v4
  466. with:
  467. name: macArmBinaries
  468. path: out
  469. windows64-test:
  470. needs: windows64-build
  471. runs-on: windows-latest
  472. env:
  473. ACTIONS_ALLOW_UNSECURE_COMMANDS: true
  474. PLATFORM: windows64
  475. TEST: ${{matrix.target}}
  476. HXCPP_COMPILE_CACHE: ~/hxcache
  477. ARCH: 64
  478. strategy:
  479. fail-fast: false
  480. matrix:
  481. # TODO enable lua after https://github.com/HaxeFoundation/haxe/issues/10919
  482. target: [macro, js, hl, cpp, jvm, php, python, flash, neko]
  483. steps:
  484. - uses: actions/checkout@main
  485. with:
  486. submodules: recursive
  487. - uses: actions/download-artifact@v4
  488. with:
  489. name: win${{env.ARCH}}Binaries
  490. path: win${{env.ARCH}}Binaries
  491. - name: Install Neko from S3
  492. shell: pwsh
  493. run: |
  494. Invoke-WebRequest https://build.haxe.org/builds/neko/$env:PLATFORM/neko_latest.zip -OutFile $env:RUNNER_TEMP/neko_latest.zip
  495. Expand-Archive $env:RUNNER_TEMP/neko_latest.zip -DestinationPath $env:RUNNER_TEMP
  496. $NEKOPATH = Get-ChildItem $env:RUNNER_TEMP/neko-*-*
  497. echo "$NEKOPATH" >> $env:GITHUB_PATH
  498. echo "NEKOPATH=$NEKOPATH" >> $env:GITHUB_ENV
  499. - name: Print Neko version
  500. run: neko -version 2>&1
  501. - uses: actions/setup-node@v4
  502. with:
  503. node-version: 18.17.1
  504. # - name: Quick test
  505. # shell: pwsh
  506. # run: |
  507. # $DOWNLOADDIR="./win$($env:ARCH)Binaries"
  508. # new-item -Name $DOWNLOADDIR -ItemType directory
  509. # Invoke-WebRequest https://build.haxe.org/builds/haxe/$env:PLATFORM/haxe_latest.zip -OutFile $DOWNLOADDIR/haxe_bin.zip
  510. - name: Setup Haxe
  511. shell: pwsh
  512. run: |
  513. $DOWNLOADDIR="./win$($env:ARCH)Binaries"
  514. Expand-Archive $DOWNLOADDIR/*_bin.zip -DestinationPath $DOWNLOADDIR
  515. Set-PSDebug -Trace 1
  516. $HAXEPATH = Get-ChildItem $DOWNLOADDIR/haxe_*_* -Directory
  517. Write-Host "::add-path::$HAXEPATH"
  518. Write-Host "::set-env name=HAXELIB_ROOT::$HAXEPATH\lib"
  519. - name: Print Haxe version
  520. shell: pwsh
  521. run: haxe -version
  522. - name: "Make Python 3 be available as python3 in the cmdline"
  523. shell: pwsh
  524. run: |
  525. Set-PSDebug -Trace 1
  526. $pypath = python -c "import sys; print(sys.executable)"
  527. $py3path = $pypath.replace("python.exe","python3.exe")
  528. cmd /c mklink $py3path $pypath
  529. python3 -V
  530. - name: Install hererocks
  531. if: matrix.target == 'lua'
  532. shell: cmd
  533. run: |
  534. pip install hererocks
  535. hererocks lua53 -l5.3 -rlatest
  536. call lua53/bin/activate
  537. - name: Install wget
  538. if: matrix.target == 'flash'
  539. shell: cmd
  540. run: |
  541. choco install wget
  542. wget --version
  543. - name: Setup haxelib
  544. shell: pwsh
  545. run: |
  546. mkdir "$env:HAXELIB_ROOT"
  547. haxelib setup "$env:HAXELIB_ROOT"
  548. - name: Test
  549. shell: pwsh
  550. run: haxe RunCi.hxml
  551. working-directory: ${{github.workspace}}/tests
  552. mac-build-universal:
  553. needs: mac-build
  554. runs-on: macos-latest
  555. steps:
  556. - name: Checkout the repository
  557. uses: actions/checkout@main
  558. - uses: actions/download-artifact@v4
  559. with:
  560. name: macX64Binaries
  561. path: macX64Binaries
  562. - uses: actions/download-artifact@v4
  563. with:
  564. name: macArmBinaries
  565. path: macArmBinaries
  566. - name: Make universal binary
  567. run: |
  568. set -ex
  569. tar -xf macX64Binaries/*_bin.tar.gz -C macX64Binaries --strip-components=1
  570. tar -xf macArmBinaries/*_bin.tar.gz -C macArmBinaries --strip-components=1
  571. lipo -create -output haxe macX64Binaries/haxe macArmBinaries/haxe
  572. lipo -create -output haxelib macX64Binaries/haxelib macArmBinaries/haxelib
  573. make -s package_unix package_installer_mac PACKAGE_INSTALLER_MAC_ARCH=universal
  574. ls -l out
  575. otool -L ./haxe
  576. otool -L ./haxelib
  577. - name: Upload artifact (universal)
  578. uses: actions/upload-artifact@v4
  579. with:
  580. name: macBinaries
  581. path: out
  582. mac-test:
  583. needs: mac-build-universal
  584. runs-on: macos-13
  585. env:
  586. PLATFORM: mac
  587. TEST: ${{matrix.target}}
  588. HXCPP_COMPILE_CACHE: ~/hxcache
  589. HAXE_STD_PATH: /usr/local/share/haxe/std
  590. strategy:
  591. fail-fast: false
  592. matrix:
  593. target: [macro, js, hl, cpp, jvm, php, python, lua, flash, neko]
  594. include:
  595. - target: hl
  596. BREW_PACKAGES: ninja
  597. steps:
  598. - uses: actions/checkout@main
  599. with:
  600. submodules: recursive
  601. - uses: actions/download-artifact@v4
  602. with:
  603. name: macBinaries
  604. path: macBinaries
  605. - name: Install Neko from S3
  606. run: |
  607. set -ex
  608. curl -sSL https://build.haxe.org/builds/neko/$PLATFORM/neko_latest.tar.gz -o $RUNNER_TEMP/neko_latest.tar.gz
  609. tar -xf $RUNNER_TEMP/neko_latest.tar.gz -C $RUNNER_TEMP
  610. NEKOPATH=`echo $RUNNER_TEMP/neko-*-*`
  611. sudo mkdir -p /usr/local/bin
  612. sudo mkdir -p /usr/local/include
  613. sudo mkdir -p /usr/local/lib/neko
  614. sudo ln -s $NEKOPATH/{neko,nekoc,nekoml,nekotools} /usr/local/bin/
  615. sudo ln -s $NEKOPATH/libneko.* /usr/local/lib/
  616. sudo ln -s $NEKOPATH/include/* /usr/local/include/
  617. sudo ln -s $NEKOPATH/*.ndll /usr/local/lib/neko/
  618. echo "NEKOPATH=$NEKOPATH" >> $GITHUB_ENV
  619. - name: Print Neko version
  620. run: neko -version 2>&1
  621. - name: Setup Haxe
  622. run: |
  623. # mkdir ./macBinaries
  624. # curl -sSL https://build.haxe.org/builds/haxe/mac/haxe_latest.tar.gz -o ./macBinaries/haxe_bin.tar.gz
  625. set -ex
  626. tar -xf macBinaries/*_bin.tar.gz -C macBinaries --strip-components=1
  627. sudo mkdir -p /usr/local/bin/
  628. sudo mkdir -p /usr/local/share/haxe/
  629. sudo ln -s `pwd`/macBinaries/haxe /usr/local/bin/haxe
  630. sudo ln -s `pwd`/macBinaries/haxelib /usr/local/bin/haxelib
  631. sudo ln -s `pwd`/macBinaries/std /usr/local/share/haxe/std
  632. - name: Print Haxe version
  633. run: haxe -version
  634. - name: Setup haxelib
  635. run: |
  636. set -ex
  637. mkdir ~/haxelib
  638. haxelib setup ~/haxelib
  639. - name: Install homebrew packages
  640. if: matrix.BREW_PACKAGES
  641. run: brew install ${{matrix.BREW_PACKAGES}}
  642. - name: Test
  643. run: |
  644. # disable invalid Unicode filenames on APFS
  645. echo "" > sys/compile-fs.hxml
  646. haxe RunCi.hxml
  647. working-directory: ${{github.workspace}}/tests
  648. deploy:
  649. if: success() && github.repository_owner == 'HaxeFoundation' && github.event_name != 'pull_request'
  650. needs: [linux-test, linux-arm64, mac-test, windows64-test]
  651. runs-on: ubuntu-20.04
  652. steps:
  653. # this is only needed for to get `COMMIT_DATE`...
  654. # maybe https://github.community/t/expose-commit-timestamp-in-the-github-context-data/16460/3
  655. # would be faster
  656. - name: Checkout the repository
  657. uses: actions/checkout@main
  658. - name: Download build artifacts
  659. uses: actions/download-artifact@v4
  660. - name: Install awscli
  661. run: |
  662. set -ex
  663. sudo apt-get update -qqy
  664. sudo apt-get install -qqy awscli
  665. # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions
  666. - name: Extract branch name
  667. id: extract_branch
  668. shell: bash
  669. run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT
  670. - name: Upload binaries
  671. shell: bash
  672. env:
  673. AWS_ACCESS_KEY_ID: ${{ secrets.HXBUILDS_AWS_ACCESS_KEY_ID }}
  674. AWS_SECRET_ACCESS_KEY: ${{ secrets.HXBUILDS_AWS_SECRET_ACCESS_KEY }}
  675. HXBUILDS_S3ADDR: ${{ secrets.HXBUILDS_S3ADDR }}
  676. AWS_EC2_METADATA_DISABLED: true
  677. run: |
  678. set -ex
  679. COMMIT_HASH_SHORT=${GITHUB_SHA:0:7}
  680. COMMIT_DATE=`TZ=UTC git show --quiet --date='format-local:%Y-%m-%d' --format="%cd"`
  681. FILE_NAME=haxe_${COMMIT_DATE}_${{ steps.extract_branch.outputs.branch }}_${COMMIT_HASH_SHORT}
  682. aws s3 cp linuxBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux64/${FILE_NAME}.tar.gz
  683. aws s3 cp linuxArm64Binaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux-arm64/${FILE_NAME}.tar.gz
  684. aws s3 cp macBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac/${FILE_NAME}.tar.gz
  685. aws s3 cp macBinaries/*_installer.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac-installer/${FILE_NAME}.tar.gz
  686. aws s3 cp win64Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows64/${FILE_NAME}.zip
  687. aws s3 cp win64Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows64-installer/${FILE_NAME}.zip
  688. aws s3 cp win64Binaries/*.nupkg ${HXBUILDS_S3ADDR}/haxe/windows64-choco/
  689. - name: Update "latest"
  690. if: github.ref == 'refs/heads/development'
  691. shell: bash
  692. env:
  693. AWS_ACCESS_KEY_ID: ${{ secrets.HXBUILDS_AWS_ACCESS_KEY_ID }}
  694. AWS_SECRET_ACCESS_KEY: ${{ secrets.HXBUILDS_AWS_SECRET_ACCESS_KEY }}
  695. HXBUILDS_S3ADDR: ${{ secrets.HXBUILDS_S3ADDR }}
  696. AWS_EC2_METADATA_DISABLED: true
  697. run: |
  698. set -ex
  699. aws s3 cp linuxBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux64/haxe_latest.tar.gz
  700. aws s3 cp linuxArm64Binaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux-arm64/haxe_latest.tar.gz
  701. aws s3 cp macBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac/haxe_latest.tar.gz
  702. aws s3 cp macBinaries/*_installer.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac-installer/haxe_latest.tar.gz
  703. aws s3 cp win64Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows64/haxe_latest.zip
  704. aws s3 cp win64Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows64-installer/haxe_latest.zip
  705. # Chocolatey packages have to be named with version number,
  706. # so let's use web redirection to keep the original file name.
  707. [[ "$HXBUILDS_S3ADDR" =~ s3://([^/]+)(.*) ]] && HXBUILDS_S3BUCKET="${BASH_REMATCH[1]}" && HXBUILDS_S3PATH="${BASH_REMATCH[2]}"
  708. [[ `echo win64Binaries/*.nupkg` =~ win64Binaries/(.+) ]] && FILE_NAME="${BASH_REMATCH[1]}"
  709. aws s3 cp ${HXBUILDS_S3ADDR}/haxe/windows64-choco/${FILE_NAME} ${HXBUILDS_S3ADDR}/haxe/windows64-choco/haxe_latest.nupkg --acl public-read --website-redirect "${HXBUILDS_S3PATH}/haxe/windows64-choco/${FILE_NAME}"
  710. deploy_apidoc:
  711. if: success() && github.repository_owner == 'HaxeFoundation' && github.event_name != 'pull_request'
  712. needs: [linux-test, linux-arm64, mac-test, windows64-test]
  713. runs-on: ubuntu-20.04
  714. steps:
  715. - name: Install dependencies
  716. run: |
  717. set -ex
  718. sudo apt-get install -qqy libc6
  719. - name: Download Haxe
  720. uses: actions/download-artifact@v4
  721. with:
  722. name: linuxBinaries
  723. path: linuxBinaries
  724. - name: Setup Haxe
  725. run: |
  726. set -ex
  727. tar -xf linuxBinaries/*_bin.tar.gz -C linuxBinaries --strip-components=1
  728. sudo mkdir -p /usr/local/bin/
  729. sudo mkdir -p /usr/local/share/haxe/
  730. sudo ln -s `pwd`/linuxBinaries/haxe /usr/local/bin/haxe
  731. sudo ln -s `pwd`/linuxBinaries/haxelib /usr/local/bin/haxelib
  732. sudo ln -s `pwd`/linuxBinaries/std /usr/local/share/haxe/std
  733. - name: Download xmldoc artifact
  734. uses: actions/download-artifact@v4
  735. with:
  736. name: xmldoc
  737. path: xmldoc
  738. - name: Deploy to api.haxe.org
  739. env:
  740. GHP_EMAIL: [email protected]
  741. GHP_USERNAME: Haxe CI Bot
  742. GHP_REMOTE: ${{ secrets.GHP_REMOTE }}
  743. run: |
  744. set -ex
  745. LOCAL="`pwd`/extra/api.haxe.org"
  746. git clone "${GHP_REMOTE}" "${LOCAL}"
  747. haxe --cwd "${LOCAL}" --run ImportXml "`pwd`/xmldoc"