ruspiro-timer 0.6.0

This crates provides simple timing functions to pause the current processing for a specific amount of time. The core pausing is called on will block.
name: CI

on:
  pull_request:
    branches:
      - development
      - release
  push:
    branches:
      - development
      - release

jobs:
  build:
    name: Compile The Crate
    runs-on: ubuntu-latest
    strategy:
      matrix:
        platform: [pi3, pi4_low, pi4_high]

    steps:
      # Checkout the current code from github into the CI machine
      - name: Checkout Code
        uses: actions/checkout@v2

      - name: Install aarch64 gcc toolchain
        run: sudo apt-get install -y gcc-aarch64-linux-gnu

      # install toolchain based on rust-toolchain file
      - name: Install Rust Nightly and Cargo
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly-2021-09-05
          profile: minimal
          components: rust-src, llvm-tools-preview
          target: aarch64-unknown-none
          override: true

      - name: Install Cargo Make
        uses: davidB/rust-cargo-make@v1
        with:
          version: 'latest'

      - if: ${{ github.event_name != 'pull_request' }}
        name: Remove patches if not a PR build
        run: |
          sed -i "/{^\[patch\.crates-io\] /{:a;N;/\Z}/!ba};/^ruspiro-.*\(git\|path\).*/d" Cargo.toml;
          cat Cargo.toml

      - name: Compile
        env:
          FEATURES: ${{ matrix.platform }}
        run: cargo make -t build --profile pipeline

  publish_dry:
    name: Run Cargo Publish Dry-Run
    runs-on: ubuntu-latest

    steps:
      # Checkout the current code from github into the CI machine
      - name: Checkout Code
        uses: actions/checkout@v2

      - name: Install aarch64 gcc toolchain
        run: sudo apt-get install -y gcc-aarch64-linux-gnu

      - name: Install Rust Nightly and Cargo
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly-2021-09-05
          profile: minimal
          components: rust-src, llvm-tools-preview
          target: aarch64-unknown-none
          override: true

      - name: Install Cargo Make
        uses: davidB/rust-cargo-make@v1
        with:
          version: 'latest'
        
      - name: Publish-Dry-Run
        run: cargo make -t publish_dry --profile pipeline

  prepare_release:
    needs: [build, publish_dry]
    if: ${{ github.ref == 'refs/heads/development' }}
    name: Prepare Release - Create Release PR
    runs-on: ubuntu-latest
    steps:
      - name: Create PR against the release branch
        uses: tretuna/sync-branches@1.2.0
        with:
          GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
          FROM_BRANCH: "development"
          TO_BRANCH: "release"
          PULL_REQUEST_TITLE: "Prepare Release and crates.io publishing"
          PULL_REQUEST_BODY: "Automatic PR to the release branch as preperation to publish the library"

  deploy:
    needs: [build, publish_dry]
    if: ${{ github.ref == 'refs/heads/release' }}
    name: Create Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Prepre Crate Release Version
        run: |
          # extract current crate version from Cargo.toml
          echo 'CRATE_VERSION=v'$(sed -En 's/^version.*=.*\"(.*)\".*$/\1/p' < Cargo.toml) >> $GITHUB_ENV
          # retrieve last release version from github
          echo 'LAST_VERSION='$(curl --silent "https://api.github.com/repos/$GITHUB_REPOSITORY/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') >> $GITHUB_ENV

      - if: ${{ env.LAST_VERSION == '' }}
        name: Set base version
        run: echo 'LAST_VERSION='v0.0.0 >> $GITHUB_ENV

      - name: Create Tag
        run: |
          echo ${{ env.CRATE_VERSION }}
          echo ${{ env.LAST_VERSION }}
          git config --local user.name "2ndTaleStudio"
          git config --local user.email "43264484+2ndTaleStudio@users.noreply.github.com"
          # create the TAG required for the release
          git tag ${{ env.CRATE_VERSION }} -m "${{ env.CRATE_VERSION }}"
          # extract the release notes of the current release from the changelog
          sed -En '/##.*:.*:.*'"${{ env.LAST_VERSION }}"'/q;p' CHANGELOG.md > RELEASENOTES.md
          sed -i -e 's/^# Changelog/# Release Notes/g' RELEASENOTES.md

      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
        with:
          tag_name: ${{ env.CRATE_VERSION }}
          release_name: Release ${{ env.CRATE_VERSION }}
          body_path: RELEASENOTES.md
          draft: false
          prerelease: false

  publish:
    if: ${{ github.ref == 'refs/heads/release' }}
    needs: deploy
    name: Run Cargo Publish
    runs-on: ubuntu-latest

    steps:
      # Checkout the current code from github into the CI machine
      - name: Checkout Code
        uses: actions/checkout@v2

      - name: Install aarch64 gcc toolchain
        run: sudo apt-get install -y gcc-aarch64-linux-gnu

      - name: Install Rust Nightly and Cargo
        uses: actions-rs/toolchain@v1
        with:
          toolchain: nightly-2021-09-05
          profile: minimal
          components: rust-src, llvm-tools-preview
          target: aarch64-unknown-none
          override: true

      - name: Install Cargo Make
        uses: davidB/rust-cargo-make@v1
        with:
          version: 'latest'

      - name: Get current version
        run: echo 'CRATE_VERSION='$(sed -En 's/^version.*=.*\"(.*)\".*$/\1/p' < Cargo.toml) >> $GITHUB_ENV
      
      - name: Update version place holder in files
        run: |
          # before actually publishing replace the final version for doc and repository in the Crago.toml
          sed -i -e 's/||VERSION||/'$CRATE_VERSION'/g' Cargo.toml
          # also update the version in the lib.rs doc root url
          sed -i -e 's/||VERSION||/'$CRATE_VERSION'/g' src/lib.rs
          # and the README.md
          sed -i -e 's/||VERSION||/'$CRATE_VERSION'/g' README.md
        
      - name: Publish-Run
        env:
          CRATES_TOKEN: ${{ secrets.CRATES_TOKEN }}
        run: cargo make -t publish --profile pipeline