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