Skip to content

Migration to rust #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto

# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.py text eol=lf
*.rst text eol=lf
*.sh text eol=lf
*.cpp text eol=lf
*.hpp text eol=lf
*.patch text eol=lf
3 changes: 3 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# These are supported funding model platforms

github: 2bndy5
1 change: 1 addition & 0 deletions .github/stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
_extends: .github
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-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 --bin cpp-linter-cli --target ${{ matrix.target }} --features openssl-vendored
- name: Build (no openssl-vendored)
if: steps.is-openssl-vendored.outputs.enabled == 'false'
run: cargo build --release --bin cpp-linter-cli --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
33 changes: 33 additions & 0 deletions .github/workflows/build-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Docs

on: [push, workflow_dispatch]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: 3.x

- name: Install docs dependencies
run: pip install -r docs/requirements.txt

- name: Build docs
run: sphinx-build docs docs/_build/html

- name: upload docs build as artifact
uses: actions/upload-artifact@v4
with:
name: "cpp-linter_docs"
path: ${{ github.workspace }}/docs/_build/html

- name: upload to github pages
# only publish doc changes from main branch
if: github.ref == 'refs/heads/main'
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/_build/html
17 changes: 17 additions & 0 deletions .github/workflows/pre-commit-hooks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: Pre-commit

on:
push:
pull_request:
types: opened

jobs:
check-source-files:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- run: python3 -m pip install pre-commit
- run: pre-commit run --all-files
139 changes: 139 additions & 0 deletions .github/workflows/python-packaging.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
name: Python packaging

on:
push:
branches:
- main
- master
tags:
- '*'
pull_request:
workflow_dispatch:

permissions:
contents: read

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: Calculate openssl-vendored
shell: bash
id: is-openssl-vendored
run: |
if [[ "${{ startsWith(matrix.target, 'x86') }}" == "true" ]]; then
echo "enabled=" >> $GITHUB_OUTPUT
else
echo "enabled=--features openssl-vendored" >> $GITHUB_OUTPUT
fi

- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter ${{ steps.is-openssl-vendored.outputs.enabled }}
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-linux-${{ matrix.target }}
path: dist/*

windows:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
target: [x64, x86]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
architecture: ${{ matrix.target }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-windows-${{ matrix.target }}
path: dist/*

macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
target: [x86_64, aarch64]
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 --features openssl-vendored
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.target }}
path: dist/*

sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: dist/*

release:
name: Release
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
needs: [linux, windows, macos, sdist]
steps:
- uses: actions/download-artifact@v4
with:
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 dist/*
Loading