1*b29f2fbfSchristosname: CI-unix
2*b29f2fbfSchristos
3*b29f2fbfSchristoson:
4*b29f2fbfSchristos  pull_request:
5*b29f2fbfSchristos    paths:
6*b29f2fbfSchristos      - '**'
7*b29f2fbfSchristos      - '!docs/**'
8*b29f2fbfSchristos      - '!src/win/**'
9*b29f2fbfSchristos      - '!.**'
10*b29f2fbfSchristos      - '.github/workflows/CI-unix.yml'
11*b29f2fbfSchristos  push:
12*b29f2fbfSchristos    branches:
13*b29f2fbfSchristos      - v[0-9].*
14*b29f2fbfSchristos      - master
15*b29f2fbfSchristos
16*b29f2fbfSchristosjobs:
17*b29f2fbfSchristos  build-android:
18*b29f2fbfSchristos    runs-on: ubuntu-latest
19*b29f2fbfSchristos    container: reactnativecommunity/react-native-android:2020-5-20
20*b29f2fbfSchristos    steps:
21*b29f2fbfSchristos      - uses: actions/checkout@v2
22*b29f2fbfSchristos      - name: Envinfo
23*b29f2fbfSchristos        run: npx envinfo
24*b29f2fbfSchristos      - name: Configure android arm64
25*b29f2fbfSchristos        # see build options you can use in https://developer.android.com/ndk/guides/cmake
26*b29f2fbfSchristos        run: |
27*b29f2fbfSchristos          mkdir build
28*b29f2fbfSchristos          cd build
29*b29f2fbfSchristos          $ANDROID_HOME/cmake/3.10.2.4988404/bin/cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_HOME/ndk/20.0.5594570/build/cmake/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="arm64-v8a" -DANDROID_PLATFORM=android-24 ..
30*b29f2fbfSchristos      - name: Build android arm64
31*b29f2fbfSchristos        run: |
32*b29f2fbfSchristos          $ANDROID_HOME/cmake/3.10.2.4988404/bin/cmake --build build
33*b29f2fbfSchristos          ls -lh build
34*b29f2fbfSchristos
35*b29f2fbfSchristos  build-macos:
36*b29f2fbfSchristos    runs-on: macos-10.15
37*b29f2fbfSchristos    steps:
38*b29f2fbfSchristos      - uses: actions/checkout@v2
39*b29f2fbfSchristos      - name: Envinfo
40*b29f2fbfSchristos        run: npx envinfo
41*b29f2fbfSchristos      - name: Setup
42*b29f2fbfSchristos        run: |
43*b29f2fbfSchristos          brew install ninja
44*b29f2fbfSchristos      - name: Configure
45*b29f2fbfSchristos        run: |
46*b29f2fbfSchristos          mkdir build
47*b29f2fbfSchristos          cd build
48*b29f2fbfSchristos          cmake .. -DBUILD_TESTING=ON -G Ninja
49*b29f2fbfSchristos      - name: Build
50*b29f2fbfSchristos        run: |
51*b29f2fbfSchristos          cmake --build build
52*b29f2fbfSchristos          ls -lh
53*b29f2fbfSchristos      - name: platform_output
54*b29f2fbfSchristos        run: |
55*b29f2fbfSchristos          ./build/uv_run_tests platform_output
56*b29f2fbfSchristos      - name: platform_output_a
57*b29f2fbfSchristos        run: |
58*b29f2fbfSchristos          ./build/uv_run_tests_a platform_output
59*b29f2fbfSchristos      - name: Test
60*b29f2fbfSchristos        run: |
61*b29f2fbfSchristos          cd build && ctest -V
62*b29f2fbfSchristos
63*b29f2fbfSchristos  build-ios:
64*b29f2fbfSchristos    runs-on: macos-10.15
65*b29f2fbfSchristos    steps:
66*b29f2fbfSchristos      - uses: actions/checkout@v2
67*b29f2fbfSchristos      - name: Configure
68*b29f2fbfSchristos        run: |
69*b29f2fbfSchristos          mkdir build-ios
70*b29f2fbfSchristos          cd build-ios
71*b29f2fbfSchristos          cmake .. -GXcode -DCMAKE_SYSTEM_NAME:STRING=iOS -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED:BOOL=NO -DCMAKE_CONFIGURATION_TYPES:STRING=Release
72*b29f2fbfSchristos      - name: Build
73*b29f2fbfSchristos        run: |
74*b29f2fbfSchristos          cmake --build build-ios
75*b29f2fbfSchristos          ls -lh build-ios
76*b29f2fbfSchristos
77*b29f2fbfSchristos  build-cross-qemu:
78*b29f2fbfSchristos    runs-on: ubuntu-latest
79*b29f2fbfSchristos    name: build-cross-qemu-${{ matrix.config.target }}
80*b29f2fbfSchristos
81*b29f2fbfSchristos    strategy:
82*b29f2fbfSchristos      fail-fast: false
83*b29f2fbfSchristos      matrix:
84*b29f2fbfSchristos        config:
85*b29f2fbfSchristos          - {target: arm,     toolchain: gcc-arm-linux-gnueabi,     cc: arm-linux-gnueabi-gcc,      qemu: qemu-arm-static     }
86*b29f2fbfSchristos          - {target: armhf,   toolchain: gcc-arm-linux-gnueabihf,   cc: arm-linux-gnueabihf-gcc,    qemu: qemu-arm-static     }
87*b29f2fbfSchristos          - {target: aarch64, toolchain: gcc-aarch64-linux-gnu,     cc: aarch64-linux-gnu-gcc,      qemu: qemu-aarch64-static }
88*b29f2fbfSchristos          - {target: riscv64, toolchain: gcc-riscv64-linux-gnu,     cc: riscv64-linux-gnu-gcc,      qemu: qemu-riscv64-static }
89*b29f2fbfSchristos          - {target: ppc,     toolchain: gcc-powerpc-linux-gnu,     cc: powerpc-linux-gnu-gcc,      qemu: qemu-ppc-static     }
90*b29f2fbfSchristos          - {target: ppc64,   toolchain: gcc-powerpc64-linux-gnu,   cc: powerpc64-linux-gnu-gcc,    qemu: qemu-ppc64-static   }
91*b29f2fbfSchristos          - {target: ppc64le, toolchain: gcc-powerpc64le-linux-gnu, cc: powerpc64le-linux-gnu-gcc,  qemu: qemu-ppc64le-static }
92*b29f2fbfSchristos          - {target: s390x,   toolchain: gcc-s390x-linux-gnu,       cc: s390x-linux-gnu-gcc,        qemu: qemu-s390x-static   }
93*b29f2fbfSchristos          - {target: mips,    toolchain: gcc-mips-linux-gnu,          cc: mips-linux-gnu-gcc,         qemu: qemu-mips-static     }
94*b29f2fbfSchristos          - {target: mips64,  toolchain: gcc-mips64-linux-gnuabi64,   cc: mips64-linux-gnuabi64-gcc,  qemu: qemu-mips64-static   }
95*b29f2fbfSchristos          - {target: mipsel,  toolchain: gcc-mipsel-linux-gnu,        cc: mipsel-linux-gnu-gcc,       qemu: qemu-mipsel-static   }
96*b29f2fbfSchristos          - {target: mips64el,toolchain: gcc-mips64el-linux-gnuabi64, cc: mips64el-linux-gnuabi64-gcc,qemu: qemu-mips64el-static }
97*b29f2fbfSchristos          - {target: alpha,   toolchain: gcc-alpha-linux-gnu,       cc: alpha-linux-gnu-gcc,        qemu: qemu-alpha-static   }
98*b29f2fbfSchristos          - {target: arm (u64 slots),     toolchain: gcc-arm-linux-gnueabi,     cc: arm-linux-gnueabi-gcc,      qemu: qemu-arm-static}
99*b29f2fbfSchristos          - {target: aarch64 (u64 slots), toolchain: gcc-aarch64-linux-gnu,     cc: aarch64-linux-gnu-gcc,      qemu: qemu-aarch64-static}
100*b29f2fbfSchristos          - {target: ppc (u64 slots),     toolchain: gcc-powerpc-linux-gnu,     cc: powerpc-linux-gnu-gcc,      qemu: qemu-ppc-static}
101*b29f2fbfSchristos          - {target: ppc64 (u64 slots),   toolchain: gcc-powerpc64-linux-gnu,   cc: powerpc64-linux-gnu-gcc,    qemu: qemu-ppc64-static}
102*b29f2fbfSchristos
103*b29f2fbfSchristos    steps:
104*b29f2fbfSchristos      - uses: actions/checkout@v2
105*b29f2fbfSchristos      - name: Install QEMU
106*b29f2fbfSchristos        # this ensure install latest qemu on ubuntu, apt get version is old
107*b29f2fbfSchristos        env:
108*b29f2fbfSchristos          QEMU_SRC: "http://archive.ubuntu.com/ubuntu/pool/universe/q/qemu"
109*b29f2fbfSchristos          QEMU_VER: "qemu-user-static_4\\.2-.*_amd64.deb$"
110*b29f2fbfSchristos        run: |
111*b29f2fbfSchristos          DEB=`curl -s $QEMU_SRC/ | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | grep $QEMU_VER | tail -1`
112*b29f2fbfSchristos          wget $QEMU_SRC/$DEB
113*b29f2fbfSchristos          sudo dpkg -i $DEB
114*b29f2fbfSchristos      - name: Install ${{ matrix.config.toolchain }}
115*b29f2fbfSchristos        run: |
116*b29f2fbfSchristos          sudo apt update
117*b29f2fbfSchristos          sudo apt install ${{ matrix.config.toolchain }} -y
118*b29f2fbfSchristos      - name: Configure with ${{ matrix.config.cc }}
119*b29f2fbfSchristos        run: |
120*b29f2fbfSchristos          mkdir build
121*b29f2fbfSchristos          cd build
122*b29f2fbfSchristos          cmake .. -DBUILD_TESTING=ON -DQEMU=ON -DCMAKE_C_COMPILER=${{ matrix.config.cc }}
123*b29f2fbfSchristos      - name: Build
124*b29f2fbfSchristos        run: |
125*b29f2fbfSchristos          cmake --build build
126*b29f2fbfSchristos          ls -lh build
127*b29f2fbfSchristos      - name: Test
128*b29f2fbfSchristos        run: |
129*b29f2fbfSchristos          ${{ matrix.config.qemu }} build/uv_run_tests_a
130