diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 0000000..77b7fc4 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,143 @@ +name: Rust + +on: + push: + pull_request: + +env: + CARGO_TERM_COLOR: always + +defaults: + run: + # necessary for windows + shell: bash + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Cargo cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ./target + key: test-cargo-registry + - name: List + run: find ./ + - name: Run tests + run: cargo test --verbose + + build: + strategy: + fail-fast: false + matrix: + # a list of all the targets + include: + - TARGET: x86_64-unknown-linux-gnu # tested in a debian container on a mac + OS: ubuntu-latest + - TARGET: x86_64-unknown-linux-musl # test in an alpine container on a mac + OS: ubuntu-latest + - TARGET: aarch64-unknown-linux-gnu # tested on aws t4g.nano + OS: ubuntu-latest + - TARGET: aarch64-unknown-linux-musl # tested on aws t4g.nano in alpine container + OS: ubuntu-latest + - TARGET: armv7-unknown-linux-gnueabihf # raspberry pi 2-3-4, not tested + OS: ubuntu-latest + - TARGET: armv7-unknown-linux-musleabihf # raspberry pi 2-3-4, not tested + OS: ubuntu-latest + - TARGET: arm-unknown-linux-gnueabihf # raspberry pi 0-1, not tested + OS: ubuntu-latest + - TARGET: arm-unknown-linux-musleabihf # raspberry pi 0-1, not tested + OS: ubuntu-latest + - TARGET: x86_64-apple-darwin # tested on a mac, is not properly signed so there are security warnings + OS: macos-latest + - TARGET: x86_64-pc-windows-msvc # tested on a windows machine + OS: windows-latest + needs: test + runs-on: ${{ matrix.OS }} + env: + NAME: switch # change with the name of your project + TARGET: ${{ matrix.TARGET }} + OS: ${{ matrix.OS }} + steps: + - uses: actions/checkout@v2 + - name: Cargo cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/registry + ./target + key: build-cargo-registry-${{matrix.TARGET}} + - name: List + run: find ./ + - name: Install and configure dependencies + run: | + # dependencies are only needed on ubuntu as that's the only place where + # we make cross-compilation + if [[ $OS =~ ^ubuntu.*$ ]]; then + sudo apt-get install -qq crossbuild-essential-arm64 crossbuild-essential-armhf + fi + + # some additional configuration for cross-compilation on linux + cat >>~/.cargo/config <