hashguard 5.0.1

Command-Line tool for ensuring the integrity of files using hash sums
name: CD

on:
  release:
    types:
      - created # Trigger this workflow only when a new release is created

permissions:
  contents: write
  checks: write
  actions: read
  issues: read
  packages: write
  pull-requests: read
  repository-projects: read
  statuses: read

jobs:
  linux_builds:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout the repository
        uses: actions/checkout@v2 # Checkout the repository to the runner

      - name: Install Linux Cross Compilers
        run:  |
          sudo apt-get update
          sudo apt-get install -y \
              gcc-aarch64-linux-gnu \
              g++-aarch64-linux-gnu \
              binutils-aarch64-linux-gnu \
              libgcc-9-dev-arm64-cross \
              libstdc++-9-dev-arm64-cross \


      - name: Install rustup targets
        run: rustup target add x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu

      - name: Build x86_64 binary
        run: cargo build --release --target=x86_64-unknown-linux-gnu

      - name: Set up environment for cross-compilation
        run: |
          echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
          echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV
          echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
      
      - name: Build aarch64 binary
        run: |
          cargo build --release --target=aarch64-unknown-linux-gnu

      - name: Build release name
        run: |
          PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
          PKG_VERSION=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
          RELEASE_NAME="${PKG_NAME}_${PKG_VERSION}"
          echo "RELEASE_NAME=$RELEASE_NAME" >> $GITHUB_ENV

      - name: Tar x86_64 binary
        run: |
          PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
          tar -czvf ${{ env.RELEASE_NAME }}-gnu-linux-x86_64.tar.gz -C target/x86_64-unknown-linux-gnu/release ${PKG_NAME}

      - name: Tar arm64 binary
        run: |
          PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
          tar -czvf ${{ env.RELEASE_NAME }}-gnu-linux-aarch64.tar.gz -C target/aarch64-unknown-linux-gnu/release ${PKG_NAME}


      - name: Generate SHA256 checksums
        run: |
          shasum -a 256 ${{ env.RELEASE_NAME }}-gnu-linux-x86_64.tar.gz > ${{ env.RELEASE_NAME }}-gnu-linux-x86_64.tar.gz.sha256
          shasum -a 256 ${{ env.RELEASE_NAME }}-gnu-linux-aarch64.tar.gz > ${{ env.RELEASE_NAME }}-gnu-linux-aarch64.tar.gz.sha256
  
      - name: Upload release binaries
        uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # Use the third party action to upload the release binaries
        env:
          GITHUB_TOKEN: ${{ github.token }} # Use the GitHub token for authentication
        with:
          files: |
            ${{ env.RELEASE_NAME }}-gnu-linux-x86_64.tar.gz
            ${{ env.RELEASE_NAME }}-gnu-linux-x86_64.tar.gz.sha256
            ${{ env.RELEASE_NAME }}-gnu-linux-aarch64.tar.gz
            ${{ env.RELEASE_NAME }}-gnu-linux-aarch64.tar.gz.sha256

  macos_builds:
    runs-on: macos-latest
    steps:
      - name: Checkout the repository
        uses: actions/checkout@v2 # Checkout the repository to the runner

      - name: Install rustup targets
        run: rustup target add x86_64-apple-darwin aarch64-apple-darwin

      - name: Build the executable
        run: cargo build --release --target=x86_64-apple-darwin --target=aarch64-apple-darwin

      - name: Build release name
        run: |
          PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
          PKG_VERSION=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
          RELEASE_NAME="${PKG_NAME}_${PKG_VERSION}"
          echo "RELEASE_NAME=$RELEASE_NAME" >> $GITHUB_ENV
      - name: Tar x86_64 binary
        run: |
          PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
          tar -czvf ${{ env.RELEASE_NAME }}-macos-x86_64.tar.gz -C target/x86_64-apple-darwin/release ${PKG_NAME}

      - name: Tar arm64 binary
        run: |
          PKG_NAME=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].name')
          tar -czvf ${{ env.RELEASE_NAME }}-macos-aarch64.tar.gz -C target/aarch64-apple-darwin/release ${PKG_NAME}

      - name: Generate SHA256 checksums
        run: |
          shasum -a 256 ${{ env.RELEASE_NAME }}-macos-x86_64.tar.gz > ${{ env.RELEASE_NAME }}-macos-x86_64.tar.gz.sha256
          shasum -a 256 ${{ env.RELEASE_NAME }}-macos-aarch64.tar.gz > ${{ env.RELEASE_NAME }}-macos-aarch64.tar.gz.sha256

      - name: Upload release binaries
        uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda
        env:
          GITHUB_TOKEN: ${{ github.token }}
        with:
          files: |
            ${{ env.RELEASE_NAME }}-macos-x86_64.tar.gz
            ${{ env.RELEASE_NAME }}-macos-aarch64.tar.gz
            ${{ env.RELEASE_NAME }}-macos-x86_64.tar.gz.sha256
            ${{ env.RELEASE_NAME }}-macos-aarch64.tar.gz.sha256

  windows_builds:
    runs-on: windows-latest
    steps:
      - name: Checkout the repository
        uses: actions/checkout@v2 # Checkout the repository to the runner

      - name: Install rustup targets
        run: rustup target add x86_64-pc-windows-msvc aarch64-pc-windows-msvc
        shell: pwsh

      - name: Build the executable
        run: |
          cargo build --release --target=x86_64-pc-windows-msvc --target=aarch64-pc-windows-msvc
        shell: pwsh

      - name: Build release name
        run: |
          $PKG_NAME = (cargo metadata --no-deps --format-version 1 | ConvertFrom-Json).packages[0].name
          $PKG_VERSION = (cargo metadata --no-deps --format-version 1 | ConvertFrom-Json).packages[0].version
          $RELEASE_NAME = "${PKG_NAME}_${PKG_VERSION}"
          echo "RELEASE_NAME=$RELEASE_NAME" | Out-File -FilePath $Env:GITHUB_ENV -Append
        shell: pwsh

      - name: Zip Windows x86_64 binary
        run: |
          $PKG_NAME = (cargo metadata --no-deps --format-version 1 | ConvertFrom-Json).packages[0].name
          & 7z a "$Env:RELEASE_NAME-windows-x86_64.zip" "target/x86_64-pc-windows-msvc/release/$PKG_NAME.exe"
        shell: pwsh

      - name: Zip Windows ARM64 binary
        run: |
          $PKG_NAME = (cargo metadata --no-deps --format-version 1 | ConvertFrom-Json).packages[0].name
          & 7z a "$Env:RELEASE_NAME-windows-aarch64.zip" "target/aarch64-pc-windows-msvc/release/$PKG_NAME.exe"
        shell: pwsh

      - name: Generate SHA256 checksums
        run: |
          Get-FileHash -Algorithm SHA256 "$Env:RELEASE_NAME-windows-x86_64.zip" | Format-List | Out-File "$Env:RELEASE_NAME-windows-x86_64.zip.sha256"
          Get-FileHash -Algorithm SHA256 "$Env:RELEASE_NAME-windows-aarch64.zip" | Format-List | Out-File "$Env:RELEASE_NAME-windows-aarch64.zip.sha256"
        shell: pwsh

      - name: Upload release binaries to GitHub
        uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda
        env:
          GITHUB_TOKEN: ${{ github.token }}
        with:
          files: |
            ${{ env.RELEASE_NAME }}-windows-x86_64.zip
            ${{ env.RELEASE_NAME }}-windows-aarch64.zip
            ${{ env.RELEASE_NAME }}-windows-x86_64.zip.sha256
            ${{ env.RELEASE_NAME }}-windows-aarch64.zip.sha256