Skip to content

use separate crates for different entry points #2

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

Merged
merged 3 commits into from
Dec 31, 2023
Merged
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
193 changes: 193 additions & 0 deletions .github/workflows/binary-builds.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
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
35 changes: 35 additions & 0 deletions .github/workflows/build-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
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
working-directory: cpp-linter-py
run: pip install -r docs/requirements.txt

- name: Build docs
working-directory: cpp-linter-py
run: sphinx-build docs docs/_build/html

- name: upload docs build as artifact
uses: actions/upload-artifact@v4
with:
name: "cpp-linter-py-docs"
path: cpp-linter-py/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: cpp-linter-py/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
Loading