refactor: include correct headers for range based algorithms (#548) #1209
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: "CI" | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| # measure against bitrot | |
| # also rotates docker images monthly, by pushing new docker images | |
| # the rotation will happen by renovate | |
| # rotate the images in the middle of the month, | |
| # to avoid duplicate rotations at the beginning of the month, | |
| # as the source docker images are also mostly rotated once a month | |
| schedule: | |
| - cron: "0 0 15 * *" | |
| env: | |
| BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
| concurrency: | |
| # On main, we want all builds to complete even if merging happens faster to make it easier to discover at which point something broke. | |
| group: ${{ github.ref == 'refs/heads/main' && format('ci-main-{0}', github.sha) || format('ci-{0}', github.ref) }} | |
| cancel-in-progress: true | |
| jobs: | |
| changes: | |
| name: "π Detect Changes" | |
| runs-on: ubuntu-slim | |
| outputs: | |
| branch: ${{ steps.branch.outputs.branch }} | |
| clang-format: ${{ steps.filter.outputs.clang-format }} | |
| cmake: ${{ steps.filter.outputs.cmake }} | |
| cppcheck: ${{ steps.filter.outputs.cppcheck }} | |
| code: ${{ steps.filter.outputs.code }} | |
| docker: ${{ steps.filter.outputs.docker }} | |
| tests: ${{ steps.filter.outputs.tests }} | |
| steps: | |
| - name: π Checkout | |
| uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 | |
| - name: π Check for changes | |
| uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
| id: filter | |
| with: | |
| filters: | | |
| docker: | |
| - '.github/docker/**' | |
| code: | |
| - '.clang-tidy' | |
| - '.github/workflows/build-and-test-reusable.yml' | |
| - '.github/workflows/static-analysis-reusable.yml' | |
| - 'cmake/**' | |
| - 'source/**/*.hpp' | |
| - 'source/**/*.cpp' | |
| cmake: | |
| - '**/CMakeLists.txt' | |
| - '**/*.cmake' | |
| - '.gersemirc' | |
| clang-format: | |
| - '.clang-format' | |
| cppcheck: | |
| - 'cppcheck/**' | |
| tests: | |
| - 'test/**' | |
| - name: Output branch name | |
| id: branch | |
| run: | | |
| echo "branch=${{ env.BRANCH_NAME }}" >> $GITHUB_OUTPUT | |
| typos: | |
| name: π Check typos | |
| if: always() | |
| uses: hrzlgnm/actions/.github/workflows/typos-reusable.yml@815317ed5e6366a56c5a8abeb20493f92ae0084d # v1.5.6 | |
| clang-format: | |
| name: π Check code format | |
| needs: changes | |
| if: needs.changes.outputs.code == 'true' || needs.changes.outputs.clang-format == 'true' | |
| uses: hrzlgnm/actions/.github/workflows/clang-format-reusable.yml@815317ed5e6366a56c5a8abeb20493f92ae0084d # v1.5.6 | |
| gersemi: | |
| name: π Check CMake format | |
| needs: changes | |
| if: needs.changes.outputs.cmake == 'true' | |
| uses: hrzlgnm/actions/.github/workflows/gersemi-reusable.yml@815317ed5e6366a56c5a8abeb20493f92ae0084d # v1.5.6 | |
| cppcheck: | |
| name: ππCppcheck | |
| needs: changes | |
| if: needs.changes.outputs.code == 'true' || needs.changes.outputs.cppcheck == 'true' | |
| uses: hrzlgnm/actions/.github/workflows/cppcheck-reusable.yml@815317ed5e6366a56c5a8abeb20493f92ae0084d # v1.5.6 | |
| build-and-test: | |
| name: Build and Test | |
| permissions: | |
| checks: write # required for action-junit-report annotation | |
| needs: changes | |
| if: needs.changes.outputs.code == 'true' || needs.changes.outputs.tests == 'true' || needs.changes.outputs.cmake == 'true' | |
| uses: ./.github/workflows/build-and-test-reusable.yml | |
| docker: | |
| name: "π³" | |
| needs: changes | |
| if: needs.changes.outputs.docker == 'true' | |
| permissions: | |
| contents: read | |
| packages: write # Needed to push to GHCR | |
| uses: hrzlgnm/actions/.github/workflows/docker-reusable.yml@815317ed5e6366a56c5a8abeb20493f92ae0084d # v1.5.6 | |
| with: | |
| branch: ${{ needs.changes.outputs.branch }} | |
| static-analysis: | |
| name: Static Analysis | |
| needs: changes | |
| if: needs.changes.outputs.code == 'true' || needs.changes.outputs.tests == 'true' || needs.changes.outptus.cppcheck == 'true' | |
| uses: ./.github/workflows/static-analysis-reusable.yml | |
| all-required-green: # This job does nothing and is only used for the branch protection | |
| name: CI Status | |
| runs-on: ubuntu-latest | |
| needs: | |
| - build-and-test | |
| - clang-format | |
| - cppcheck | |
| - docker | |
| - gersemi | |
| - static-analysis | |
| - typos | |
| if: always() | |
| steps: | |
| - name: Check whether the needed jobs succeeded or failed | |
| uses: re-actors/alls-green@2765efec08f0fd63e83ad900f5fd75646be69ff6 | |
| with: | |
| allowed-skips: >- | |
| build-and-test, | |
| clang-format, | |
| cppcheck, | |
| docker, | |
| gersemi, | |
| static-analysis | |
| jobs: ${{ toJSON(needs) }} |