Skip to content

Commit

Permalink
adjust CI
Browse files Browse the repository at this point in the history
add openSSL to envs that don't ship with it.

add workflow to build binaries (intended for release and nightly).

fix git.rs unit tests

don't let maturin CI fail fast

use openssl-vendored feature for build envs that can't use native openssl
  • Loading branch information
2bndy5 committed Dec 30, 2023
1 parent bdfac71 commit 192622a
Show file tree
Hide file tree
Showing 8 changed files with 272 additions and 57 deletions.
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@
*.sh text eol=lf
*.cpp text eol=lf
*.hpp text eol=lf
*.patch text eol=lf
182 changes: 182 additions & 0 deletions .github/workflows/binary-builds.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
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
- 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: |
if [[ "${{matrix.target}}" == *musl ]]; then
sudo apt-get install musl-dev musl-tools
else
sudo apt-get install gcc-11-aarch64-linux-gnu binutils-aarch64-linux-gnu
fi
- name: Install musl-gcc (fom 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=true" >> $GITHUB_OUTPUT
;;
*)
echo "enabled=false" >> $GITHUB_OUTPUT
;;
esac
- name: Checkout
uses: actions/checkout@v4

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
target: ${{ matrix.target }}

- name: Build (openssl-vendored)
if: steps.is-openssl-vendored.outputs.enabled == 'true'
run: cargo build --release --target ${{ matrix.target }} --features openssl-vendored
- name: Build (no openssl-vendored)
if: steps.is-openssl-vendored.outputs.enabled == 'false'
run: cargo build --release --target ${{ matrix.target }}

- 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
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

upload-assets:
needs: [create-release]
runs-on: ubuntu-latest
strategy:
matrix:
include:
- target: aarch64-unknown-linux-gnu
- target: aarch64-unknown-linux-musl
- target: x86_64-unknown-linux-gnu
- target: x86_64-unknown-linux-musl
- target: aarch64-apple-darwin
- target: x86_64-apple-darwin
- target: universal-apple-darwin
- target: 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
47 changes: 28 additions & 19 deletions .github/workflows/python-packaging.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
# This file is autogenerated by maturin v1.2.3
# To update, run
#
# maturin generate-ci github
#
name: Python packaging

on:
Expand All @@ -22,29 +17,44 @@ jobs:
linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target: [x86_64, x86, aarch64, armv7, s390x, ppc64le]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'

- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
sccache: 'true'
manylinux: auto
before-script-linux: |
case "${{ matrix.target }}" in
"aarch64" | "armv7" | "s390x" | "ppc64le")
# NOTE: pypa/manylinux docker images are Debian based
sudo apt-get update
sudo apt-get install -y pkg-config libssl-dev
;;
"x86" | "x86_64")
# NOTE: rust-cross/manylinux docker images are CentOS based
yum update -y
yum install -y openssl openssl-devel
;;
esac
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels
path: dist
name: wheels-linux-${{ matrix.target }}
path: dist/*

windows:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
target: [x64, x86]
steps:
Expand All @@ -58,16 +68,16 @@ jobs:
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
sccache: 'true'
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels
path: dist
name: wheels-windows-${{ matrix.target }}
path: dist/*

macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
target: [x86_64, aarch64]
steps:
Expand All @@ -79,13 +89,12 @@ jobs:
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
sccache: 'true'
args: --release --out dist --find-interpreter --features openssl-vendored
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels
path: dist
name: wheels-macos-${{ matrix.target }}
path: dist/*

sdist:
runs-on: ubuntu-latest
Expand All @@ -99,8 +108,8 @@ jobs:
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: wheels
path: dist
name: wheels-sdist
path: dist/*

release:
name: Release
Expand All @@ -110,11 +119,11 @@ jobs:
steps:
- uses: actions/download-artifact@v4
with:
name: wheels
path: dist
- name: Publish to PyPI
uses: PyO3/maturin-action@v1
env:
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
with:
command: upload
args: --non-interactive --skip-existing *
args: --non-interactive --skip-existing dist/*
Loading

0 comments on commit 192622a

Please sign in to comment.