on: [ push ]

jobs:
  build_ubuntu:
    runs-on: ubuntu-latest
    steps:
    - name: gitconfig
      run: |
        git config --global core.autocrlf input
      #        git config --global core.eol lf
    - name: checkout
      uses: actions/checkout@v3
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        target: x86_64-unknown-linux-gnu
        override: true
        components: rustfmt, clippy

    - name: Set up cargo cache
      uses: Swatinem/rust-cache@v2
      continue-on-error: false
      with:
        key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }}
        shared-key: ${{ runner.os }}-cargo-
        workspaces: |
          rustybits/

    - name: make
      run: make
    - name: selftest
      run: |
        make selftest
        ./zerotier-selftest

  build_macos:
    runs-on: macos-latest
    steps:
    - name: gitconfig
      run: |
        git config --global core.autocrlf input
      #        git config --global core.eol lf
    - name: checkout
      uses: actions/checkout@v3
    - name: Install Rust aarch64
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        target: aarch64-apple-darwin
        override: true
        components: rustfmt, clippy
    - name: Install Rust x86_64
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        target: x86_64-apple-darwin
        override: true
        components: rustfmt, clippy
    - name: Set up cargo cache
      uses: Swatinem/rust-cache@v2
      continue-on-error: false
      with:
        key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }}
        shared-key: ${{ runner.os }}-cargo-
        workspaces: |
          rustybits/

    - name: make
      run: make
    - name: selftest
      run: |
        make selftest
        ./zerotier-selftest

  build_windows:
    runs-on: windows-latest
    steps:
    - name: gitconfig
      run: |
        git config --global core.autocrlf true
      #        git config --global core.eol lf
    - name: checkout
      uses: actions/checkout@v3
    - name: Install Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        target: aarch64-apple-darwin
        override: true
        components: rustfmt, clippy
    - name: Set up cargo cache
      uses: Swatinem/rust-cache@v2
      continue-on-error: false
      with:
        key: ${{ runner.os }}-cargo-${{ hashFiles('rustybits//Cargo.lock') }}
        shared-key: ${{ runner.os }}-cargo-
        workspaces: |
          rustybits/

    - name: setup msbuild
      uses: microsoft/setup-msbuild@v1.1.3
    - name: msbuild
      run: |
        msbuild windows\ZeroTierOne.sln /m /p:Configuration=Release  /property:Platform=x64 /t:ZeroTierOne