# TODO: support skip ci (https://github.community/t/github-actions-does-not-respect-skip-ci/17325/8) name: CI on: [push, pull_request] env: OCAML_VERSION: 5.3.0 concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: windows64-build: runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true PLATFORM: windows64 ARCH: 64 MINGW_ARCH: x86_64 CYG_ROOT: D:\cygwin steps: - uses: actions/checkout@main with: submodules: recursive @import install-nsis.yml @import install-neko-windows.yml @import install-ocaml-windows.yml @import install-ocaml-libs-windows.yml @import build-windows.yml linux-build: runs-on: ubuntu-22.04 env: PLATFORM: linux64 OPAMYES: 1 steps: - uses: actions/checkout@main with: submodules: recursive - name: Cache opam id: cache-opam uses: actions/cache@v4 with: path: ~/.opam/ key: ${{ runner.os }}-${{ env.OCAML_VERSION }}-${{ hashFiles('./haxe.opam', './libs/') }}-1 @import install-neko-unix.yml - name: Install dependencies run: | set -ex sudo apt-get update -qqy sudo apt-get install -qqy darcs bubblewrap ocaml-nox libpcre2-dev zlib1g-dev libgtk2.0-dev libmbedtls-dev ninja-build curl -sSL https://github.com/ocaml/opam/releases/download/2.3.0/opam-2.3.0-x86_64-linux -o $RUNNER_TEMP/opam sudo install $RUNNER_TEMP/opam /usr/local/bin/opam - name: Install OCaml libraries if: steps.cache-opam.outputs.cache-hit != 'true' run: | set -ex opam init -c ${{ env.OCAML_VERSION }} opam update opam pin add haxe . --no-action opam install haxe --deps-only --assume-depexts opam list ocamlopt -v - name: Set ADD_REVISION=1 for non-release if: ${{ !startsWith(github.ref, 'refs/tags/') }} run: echo "ADD_REVISION=1" >> $GITHUB_ENV - name: Build Haxe run: | set -ex eval $(opam env) opam config exec -- make -s -j`nproc` STATICLINK=1 haxe opam config exec -- make -s haxelib make -s package_unix ls -l out ldd -v ./haxe ldd -v ./haxelib # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - name: Extract branch name id: extract_branch shell: bash run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT - name: Build xmldoc run: | set -ex make -s xmldoc cat >extra/doc/info.json <> $GITHUB_ENV - name: Build Haxe run: | set -ex eval $(opam env) opam config exec -- make -s -j`nproc` STATICLINK=1 haxe opam config exec -- make -s haxelib make -s package_unix ls -l out ldd -v ./haxe ldd -v ./haxelib # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - name: Extract branch name id: extract_branch shell: bash run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT - name: Upload artifact uses: actions/upload-artifact@v4 with: name: linuxArm64Binaries path: out linux-arm64-test: needs: linux-arm64-build runs-on: ubuntu-22.04-arm env: PLATFORM: linux-arm64 TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache HAXE_STD_PATH: /usr/local/share/haxe/std strategy: fail-fast: false matrix: target: [macro, js, cpp, jvm, php, python, lua, neko] include: - target: lua APT_PACKAGES: ncurses-dev steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v4 with: name: linuxArm64Binaries path: linuxBinaries @import install-neko-unix.yml - name: Setup Haxe run: | sudo apt install -qqy libmbedtls-dev set -ex tar -xf linuxBinaries/*_bin.tar.gz -C linuxBinaries --strip-components=1 sudo mkdir -p /usr/local/bin/ sudo mkdir -p /usr/local/share/haxe/ sudo ln -s `pwd`/linuxBinaries/haxe /usr/local/bin/haxe sudo ln -s `pwd`/linuxBinaries/haxelib /usr/local/bin/haxelib sudo ln -s `pwd`/linuxBinaries/std /usr/local/share/haxe/std - name: Print Haxe version run: haxe -version - name: Setup haxelib run: | set -ex mkdir ~/haxelib haxelib setup ~/haxelib - name: Install apt packages if: matrix.APT_PACKAGES run: | set -ex sudo apt update -qqy sudo apt install -qqy ${{matrix.APT_PACKAGES}} - name: Test run: haxe RunCi.hxml -D include_legacy working-directory: ${{github.workspace}}/tests timeout-minutes: 20 mac-build: strategy: fail-fast: false matrix: arch: [arm64, x86_64] runs-on: macos-latest env: PLATFORM: mac${{ matrix.arch == 'arm64' && '-arm64' || '' }} OPAMYES: 1 MACOSX_DEPLOYMENT_TARGET: ${{ matrix.arch == 'arm64' && 11.0 || 10.13 }} steps: - uses: actions/checkout@main with: submodules: recursive - name: Cache opam id: cache-opam uses: actions/cache@v4 with: path: ~/.opam/ key: macos-${{ matrix.arch }}-${{ env.OCAML_VERSION }}-${{ hashFiles('./haxe.opam', './libs/') }}-1 @import install-neko-unix.yml @import build-mac.yml windows64-test: needs: windows64-build runs-on: windows-latest env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true PLATFORM: windows64 TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache ARCH: 64 strategy: fail-fast: false matrix: # TODO enable lua after https://github.com/HaxeFoundation/haxe/issues/10919 target: [macro, js, hl, cpp, jvm, php, python, flash, neko] steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v4 with: name: win${{env.ARCH}}Binaries path: win${{env.ARCH}}Binaries @import install-neko-windows.yml @import test-windows.yml mac-build-universal: needs: mac-build runs-on: macos-latest steps: - name: Checkout the repository uses: actions/checkout@main - uses: actions/download-artifact@v4 with: name: macX64Binaries path: macX64Binaries - uses: actions/download-artifact@v4 with: name: macArmBinaries path: macArmBinaries - name: Make universal binary run: | set -ex tar -xf macX64Binaries/*_bin.tar.gz -C macX64Binaries --strip-components=1 tar -xf macArmBinaries/*_bin.tar.gz -C macArmBinaries --strip-components=1 lipo -create -output haxe macX64Binaries/haxe macArmBinaries/haxe lipo -create -output haxelib macX64Binaries/haxelib macArmBinaries/haxelib make -s package_unix package_installer_mac PACKAGE_INSTALLER_MAC_ARCH=universal ls -l out otool -L ./haxe otool -L ./haxelib - name: Upload artifact (universal) uses: actions/upload-artifact@v4 with: name: macBinaries path: out mac-test: needs: mac-build-universal runs-on: macos-latest env: PLATFORM: mac-universal TEST: ${{matrix.target}} HXCPP_COMPILE_CACHE: ~/hxcache HAXE_STD_PATH: /usr/local/share/haxe/std strategy: fail-fast: false matrix: target: [macro, js, cpp, jvm, php, python, lua, flash, neko, hl] steps: - uses: actions/checkout@main with: submodules: recursive - uses: actions/download-artifact@v4 with: name: macBinaries path: macBinaries @import install-neko-unix.yml @import test-mac.yml deploy: if: success() && github.repository_owner == 'HaxeFoundation' && github.event_name != 'pull_request' needs: [linux-test, linux-arm64-test, mac-test, windows64-test] runs-on: ubuntu-22.04 steps: # this is only needed for to get `COMMIT_DATE`... # maybe https://github.community/t/expose-commit-timestamp-in-the-github-context-data/16460/3 # would be faster - name: Checkout the repository uses: actions/checkout@main - name: Download build artifacts uses: actions/download-artifact@v4 - name: Install awscli run: | set -ex sudo apt-get update -qqy sudo apt-get install -qqy awscli # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - name: Extract branch name id: extract_branch shell: bash run: echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT - name: Upload binaries shell: bash env: AWS_ACCESS_KEY_ID: ${{ secrets.HXBUILDS_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.HXBUILDS_AWS_SECRET_ACCESS_KEY }} HXBUILDS_S3ADDR: ${{ secrets.HXBUILDS_S3ADDR }} AWS_EC2_METADATA_DISABLED: true run: | set -ex COMMIT_HASH_SHORT=${GITHUB_SHA:0:7} COMMIT_DATE=`TZ=UTC git show --quiet --date='format-local:%Y-%m-%d' --format="%cd"` FILE_NAME=haxe_${COMMIT_DATE}_${{ steps.extract_branch.outputs.branch }}_${COMMIT_HASH_SHORT} aws s3 cp linuxBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux64/${FILE_NAME}.tar.gz aws s3 cp linuxArm64Binaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux-arm64/${FILE_NAME}.tar.gz aws s3 cp macBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac/${FILE_NAME}.tar.gz aws s3 cp macBinaries/*_installer.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac-installer/${FILE_NAME}.tar.gz aws s3 cp win64Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows64/${FILE_NAME}.zip aws s3 cp win64Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows64-installer/${FILE_NAME}.zip aws s3 cp win64Binaries/*.nupkg ${HXBUILDS_S3ADDR}/haxe/windows64-choco/ - name: Update "latest" if: github.ref == 'refs/heads/development' shell: bash env: AWS_ACCESS_KEY_ID: ${{ secrets.HXBUILDS_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.HXBUILDS_AWS_SECRET_ACCESS_KEY }} HXBUILDS_S3ADDR: ${{ secrets.HXBUILDS_S3ADDR }} AWS_EC2_METADATA_DISABLED: true run: | set -ex aws s3 cp linuxBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux64/haxe_latest.tar.gz aws s3 cp linuxArm64Binaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/linux-arm64/haxe_latest.tar.gz aws s3 cp macBinaries/*_bin.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac/haxe_latest.tar.gz aws s3 cp macBinaries/*_installer.tar.gz ${HXBUILDS_S3ADDR}/haxe/mac-installer/haxe_latest.tar.gz aws s3 cp win64Binaries/*_bin.zip ${HXBUILDS_S3ADDR}/haxe/windows64/haxe_latest.zip aws s3 cp win64Binaries/*_installer.zip ${HXBUILDS_S3ADDR}/haxe/windows64-installer/haxe_latest.zip # Chocolatey packages have to be named with version number, # so let's use web redirection to keep the original file name. [[ "$HXBUILDS_S3ADDR" =~ s3://([^/]+)(.*) ]] && HXBUILDS_S3BUCKET="${BASH_REMATCH[1]}" && HXBUILDS_S3PATH="${BASH_REMATCH[2]}" [[ `echo win64Binaries/*.nupkg` =~ win64Binaries/(.+) ]] && FILE_NAME="${BASH_REMATCH[1]}" 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}" deploy_apidoc: if: success() && github.repository_owner == 'HaxeFoundation' && github.event_name != 'pull_request' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/development') needs: [linux-test, linux-arm64-test, mac-test, windows64-test] runs-on: ubuntu-22.04 steps: - name: Install dependencies run: | set -ex sudo apt-get install -qqy libc6 - name: Download Haxe uses: actions/download-artifact@v4 with: name: linuxBinaries path: linuxBinaries - name: Setup Haxe run: | set -ex tar -xf linuxBinaries/*_bin.tar.gz -C linuxBinaries --strip-components=1 sudo mkdir -p /usr/local/bin/ sudo mkdir -p /usr/local/share/haxe/ sudo ln -s `pwd`/linuxBinaries/haxe /usr/local/bin/haxe sudo ln -s `pwd`/linuxBinaries/haxelib /usr/local/bin/haxelib sudo ln -s `pwd`/linuxBinaries/std /usr/local/share/haxe/std - name: Download xmldoc artifact uses: actions/download-artifact@v4 with: name: xmldoc path: xmldoc - name: Deploy to api.haxe.org env: GHP_EMAIL: haxe-ci@onthewings.net GHP_USERNAME: Haxe CI Bot GHP_REMOTE: ${{ secrets.GHP_REMOTE }} run: | set -ex LOCAL="`pwd`/extra/api.haxe.org" git clone "${GHP_REMOTE}" "${LOCAL}" haxe --cwd "${LOCAL}" --run ImportXml "`pwd`/xmldoc"