Created
January 6, 2021 19:28
-
-
Save folex/b1c9bd714badfdb266445dbd9838c15b to your computer and use it in GitHub Desktop.
Github Actions Publish Multi-crate project
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "publish-release" | |
on: | |
push: | |
branches: | |
- "master" | |
- "release" | |
jobs: | |
npm-publish: | |
name: "Publish release" | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Fetch tags | |
run: git fetch --tags | |
### 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="engine/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 | |
- name: What's changed? | |
run: | | |
git tag -l | |
cargo ws changed 2>&1 | |
- name: Set crate versions to match crates.io | |
run: | | |
# install semver and add it to PATH | |
yarn global add semver | |
PATH="$(yarn global bin):$PATH" | |
set -x | |
RELEASE_DESCRIPTION="" | |
for CRATE_NAME in $(cargo ws changed) | |
do | |
CRATE_VERSION="$((cargo show --json "$CRATE_NAME" | jq -r .crate.max_version) 2>/dev/null || true)" | |
NEXT_CRATE_VERSION="$(semver --increment patch "${CRATE_VERSION}" || true)" | |
CARGO_TOML="$(cargo ws changed --json | jq -er ".[] | select(.name == \"$CRATE_NAME\") | .location")""/Cargo.toml" | |
LOCAL_VERSION="$(toml get "$CARGO_TOML" package.version | tr -d \")" | |
MAX_VERSION="$(semver "$NEXT_CRATE_VERSION" "$LOCAL_VERSION" | tail -n1)" | |
toml set "$CARGO_TOML" package.version "$MAX_VERSION" | sponge "$CARGO_TOML" | |
# Generate description | |
LINK="https://crates.io/crates/$CRATE_NAME/$MAX_VERSION" | |
TEXT="$CRATE_NAME $MAX_VERSION" | |
ITEM="<li><a href=\"$LINK\">$TEXT</a></li>" | |
RELEASE_DESCRIPTION="${RELEASE_DESCRIPTION}${ITEM}" | |
done | |
RELEASE_DESCRIPTION="<h2>crates.io:</h2><ul>$RELEASE_DESCRIPTION</ul>" | |
echo "RELEASE_DESCRIPTION=$RELEASE_DESCRIPTION" | tee -a $GITHUB_ENV | |
### === Rust package release === | |
- name: Login to crates.io | |
run: cargo login ${{ secrets.CRATES_IO_TOKEN }} | |
# Increment patch octet for changed crates and publish | |
- name: Publish to crates.io | |
run: cargo ws publish --no-git-commit --allow-dirty --yes --skip-published patch | |
### Create a pre-release | |
# - name: Generate prerelease description | |
# run: | | |
# set -x | |
# RELEASE_DESCRIPTION="" | |
# for CRATE_NAME in $(cargo ws list) | |
# do | |
# LINK="https://crates.io/crates/$CRATE_NAME/${{ env.FINAL_VERSION }}" | |
# TEXT="$CRATE_NAME" | |
# ITEM="<li><a href=\"$LINK\">$TEXT</a></li>" | |
# RELEASE_DESCRIPTION="${RELEASE_DESCRIPTION}${ITEM}" | |
# done | |
# RELEASE_DESCRIPTION="<h2>${{ env.FINAL_VERSION }} @ crates.io:</h2><ul>$RELEASE_DESCRIPTION</ul>" | |
# echo "RELEASE_DESCRIPTION=$RELEASE_DESCRIPTION" | tee -a $GITHUB_ENV | |
- name: Create Release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ github.run_number }} | |
release_name: Fluence Compute Engine ${{ github.run_number }} | |
body: | | |
${{ env.RELEASE_DESCRIPTION }} | |
draft: true | |
prerelease: false |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment