diff --git a/.github/workflows/build-and-test-packages-above-differential.yaml b/.github/workflows/build-and-test-packages-above-differential.yaml new file mode 100644 index 0000000000000..7af11ac5b7e9a --- /dev/null +++ b/.github/workflows/build-and-test-packages-above-differential.yaml @@ -0,0 +1,149 @@ +name: build-and-test-packages-above-differential + +on: + workflow_call: + inputs: + container: + required: true + type: string + runner: + default: ubuntu-24.04 + required: false + type: string + rosdistro: + default: humble + required: false + type: string + run-condition: + default: true + required: false + type: boolean + container-suffix: + required: false + default: "" + type: string + build-pre-command: + required: false + default: "" + type: string + secrets: + codecov-token: + required: true + +env: + CC: /usr/lib/ccache/gcc + CXX: /usr/lib/ccache/g++ + +jobs: + build-and-test-packages-above-differential: + if: ${{ inputs.run-condition }} + runs-on: ${{ inputs.runner }} + container: ${{ inputs.container }}${{ inputs.container-suffix }} + steps: + - name: Set PR fetch depth + run: echo "PR_FETCH_DEPTH=$(( ${{ github.event.pull_request.commits }} + 1 ))" >> "${GITHUB_ENV}" + shell: bash + + - name: Checkout PR branch and all PR commits + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + fetch-depth: ${{ env.PR_FETCH_DEPTH }} + + - name: Show disk space before the tasks + run: df -h + shell: bash + + - name: Show machine specs + run: lscpu && free -h + shell: bash + + - name: Remove exec_depend + uses: autowarefoundation/autoware-github-actions/remove-exec-depend@v1 + + - name: Get modified packages + id: get-modified-packages + uses: autowarefoundation/autoware-github-actions/get-modified-packages@v1 + + - name: Create ccache directory + run: | + mkdir -p ${CCACHE_DIR} + du -sh ${CCACHE_DIR} && ccache -s + shell: bash + + - name: Attempt to restore ccache + uses: actions/cache/restore@v4 + with: + path: | + /root/.ccache + key: ccache-main-${{ runner.arch }}-${{ inputs.rosdistro }}-${{ github.event.pull_request.base.sha }} + restore-keys: | + ccache-main-${{ runner.arch }}-${{ inputs.rosdistro }}- + + - name: Show ccache stats before build and reset stats + run: | + du -sh ${CCACHE_DIR} && ccache -s + ccache --zero-stats + shell: bash + + - name: Export CUDA state as a variable for adding to cache key + run: | + build_type_cuda_state=nocuda + if [[ "${{ inputs.container-suffix }}" == "-cuda" ]]; then + build_type_cuda_state=cuda + fi + echo "BUILD_TYPE_CUDA_STATE=$build_type_cuda_state" >> "${GITHUB_ENV}" + echo "::notice::BUILD_TYPE_CUDA_STATE=$build_type_cuda_state" + shell: bash + + - name: Prepare build_depends.repos file (main branch) + if: ${{ github.event.pull_request.base.ref == 'main' }} + uses: ./.github/actions/combine-repos-action + with: + base_file: build_depends_humble.repos + overlay_file: build_depends_nightly.repos + output_file: build_depends.repos + + - name: Prepare build_depends.repos file (humble branch) + if: ${{ github.event.pull_request.base.ref == 'humble' }} + run: cp build_depends_humble.repos build_depends.repos + shell: bash + + - name: Build + if: ${{ steps.get-modified-packages.outputs.modified-packages != '' }} + uses: autowarefoundation/autoware-github-actions/colcon-build@v1 + with: + rosdistro: ${{ inputs.rosdistro }} + target-packages: ${{ steps.get-modified-packages.outputs.modified-packages }} + build-depends-repos: build_depends.repos + packages-above-repos: packages_above.repos + cache-key-element: ${{ env.BUILD_TYPE_CUDA_STATE }} + build-pre-command: ${{ inputs.build-pre-command }} + + - name: Show ccache stats after build + run: du -sh ${CCACHE_DIR} && ccache -s + shell: bash + + - name: Test + id: test + if: ${{ steps.get-modified-packages.outputs.modified-packages != '' }} + uses: autowarefoundation/autoware-github-actions/colcon-test@v1 + with: + rosdistro: ${{ inputs.rosdistro }} + target-packages: ${{ steps.get-modified-packages.outputs.modified-packages }} + build-depends-repos: build_depends.repos + packages-above-repos: packages_above.repos + + - name: Upload coverage to CodeCov + if: ${{ steps.test.outputs.coverage-report-files != '' }} + uses: codecov/codecov-action@v4 + with: + files: ${{ steps.test.outputs.coverage-report-files }} + fail_ci_if_error: false + verbose: true + flags: differential${{ inputs.container-suffix }} + token: ${{ secrets.codecov-token }} + + - name: Show disk space after the tasks + run: df -h + shell: bash diff --git a/.github/workflows/build-test-tidy-pr.yaml b/.github/workflows/build-test-tidy-pr.yaml index 90dfc2083118e..1a97f5d205580 100644 --- a/.github/workflows/build-test-tidy-pr.yaml +++ b/.github/workflows/build-test-tidy-pr.yaml @@ -50,6 +50,17 @@ jobs: secrets: codecov-token: ${{ secrets.CODECOV_TOKEN }} + build-and-test-packages-above-differential: + if: ${{ always() }} + needs: + - require-label + uses: ./.github/workflows/build-and-test-packages-above-differential.yaml + with: + container: ghcr.io/autowarefoundation/autoware:universe-devel + run-condition: ${{ needs.require-label.outputs.result == 'true' }} + secrets: + codecov-token: ${{ secrets.CODECOV_TOKEN }} + build-and-test-differential-cuda: if: ${{ always() }} needs: check-if-cuda-job-is-needed diff --git a/packages_above.repos b/packages_above.repos new file mode 100644 index 0000000000000..5a6f8852889df --- /dev/null +++ b/packages_above.repos @@ -0,0 +1,5 @@ +repositories: + tools/autoware_tools: + type: git + url: https://github.com/autowarefoundation/autoware_tools.git + version: main