Skip to content

Commit

Permalink
use separate crates for different entry points (#2)
Browse files Browse the repository at this point in the history
* skip building `aarch64-unknown-linux-musl` target
   I GIVE UP
   Has something to do with cross-compiling OpenSSL.
   I don't think all the cross-compiling env vars are propagated to the custom build script in `openssl-sys` crate.
  • Loading branch information
2bndy5 authored Dec 31, 2023
1 parent 2e25fec commit 0c24290
Show file tree
Hide file tree
Showing 79 changed files with 833,548 additions and 6 deletions.
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

0 comments on commit 0c24290

Please sign in to comment.