From 5338d6fb9a734803f9db1dd352a32b89a252a060 Mon Sep 17 00:00:00 2001 From: folex <0xdxdy@gmail.com> Date: Thu, 31 Dec 2020 10:48:35 +0300 Subject: [PATCH] Add release automation (#16) --- .github/workflows/publish_release.yml | 98 +++++++++++++++++++++++++++ Cargo.toml | 2 +- README.md | 2 + 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/publish_release.yml diff --git a/.github/workflows/publish_release.yml b/.github/workflows/publish_release.yml new file mode 100644 index 0000000..f1b06db --- /dev/null +++ b/.github/workflows/publish_release.yml @@ -0,0 +1,98 @@ +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 "$PKG_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 Network ${{ env.FINAL_VERSION }} + body: | + - [${{ env.FINAL_VERSION }} @ crates.io](https://crates.io/crates/${{ env.PKG_NAME }}/${{ env.FINAL_VERSION }}) + draft: false + prerelease: true \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index c8d0f32..09b804a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ description = "Fluence backend SDK for developing backend applications for the F documentation = "https://docs.rs/fluence/" repository = "https://github.com/fluencelabs/rust-sdk" authors = ["Fluence Labs"] -readme = "Readme.md" +readme = "README.md" keywords = ["fluence", "sdk", "webassembly"] categories = ["api-bindings", "wasm"] license = "Apache-2.0" diff --git a/README.md b/README.md index 174b5b4..fef4541 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +https://img.shields.io/crates/v/fluence?color=green + ## Rust backend SDK This SDK intended to run backend application on the Fluence network. More information about usage and some internals could found in [docs](https://fluence-labs.readme.io/docs/rust-backend-sdk).