fluence 0.3.1

Fluence backend SDK for developing backend applications for the Fluence network
Documentation
name: "publish-release"

on:
  push:
    branches:
      - "master"

jobs:
  npm-publish:
    name: "Publish release"
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: bash

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      ### Prepare cargo & toolchains
      - uses: actions/cache@v2
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            ~/.cargo/bin
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - name: Install Rust toolchain with wasm32-unknown-unknown
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly
          profile: minimal
          override: true
      - uses: actions-rs/cargo@v1
        with:
          toolchain: nightly
          command: update
          args: --aggressive

      ### Calculate FINAL_VERSION
      - name: Install jq & sponge
        run: sudo apt-get update && sudo apt-get --yes --force-yes install jq moreutils

      - name: Install cargo-show cargo-workspaces toml-cli
        run: cargo install cargo-show cargo-workspaces toml-cli || true

      - name: Calculate the version
        run: |
          # install semver and add it to PATH
          yarn global add semver
          PATH="$(yarn global bin):$PATH"

          CARGO_TOML="Cargo.toml"
          # get package name from Cargo.toml
          PKG_NAME="$(toml get "$CARGO_TOML" package.name | tr -d \")"
          # get version from Cargo.toml
          LOCAL_VERSION="$(toml get "$CARGO_TOML" package.version | tr -d \")"

          # Define accumulator array variable
          ALL_CRATES_VERSIONS=()

          # For all crates in the workspace accumulate its max_version
          for CRATE_NAME in $(cargo ws list)
          do
            CRATE_VERSION="$((cargo show --json "$CRATE_NAME" | jq -r .crate.max_version) 2>/dev/null || true)"
            ALL_CRATES_VERSIONS+=($CRATE_VERSION)
          done
          # Take the highest version of all
          MAX_CRATES_VERSION="$(semver -p ${ALL_CRATES_VERSIONS[@]} | tail -n1 || true)"
          # Increment patch octet of the highest version
          NEXT_CRATE_VERSION="$(semver --increment patch "${MAX_CRATES_VERSION}" || true)"

          # take the highest version
          MAX_VERSION="$(semver "$NEXT_CRATE_VERSION" "$LOCAL_VERSION" | tail -n1)"
          echo "FINAL_VERSION=$MAX_VERSION" | tee -a $GITHUB_ENV
          echo "PKG_NAME=$PKG_NAME" | tee -a $GITHUB_ENV

      ### === Rust package release ===
      - name: Login to crates.io
        run: cargo login ${{ secrets.CRATES_IO_TOKEN }}

      - name: Publish to crates.io
        run: cargo ws publish --no-git-commit --allow-dirty --yes custom "${{ env.FINAL_VERSION }}"

      ### Create a pre-release
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ env.FINAL_VERSION }}
          release_name: Fluence Rust SDK ${{ env.FINAL_VERSION }}
          body: |
            - [${{ env.FINAL_VERSION }} @ crates.io](https://crates.io/crates/${{ env.PKG_NAME }}/${{ env.FINAL_VERSION }})
          draft: false
          prerelease: true