| name: Clippy Test (bors) |
| |
| on: |
| push: |
| branches: |
| - auto |
| - try |
| |
| env: |
| RUST_BACKTRACE: 1 |
| CARGO_TARGET_DIR: '${{ github.workspace }}/target' |
| NO_FMT_TEST: 1 |
| |
| jobs: |
| changelog: |
| runs-on: ubuntu-latest |
| |
| steps: |
| - uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master |
| with: |
| github_token: "${{ secrets.github_token }}" |
| - name: Checkout |
| uses: actions/checkout@v2.0.0 |
| with: |
| ref: ${{ github.ref }} |
| |
| # Run |
| - name: Check Changelog |
| run: | |
| MESSAGE=$(git log --format=%B -n 1) |
| PR=$(echo "$MESSAGE" | grep -o "#[0-9]*" | head -1 | sed -e 's/^#//') |
| output=$(curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -s "https://api.github.com/repos/rust-lang/rust-clippy/pulls/$PR" | \ |
| python -c "import sys, json; print(json.load(sys.stdin)['body'])" | \ |
| grep "^changelog: " | \ |
| sed "s/changelog: //g") |
| if [[ -z "$output" ]]; then |
| echo "ERROR: PR body must contain 'changelog: ...'" |
| exit 1 |
| elif [[ "$output" = "none" ]]; then |
| echo "WARNING: changelog is 'none'" |
| fi |
| env: |
| PYTHONIOENCODING: 'utf-8' |
| base: |
| needs: changelog |
| strategy: |
| matrix: |
| os: [ubuntu-latest, windows-latest, macos-latest] |
| host: [x86_64-unknown-linux-gnu, i686-unknown-linux-gnu, x86_64-apple-darwin, x86_64-pc-windows-msvc] |
| exclude: |
| - os: ubuntu-latest |
| host: x86_64-apple-darwin |
| - os: ubuntu-latest |
| host: x86_64-pc-windows-msvc |
| - os: macos-latest |
| host: x86_64-unknown-linux-gnu |
| - os: macos-latest |
| host: i686-unknown-linux-gnu |
| - os: macos-latest |
| host: x86_64-pc-windows-msvc |
| - os: windows-latest |
| host: x86_64-unknown-linux-gnu |
| - os: windows-latest |
| host: i686-unknown-linux-gnu |
| - os: windows-latest |
| host: x86_64-apple-darwin |
| |
| runs-on: ${{ matrix.os }} |
| |
| steps: |
| # Setup |
| - uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master |
| with: |
| github_token: "${{ secrets.github_token }}" |
| |
| - name: Install dependencies (Linux-i686) |
| run: | |
| sudo dpkg --add-architecture i386 |
| sudo apt-get update |
| sudo apt-get install gcc-multilib libssl-dev:i386 libgit2-dev:i386 |
| if: matrix.host == 'i686-unknown-linux-gnu' |
| |
| - name: rust-toolchain |
| uses: actions-rs/toolchain@v1.0.3 |
| with: |
| toolchain: nightly |
| target: ${{ matrix.host }} |
| profile: minimal |
| |
| - name: Checkout |
| uses: actions/checkout@v2.0.0 |
| |
| - name: Run cargo update |
| run: cargo update |
| |
| - name: Cache cargo dir |
| uses: actions/cache@v1 |
| with: |
| path: ~/.cargo |
| key: ${{ runner.os }}-${{ matrix.host }}-${{ hashFiles('Cargo.lock') }} |
| restore-keys: | |
| ${{ runner.os }}-${{ matrix.host }} |
| |
| - name: Master Toolchain Setup |
| run: bash setup-toolchain.sh |
| env: |
| HOST_TOOLCHAIN: ${{ matrix.host }} |
| shell: bash |
| |
| # Run |
| - name: Set LD_LIBRARY_PATH (Linux) |
| if: runner.os == 'Linux' |
| run: | |
| SYSROOT=$(rustc --print sysroot) |
| echo "::set-env name=LD_LIBRARY_PATH::${SYSROOT}/lib${LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}}" |
| - name: Link rustc dylib (MacOS) |
| if: runner.os == 'macOS' |
| run: | |
| SYSROOT=$(rustc --print sysroot) |
| sudo mkdir -p /usr/local/lib |
| sudo find "${SYSROOT}/lib" -maxdepth 1 -name '*dylib' -exec ln -s {} /usr/local/lib \; |
| - name: Set PATH (Windows) |
| if: runner.os == 'Windows' |
| run: | |
| $sysroot = rustc --print sysroot |
| $env:PATH += ';' + $sysroot + '\bin' |
| echo "::set-env name=PATH::$env:PATH" |
| |
| - name: Build |
| run: cargo build --features deny-warnings |
| shell: bash |
| |
| - name: Test |
| run: cargo test --features deny-warnings |
| shell: bash |
| |
| - name: Test clippy_lints |
| run: cargo test --features deny-warnings |
| shell: bash |
| working-directory: clippy_lints |
| |
| - name: Test rustc_tools_util |
| run: cargo test --features deny-warnings |
| shell: bash |
| working-directory: rustc_tools_util |
| |
| - name: Test clippy_dev |
| run: cargo test --features deny-warnings |
| shell: bash |
| working-directory: clippy_dev |
| |
| - name: Test cargo-clippy |
| run: ../target/debug/cargo-clippy |
| shell: bash |
| working-directory: clippy_workspace_tests |
| |
| - name: Test clippy-driver |
| run: bash .github/driver.sh |
| shell: bash |
| env: |
| OS: ${{ runner.os }} |
| |
| # Cleanup |
| - name: Run cargo-cache --autoclean |
| run: | |
| cargo +nightly install cargo-cache --no-default-features --features ci-autoclean cargo-cache |
| cargo cache |
| shell: bash |
| integration_build: |
| needs: changelog |
| runs-on: ubuntu-latest |
| |
| steps: |
| # Setup |
| - uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master |
| with: |
| github_token: "${{ secrets.github_token }}" |
| |
| - name: rust-toolchain |
| uses: actions-rs/toolchain@v1.0.3 |
| with: |
| toolchain: nightly |
| target: x86_64-unknown-linux-gnu |
| profile: minimal |
| |
| - name: Checkout |
| uses: actions/checkout@v2.0.0 |
| |
| - name: Run cargo update |
| run: cargo update |
| |
| - name: Cache cargo dir |
| uses: actions/cache@v1 |
| with: |
| path: ~/.cargo |
| key: ${{ runner.os }}-x86_64-unknown-linux-gnu-${{ hashFiles('Cargo.lock') }} |
| restore-keys: | |
| ${{ runner.os }}-x86_64-unknown-linux-gnu |
| |
| - name: Master Toolchain Setup |
| run: bash setup-toolchain.sh |
| |
| # Run |
| - name: Build Integration Test |
| run: cargo test --test integration --features integration --no-run |
| |
| # Upload |
| - name: Extract Binaries |
| run: | |
| DIR=$CARGO_TARGET_DIR/debug |
| find $DIR ! -executable -o -type d ! -path $DIR | xargs rm -rf |
| mv $DIR/integration-* $DIR/integration |
| rm -rf $CARGO_TARGET_DIR/release |
| |
| - name: Upload Binaries |
| uses: actions/upload-artifact@v1 |
| with: |
| name: target |
| path: target |
| |
| # Cleanup |
| - name: Run cargo-cache --autoclean |
| run: | |
| cargo +nightly install cargo-cache --no-default-features --features ci-autoclean cargo-cache |
| cargo cache |
| integration: |
| needs: integration_build |
| strategy: |
| fail-fast: false |
| max-parallel: 6 |
| matrix: |
| integration: |
| - 'rust-lang/cargo' |
| - 'rust-lang/rls' |
| - 'rust-lang/chalk' |
| - 'rust-lang/rustfmt' |
| - 'Marwes/combine' |
| - 'Geal/nom' |
| - 'rust-lang/stdarch' |
| - 'serde-rs/serde' |
| - 'chronotope/chrono' |
| - 'hyperium/hyper' |
| - 'rust-random/rand' |
| - 'rust-lang/futures-rs' |
| - 'rust-itertools/itertools' |
| - 'rust-lang-nursery/failure' |
| - 'rust-lang/log' |
| |
| runs-on: ubuntu-latest |
| |
| steps: |
| # Setup |
| - uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master |
| with: |
| github_token: "${{ secrets.github_token }}" |
| |
| - name: rust-toolchain |
| uses: actions-rs/toolchain@v1.0.3 |
| with: |
| toolchain: nightly |
| target: x86_64-unknown-linux-gnu |
| profile: minimal |
| |
| - name: Checkout |
| uses: actions/checkout@v2.0.0 |
| |
| - name: Run cargo update |
| run: cargo update |
| |
| - name: Cache cargo dir |
| uses: actions/cache@v1 |
| with: |
| path: ~/.cargo |
| key: ${{ runner.os }}-x86_64-unknown-linux-gnu-${{ hashFiles('Cargo.lock') }} |
| restore-keys: | |
| ${{ runner.os }}-x86_64-unknown-linux-gnu |
| |
| - name: Master Toolchain Setup |
| run: bash setup-toolchain.sh |
| |
| # Download |
| - name: Download target dir |
| uses: actions/download-artifact@v1 |
| with: |
| name: target |
| path: target |
| |
| - name: Make Binaries Executable |
| run: chmod +x $CARGO_TARGET_DIR/debug/* |
| |
| # Run |
| - name: Test ${{ matrix.integration }} |
| run: $CARGO_TARGET_DIR/debug/integration |
| env: |
| INTEGRATION: ${{ matrix.integration }} |
| RUSTUP_TOOLCHAIN: master |
| |
| # Cleanup |
| - name: Run cargo-cache --autoclean |
| run: | |
| cargo +nightly install cargo-cache --no-default-features --features ci-autoclean cargo-cache |
| cargo cache |
| |
| # These jobs doesn't actually test anything, but they're only used to tell |
| # bors the build completed, as there is no practical way to detect when a |
| # workflow is successful listening to webhooks only. |
| # |
| # ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB! |
| |
| end-success: |
| name: bors test finished |
| if: github.event.pusher.name == 'bors' && success() |
| runs-on: ubuntu-latest |
| needs: [base, integration] |
| |
| steps: |
| - name: Mark the job as successful |
| run: exit 0 |
| |
| end-failure: |
| name: bors test finished |
| if: github.event.pusher.name == 'bors' && (failure() || cancelled()) |
| runs-on: ubuntu-latest |
| needs: [base, integration] |
| |
| steps: |
| - name: Mark the job as a failure |
| run: exit 1 |