cargo-binlist 0.4.0

List all installed binaries with cargo and their versions
name: release
on:
  push:
    tags:
      - "*.*.*"
jobs:
  create-windows-binaries:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install stable
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true

      - name: Build cargo-binlist
        run: |

          cargo build --release

      - name: Get the version
        shell: bash
        id: tagName
        run: |

          VERSION=$(cargo pkgid | cut -d# -f2 | cut -d: -f2)
          echo "::set-output name=tag::$VERSION"

      - name: Build package
        id: package
        shell: bash
        run: |

          ARCHIVE_TARGET="x86_64-pc-windows-msvc"
          ARCHIVE_NAME="cargo-binlist-${{ steps.tagName.outputs.tag }}-$ARCHIVE_TARGET"
          ARCHIVE_FILE="${ARCHIVE_NAME}.zip"
          7z a ${ARCHIVE_FILE} ./target/release/cargo-binlist.exe
          echo "::set-output name=file::${ARCHIVE_FILE}"
          echo "::set-output name=name::${ARCHIVE_NAME}.zip"

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.package.outputs.name }}
          path: ${{ steps.package.outputs.file }}

  create-unix-binaries:
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-musl
          - os: macos-latest
            target: x86_64-apple-darwin

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

    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          target: ${{ matrix.target }}
          override: true

      - name: Install musl
        if: contains(matrix.target, 'linux-musl')
        run: |

          sudo apt-get install musl-tools

      - name: Build cargo-binlist
        run: |

          cargo build --release --target ${{ matrix.target }}

      - name: Strip binary
        run: |

          strip target/${{ matrix.target }}/release/cargo-binlist

      - name: Get the version
        id: tagName
        run: |

          VERSION=$(cargo pkgid | cut -d# -f2 | cut -d: -f2)
          echo "::set-output name=tag::$VERSION"

      - name: Build package
        id: package
        run: |

          TAR_FILE=cargo-binlist-${{ steps.tagName.outputs.tag }}-${{ matrix.target }}
          cd target/${{ matrix.target }}/release
          tar -czvf $GITHUB_WORKSPACE/$TAR_FILE.tar.gz cargo-binlist
          echo ::set-output "name=name::${TAR_FILE}"
          echo ::set-output "name=file::${TAR_FILE}.tar.gz "

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.package.outputs.name }}
          path: ${{ steps.package.outputs.file }}

  deploy:
    needs: [create-windows-binaries, create-unix-binaries]

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

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

      - name: Create Cargo.lock
        run: |

          cargo update

      - name: Get version
        id: tagName
        run: |

          VERSION=$(cargo pkgid | cut -d# -f2 | cut -d: -f2)
          echo "::set-output name=tag::$VERSION"

      - name: Download artifacts
        uses: actions/download-artifact@v4
        with:
          path: ./binaries

      - name: Create a release
        uses: softprops/action-gh-release@v2
        with:
          name: v${{ steps.tagName.outputs.tag }}
          files: |

            ./binaries/**/*.zip
            ./binaries/**/*.tar.gz
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}