name: CI on: [push, pull_request] env: CARGO_TERM_COLOR: always jobs: test: name: "${{ matrix.platform.name }} ${{ matrix.test.name }} (${{ matrix.platform.toolchain }})" strategy: fail-fast: false matrix: platform: - { name: Linux, distro: ubuntu-latest, toolchain: stable } - { name: Windows, distro: windows-latest, toolchain: stable } - { name: macOS, distro: macOS-latest, toolchain: stable } - { name: Linux, distro: ubuntu-latest, toolchain: nightly } test: - { name: Debug, flag: } - { name: Contrib, flag: "--contrib" } - { name: Examples, flag: "--examples" } include: - platform: { name: Linux, distro: ubuntu-latest, toolchain: stable } test: { name: Core, flag: "--core" } - platform: { name: Linux, distro: ubuntu-latest, toolchain: stable } test: { name: Release, flag: "--release" } continue-on-error: ${{ matrix.platform.toolchain == 'nightly' }} runs-on: ${{ matrix.platform.distro }} steps: - name: Checkout Sources uses: actions/checkout@v2 - name: Install Native Dependencies (macOS) if: matrix.platform.name == 'macOS' run: | brew install mysql-client libpq sqlite coreutils echo "/usr/local/opt/mysql-client/bin" >> "$GITHUB_PATH" # vcpkg --triplet x64-windows install libmysql libpq sqlite3 openssl # + vcpkg/installed/vcpkg (in particular, the status file) - name: Install Native Dependencies (Windows) if: matrix.platform.name == 'Windows' run: | curl -fsS -o vcpkg.7z https://rocket.rs/static/vcpkg-2019-07-05.7z 7z x vcpkg.7z -y -bb0 xcopy .\vcpkg $env:VCPKG_INSTALLATION_ROOT /s /e /h /y /q vcpkg integrate install echo "VCPKGRS_DYNAMIC=1" >> "$env:GITHUB_ENV" echo "VCPKG_ROOT=$env:VCPKG_INSTALLATION_ROOT" >> "$env:GITHUB_ENV" echo "$env:VCPKG_INSTALLATION_ROOT\installed\x64-windows\lib" >> "$env:GITHUB_PATH" - name: Install Native Dependencies (Linux) if: matrix.platform.name == 'Linux' run: | sudo apt-get update sudo apt-get install -y libmysqlclient-dev libpq-dev libsqlite3-dev - name: Install Rust uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: ${{ matrix.platform.toolchain }} override: true - name: Cache Example Workspace if: matrix.test.name == 'Examples' uses: Swatinem/rust-cache@v1 with: working-directory: "examples" - name: Cache Root Workspace if: matrix.test.name != 'Examples' uses: Swatinem/rust-cache@v1 with: key: ${{ matrix.test.name }} - name: Run Tests run: ./scripts/test.sh ${{ matrix.test.flag }} shell: bash