shuk 0.4.8

A command line tool that uploads files to Amazon S3 buckets, and generates presigned URLs for easy sharing.
Documentation
name: Test Release
permissions:
  contents: write
on:
  release:
    types: [created]
  workflow_dispatch:
    inputs:
      test_mode:
        description: 'Run in test mode (skips actual release creation)'
        type: boolean
        default: true
      test_version:
        description: 'Test version number (e.g., 0.0.0-test)'
        type: string
        default: '0.0.0-test'
jobs:
  create-release:
    runs-on: ubuntu-latest
    if: ${{ !inputs.test_mode }}
    steps:
      - uses: actions/checkout@v4
      - uses: taiki-e/create-gh-release-action@v1
        with:
          changelog: CHANGELOG.md
          token: ${{ secrets.GITHUB_TOKEN }}
  test-release:
    runs-on: ubuntu-latest
    if: ${{ inputs.test_mode }}
    steps:
      - uses: actions/checkout@v4
      - name: Simulate release creation
        run: |
          echo "Testing release process for version ${{ inputs.test_version }}"
          echo "Checking CHANGELOG.md exists"
          test -f CHANGELOG.md || (echo "CHANGELOG.md not found" && exit 1)
  upload-assets:
    needs: [create-release, test-release]
    if: ${{ always() && (needs.create-release.result == 'success' || needs.test-release.result == 'success') }}
    strategy:
      matrix:
        include:
          # x86_64 targets
          - target: x86_64-unknown-linux-musl
            os: ubuntu-latest
          - target: x86_64-apple-darwin
            os: macos-latest
          - target: x86_64-pc-windows-msvc
            os: windows-latest
          # ARM64 targets
          - target: aarch64-unknown-linux-musl
            os: ubuntu-latest
          - target: aarch64-apple-darwin
            os: macos-latest
          # Universal macOS binary
          #- target: universal-apple-darwin
            #  os: macos-latest
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
      
      # Install cross-compilation tools for ARM on Linux
      - name: Install Linux dependencies
        if: contains(matrix.os, 'ubuntu')
        run: |
          sudo apt-get update
          sudo apt-get install -y musl-tools pkg-config gcc-aarch64-linux-gnu
          wget https://ziglang.org/download/0.13.0/zig-linux-x86_64-0.13.0.tar.xz
          tar xf zig-linux-x86_64-0.13.0.tar.xz
          echo "$PWD/zig-linux-x86_64-0.13.0" >> $GITHUB_PATH


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

      # Install cargo-zigbuild for better musl support
      - name: Install cargo-zigbuild (Linux)
        if: contains(matrix.target, 'linux-musl')
        run: cargo install cargo-zigbuild

      # Build steps
      - name: Build (Linux musl)
        if: contains(matrix.target, 'linux-musl')
        run: |
          zig version
          cargo zigbuild --target ${{ matrix.target }} --release

      - name: Build (non-Linux)
        if: "!contains(matrix.target, 'linux-musl')"
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --target ${{ matrix.target }} --release

      # Test step (skip for cross-compiled targets)
      - name: Test
        if: "!contains(matrix.target, 'aarch64') && matrix.target != 'universal-apple-darwin'"
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --target ${{ matrix.target }}

      # Upload for actual releases
      - uses: taiki-e/upload-rust-binary-action@v1
        if: ${{ !inputs.test_mode }}
        with:
          bin: shuk
          target: ${{ matrix.target }}
          token: ${{ secrets.GITHUB_TOKEN }}

      # Package for test mode
      - name: Package binary (Test Mode)
        if: ${{ inputs.test_mode }}
        run: |
          cd target/${{ matrix.target }}/release
          tar czf ../../../shuk-${{ matrix.target }}.tar.gz shuk*
          cd ../../..
        shell: bash

      # Upload artifacts for test mode
      - name: Upload artifact (Test Mode)
        if: ${{ inputs.test_mode }}
        uses: actions/upload-artifact@v3
        with:
          name: shuk-${{ matrix.target }}
          path: shuk-${{ matrix.target }}.tar.gz