minirobot 0.0.1

Good Friend Make Your Hands Free
Documentation
name: miniRobot Release

on:
  push:
    tags:
      - '*'  # 任何 tag 被推送时触发工作流

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        rust: [stable]

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Set up Rust
      uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ matrix.rust }}
        override: true

    - name: Build project
      run: cargo build --release --all-targets

    - name: Run tests
      run: cargo test --all-targets -- --nocapture

    - name: Publish binary
      if: success()
      run: |
        # 归档产物到目录miniRobot
        targets=(
            minirobot minirobot_info minirobot_manage
            libminirobot.rlib
        )
        (
          mkdir -p bin/
          cd target/release
          mkdir -p miniRobot/ && mv ${targets[@]} miniRobot/
          tar -czvf ../../bin/minirobot_binaries_${{ matrix.os }}.tar.gz miniRobot/
        )

    - name: Upload binary
      if: success()
      uses: actions/upload-artifact@v2
      with:
        # Action Build产物: Artifacts 
        name: binaries-${{ matrix.os }}
        # Build产物本地的相对路径,目录下的所有文件都会以zip包格式上传。当然Linux/MacOS/Windows产物事先区分好目录。
        path: ./bin/

  release:
    needs: build
    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    # 后面的Download动作和Upload参数对应
    - name: Download Linux binaries
      uses: actions/download-artifact@v2
      with:
        name: binaries-ubuntu-latest
        path: ./bin/

    - name: Download macOS binaries
      uses: actions/download-artifact@v2
      with:
        name: binaries-macos-latest
        path: ./bin/

    # - name: Download Windows binaries
    #   uses: actions/download-artifact@v2
    #   with:
    #     name: binaries-windows-latest
    #     path: ./bin/

    - name: Create GitHub Release
      id: create_release
      uses: actions/create-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.REPOS_WORKFLOW_TOKEN }}
      with:
        tag_name: ${{ github.ref }}
        release_name: Release ${{ github.ref }}
        draft: false
        prerelease: false

    - name: Upload Linux Release Assets
      if: steps.create_release.outputs.upload_url
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.REPOS_WORKFLOW_TOKEN }}
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }}
        asset_path: ./bin/minirobot_binaries_ubuntu-latest.tar.gz
        asset_name: minirobot_binaries_ubuntu-latest.tar.gz
        asset_content_type: application/gzip

    - name: Upload macOS Release Assets
      if: steps.create_release.outputs.upload_url
      uses: actions/upload-release-asset@v1
      env:
        GITHUB_TOKEN: ${{ secrets.REPOS_WORKFLOW_TOKEN }}
      with:
        upload_url: ${{ steps.create_release.outputs.upload_url }}
        asset_path: ./bin/minirobot_binaries_macos-latest.tar.gz
        asset_name: minirobot_binaries_macos-latest.tar.gz
        asset_content_type: application/gzip

    # - name: Upload Windows Release Assets
    #   if: steps.create_release.outputs.upload_url
    #   uses: actions/upload-release-asset@v1
    #   env:
    #     GITHUB_TOKEN: ${{ secrets.REPOS_WORKFLOW_TOKEN }}
    #   with:
    #     upload_url: ${{ steps.create_release.outputs.upload_url }}
    #     asset_path: ./bin/minirobot_binaries_windows-latest.tar.gz
    #     asset_name: minirobot_binaries_windows-latest.tar.gz
    #     asset_content_type: application/gzip