diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index bc62670f..bf392dc5 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,32 +1,58 @@ -name: CI +--- +name: "CI" -on: [push, pull_request] +on: + push: + branches: + # Do not trigger on tags + # https://stackoverflow.com/questions/68573888/how-can-i-not-execute-a-github-action-when-i-push-a-new-tag + "**" + pull_request: jobs: - ci: - runs-on: ${{ matrix.type.os }} - name: ${{ matrix.type.target }} (${{ matrix.type.os }}) - strategy: - matrix: - type: - - { os: windows-latest, target: x86_64-pc-windows-gnu } - - { os: ubuntu-latest, target: x86_64-unknown-linux-gnu } + analyse_changes: + if: always() + runs-on: ubuntu-latest + outputs: + robotmk_yaml_changed: ${{ steps.filter.outputs.robotmk_yaml }} + rcc_yaml_changed: ${{ steps.filter.outputs.rcc_yaml }} steps: - uses: actions/checkout@v4 - - - uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + - uses: dorny/paths-filter@v2 + id: filter with: - components: rustfmt, clippy - target: ${{ matrix.type.target }} - - - run: cargo fmt -- --check - working-directory: ${{ github.workspace }}/v2/robotmk/ + filters: | + robotmk_yaml: + - '.github/workflows/robotmk.yaml' + rcc_yaml: + - '.github/workflows/rcc.yaml' - - run: cargo test --all-targets --target ${{ matrix.type.target }} - working-directory: ${{ github.workspace }}/v2/robotmk/ + tests: + if: always() + uses: ./.github/workflows/tests.yaml - - run: cargo clippy --all-targets --target ${{ matrix.type.target }} -- --deny warnings - working-directory: ${{ github.workspace }}/v2/robotmk/ + build_robotmk: + needs: + - analyse_changes + if: ${{ needs.analyse_changes.outputs.robotmk_yaml_changed == 'true' }} + uses: ./.github/workflows/robotmk_build.yaml + + rcc: + needs: + - analyse_changes + if: ${{ needs.analyse_changes.outputs.rcc_yaml_changed == 'true' }} + uses: ./.github/workflows/rcc.yaml - - run: cargo build --target ${{ matrix.type.target }} - working-directory: ${{ github.workspace }}/v2/robotmk/ + check_success: + if: always() + runs-on: Ubuntu-latest + needs: + - tests + - build_robotmk + - rcc + steps: + - name: Decide whether the needed jobs succeeded or failed + uses: re-actors/alls-green@release/v1 + with: + allowed-skips: build_robotmk, rcc + jobs: ${{ toJSON(needs) }} diff --git a/.github/workflows/rcc.yaml b/.github/workflows/rcc.yaml index 9d8ec6f4..5ccae8c9 100644 --- a/.github/workflows/rcc.yaml +++ b/.github/workflows/rcc.yaml @@ -2,12 +2,6 @@ name: "RCC" on: - push: - paths: - - .github/workflows/rcc.yaml - pull_request: - paths: - - .github/workflows/rcc.yaml workflow_call: {} jobs: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index a21059f5..a8ccd7e6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -1,22 +1,18 @@ --- name: "Upload all artifacts" + on: push: - paths: - - .github/workflows/release.yaml - - .github/workflows/rcc.yaml - - .github/workflows/robotmk.yaml - pull_request: - paths: - - .github/workflows/release.yaml - - .github/workflows/rcc.yaml - - .github/workflows/robotmk.yaml + tags: + "**" jobs: + tests: + uses: ./.github/workflows/tests.yaml build_rcc: uses: ./.github/workflows/rcc.yaml build_robotmk: - uses: ./.github/workflows/robotmk.yaml + uses: ./.github/workflows/robotmk_build.yaml release: runs-on: ubuntu-latest needs: [build_rcc, build_robotmk] diff --git a/.github/workflows/robotmk.yaml b/.github/workflows/robotmk_build.yaml similarity index 83% rename from .github/workflows/robotmk.yaml rename to .github/workflows/robotmk_build.yaml index 1b7ce68f..98dc9c4c 100644 --- a/.github/workflows/robotmk.yaml +++ b/.github/workflows/robotmk_build.yaml @@ -1,12 +1,7 @@ --- -name: "Robotmk" +name: "Build Robotmk" + on: - push: - paths: - - .github/workflows/robotmk.yaml - pull_request: - paths: - - .github/workflows/robotmk.yaml workflow_call: {} jobs: diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 00000000..df69a981 --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,33 @@ +name: "Tests" + +on: + workflow_call: {} + +jobs: + ci: + runs-on: ${{ matrix.type.os }} + name: ${{ matrix.type.target }} (${{ matrix.type.os }}) + strategy: + matrix: + type: + - { os: windows-latest, target: x86_64-pc-windows-gnu } + - { os: ubuntu-latest, target: x86_64-unknown-linux-gnu } + steps: + - uses: actions/checkout@v4 + + - uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + with: + components: rustfmt, clippy + target: ${{ matrix.type.target }} + + - run: cargo fmt -- --check + working-directory: ${{ github.workspace }}/v2/robotmk/ + + - run: cargo test --all-targets --target ${{ matrix.type.target }} + working-directory: ${{ github.workspace }}/v2/robotmk/ + + - run: cargo clippy --all-targets --target ${{ matrix.type.target }} -- --deny warnings + working-directory: ${{ github.workspace }}/v2/robotmk/ + + - run: cargo build --target ${{ matrix.type.target }} + working-directory: ${{ github.workspace }}/v2/robotmk/