Skip to content

Some vital updates from py codebase #39

Some vital updates from py codebase

Some vital updates from py codebase #39

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: Calculate Release Version
id: calc-version
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
short_sha=$(echo "${{ github.sha }}" | awk '{print substr($0,0,5)}')
echo "RELEASE_VERSION=nightly-$(date '+%Y-%m-%d')-$short_sha" >> $GITHUB_OUTPUT
else
echo "RELEASE_VERSION=${{ github.ref_name }}" >> $GITHUB_OUTPUT
fi
- 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
- 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-cli/Cargo.toml --release --bin cpp-linter-cli --target ${{ matrix.target }} ${{ steps.is-openssl-vendored.outputs.enabled }}
- name: Prepare artifacts [Windows]
shell: bash
if: matrix.os == 'windows-latest'
id: prep-artifacts-windows
run: |
release_dir="cpp-linter-cli-${{ steps.calc-version.outputs.RELEASE_VERSION }}"
artifact_path="cpp-linter-cli-${{ steps.calc-version.outputs.RELEASE_VERSION }}-${{ matrix.target }}.zip"
echo "ARTIFACT_PATH=$artifact_path" >> $GITHUB_OUTPUT
mkdir $release_dir
cp target/${{ matrix.target }}/release/cpp-linter-cli.exe $release_dir/
cp LICENSE $release_dir/
7z a -tzip $artifact_path $release_dir/
- name: Prepare artifacts [Unix]
shell: bash
id: prep-artifacts-unix
if: matrix.os != 'windows-latest'
run: |
release_dir="cpp-linter-cli-${{ steps.calc-version.outputs.RELEASE_VERSION }}"
artifact_path="cpp-linter-cli-${{ steps.calc-version.outputs.RELEASE_VERSION }}-${{ matrix.target }}.tar.gz"
echo "ARTIFACT_PATH=$artifact_path" >> $GITHUB_OUTPUT
mkdir $release_dir
cp target/${{ matrix.target }}/release/cpp-linter-cli $release_dir/
cp LICENSE $release_dir
tar -czvf $artifact_path $release_dir/
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ steps.prep-artifacts-unix.outputs.ARTIFACT_PATH || steps.prep-artifacts-windows.outputs.ARTIFACT_PATH }}
path: ${{ steps.prep-artifacts-unix.outputs.ARTIFACT_PATH || steps.prep-artifacts-windows.outputs.ARTIFACT_PATH }}
if-no-files-found: error
create-release:
if: startswith(github.ref, 'refs/tags')
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
- run: cargo package
- name: Create a Github Release
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
env:
GH_TOKEN: ${{ github.token }}
run: gh release create ${{ github.ref_name }} --generate-notes
- run: cargo publish
working-directory: cpp-linter-lib
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
upload-assets:
needs: [create-release]
runs-on: ubuntu-latest
strategy:
matrix:
target:
- aarch64-unknown-linux-gnu
# skip this target due to cross-compiling OpenSSL for musl C lib
# - aarch64-unknown-linux-musl
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
- aarch64-apple-darwin
- x86_64-apple-darwin
- x86_64-pc-windows-msvc
steps:
- name: Download build asset
uses: actions/download-artifact@v4
with:
name: cpp-linter-cli-${{ matrix.target }}
path: dist
- name: Upload release assets
env:
GH_TOKEN: ${{ github.token }}
run: gh release upload ${{ github.ref_name }} dist/cpp-linter-cli${{ contains(matrix.target, 'windows') || '.exe' }}%#%cpp-linter-cli_${{ matrix.target }} --clobber