rbx-ds-cloud 0.1.1

CLI and Library for Roblox's Datastore Open Cloud API
Documentation
name: Release

on:
  push:
    tags: 
    - "v*"

jobs:
  create-release:
    name: Create Release
    runs-on: ubuntu-latest
    outputs:
      upload_url: ${{ steps.create_release.outputs.upload_url }}
    steps:
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          release_name: ${{ github.ref }}
          draft: true
          prerelease: false

  build:
    needs: ["create-release"]
    strategy:
      fail-fast: false
      matrix:
        include:
          - host: linux
            os: ubuntu-18.04
            target: x86_64-unknown-linux-gnu
            label: linux

          - host: windows
            os: windows-latest
            target: x86_64-pc-windows-msvc
            label: win64

          - host: macos
            os: macos-latest
            target: x86_64-apple-darwin
            label: macos

          - host: macos
            os: macos-latest
            target: aarch64-apple-darwin
            label: macos-aarch64

    name: Build (${{ matrix.target }})
    runs-on: ${{ matrix.os }}
    env:
      BIN: rbx-ds-cloud
    steps:
      - uses: actions/checkout@v3

      - name: Get version from tag
        shell: bash
        run: |
          echo "PROJECT_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
          echo "Version is ${{ env.PROJECT_VERSION }}"
      - name: Install Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: ${{ matrix.target }}
          override: true
          profile: minimal

      - name: Build Release
        run: cargo build --release --verbose
        env:
          CARGO_TARGET_DIR: output
          OPENSSL_STATIC: 1

      - name: Create Release Archive
        shell: bash
        run: |
          mkdir staging
          if [ "${{ matrix.host }}" = "windows" ]; then
            cp "output/release/$BIN.exe" staging/
            cd staging
            7z a ../release.zip *
          else
            cp "output/release/$BIN" staging/
            cd staging
            zip ../release.zip *
          fi
      - name: Upload Archive to Release
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ needs.create-release.outputs.upload_url }}
          asset_path: release.zip
          asset_name: ${{ env.BIN }}-${{ env.PROJECT_VERSION }}-${{ matrix.label }}.zip
          asset_content_type: application/octet-stream

      - name: Upload Archive to Artifacts
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.BIN }}-${{ env.PROJECT_VERSION }}-${{ matrix.label }}.zip
          path: release.zip

  publish:
    needs: ["build"]
    name: Publish
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Install Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable

      - name: Login
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
        shell: bash
        run: cargo login

      - name: Publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
        shell: bash
        run: cargo publish