Skip to content

add more testing and various improvements #4

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 19 commits into from
Aug 17, 2024
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
16 changes: 16 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,23 @@
# to native line endings on checkout.
*.py text eol=lf
*.rst text eol=lf
*.css text eol=lf
*.md text eol=lf
*.rs text eol=lf
*.yaml text eol=lf
*.toml text eol=lf
*.lock text eol=lf
*.yml text eol=lf
*.sh text eol=lf
*.cpp text eol=lf
*.hpp text eol=lf
*.patch text eol=lf
*.diff text eol=lf
.gitattributes text eol=lf
.gitmodules text eol=lf
.gitignore text eol=lf
*.txt text eol=lf
*.json text eol=lf
*.code-workspace text eol=lf
*.clang-tidy text eol=lf
*.clang-format text eol=lf
35 changes: 35 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates

version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: "weekly"
groups:
actions:
patterns:
- "*"
- package-ecosystem: pip
directory: cpp-linter-py/
schedule:
interval: "daily"
groups:
pip:
patterns:
- "*"
- package-ecosystem: cargo
directories:
- cpp-linter-lib/
- cpp-linter-py/
schedule:
interval: "daily"
ignore:
- dependency-name: cpp-linter-lib
groups:
cargo:
patterns:
- "*"
196 changes: 87 additions & 109 deletions .github/workflows/binary-builds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,118 +34,110 @@ jobs:
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
vendered: true
cross: true
- target: aarch64-unknown-linux-musl
os: ubuntu-latest
vendered: true
cross: true
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
vendered: false
cross: false
- target: x86_64-unknown-linux-musl
os: ubuntu-latest
vendered: true
cross: true
- target: arm-unknown-linux-gnueabi
os: ubuntu-latest
vendered: true
cross: true
- target: arm-unknown-linux-gnueabihf
os: ubuntu-latest
vendered: true
cross: true
- target: armv7-unknown-linux-gnueabihf
os: ubuntu-latest
vendered: true
cross: true
- target: powerpc-unknown-linux-gnu
os: ubuntu-latest
vendered: true
cross: true
- target: powerpc64-unknown-linux-gnu
os: ubuntu-latest
vendered: true
cross: true
- target: powerpc64le-unknown-linux-gnu
os: ubuntu-latest
vendered: true
cross: true
- target: s390x-unknown-linux-gnu
os: ubuntu-latest
vendered: true
cross: true
- target: aarch64-apple-darwin
os: macos-latest
vendered: true
cross: false
- target: x86_64-apple-darwin
os: macos-latest
vendered: true
cross: false
- target: x86_64-pc-windows-msvc
os: windows-latest
vendered: false
cross: false
- target: aarch64-pc-windows-msvc
os: windows-latest
vendered: false
cross: false
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

- uses: actions/setup-python@v5
if: startsWith(github.ref, 'refs/tags/')
with:
python-version: '3.x'

- name: Increment version
if: startsWith(github.ref, 'refs/tags/')
run: python .github/workflows/replace_version_spec.py --new-version=${{ github.ref_name }}

- 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: Install cross (cargo cross compiler)
if: matrix.cross
uses: taiki-e/install-action@v2
with:
tool: cross

- name: Build (native)
if: ${{ !matrix.cross }}
run: cargo build --manifest-path cpp-linter-lib/Cargo.toml --release --bin cpp-linter --target ${{ matrix.target }} ${{ matrix.vendered && '--features openssl-vendored' || '' }}

- 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: Build (cross)
if: matrix.cross
run: cross build --manifest-path cpp-linter-lib/Cargo.toml --release --bin cpp-linter --target ${{ matrix.target }} ${{ matrix.vendered && '--features openssl-vendored' || '' }}

- 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: Prepare artifacts
run: mv target/${{ matrix.target }}/release/cpp-linter${{ runner.os == 'Windows' && '.exe' || '' }} ./cpp-linter-${{ matrix.target }}${{ runner.os == 'Windows' && '.exe' || '' }}
- 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 }}
name: cpp-linter-${{ matrix.target }}
path: cpp-linter-${{ matrix.target }}*
if-no-files-found: error

create-release:
if: startswith(github.ref, 'refs/tags')
if: startswith(github.ref, 'refs/tagsv')
runs-on: ubuntu-latest
needs: [create-assets]
permissions:
Expand All @@ -156,38 +148,24 @@ jobs:
persist-credentials: false
- name: Install Rust
run: rustup update stable --no-self-update
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Increment version
run: python .github/workflows/replace_version_spec.py --new-version=${{ github.ref_name }}
- run: cargo package
- name: Download built assets
uses: actions/download-artifact@v4
with:
pattern: cpp-linter-*
path: dist
- 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: |
files=$(ls dist/cpp-linter*
gh release create ${{ github.ref_name }} --generate-notes $files
- 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
53 changes: 45 additions & 8 deletions .github/workflows/build-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,73 @@ name: Docs

on: [push, workflow_dispatch]

env:
CARGO_TERM_COLOR: always

jobs:
build:
permissions:
contents: write
cache-deps:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: rustup update --no-self-update
- name: Cache .cargo locked resources
uses: actions/cache@v4
with:
path: ~/.cargo
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}
- run: cargo fetch

build-sphinx:
runs-on: ubuntu-latest
needs: [cache-deps]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x

- name: Install docs dependencies
- name: Install dependencies
working-directory: cpp-linter-py
run: pip install -r docs/requirements.txt

- name: Cache .cargo locked resources
uses: actions/cache@v4
with:
path: ~/.cargo
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}

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

- name: upload docs build as artifact
- name: Upload docs build as artifact
uses: actions/upload-artifact@v4
with:
name: "cpp-linter-py-docs"
name: cpp-linter-py_docs
path: cpp-linter-py/docs/_build/html

- name: upload to github pages
- name: Upload to github pages
# only publish doc changes from main branch
if: github.ref == 'refs/heads/main'
uses: peaceiris/actions-gh-pages@v3
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: cpp-linter-py/docs/_build/html

build-rustdoc:
runs-on: ubuntu-latest
needs: [cache-deps]
steps:
- uses: actions/checkout@v4
- run: rustup update --no-self-update
- name: Cache .cargo locked resources
uses: actions/cache@v4
with:
path: ~/.cargo
key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }}
- run: cargo doc --no-deps --manifest-path cpp-linter-lib/Cargo.toml
- name: upload rustdoc build as artifact
uses: actions/upload-artifact@v4
with:
path: target/doc
name: cpp-linter-lib_docs
Loading