wlink 0.1.1

WCH-Link flash tool for WCH's RISC-V MCUs(CH32V, CH56X, CH57X, CH58X, CH59X, CH32L103, CH32X035, CH641, CH643)
Documentation
name: Build and Test

on:
  push:
  pull_request:
    branches: [ "main" ]
  workflow_dispatch:
  release:
    types:
      - created
  schedule: # Every day at the 2 P.M. (UTC) we run a scheduled nightly build
    - cron: "0 14 * * *"

env:
  CARGO_TERM_COLOR: always

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  build:
    name: build (${{ matrix.config.arch }})
    strategy:
      matrix:
        config:
          - os: windows-latest
            arch: win-x64
          - os: windows-latest
            arch: win-x86
          - os: ubuntu-latest
            arch: linux-x64
          - os: macos-latest
            arch: macos-arm64
          - os: macos-12
            arch: macos-x64
    runs-on: ${{ matrix.config.os }}

    steps:
    - uses: actions/checkout@v4
    - name: Install libudev for Linux
      if: runner.os == 'Linux'
      run: sudo apt-get update && sudo apt-get install -y libudev-dev
    - name: Set target
      run: |
        if [[ "${{ matrix.config.arch }}" == "win-x86" ]]; then
          echo TARGET="--target i686-pc-windows-msvc" >> $GITHUB_ENV
        else
          echo TARGET="" >> $GITHUB_ENV
        fi
      shell: bash
    - name: Build
      run: cargo build --release ${{ env.TARGET }}
    - name: Run tests
      run: cargo test --release ${{ env.TARGET }} --verbose
    - name: Run help
      run: cargo run --release ${{ env.TARGET }} -- --help

    - name: Prepare artifacts
      run: |
        if [[ "${{ matrix.config.arch }}" == "win-x64" ]]; then
          WLINK_EXE="target/release/wlink.exe"
        elif [[ "${{ matrix.config.arch }}" == "win-x86" ]]; then
          WLINK_EXE="target/i686-pc-windows-msvc/release/wlink.exe"
        else
          WLINK_EXE="target/release/wlink"
        fi

        mkdir wlink-${{ matrix.config.arch }}
        cp $WLINK_EXE wlink-${{ matrix.config.arch }}
        cp README.md wlink-${{ matrix.config.arch }}
      shell: bash
    - uses: actions/upload-artifact@v4
      with:
        name: wlink-${{ matrix.config.arch }}
        path: wlink-${{ matrix.config.arch }}

    - name: Prepare Release Asset
      if: github.event_name == 'release'
      run: |
        if [[ "${{ runner.os }}" == "Windows" ]]; then
          7z a -tzip wlink-${{ github.event.release.tag_name }}-${{ matrix.config.arch }}.zip wlink-${{ matrix.config.arch }}
        else
          tar -czvf wlink-${{ github.event.release.tag_name }}-${{ matrix.config.arch }}.tar.gz wlink-${{ matrix.config.arch }}
        fi
      shell: bash
    - name: Upload Release Asset
      uses: softprops/action-gh-release@v2
      if: github.event_name == 'release'
      with:
        fail_on_unmatched_files: false
        files: |
          wlink-*.tar.gz
          wlink-*.zip

  nightly-release:
    needs: build
    runs-on: ubuntu-latest
    if: github.event_name == 'schedule'
    steps:
      - name: Download Artifacts
        uses: actions/download-artifact@v4
        with:
          path: ./

      - name: Prepare Nightly Asset
        run: |
          ls -R ./
          for f in wlink-*; do
            echo "Compressing $f"
            if [[ $f == wlink-win* ]]; then
              zip -r $f.zip $f
            else
              tar -czvf $f.tar.gz $f
            fi
          done
          ls ./

      - name: Update Nightly Release
        uses: andelf/nightly-release@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: nightly
          name: "wlink nightly release $$"
          draft: false
          prerelease: true
          body: |
            This is a nightly binary release of the wlink command line tool.

            For Windows users, please use the x86 version since it has the Windows driver support.
          files: |
            wlink-*.tar.gz
            wlink-*.zip