name: build on: push: paths-ignore: - 'docs/**' - 'web/**' - '**.md' pull_request: paths-ignore: - 'docs/**' - 'web/**' - '**.md' jobs: # build_win32_amalgamated: # runs-on: windows-latest # steps: # - uses: actions/checkout@v4 # - uses: ilammy/msvc-dev-cmd@v1 # - name: Compile # shell: powershell # run: | # python amalgamate.py # cd amalgamated # cl.exe /std:c++17 /EHsc /utf-8 /Ox /I. /DPK_ENABLE_OS=1 main.cpp /link /out:pkpy.exe build_win32: runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: ilammy/msvc-dev-cmd@v1 - name: Compile shell: bash run: | mkdir -p output/x86_64 python cmake_build.py cp main.exe output/x86_64 cp pocketpy.dll output/x86_64 - uses: actions/upload-artifact@v4 with: name: windows path: output - name: Unit Test run: python scripts/run_tests.py - name: Benchmark run: python scripts/run_tests.py benchmark build_linux: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4 - name: Setup Clang uses: egor-tensin/setup-clang@v1 with: version: 15 platform: x64 - name: Install libc++ run: sudo apt-get install -y libc++-15-dev libc++1-15 libc++abi-15-dev libc++abi1-15 libclang-rt-15-dev - name: Unit Test with Coverage run: bash run_tests.sh - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v4 with: token: ${{ secrets.CODECOV_TOKEN }} directory: .coverage if: github.ref == 'refs/heads/main' - name: Compile run: | mkdir -p output/x86_64 python cmake_build.py cp main output/x86_64 cp libpocketpy.so output/x86_64 env: CXX: clang++ CC: clang - uses: actions/upload-artifact@v4 with: name: linux path: output - name: Benchmark run: python scripts/run_tests.py benchmark - name: C Binding Test run: bash run_c_binding_test.sh build_linux_x86: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Alpine Linux for aarch64 uses: jirutka/setup-alpine@v1 with: arch: x86 packages: gcc g++ make cmake libc-dev linux-headers python3 - name: Build and Test run: | uname -m python cmake_build.py python scripts/run_tests.py python scripts/run_tests.py benchmark shell: alpine.sh --root {0} build_darwin: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Compile and Test run: | python cmake_build.py python scripts/run_tests.py - name: Benchmark run: python scripts/run_tests.py benchmark # - run: | # python amalgamate.py # cd plugins/macos/pocketpy # mkdir output # xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO # cp -r build/Release/pocketpy.bundle output # - uses: actions/upload-artifact@v4 # with: # name: macos # path: plugins/macos/pocketpy/output build_android: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: nttld/setup-ndk@v1 id: setup-ndk with: ndk-version: r23 local-cache: false add-to-path: false - name: Compile Shared Library run: | bash build_android.sh arm64-v8a bash build_android.sh armeabi-v7a bash build_android.sh x86_64 mkdir -p output/arm64-v8a mkdir -p output/armeabi-v7a mkdir -p output/x86_64 cp build/android/arm64-v8a/libpocketpy.so output/arm64-v8a cp build/android/armeabi-v7a/libpocketpy.so output/armeabi-v7a cp build/android/x86_64/libpocketpy.so output/x86_64 env: ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} - uses: actions/upload-artifact@v4 with: name: android path: output build_ios: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Compile Frameworks run: | git clone https://github.com/leetal/ios-cmake --depth 1 ~/ios-cmake bash build_ios.sh mkdir -p output cp -r build/pocketpy.xcframework output/pocketpy.xcframework - uses: actions/upload-artifact@v4 with: name: ios path: output merge: runs-on: ubuntu-latest needs: [ build_win32, build_linux, build_darwin, build_android, build_ios ] steps: - name: "Create output directory" run: "mkdir $GITHUB_WORKSPACE/output" - name: "Merge win32" uses: actions/download-artifact@v4.1.7 with: name: windows path: $GITHUB_WORKSPACE/output/windows - name: "Merge linux" uses: actions/download-artifact@v4.1.7 with: name: linux path: $GITHUB_WORKSPACE/output/linux - name: "Merge darwin" uses: actions/download-artifact@v4.1.7 with: name: macos path: $GITHUB_WORKSPACE/output/macos - name: "Merge android" uses: actions/download-artifact@v4.1.7 with: name: android path: $GITHUB_WORKSPACE/output/android - name: "Merge ios" uses: actions/download-artifact@v4.1.7 with: name: ios path: $GITHUB_WORKSPACE/output/ios - name: "Upload merged artifact" uses: actions/upload-artifact@v4.3.3 with: name: all-in-one path: $GITHUB_WORKSPACE/output