Skip to content

add more testing and various improvements #44

add more testing and various improvements

add more testing and various improvements #44

Workflow file for this run

name: Binary executable builds
permissions:
contents: read
on:
push:
branches: [main]
tags:
- v[0-9]+.*
pull_request:
branches: [main]
env:
CARGO_INCREMENTAL: 0
CARGO_NET_GIT_FETCH_WITH_CLI: true
CARGO_NET_RETRY: 10
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
RUSTFLAGS: -D warnings
RUSTUP_MAX_RETRIES: 10
defaults:
run:
shell: bash
jobs:
create-assets:
name: ${{ matrix.target }}
strategy:
fail-fast: false
matrix:
include:
- target: aarch64-unknown-linux-gnu
os: ubuntu-latest
## I GIVE UP! For this target, OpenSSL needs to be cross compiled
## which is driven by openssl-sys crate's custom build script...
## Linux users with aarch64 (aka ARM64) using musl C lib can go fish (or build from source).
# - target: aarch64-unknown-linux-musl
# os: ubuntu-latest
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
- target: aarch64-apple-darwin
os: macos-latest
- target: x86_64-apple-darwin
os: macos-latest
- target: x86_64-pc-windows-msvc
os: windows-latest
runs-on: ${{ matrix.os }}
permissions:
contents: write
steps:
- name: Install native OpenSSL on Linux
if: runner.os == 'Linux' && !(startsWith(matrix.target, 'aarch64') || endsWith(matrix.target, 'musl'))
run: sudo apt-get install -y pkg-config libssl-dev
- name: Install GCC for aarch64 (for cross-compiling openssl)
if: runner.os == 'Linux' && startsWith(matrix.target, 'aarch64')
run: |
sudo apt-get update
sudo apt-get install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu
if [[ "${{matrix.target}}" == *musl ]]; then
sudo apt-get install musl-dev musl-tools
fi
- name: Install musl-gcc (for compiling OpenSSL)
if: matrix.target == 'x86_64-unknown-linux-musl'
run: sudo apt-get install musl-tools
- name: Calculate openssl-vendored
shell: bash
id: is-openssl-vendored
run: |
case "${{ matrix.target }}" in
"aarch64-apple-darwin" | "x86_64-apple-darwin" | "aarch64-unknown-linux-gnu" | "aarch64-unknown-linux-musl" | "x86_64-unknown-linux-musl")
echo "enabled=--features openssl-vendored" >> $GITHUB_OUTPUT
;;
*)
echo "enabled=" >> $GITHUB_OUTPUT
;;
esac
- name: Checkout
uses: actions/checkout@v4
- uses: actions/setup-python@v5
if: startsWith(github.ref, 'refs/tags/')
with:
python-version: '3.x'
- name: Increment version
if: startsWith(github.ref, 'refs/tags/')
run: python .github/workflows/replace_version_spec.py --new-version=${{ github.ref_name }}
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
target: ${{ matrix.target }}
# problems with cross-compiling linux with musl
- run: echo "RUSTFLAGS=-D warnings -C target-feature=+crt-static -C link-self-contained=yes" >> "${GITHUB_ENV}"
if: contains(matrix.target, '-linux-musl')
- run: |
echo "CC=aarch64-linux-gnu-gcc" >> "$GITHUB_ENV"
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-gnu-gcc" >> "$GITHUB_ENV"
if: matrix.target == 'aarch64-unknown-linux-musl'
- name: Build
env:
# problems with cross-compiling aarch64 linux with gnu
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: /usr/bin/aarch64-linux-gnu-gcc
run: cargo build --manifest-path cpp-linter-lib/Cargo.toml --release --bin cpp-linter --target ${{ matrix.target }} ${{ steps.is-openssl-vendored.outputs.enabled }}
- name: Prepare artifacts
run: mv target/${{ matrix.target }}/release/cpp-linter${{ runner.os == 'Windows' && '.exe' || '' }} ./cpp-linter${{ runner.os == 'Windows' && '.exe' || '' }}
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: cpp-linter-${{ matrix.target }}
path: |
cpp-linter-${{ matrix.target }}
cpp-linter-${{ matrix.target }}.exe
if-no-files-found: error
create-release:
if: startswith(github.ref, 'refs/tagsv')
runs-on: ubuntu-latest
needs: [create-assets]
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install Rust
run: rustup update stable --no-self-update
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Increment version
run: python .github/workflows/replace_version_spec.py --new-version=${{ github.ref_name }}
- run: cargo package
- name: Download built assets
uses: actions/download-artifact@v4
with:
pattern: cpp-linter-*
path: dist
- name: Create a Github Release
env:
GH_TOKEN: ${{ github.token }}
run: |
files=$(ls dist/mdbook-alerts_*/*{tar.gz,zip})
gh release create ${{ github.ref_name }} --generate-notes $files
- run: cargo publish
working-directory: cpp-linter-lib
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}