From 667502e8da0ef8bc06c10f62684c76debae4cf50 Mon Sep 17 00:00:00 2001 From: Antoine Stevan <44101798+amtoine@users.noreply.github.com> Date: Sat, 8 Jul 2023 12:48:01 +0200 Subject: [PATCH] refactor the CI (#9626) # Description this PR is an attempt at making the main CI workflow a bit easier to read, understand and work with :crossed_fingers: ## changelog - remove the deprecated `nu-coverage` job which was taking place for nothing - remove useless comments, i.e. comments that just say the same thing as the line they comment, e.g. the previous `on.push` comment, and comments that can be explained with a `git blame` inside an IDE, e.g. the comment about removing `--profile ci` on the `cargo install` in the std job - rename `nu-fmt-clippy` and `nu-tests` to `fmt-clippy` and `tests` as we already know we are working with Nushell - rename the "*style*" to "*feature*" which is exactly what `default`, `dataframe` and `extra` are - remove the `strategy.matrix.rust: stable` key: i couldn't find any documentation for this and it's not used in the jobs => by default, the toolchain of `actions-rust-lang/setup-rust-toolchain@v1.5.0` is the stable one (see the [documentation](https://github.com/actions-rust-lang/setup-rust-toolchain#inputs)) - add a top-level `env` block with all the environment variables, e.g. `CLIPPY_OPTIONS`, to have them all in one place hope you'll like that :innocent: :pray: # User-Facing Changes # Tests + Formatting this PR should not change the different jobs being run in PRs and on the `main` branch. # After Submitting --- .github/workflows/ci.yml | 127 ++++++++------------------------------- 1 file changed, 26 insertions(+), 101 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3d66e74350..d29a66c67b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,13 +1,18 @@ on: pull_request: - push: # Run CI on the main branch after every merge. This is important to fill the GitHub Actions cache in a way that pull requests can see it + push: branches: - main name: continuous-integration +env: + NUSHELL_CARGO_TARGET: ci + NU_LOG_LEVEL: DEBUG + CLIPPY_OPTIONS: "-D warnings -D clippy::unwrap_used -A clippy::needless_collect -A clippy::result_large_err" + jobs: - nu-fmt-clippy: + fmt-clippy: strategy: fail-fast: true matrix: @@ -15,28 +20,21 @@ jobs: # builds to link against a too-new-for-many-Linux-installs glibc version. Consider # revisiting this when 20.04 is closer to EOL (April 2025) platform: [windows-latest, macos-latest, ubuntu-20.04] - style: [default, dataframe, extra] - rust: - - stable + feature: [default, dataframe, extra] include: - - style: default + - feature: default flags: "" - - style: dataframe - flags: "--features=dataframe " - - style: extra - flags: "--features=extra " + - feature: dataframe + flags: "--features=dataframe" + - feature: extra + flags: "--features=extra" exclude: - # only test dataframes on Ubuntu (the fastest platform) - platform: windows-latest - style: dataframe + feature: dataframe - platform: macos-latest - style: dataframe - - + feature: dataframe runs-on: ${{ matrix.platform }} - env: - NUSHELL_CARGO_TARGET: ci steps: - uses: actions/checkout@v3 @@ -50,39 +48,30 @@ jobs: run: cargo fmt --all -- --check - name: Clippy - run: cargo clippy --workspace ${{ matrix.flags }}--exclude nu_plugin_* -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect -A clippy::result_large_err - - nu-tests: - env: - NUSHELL_CARGO_TARGET: ci + run: cargo clippy --workspace ${{ matrix.flags }} --exclude nu_plugin_* -- $CLIPPY_OPTIONS + tests: strategy: fail-fast: true matrix: platform: [windows-latest, macos-latest, ubuntu-20.04] - style: [default, dataframe, extra] - rust: - - stable + feature: [default, dataframe, extra] include: - - style: default + - feature: default flags: "" - - style: dataframe + - feature: dataframe flags: "--features=dataframe" - - style: extra + - feature: extra flags: "--features=extra" - exclude: - # only test dataframes and extra on Ubuntu (the fastest platform) - platform: windows-latest - style: dataframe + feature: dataframe - platform: macos-latest - style: dataframe + feature: dataframe - platform: windows-latest - style: extra + feature: extra - platform: macos-latest - style: extra - - + feature: extra runs-on: ${{ matrix.platform }} @@ -98,15 +87,10 @@ jobs: run: cargo test --workspace --profile ci --exclude nu_plugin_* ${{ matrix.flags }} std-lib-and-python-virtualenv: - env: - NU_LOG_LEVEL: DEBUG - strategy: fail-fast: true matrix: platform: [ubuntu-20.04, macos-latest, windows-latest] - rust: - - stable py: - py @@ -121,15 +105,6 @@ jobs: rustflags: "" - name: Install Nushell - # prior to [*standard library: bring the tests into the main CI*](#8525) - # there was a `--profile ci` here in the `cargo install`, as well as - # `NUSHELL_CARGO_TARGET: ci` in the prelude above. - # - # this caused a "stackoverflow" error in the CI on windows, - # see [this failing job](https://github.com/nushell/nushell/actions/runs/4512034615/jobs/7944945590) - # - # the CI profile has been removed in 00b820de9021227d1910a9ea388297ee7aee308e - # as part of #8525. run: cargo install --path . --locked --no-default-features - name: Standard library tests @@ -142,7 +117,6 @@ jobs: - run: python -m pip install tox - # Get only the latest tagged version for stability reasons - name: Install virtualenv run: git clone https://github.com/pypa/virtualenv.git shell: bash @@ -158,18 +132,11 @@ jobs: tox -e ${{ matrix.py }} -- -k nushell shell: bash - # Build+test plugins on their own, without the rest of Nu. This helps with CI parallelization and - # also helps test that the plugins build without any feature unification shenanigans plugins: - env: - NUSHELL_CARGO_TARGET: ci - strategy: fail-fast: true matrix: platform: [windows-latest, macos-latest, ubuntu-20.04] - rust: - - stable runs-on: ${{ matrix.platform }} @@ -182,49 +149,7 @@ jobs: rustflags: "" - name: Clippy - run: cargo clippy --package nu_plugin_* ${{ matrix.flags }} -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect -A clippy::result_large_err + run: cargo clippy --package nu_plugin_* ${{ matrix.flags }} -- $CLIPPY_OPTIONS - name: Tests run: cargo test --profile ci --package nu_plugin_* - - - nu-coverage: - if: false - env: - NUSHELL_CARGO_TARGET: ci - - strategy: - fail-fast: true - matrix: - # disabled mac due to problems with merging coverage and similarity to linux - # disabled windows due to running out of disk space when having too many crates or tests - platform: [ubuntu-20.04] # windows-latest - rust: - - stable - - runs-on: ${{ matrix.platform }} - - steps: - - uses: actions/checkout@v3 - - - name: Setup Rust toolchain and cache - uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 - with: - rustflags: "" - - - name: Install cargo-llvm-cov - uses: taiki-e/install-action@cargo-llvm-cov - - - name: Tests - shell: bash - run: | - source <(cargo llvm-cov show-env --export-prefix) # Set the environment variables needed to get coverage. - cargo llvm-cov clean --workspace # Remove artifacts that may affect the coverage results. - cargo build --workspace --profile ci - cargo test --workspace --profile ci - cargo llvm-cov report --profile ci --lcov --output-path lcov.info - - - name: Upload coverage reports to Codecov with GitHub Action - uses: codecov/codecov-action@v3 - with: - files: lcov.info