diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml new file mode 100644 index 00000000..74f9726f --- /dev/null +++ b/.github/workflows/build-and-test.yml @@ -0,0 +1,57 @@ +name: Build and test +on: + pull_request: + push: + branches: + - main +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + rust: [stable, beta, nightly] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: ~/.cargo/registry + key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo index + uses: actions/cache@v4 + with: + path: ~/.cargo/git + key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }} + - name: Cache cargo build + uses: actions/cache@v4 + with: + path: target + key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} + - name: Set up Rust + uses: dtolnay/rust-toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + - name: Install grcov + uses: taiki-e/install-action@v2 + with: + tool: grcov + - name: Add llvm-tools-preview + run: rustup component add llvm-tools-preview + - name: Build and test + run: | + cargo build --verbose + cargo test --verbose + env: + RUSTFLAGS: -Cinstrument-coverage + LLVM_PROFILE_FILE: "%p-%m.profraw" + - name: Generate lcov.info + run: | + grcov . --binary-path ./target/debug/ -s . -t lcov --branch --ignore-not-existing --ignore "/*" -o lcov.info + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v4.0.1 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: lcov.info + \ No newline at end of file diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml deleted file mode 100644 index 49c288de..00000000 --- a/.github/workflows/code-coverage.yml +++ /dev/null @@ -1,59 +0,0 @@ -on: - pull_request: - push: - branches: - - main - -env: - CARGO_TERM_COLOR: always - -name: Test with Code Coverage - -jobs: - test: - name: Test - env: - PROJECT_NAME_UNDERSCORE: topgrade - CARGO_INCREMENTAL: 0 - RUSTFLAGS: -Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort - RUSTDOCFLAGS: -Cpanic=abort - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly - override: true - - name: Cache dependencies - uses: actions/cache@v4 - env: - cache-name: cache-dependencies - with: - path: | - ~/.cargo/.crates.toml - ~/.cargo/.crates2.json - ~/.cargo/bin - ~/.cargo/registry/index - ~/.cargo/registry/cache - target - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Cargo.lock') }} - - name: Generate test result and coverage report - run: | - cargo install cargo2junit grcov; - cargo test $CARGO_OPTIONS -- -Z unstable-options --format json | cargo2junit > results.xml; - zip -0 ccov.zip `find . \( -name "$PROJECT_NAME_UNDERSCORE*.gc*" \) -print`; - grcov ccov.zip -s . -t lcov --llvm --ignore-not-existing --ignore "/*" --ignore "tests/*" -o lcov.info; - - name: Upload test results - uses: EnricoMi/publish-unit-test-result-action@v2 - with: - check_name: Test Results - github_token: ${{ secrets.GITHUB_TOKEN }} - files: results.xml - - name: Upload to CodeCov - uses: codecov/codecov-action@v4 - with: - # required for private repositories: - # token: ${{ secrets.CODECOV_TOKEN }} - files: ./lcov.info - fail_ci_if_error: true diff --git a/.gitignore b/.gitignore index 92561f6c..b5e2a120 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,20 @@ -## Editor +# JetBrains IDEs +.idea/ + +# Visual Studio .vs/ -.vscode -.idea -## Build -/target +# Visual Studio Code +.vscode/ + +# Generic build outputs /build -## Generated by rustfmt +# Specific for some languages like Rust +/target + +# LLVM profiling output +*.profraw + +# Backup files for any .rs files in the project **/*.rs.bk diff --git a/src/steps/os/windows.rs b/src/steps/os/windows.rs index b63260be..b480112e 100644 --- a/src/steps/os/windows.rs +++ b/src/steps/os/windows.rs @@ -1,4 +1,3 @@ -use std::convert::TryFrom; use std::path::Path; use std::{ffi::OsStr, process::Command};