diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..126859e --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,128 @@ +name: Mean Bean CI + +on: [push, pull_request] + +jobs: + # This job downloads and stores `cross` as an artifact, so that it can be + # redownloaded across all of the jobs. Currently this copied pasted between + # `ci.yml` and `deploy.yml`. Make sure to update both places when making + # changes. + install-cross: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + with: + depth: 50 + - uses: XAMPPRocky/get-github-release@v1 + id: cross + with: + owner: rust-embedded + repo: cross + matches: ${{ matrix.platform }} + token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/upload-artifact@v1 + with: + name: cross-${{ matrix.platform }} + path: ${{ steps.cross.outputs.install_path }} + strategy: + matrix: + platform: [linux-musl, apple-darwin] + + windows: + runs-on: windows-latest + # Windows technically doesn't need this, but if we don't block windows on it + # some of the windows jobs could fill up the concurrent job queue before + # one of the install-cross jobs has started, so this makes sure all + # artifacts are downloaded first. + needs: install-cross + steps: + - uses: actions/checkout@v2 + with: + depth: 50 + - run: ci/set_rust_version.bash ${{ matrix.channel }} ${{ matrix.target }} + shell: bash + - run: ci/build.bash cargo ${{ matrix.target }} + shell: bash + - run: ci/test.bash cargo ${{ matrix.target }} + shell: bash + + strategy: + fail-fast: true + matrix: + channel: [stable, beta, nightly] + target: + # MSVC + - i686-pc-windows-msvc + - x86_64-pc-windows-msvc + # GNU: You typically only need to test Windows GNU if you're + # specifically targetting it, and it can cause issues with some + # dependencies if you're not so it's disabled by self. + # - i686-pc-windows-gnu + # - x86_64-pc-windows-gnu + + macos: + runs-on: macos-latest + needs: install-cross + steps: + - uses: actions/checkout@v2 + with: + depth: 50 + + - uses: actions/download-artifact@v1 + with: + name: cross-apple-darwin + path: /usr/local/bin/ + + - run: chmod +x /usr/local/bin/cross + + - run: ci/set_rust_version.bash ${{ matrix.channel }} ${{ matrix.target }} + - run: ci/build.bash cross ${{ matrix.target }} + # Only test on macOS platforms since we can't simulate the others. + - run: ci/test.bash cross ${{ matrix.target }} + if: matrix.target == 'x86_64-apple-darwin' + + strategy: + fail-fast: true + matrix: + channel: [stable, beta, nightly] + target: + # macOS + - x86_64-apple-darwin + + linux: + runs-on: ubuntu-latest + needs: install-cross + steps: + - uses: actions/checkout@v2 + with: + depth: 50 + + - name: Download Cross + uses: actions/download-artifact@v1 + with: + name: cross-linux-musl + path: /tmp/ + - run: chmod +x /tmp/cross + - run: ci/set_rust_version.bash ${{ matrix.channel }} ${{ matrix.target }} + - run: ci/build.bash /tmp/cross ${{ matrix.target }} + # These targets have issues with being tested so they are disabled + # by default. You can try disabling to see if they work for + # your project. + - run: ci/test.bash /tmp/cross ${{ matrix.target }} + if: | + !contains(matrix.target, 'android') && + !contains(matrix.target, 'bsd') && + !contains(matrix.target, 'solaris') && + matrix.target != 'armv5te-unknown-linux-musleabi' && + matrix.target != 'sparc64-unknown-linux-gnu' + + strategy: + fail-fast: true + matrix: + channel: [stable, beta, nightly] + target: + # Linux + - aarch64-unknown-linux-gnu + - aarch64-unknown-linux-musl + - x86_64-unknown-linux-gnu + - x86_64-unknown-linux-musl