sugar-cli 2.9.1

Command line tool for creating and managing Metaplex Candy Machines.
name: Build and Release

on:
  workflow_dispatch:
  pull_request:
    types: [opened, reopened]
  push:
    branches: "**"
    tags:
      - "v*.*.*"

jobs:
  build:
    strategy:
      matrix:
        os:
          - windows-latest
          - ubuntu-latest
          - macos-latest
          - macos-13

    runs-on: ${{ matrix.os }}

    env:
      MATRIX_OS: ${{ matrix.os }}

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install libudev-dev on Ubuntu
        if: runner.os == 'Linux'
        run: |
          sudo apt-get update
          sudo apt-get install libudev-dev

      - name: Install Latest Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          default: true
          override: true

      - name: Install rustfmt, and clippy
        run: |
          rustup component add rustfmt clippy

      - name: Build
        id: build
        shell: bash
        run: |
          binary_extension=""
          if [[ "${RUNNER_OS}" == "Windows" ]]; then
            binary_extension=".exe"
            binary_path="sugar-windows-latest${binary_extension}"
          elif [[ "${RUNNER_OS}" == "macOS" ]]; then
            if [[ "${MATRIX_OS}" == "macos-13" ]]; then
              binary_path="sugar-macos-intel-latest"
            else
              binary_path="sugar-macos-m1-latest"
            fi
          elif [[ "${RUNNER_OS}" == "Linux" ]]; then
            binary_path="sugar-ubuntu-latest"
          else
            echo "error: unknown OS: ${RUNNER_OS}"
            exit 1
          fi
          echo "::set-output name=binary_path::${binary_path}"

          # clean build for release
          if [[ "${GITHUB_REF}" = refs/tags/* ]]; then
            cargo clean
          fi

          cargo build --all --release
          cp "target/release/sugar${binary_extension}" "${binary_path}"
          strip "${binary_path}"

      - name: Test
        uses: actions-rs/cargo@v1
        with:
          command: test

      - name: Rustfmt
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check

      - name: Clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: -- -D warnings

      - name: Publish Artifacts
        uses: actions/upload-artifact@v4
        if: "!startsWith(github.ref, 'refs/tags/')"
        with:
          name: ${{ matrix.os }}
          path: ${{ steps.build.outputs.binary_path }}

      - name: Release Tags
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        with:
          files: ${{ steps.build.outputs.binary_path }}