Janky Fix for #43 Data Corruption with Multiple Connections #91
Workflow file for this run
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: CICD | |
# adapted from https://github.com/bootandy/dust/blob/master/.github/workflows/CICD.yml | |
env: | |
PROJECT_NAME: sqlite_zstd | |
on: | |
push: | |
branches: | |
- main | |
- master | |
pull_request: | |
jobs: | |
style: | |
name: Tests | |
runs-on: ${{ matrix.job.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
job: | |
- { os: ubuntu-latest } | |
steps: | |
- uses: actions/checkout@v1 | |
- name: Initialize workflow variables | |
id: vars | |
shell: bash | |
run: | | |
# target-specific options | |
# * CARGO_FEATURES_OPTION | |
CARGO_FEATURES_OPTION='' ; | |
if [ -n "${{ matrix.job.features }}" ]; then CARGO_FEATURES_OPTION='--features "${{ matrix.job.features }}"' ; fi | |
echo set-output name=CARGO_FEATURES_OPTION::${CARGO_FEATURES_OPTION} | |
echo ::set-output name=CARGO_FEATURES_OPTION::${CARGO_FEATURES_OPTION} | |
- name: Install `rust` toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
override: true | |
profile: minimal # minimal component installation (ie, no documentation) | |
components: rustfmt, clippy | |
- name: "`fmt` testing" | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fmt | |
args: --all -- --check | |
- name: "`clippy` testing" | |
if: success() || failure() # run regardless of prior step ("`fmt` testing") success/failure | |
uses: actions-rs/cargo@v1 | |
with: | |
command: clippy | |
args: ${{ matrix.job.cargo-options }} ${{ steps.vars.outputs.CARGO_FEATURES_OPTION }} --all-targets -- -D warnings | |
- name: "tests" | |
if: success() || failure() # run regardless of prior step | |
uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
build: | |
name: Build | |
runs-on: ${{ matrix.job.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
job: | |
# { os, target, cargo-options, features, use-cross, toolchain } | |
- { | |
os: ubuntu-latest, | |
target: x86_64-unknown-linux-gnu, | |
features: build_extension, | |
} | |
- { | |
os: ubuntu-latest, | |
target: arm-unknown-linux-gnueabihf, | |
use-cross: use-cross, | |
features: build_extension, | |
} | |
- { | |
os: macos-latest, | |
target: x86_64-apple-darwin, | |
features: build_extension, | |
} | |
- { | |
os: windows-latest, | |
target: x86_64-pc-windows-gnu, | |
features: build_extension, | |
} ## !maint: [rivy; 2020-01-21] may break due to rust bug; follow possible solution from GH:rust-lang/rust#47048 (refs: GH:rust-lang/rust#47048 , GH:rust-lang/rust#53454 , GH:bike-barn/hermit#172 ) | |
- { | |
os: windows-latest, | |
target: x86_64-pc-windows-msvc, | |
features: build_extension, | |
} | |
steps: | |
- uses: actions/checkout@v1 | |
- name: Install any prerequisites | |
shell: bash | |
run: | | |
case ${{ matrix.job.target }} in | |
arm-unknown-linux-gnueabihf) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;; | |
esac | |
- name: Initialize workflow variables | |
id: vars | |
shell: bash | |
run: | | |
# toolchain | |
TOOLCHAIN="stable" ## default to "stable" toolchain | |
# * specify alternate TOOLCHAIN for *-pc-windows-gnu targets; gnu targets on Windows are broken for the standard *-pc-windows-msvc toolchain (refs: <https://github.com/rust-lang/rust/issues/47048>, <https://github.com/rust-lang/rust/issues/53454>, <https://github.com/rust-lang/cargo/issues/6754>) | |
case ${{ matrix.job.target }} in *-pc-windows-gnu) TOOLCHAIN="stable-${{ matrix.job.target }}" ;; esac; | |
# * use requested TOOLCHAIN if specified | |
if [ -n "${{ matrix.job.toolchain }}" ]; then TOOLCHAIN="${{ matrix.job.toolchain }}" ; fi | |
echo set-output name=TOOLCHAIN::${TOOLCHAIN} | |
echo ::set-output name=TOOLCHAIN::${TOOLCHAIN} | |
# staging directory | |
STAGING='_staging' | |
echo set-output name=STAGING::${STAGING} | |
echo ::set-output name=STAGING::${STAGING} | |
# determine EXE suffix | |
case ${{ matrix.job.target }} in | |
*-linux-*) EXE_suffix=".so"; EXE_prefix="lib" ;; | |
*-apple-*) EXE_suffix=".dylib"; EXE_prefix="lib" ;; | |
*-windows-*) EXE_suffix=".dll"; EXE_prefix="" ;; esac; | |
echo set-output name=LIB_FNAME::${EXE_prefix}${{ env.PROJECT_NAME }}${EXE_suffix} | |
echo ::set-output name=LIB_FNAME::${EXE_prefix}${{ env.PROJECT_NAME }}${EXE_suffix} | |
# parse commit reference info | |
REF_NAME=${GITHUB_REF#refs/*/} | |
unset REF_BRANCH ; case ${GITHUB_REF} in refs/heads/*) REF_BRANCH=${GITHUB_REF#refs/heads/} ;; esac; | |
unset REF_TAG ; case ${GITHUB_REF} in refs/tags/*) REF_TAG=${GITHUB_REF#refs/tags/} ;; esac; | |
REF_SHAS=${GITHUB_SHA:0:8} | |
echo set-output name=REF_NAME::${REF_NAME} | |
echo set-output name=REF_BRANCH::${REF_BRANCH} | |
echo set-output name=REF_TAG::${REF_TAG} | |
echo set-output name=REF_SHAS::${REF_SHAS} | |
echo ::set-output name=REF_NAME::${REF_NAME} | |
echo ::set-output name=REF_BRANCH::${REF_BRANCH} | |
echo ::set-output name=REF_TAG::${REF_TAG} | |
echo ::set-output name=REF_SHAS::${REF_SHAS} | |
# parse target | |
unset TARGET_ARCH ; case ${{ matrix.job.target }} in arm-unknown-linux-gnueabihf) TARGET_ARCH=arm ;; i686-*) TARGET_ARCH=i686 ;; x86_64-*) TARGET_ARCH=x86_64 ;; esac; | |
echo set-output name=TARGET_ARCH::${TARGET_ARCH} | |
echo ::set-output name=TARGET_ARCH::${TARGET_ARCH} | |
unset TARGET_OS ; case ${{ matrix.job.target }} in *-linux-*) TARGET_OS=linux ;; *-apple-*) TARGET_OS=macos ;; *-windows-*) TARGET_OS=windows ;; esac; | |
echo set-output name=TARGET_OS::${TARGET_OS} | |
echo ::set-output name=TARGET_OS::${TARGET_OS} | |
# package name | |
PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac; | |
PKG_BASENAME=${PROJECT_NAME}-${REF_TAG:-$REF_SHAS}-${{ matrix.job.target }} | |
PKG_NAME=${PKG_BASENAME}${PKG_suffix} | |
echo set-output name=PKG_suffix::${PKG_suffix} | |
echo set-output name=PKG_BASENAME::${PKG_BASENAME} | |
echo set-output name=PKG_NAME::${PKG_NAME} | |
echo ::set-output name=PKG_suffix::${PKG_suffix} | |
echo ::set-output name=PKG_BASENAME::${PKG_BASENAME} | |
echo ::set-output name=PKG_NAME::${PKG_NAME} | |
# deployable tag? (ie, leading "vM" or "M"; M == version number) | |
unset DEPLOY ; if [[ $REF_TAG =~ ^[vV]?[0-9].* ]]; then DEPLOY='true' ; fi | |
echo set-output name=DEPLOY::${DEPLOY:-<empty>/false} | |
echo ::set-output name=DEPLOY::${DEPLOY} | |
# target-specific options | |
# * CARGO_FEATURES_OPTION | |
CARGO_FEATURES_OPTION='' ; | |
if [ -n "${{ matrix.job.features }}" ]; then CARGO_FEATURES_OPTION='--features "${{ matrix.job.features }}"' ; fi | |
echo set-output name=CARGO_FEATURES_OPTION::${CARGO_FEATURES_OPTION} | |
echo ::set-output name=CARGO_FEATURES_OPTION::${CARGO_FEATURES_OPTION} | |
# * CARGO_USE_CROSS (truthy) | |
CARGO_USE_CROSS='true' ; case '${{ matrix.job.use-cross }}' in ''|0|f|false|n|no) unset CARGO_USE_CROSS ;; esac; | |
echo set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS:-<empty>/false} | |
echo ::set-output name=CARGO_USE_CROSS::${CARGO_USE_CROSS} | |
# * strip executable? | |
STRIP="strip" ; STRIP_PARAMS="" ; case ${{ matrix.job.target }} in arm-unknown-linux-gnueabihf) STRIP="arm-linux-gnueabihf-strip" ;; *-pc-windows-msvc) STRIP="" ;; *-apple-darwin) STRIP_PARAMS="-x" ;; esac; | |
echo set-output name=STRIP::${STRIP} | |
echo ::set-output name=STRIP::${STRIP} | |
echo set-output name=STRIP_PARAMS::${STRIP_PARAMS} | |
echo ::set-output name=STRIP_PARAMS::${STRIP_PARAMS} | |
- name: Create all needed build/work directories | |
shell: bash | |
run: | | |
mkdir -p '${{ steps.vars.outputs.STAGING }}' | |
mkdir -p '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}' | |
- name: rust toolchain ~ install | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: ${{ steps.vars.outputs.TOOLCHAIN }} | |
target: ${{ matrix.job.target }} | |
override: true | |
profile: minimal # minimal component installation (ie, no documentation) | |
- name: Info | |
shell: bash | |
run: | | |
gcc --version || true | |
rustup -V | |
rustup toolchain list | |
rustup default | |
cargo -V | |
rustc -V | |
- name: Build | |
uses: actions-rs/cargo@v1 | |
with: | |
use-cross: ${{ steps.vars.outputs.CARGO_USE_CROSS }} | |
command: build | |
args: --release --target=${{ matrix.job.target }} ${{ matrix.job.cargo-options }} ${{ steps.vars.outputs.CARGO_FEATURES_OPTION }} | |
- name: Archive executable artifacts | |
uses: actions/upload-artifact@master | |
with: | |
name: ${{ env.PROJECT_NAME }}-${{ matrix.job.target }} | |
path: target/${{ matrix.job.target }}/release/${{ steps.vars.outputs.LIB_FNAME }} | |
- name: Package | |
shell: bash | |
run: | | |
# binary | |
cp 'target/${{ matrix.job.target }}/release/${{ steps.vars.outputs.LIB_FNAME }}' '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}/' | |
# `strip` binary (if needed) | |
if [ -n "${{ steps.vars.outputs.STRIP }}" ]; then "${{ steps.vars.outputs.STRIP }}" ${{ steps.vars.outputs.STRIP_PARAMS }} '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}/${{ steps.vars.outputs.LIB_FNAME }}' ; fi | |
# README and LICENSE | |
cp README.md '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}/' | |
cp LICENSE '${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_BASENAME }}/' | |
# base compressed package | |
pushd '${{ steps.vars.outputs.STAGING }}/' >/dev/null | |
case ${{ matrix.job.target }} in | |
*-pc-windows-*) 7z -y a '${{ steps.vars.outputs.PKG_NAME }}' '${{ steps.vars.outputs.PKG_BASENAME }}'/* | tail -2 ;; | |
*) tar czf '${{ steps.vars.outputs.PKG_NAME }}' '${{ steps.vars.outputs.PKG_BASENAME }}'/* ;; | |
esac; | |
popd >/dev/null | |
- name: Publish | |
uses: softprops/action-gh-release@v1 | |
if: steps.vars.outputs.DEPLOY | |
with: | |
files: | | |
${{ steps.vars.outputs.STAGING }}/${{ steps.vars.outputs.PKG_NAME }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |