Skip to content

build(deps): bump tokio from 1.37.0 to 1.40.0 #22

build(deps): bump tokio from 1.37.0 to 1.40.0

build(deps): bump tokio from 1.37.0 to 1.40.0 #22

name: Test and release
# ref. https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
on:
push:
branches:
- main
tags:
- "*"
pull_request:
permissions:
contents: write
jobs:
static_analysis:
name: Static analysis (lint)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
profile: minimal
components: rustfmt, clippy
override: true
- name: Check Rust version
run: rustc --version
- uses: Swatinem/rust-cache@v1
with:
cache-on-failure: true
- name: Run static analysis tests
shell: bash
run: scripts/tests.lint.sh
# check_cargo_unused:
# name: Check Cargo unused
# runs-on: ubuntu-latest
# steps:
# - name: Checkout
# uses: actions/checkout@v3
# # or use "abelfodil/protoc-action@v1"
# # ref. https://github.com/hyperium/tonic/issues/1047#issuecomment-1222508191
# - name: Install protoc
# uses: arduino/setup-protoc@v1
# with:
# version: "3.x"
# repo-token: ${{ secrets.GITHUB_TOKEN }}
# - name: Install Rust
# uses: actions-rs/toolchain@v1
# with:
# toolchain: nightly
# profile: minimal
# components: rustfmt, clippy
# override: true
# - name: Check Rust version
# run: rustc --version
# - uses: Swatinem/rust-cache@v1
# with:
# cache-on-failure: true
# - name: Check unused Cargo dependencies
# shell: bash
# run: scripts/tests.unused.sh
unit_tests:
name: Unit tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
# or use "abelfodil/protoc-action@v1"
# ref. https://github.com/hyperium/tonic/issues/1047#issuecomment-1222508191
- name: Install protoc
uses: arduino/setup-protoc@v1
with:
version: "3.x"
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true
- name: Check Rust version
run: rustc --version
- uses: Swatinem/rust-cache@v1
with:
cache-on-failure: true
- name: Run unit tests
run: scripts/tests.unit.sh
e2e_tests:
name: e2e tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
# or use "abelfodil/protoc-action@v1"
# ref. https://github.com/hyperium/tonic/issues/1047#issuecomment-1222508191
- name: Install protoc
uses: arduino/setup-protoc@v1
with:
version: "3.x"
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true
- name: Check Rust version
run: rustc --version
- uses: Swatinem/rust-cache@v1
with:
cache-on-failure: true
- name: Build plugin
uses: actions-rs/cargo@v1
with:
command: build
args: --release --bin timestampvm
- name: Run e2e tests
run: VM_PLUGIN_PATH=/home/runner/work/timestampvm-rs/timestampvm-rs/target/release/timestampvm scripts/tests.e2e.sh 1.11.1
release:
name: Release ${{ matrix.job.target }} (${{ matrix.job.os }})
runs-on: ${{ matrix.job.os }}
#needs: [static_analysis, check_cargo_unused, unit_tests, e2e_tests]
needs: [static_analysis, unit_tests, e2e_tests]
strategy:
matrix:
job:
# https://doc.rust-lang.org/nightly/rustc/platform-support.html
- os: ubuntu-20.04
platform: linux
target: x86_64-unknown-linux-gnu
- os: macos-latest
platform: darwin
target: x86_64-apple-darwin
# - os: ubuntu-latest
# platform: linux
# target: aarch64-unknown-linux-gnu
- os: macos-latest
platform: darwin
target: aarch64-apple-darwin
# - os: windows-latest
# platform: win32
# target: x86_64-pc-windows-msvc
steps:
- name: Checkout
uses: actions/checkout@v3
# or use "abelfodil/protoc-action@v1"
# ref. https://github.com/hyperium/tonic/issues/1047#issuecomment-1222508191
- name: Install protoc
uses: arduino/setup-protoc@v1
with:
version: "3.x"
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Rust
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
target: ${{ matrix.job.target }}
override: true
- name: Check Rust version
run: rustc --version
- uses: Swatinem/rust-cache@v1
with:
cache-on-failure: true
# ref. https://github.com/gakonst/foundry/blob/master/.github/workflows/cross-platform.yml
- name: Apple M1 setup
if: matrix.job.target == 'aarch64-apple-darwin'
run: |
echo "SDKROOT=$(xcrun -sdk macosx --show-sdk-path)" >> $GITHUB_ENV
echo "MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx --show-sdk-platform-version)" >> $GITHUB_ENV
- name: Linux setup
if: matrix.job.platform == 'linux'
run: |
sudo apt-get install -y --no-install-recommends pkg-config libssl-dev musl-tools clang llvm
echo "CC_aarch64_unknown_linux_musl=clang" >> $GITHUB_ENV
echo "AR_aarch64_unknown_linux_musl=llvm-ar" >> $GITHUB_ENV
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS=\"-Clink-self-contained=yes -Clinker=rust-lld\"" >> $GITHUB_ENV
echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV
# ref. https://github.com/actions-rs/cargo
- name: Build target
env:
RUSTFLAGS: -C link-args=-s
uses: actions-rs/cargo@v1
with:
# use-cross: true
command: build
args: --release --bin timestampvm --target ${{ matrix.job.target }}
- name: Compress binaries
id: release_artifacts
env:
PLATFORM_NAME: ${{ matrix.job.platform }}
TARGET: ${{ matrix.job.target }}
shell: bash
run: |
if [ "$PLATFORM_NAME" == "linux" ]; then
cp ./target/${TARGET}/release/timestampvm timestampvm.${TARGET}
echo "file_name_timestampvm_rs=timestampvm.${TARGET}" >> $GITHUB_OUTPUT
tar -czvf timestampvm_${TARGET}.tar.gz -C ./target/${TARGET}/release timestampvm
echo "file_name_timestampvm_rs_tar_gz=timestampvm_${TARGET}.tar.gz" >> $GITHUB_OUTPUT
elif [ "$PLATFORM_NAME" == "darwin" ]; then
cp ./target/${TARGET}/release/timestampvm timestampvm.${TARGET}
echo "file_name_timestampvm_rs=timestampvm.${TARGET}" >> $GITHUB_OUTPUT
gtar -czvf timestampvm_${TARGET}.tar.gz -C ./target/${TARGET}/release timestampvm
echo "file_name_timestampvm_rs_tar_gz=timestampvm_${TARGET}.tar.gz" >> $GITHUB_OUTPUT
else
echo "skipping $PLATFORM_NAME"
fi
# release tip from latest commits
# https://github.com/softprops/action-gh-release
# https://docs.github.com/en/actions/learn-github-actions/contexts#github-context
- name: Release latest
uses: softprops/action-gh-release@v1
if: ${{ github.ref == 'refs/heads/main' }}
with:
name: Latest release
tag_name: latest
prerelease: true
body: Latest builds from the last commit.
files: |
${{ steps.release_artifacts.outputs.file_name_timestampvm_rs }}
${{ steps.release_artifacts.outputs.file_name_timestampvm_rs_tar_gz }}
# release only for tags
# https://github.com/softprops/action-gh-release
# https://docs.github.com/en/actions/learn-github-actions/contexts#github-context
- name: Release tag
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
name: ${{ github.ref_name }}
tag_name: ${{ github.ref_name }}
draft: true
prerelease: true
body: Release builds for ${{ github.ref_name }}.
files: |
${{ steps.release_artifacts.outputs.file_name_timestampvm_rs }}
${{ steps.release_artifacts.outputs.file_name_timestampvm_rs_tar_gz }}