diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index e67cba41f25bc..a2d495138e8c3 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -78,6 +78,101 @@ jobs: echo "run_job=false" >> $GITHUB_OUTPUT fi + check_static_analyzer: + name: Check Static Analyzer + runs-on: ubuntu-latest + needs: check_files + steps: + - uses: actions/checkout@v3 + with: + submodules: 'recursive' + fetch-depth: '0' + + - name: clang-tidy + run: | + if [[ ${{needs.check_files.outputs.run_job}} == false ]]; then + exit 0 + fi + # https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-ghcrio + echo $CR_PAT | docker login ghcr.io -u ${{ github.actor }} --password-stdin + docker pull ghcr.io/taichi-dev/taichidev-cpu-ubuntu18.04:v0.3.3 + docker run -id --user dev --name check_clang_tidy ghcr.io/taichi-dev/taichidev-cpu-ubuntu18.04:v0.3.3 /bin/bash + tar -cf - ../${{ github.event.repository.name }} --mode u=+rwx,g=+rwx,o=+rwx --owner 1000 --group 1000 | docker cp - check_clang_tidy:/home/dev/ + docker exec --user root check_clang_tidy apt-get update + docker exec --user root check_clang_tidy apt install -y clang-tidy-10 libx11-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev zlib1g-dev libglew-dev libglfw3-dev + docker exec --user dev check_clang_tidy /home/dev/taichi/.github/workflows/scripts/check_clang_tidy.sh "$CI_SETUP_CMAKE_ARGS" + env: + CR_PAT: ${{ secrets.GITHUB_TOKEN }} + CI_SETUP_CMAKE_ARGS: -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DTI_WITH_OPENGL:BOOL=ON -DTI_WITH_CC:BOOL=ON -DTI_WITH_VULKAN:BOOL=ON -DTI_BUILD_TESTS:BOOL=ON -DTI_WITH_BACKTRACE:BOOL=ON + + build_and_test_cpu_mac: + name: Build and Test macos (CPU) + needs: check_files + timeout-minutes: ${{ github.event.schedule != '0 18 * * *' && 120 || 180 }} + strategy: + matrix: + include: + - os: macos-10.15 + python: 3.7 + with_cc: OFF + with_cpp_tests: ON + wanted_archs: 'cpu,vulkan' + runs-on: + - self-hosted + - ${{ matrix.os }} + env: + PY: ${{ matrix.python }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: '0' + submodules: 'recursive' + + - name: Prepare Environment + run: | + . .github/workflows/scripts/common-utils.sh + prepare-build-cache + env: + CI_PLATFORM: macos + + - name: Build & Install + if: needs.check_files.outputs.run_job == 'true' + run: | + # Use the molten-vk v1.1.10 downloaded from taichi assets + brew uninstall molten-vk -f + .github/workflows/scripts/build.py + env: + CXX: clang++ + TAICHI_CMAKE_ARGS: >- + -DTI_WITH_OPENGL:BOOL=OFF + -DTI_WITH_CC:BOOL=${{ matrix.with_cc }} + -DTI_WITH_VULKAN:BOOL=ON + -DTI_WITH_C_API=ON + -DTI_WITH_BACKTRACE:BOOL=ON + -DTI_BUILD_TESTS:BOOL=${{ matrix.with_cpp_tests }} + + # [DEBUG] Copy this step around to enable debugging inside Github Action instances. + #- name: Setup tmate session + # uses: mxschmitt/action-tmate@v3 + # with: + # limit-access-to-actor: true + + - name: Test + id: test + if: needs.check_files.outputs.run_job == 'true' + run: .github/workflows/scripts/unix_test.sh + env: + TI_WANTED_ARCHS: ${{ matrix.wanted_archs }} + TI_SKIP_CPP_TESTS: Disabled because Vulkan is supported but not working on buildbot4 + + - name: Save wheel if test failed + if: failure() && steps.test.conclusion == 'failure' + uses: actions/upload-artifact@v3 + with: + name: broken-wheel + path: dist/* + retention-days: 7 + build_and_test_gpu_linux: name: Build and Test (GPU) needs: check_files @@ -121,6 +216,30 @@ jobs: -DTI_BUILD_TESTS:BOOL=ON -DTI_WITH_C_API=ON + - name: Check C-API Export Symbols + run: | + [[ ${{needs.check_files.outputs.run_job}} == false ]] && exit 0 + . .github/workflows/scripts/common-utils.sh + + ci-docker-run-gpu --name taichi-test-check-c-api-export-symbols \ + registry.taichigraphics.com/taichidev-ubuntu18.04:v0.3.4 \ + /home/dev/taichi/.github/workflows/scripts/aot-demo.sh check-c-api-export-symbols + + - name: Test + id: test + run: | + [[ ${{needs.check_files.outputs.run_job}} == false ]] && exit 0 + . .github/workflows/scripts/common-utils.sh + + ci-docker-run-gpu --name taichi-test \ + registry.taichigraphics.com/taichidev-ubuntu18.04:v0.3.4 \ + /home/dev/taichi/.github/workflows/scripts/unix_test.sh + env: + PY: '3.8' + TI_WANTED_ARCHS: 'cc,cpu,cuda,vulkan,opengl' + TI_DEVICE_MEMORY_GB: '1' + TI_RUN_RELEASE_TESTS: '1' + - name: Build & Run C-API Headless Demos (Desktop) run: | [[ ${{needs.check_files.outputs.run_job}} == false ]] && exit 0 @@ -133,6 +252,223 @@ jobs: PY: '3.8' TI_DEVICE_MEMORY_GB: '0.1' + - name: Save wheel if test failed + if: failure() && steps.test.conclusion == 'failure' + uses: actions/upload-artifact@v3 + with: + name: broken-wheel + path: dist/* + retention-days: 7 + + - name: Save Bad Captures + if: failure() && steps.test.conclusion == 'failure' + uses: actions/upload-artifact@v3 + with: + name: bad-captures + path: taichi-release-tests/bad-compare/* + retention-days: 7 + + build_and_test_amdgpu_linux: + name: Build and Test (AMDGPU) + needs: check_files + timeout-minutes: ${{ github.event.schedule != '0 18 * * *' && 90 || 120 }} + runs-on: [self-hosted, amdgpu] + steps: + - uses: actions/checkout@v3 + with: + submodules: 'recursive' + fetch-depth: '0' + + - name: Prepare Environment + run: | + . .github/workflows/scripts/common-utils.sh + prepare-build-cache + echo CI_DOCKER_RUN_EXTRA_ARGS="-v $(pwd):/home/dev/taichi" >> $GITHUB_ENV + + - name: Build & Install + run: | + [[ ${{needs.check_files.outputs.run_job}} == false ]] && exit 0 + . .github/workflows/scripts/common-utils.sh + + ci-docker-run-amdgpu --name taichi-build \ + registry.taichigraphics.com/taichidev-ubuntu18.04.amdgpu:v0.0.5 \ + /home/dev/taichi/.github/workflows/scripts/build.py + + env: + PY: '3.8' + PROJECT_NAME: taichi + TAICHI_CMAKE_ARGS: >- + -DTI_WITH_CUDA:BOOL=OFF + -DTI_WITH_VULKAN:BOOL=OFF + -DTI_WITH_OPENGL:BOOL=OFF + -DTI_BUILD_TESTS:BOOL=ON + -DTI_WITH_AMDGPU:BOOL=ON + + - name: Test + id: test + run: | + [[ ${{needs.check_files.outputs.run_job}} == false ]] && exit 0 + . .github/workflows/scripts/common-utils.sh + + ci-docker-run-amdgpu --name taichi-test \ + registry.taichigraphics.com/taichidev-ubuntu18.04.amdgpu:v0.0.5 \ + /home/dev/taichi/.github/workflows/scripts/unix_test.sh + env: + PY: '3.8' + TI_WANTED_ARCHS: 'cpu,amdgpu' + TI_DEVICE_MEMORY_GB: '1' + TI_RUN_RELEASE_TESTS: '0' + + - name: Save wheel if test failed + if: failure() && steps.test.conclusion == 'failure' + uses: actions/upload-artifact@v3 + with: + name: broken-wheel + path: dist/* + retention-days: 7 + + - name: Save Bad Captures + if: failure() && steps.test.conclusion == 'failure' + uses: actions/upload-artifact@v3 + with: + name: bad-captures + path: taichi-release-tests/bad-compare/* + retention-days: 7 + + + build_and_test_windows: + name: Build and Test Windows + needs: check_files + strategy: + matrix: + include: + - os: windows-2019 + llvmVer : '15' + archs: "cpu,cuda,opengl" + runsOn: [self-hosted, windows, cuda, OpenGL] + runs-on: ${{ matrix.runsOn }} + timeout-minutes: ${{ github.event.schedule != '0 18 * * *' && 90 || 180 }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: '0' + submodules: 'recursive' + + - uses: actions/setup-python@v4 + with: + python-version: 3.7 + + - name: Build + shell: pwsh + if: ${{ needs.check_files.outputs.run_job != 'false' }} + run: | + .\.github\workflows\scripts\win_build.ps1 -llvmVer ${{ matrix.llvmVer }} -installVulkan -libsDir "$env:LocalAppData/buildbot" + env: + PY: "3.7" + TAICHI_CMAKE_ARGS: >- + -DTI_WITH_OPENGL:BOOL=ON + -DTI_WITH_DX11:BOOL=ON + -DTI_WITH_DX12:BOOL=ON + -DTI_WITH_CC:BOOL=OFF + -DTI_BUILD_TESTS:BOOL=ON + -DTI_WITH_BACKTRACE=ON + -DTI_WITH_C_API=ON + + - name: Test + id: test + shell: pwsh + if: ${{ needs.check_files.outputs.run_job != 'false' }} + run: | + .\.github\workflows\scripts\win_test.ps1 -libsDir "$env:LocalAppData/buildbot" + env: + PY: "3.7" + TI_WANTED_ARCHS: ${{ matrix.archs }} + TI_SKIP_VERSION_CHECK: ON + TI_DEVICE_MEMORY_GB: '1' + TI_RUN_RELEASE_TESTS: '1' + + - name: Save wheel if test failed + if: failure() && steps.test.conclusion == 'failure' + uses: actions/upload-artifact@v3 + with: + name: broken-wheel + path: dist/* + retention-days: 7 + + build_and_test_m1: + name: Build and Test (Apple M1) + needs: check_files + timeout-minutes: ${{ github.event.schedule != '0 18 * * *' && 60 || 120 }} + strategy: + matrix: + include: + - os: macos-latest + python: 3.8 + defaults: + run: + # https://github.com/actions/runner/issues/805#issuecomment-844426478 + shell: '/usr/bin/arch -arch arm64e /bin/bash --noprofile --norc -eo pipefail {0}' + runs-on: [self-hosted, m1] + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: '0' + submodules: 'recursive' + + - name: Build + run: | + [[ ${{needs.check_files.outputs.run_job}} == false ]] && exit 0 + . .github/workflows/scripts/common-utils.sh + prepare-build-cache + brew install molten-vk + brew install llvm@15 + .github/workflows/scripts/build.py + env: + PY: ${{ matrix.python }} + CXX: clang++ + TAICHI_CMAKE_ARGS: >- + -DTI_WITH_OPENGL:BOOL=OFF + -DTI_WITH_CUDA:BOOL=OFF + -DTI_WITH_CC:BOOL=OFF + -DTI_WITH_VULKAN:BOOL=ON + -DTI_BUILD_TESTS:BOOL=ON + -DTI_WITH_BACKTRACE:BOOL=ON + -DTI_WITH_C_API=ON + + - name: Check C-API Export Symbols + run: | + [[ ${{needs.check_files.outputs.run_job}} == false ]] && exit 0 + . .github/workflows/scripts/common-utils.sh + + .github/workflows/scripts/aot-demo.sh check-c-api-export-symbols + + - name: Test + id: test + run: | + [[ ${{needs.check_files.outputs.run_job}} == false ]] && exit 0 + .github/workflows/scripts/unix_test.sh + env: + TI_WANTED_ARCHS: 'cpu,metal,vulkan' + PY: ${{ matrix.python }} + PLATFORM: 'm1' + TI_RUN_RELEASE_TESTS: '1' + + - name: Save wheel if test failed + if: failure() && steps.test.conclusion == 'failure' + uses: actions/upload-artifact@v3 + with: + name: broken-wheel + path: dist/* + retention-days: 7 + + - name: Save Bad Captures + if: failure() && steps.test.conclusion == 'failure' + uses: actions/upload-artifact@v3 + with: + name: bad-captures + path: taichi-release-tests/bad-compare/* + retention-days: 7 + build_android_demos: name: Build Android Demos # Skip this job when testing the offline cache @@ -201,6 +537,41 @@ jobs: -DTI_WITH_LLVM:BOOL=OFF -DTI_WITH_C_API=ON + - name: Test For Android AOT + if: ${{ needs.check_files.outputs.run_job != 'false' }} + run: | + . .github/workflows/scripts/common-utils.sh + chown -R 1000:1000 . + ci-docker-run-gpu --name taichi-test-android \ + registry.taichigraphics.com/taichidev-androidsdk18.04:v0.0.6 \ + /home/dev/taichi/.github/workflows/scripts/aot-demo.sh build-and-smoke-test-android-aot-demo + + - name: Prepare Unity Build Environment + if: ${{ needs.check_files.outputs.run_job != 'false' }} + run: | + . .github/workflows/scripts/common-utils.sh + chown -R 1000:1000 . + ci-docker-run --name taichi-prepare-unity-build-env \ + registry.taichigraphics.com/taichidev-androidsdk18.04:v0.0.6 \ + /home/dev/taichi/.github/workflows/scripts/aot-demo.sh prepare-unity-build-env + + - name: Build Taichi-UnityExample + if: ${{ needs.check_files.outputs.run_job != 'false' }} + run: | + . .github/workflows/scripts/common-utils.sh + ci-docker-run --name taichi-build-unity-demo \ + registry.taichigraphics.com/unityci-editor:ubuntu-2020.3.14f1-android-1-with-secret-sauce \ + /home/dev/taichi/.github/workflows/scripts/aot-demo.sh build-unity-demo + + - name: Run Taichi-UnityExample (C-API) + if: ${{ needs.check_files.outputs.run_job != 'false' }} + run: | + . .github/workflows/scripts/common-utils.sh + chown -R 1000:1000 . + ci-docker-run --name taichi-run-unity-demo \ + registry.taichigraphics.com/taichidev-androidsdk18.04:v0.0.6 \ + /home/dev/taichi/.github/workflows/scripts/aot-demo.sh smoke-test-unity-demo + - name: Build & Run C-API Headless Demos (Android) if: ${{ needs.check_files.outputs.run_job != 'false' }} run: |