awsbck 0.3.11

Utility to backup a folder to AWS S3, once or periodically.
name: Release builds (dispatch)

on:
  workflow_dispatch:

jobs:
  build-windows:
    runs-on: windows-latest
    name: Release build for Windows
    steps:
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - uses: actions/checkout@v4
      - name: Build release binary
        run: cargo build --release
        env:
          RUSTFLAGS: '-C target-feature=+crt-static'
      - uses: actions/upload-artifact@v4
        with:
          name: awsbck-windows
          path: target/release/awsbck.exe

  build-macos:
    runs-on: macos-13
    name: Release build for macOS
    steps:
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - uses: actions/checkout@v4
      - name: Build release binary
        run: cargo build --release
        env:
          LZMA_API_STATIC: 'true'
      - uses: actions/upload-artifact@v4
        with:
          name: awsbck-macos
          path: target/release/awsbck

  build-macos-arm:
    runs-on: macos-13
    name: Release build for macOS aarch64
    steps:
      - uses: maxim-lobanov/setup-xcode@v1
        with:
          xcode-version: '14.3'
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: aarch64-apple-darwin
      - uses: Swatinem/rust-cache@v2
      - uses: actions/checkout@v4
      - name: Build release binary
        run: |
          SDKROOT=$(xcrun -sdk macosx13.3 --show-sdk-path) \
          MACOS_DEPLOYMENT_TARGET=$(xcrun -sdk macosx13.3 --show-sdk-platform-version) \
          cargo build --release --target=aarch64-apple-darwin
        env:
          LZMA_API_STATIC: 'true'
      - uses: actions/upload-artifact@v4
        with:
          name: awsbck-macos-aarch64
          path: target/aarch64-apple-darwin/release/awsbck

  build-linux:
    runs-on: ubuntu-latest
    name: Release build for linux x86_64
    steps:
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: x86_64-unknown-linux-musl
      - uses: Swatinem/rust-cache@v2
      - name: Install musl tools
        run: |
          sudo apt-get update
          sudo apt-get install -y --no-install-recommends musl-tools
      - uses: actions/checkout@v4
      - name: Build release binary
        run: cargo build --release --target x86_64-unknown-linux-musl
      - uses: actions/upload-artifact@v4
        with:
          name: awsbck-linux
          path: target/x86_64-unknown-linux-musl/release/awsbck

  build-arm:
    name: Release builds for linux ARM
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - target: aarch64-unknown-linux-musl
            arch: aarch64
          - target: armv7-unknown-linux-gnueabihf
            arch: armv7
    steps:
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}
      - uses: Swatinem/rust-cache@v2
      - run: cargo install cross --git https://github.com/cross-rs/cross
      - uses: actions/checkout@v4
      - run: cross build --release --target ${{ matrix.target }}
      - uses: actions/upload-artifact@v4
        with:
          name: awsbck-${{ matrix.arch }}
          path: target/${{ matrix.target }}/release/awsbck

  update-release:
    needs: [build-linux, build-arm, build-windows, build-macos, build-macos-arm]
    name: Update GitHub release
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - name: extract version from Cargo.toml
        uses: SebRollen/toml-action@v1.2.0
        id: version
        with:
          file: Cargo.toml
          field: package.version
      - name: download all artifacts
        uses: actions/download-artifact@v4
        with:
          path: artifacts
      - name: create release directory
        run: mkdir release
      - name: create release files
        run: |
          tar -C ./artifacts/awsbck-linux -czvf ./release/awsbck-v${{ steps.version.outputs.value }}-linux-x64.tar.gz awsbck
          tar -C ./artifacts/awsbck-aarch64 -czvf ./release/awsbck-v${{ steps.version.outputs.value }}-linux-aarch64.tar.gz awsbck
          tar -C ./artifacts/awsbck-armv7 -czvf ./release/awsbck-v${{ steps.version.outputs.value }}-linux-armv7.tar.gz awsbck
          zip -j ./release/awsbck-v${{ steps.version.outputs.value }}-windows.zip ./artifacts/awsbck-windows/awsbck.exe
          zip -j ./release/awsbck-v${{ steps.version.outputs.value }}-macos.zip ./artifacts/awsbck-macos/awsbck
          zip -j ./release/awsbck-v${{ steps.version.outputs.value }}-macos-aarch64.zip ./artifacts/awsbck-macos-aarch64/awsbck
      - name: upload linux-x64 to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: release/awsbck-v${{ steps.version.outputs.value }}-linux-x64.tar.gz
          tag: refs/tags/v${{ steps.version.outputs.value }}
      - name: upload linux-aarch64 to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: release/awsbck-v${{ steps.version.outputs.value }}-linux-aarch64.tar.gz
          tag: refs/tags/v${{ steps.version.outputs.value }}
      - name: upload linux-armv7 to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: release/awsbck-v${{ steps.version.outputs.value }}-linux-armv7.tar.gz
          tag: refs/tags/v${{ steps.version.outputs.value }}
      - name: upload windows to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: release/awsbck-v${{ steps.version.outputs.value }}-windows.zip
          tag: refs/tags/v${{ steps.version.outputs.value }}
      - name: upload macos to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: release/awsbck-v${{ steps.version.outputs.value }}-macos.zip
          tag: refs/tags/v${{ steps.version.outputs.value }}
      - name: upload macos-aarch64 to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: release/awsbck-v${{ steps.version.outputs.value }}-macos-aarch64.zip
          tag: refs/tags/v${{ steps.version.outputs.value }}