name: Test suite on: workflow_dispatch: pull_request: types: - opened - reopened - synchronize push: branches: - main tags-ignore: - "*" env: CARGO_TERM_COLOR: always CARGO_UNSTABLE_SPARSE_REGISTRY: "true" concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} cancel-in-progress: true jobs: test: strategy: fail-fast: false matrix: platform: - macos - ubuntu - windows name: Test ${{ matrix.platform }} runs-on: "${{ matrix.platform }}-latest" steps: - uses: actions/checkout@v4 - name: Configure toolchain run: | rustup toolchain install --profile minimal --no-self-update stable rustup default stable # https://github.com/actions/cache/issues/752 - if: ${{ runner.os == 'Windows' }} name: Use GNU tar shell: cmd run: | echo "Adding GNU tar to PATH" echo C:\Program Files\Git\usr\bin>>"%GITHUB_PATH%" - name: Cargo caching uses: actions/cache@v4 with: path: | ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ key: ${{ runner.os }}-cargo-stable-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo-stable- ${{ runner.os }}-cargo- - name: Compilation caching uses: actions/cache@v4 with: path: target/ key: ${{ runner.os }}-target-stable-${{ hashFiles('**/Cargo.lock') }} - name: Run test suite run: cargo test - name: Run watchexec-events integration tests run: cargo test -p watchexec-events -F serde - name: Check that CLI runs run: cargo run -p watchexec-cli -- -1 echo - name: Install coreutils on mac if: ${{ matrix.platform == 'macos' }} run: brew install coreutils - name: Run watchexec integration tests (unix) if: ${{ matrix.platform != 'windows' }} run: crates/cli/run-tests.sh shell: bash env: WATCHEXEC_BIN: target/debug/watchexec - name: Run bosion integration tests run: ./run-tests.sh working-directory: crates/bosion shell: bash - name: Generate manpage run: cargo run -p watchexec-cli -- --manual > doc/watchexec.1 - name: Check that manpage is up to date run: git diff --exit-code -- doc/ - name: Generate completions run: bin/completions - name: Check that completions are up to date run: git diff --exit-code -- completions/ cross-checks: name: Checks only against select targets runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Configure toolchain run: | rustup toolchain install --profile minimal --no-self-update stable rustup default stable sudo apt-get install -y musl-tools rustup target add x86_64-unknown-linux-musl - name: Install cross uses: taiki-e/install-action@v2 with: tool: cross - name: Cargo caching uses: actions/cache@v4 with: path: | ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ key: ${{ runner.os }}-cargo-stable-${{ hashFiles('**/Cargo.lock') }} restore-keys: | ${{ runner.os }}-cargo-stable- ${{ runner.os }}-cargo- - run: cargo check --target x86_64-unknown-linux-musl - run: cross check --target x86_64-unknown-freebsd - run: cross check --target x86_64-unknown-netbsd tests-pass: if: always() name: Tests pass needs: - test - cross-checks runs-on: ubuntu-latest steps: - uses: re-actors/alls-green@release/v1 with: jobs: ${{ toJSON(needs) }}