name: Build and test # This workflow is triggered on pushes or pull request to the repository. on: push: # file paths to consider in the event. Optional; defaults to all. paths: - 'scripts/**' - 'internal/**' - 'pkg/**' - 'cmd/**' - 'build/**' - 'tests/integration/**' # run integration test - '.github/workflows/main.yaml' - '.env' - docker-compose.yml - Makefile - go.mod - '!**.md' - '!build/ci/jenkins/**' pull_request: # file paths to consider in the event. Optional; defaults to all. paths: - 'scripts/**' - 'internal/**' - 'pkg/**' - 'cmd/**' - 'build/**' - 'tests/integration/**' # run integration test - '.github/workflows/main.yaml' - '.env' - docker-compose.yml - Makefile - go.mod - '!**.md' - '!build/ci/jenkins/**' concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: Build: name: Build and test AMD64 Ubuntu ${{ matrix.ubuntu }} runs-on: ubuntu-latest timeout-minutes: 180 strategy: fail-fast: false matrix: ubuntu: [20.04] env: UBUNTU: ${{ matrix.ubuntu }} steps: - name: Setup mold uses: rui314/setup-mold@v1 - name: Maximize build space uses: easimon/maximize-build-space@master if: ${{ ! startsWith(runner.name, 'self') }} # skip this step if it is self-hosted runner with: root-reserve-mb: 20480 swap-size-mb: 1024 remove-dotnet: 'true' remove-android: 'true' remove-haskell: 'true' - name: Checkout uses: actions/checkout@v2 with: fetch-depth: 0 - name: 'Check Changed files' id: changed-files-cpp uses: tj-actions/changed-files@v41 with: since_last_remote_commit: 'true' files: | **/*.cpp **/*.cc **/*.c **/*.h **/*.hpp **/*.CMakeLists.txt **/conanfile.* - name: 'Setup Use USE_ASAN' if: steps.changed-files-cpp.outputs.any_changed == 'true' run: | echo "useasan=ON" >> $GITHUB_ENV echo "Setup USE_ASAN to true since cpp file(s) changed" - name: Download Caches uses: ./.github/actions/cache with: os: 'ubuntu20.04' kind: 'cpp' - name: Build run: | ./build/builder.sh /bin/bash -c "make USE_ASAN=${{env.useasan}} build-cpp-with-coverage" - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: code compression-level: 0 # no compression path: | **/* !./.docker/** !./cmake_build/thirdparty/** !.git UT-Cpp: name: UT for Cpp needs: Build runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false matrix: ubuntu: [20.04] env: UBUNTU: ${{ matrix.ubuntu }} steps: - name: Download Artifact uses: actions/download-artifact@v4.1.0 with: name: code - name: Download Caches uses: ./.github/actions/cache with: os: 'ubuntu20.04' kind: 'cpp' - name: Start Service shell: bash run: | docker-compose up -d azurite - name: UT run: | chmod +x build/builder.sh chmod +x scripts/* chmod +x internal/core/output/unittest/* ./build/builder.sh /bin/bash -c ./scripts/run_cpp_codecov.sh - name: Archive result uses: actions/upload-artifact@v4 with: name: cpp-result path: | ./go_coverage.txt ./lcov_output.info *.info *.out UT-Go: name: UT for Go needs: Build runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false matrix: ubuntu: [20.04] env: UBUNTU: ${{ matrix.ubuntu }} steps: - name: Download Artifact uses: actions/download-artifact@v4.1.0 with: name: code - name: Download Caches uses: ./.github/actions/cache with: os: 'ubuntu20.04' kind: 'go' - name: Start Service shell: bash run: | docker-compose up -d pulsar etcd minio azurite - name: UT run: | chmod +x build/builder.sh chmod +x scripts/run_go_codecov.sh ./build/builder.sh /bin/bash -c ./scripts/run_go_codecov.sh - name: Archive result uses: actions/upload-artifact@v4 with: name: go-result path: | ./go_coverage.txt ./lcov_output.info *.info *.out integration-test: name: Integration Test needs: Build runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false matrix: ubuntu: [20.04] env: UBUNTU: ${{ matrix.ubuntu }} steps: - name: Download Artifact uses: actions/download-artifact@v4.1.0 with: name: code - name: Download Caches uses: ./.github/actions/cache with: os: 'ubuntu20.04' kind: 'go' - name: Start Service shell: bash run: | docker-compose up -d pulsar etcd minio - name: IntegrationTest run: | chmod +x build/builder.sh chmod +x scripts/run_intergration_test.sh ./build/builder.sh /bin/bash -c ./scripts/run_intergration_test.sh - name: Archive result uses: actions/upload-artifact@v4 with: name: it-result path: | ./it_coverage.txt *.info *.out codecov: name: Upload Code Coverage needs: [UT-Cpp, UT-Go, integration-test] runs-on: ubuntu-latest timeout-minutes: 5 steps: - name: Download Cpp code coverage results uses: actions/download-artifact@v4.1.0 with: name: cpp-result - name: Download Go code coverage results uses: actions/download-artifact@v4.1.0 with: name: go-result - name: Download Integration Test coverage results uses: actions/download-artifact@v4.1.0 with: name: it-result - name: Display structure of code coverage results run: | ls -lah - name: Upload coverage to Codecov if: "github.repository == 'milvus-io/milvus'" uses: codecov/codecov-action@v3.1.1 id: upload_cov with: token: ${{ secrets.CODECOV_TOKEN }} files: ./go_coverage.txt,./lcov_output.info,./it_coverage.txt name: ubuntu-20.04-unittests fail_ci_if_error: true - name: Retry Upload coverage to Codecov if: "${{ failure() }} && github.repository == 'milvus-io/milvus'" uses: codecov/codecov-action@v3.1.1 id: retry_upload_cov with: token: ${{ secrets.CODECOV_TOKEN }} files: ./go_coverage.txt,./lcov_output.info,./it_coverage.txt name: ubuntu-${{ matrix.ubuntu }}-unittests fail_ci_if_error: true