Files
cproof/.github/workflows/ci-code.yml
jabber.developer2 adc5e26689
All checks were successful
CI Code / Check spelling (pull_request) Successful in 18s
CI Code / Check coding style (pull_request) Successful in 32s
CI Code / Code Coverage (pull_request) Successful in 4m47s
CI Code / Linux (debian) (pull_request) Successful in 6m37s
CI Code / Linux (ubuntu) (pull_request) Successful in 6m39s
CI Code / Linux (arch) (pull_request) Successful in 6m49s
ci: integrate coverage into linux arch job, remove duplicate
- Linux arch job now uploads coverage.info as artifact
- ci-build.sh saves coverage.info before cleanup
- Removed separate coverage job (was duplicating arch build)
- Saves ~25% CI time by eliminating redundant build
2026-01-29 17:01:39 +03:00

110 lines
3.2 KiB
YAML

name: CI Code
on:
push:
branches: [master]
paths-ignore:
- 'docs/**'
- 'apidocs/**'
- 'README.md'
pull_request:
branches: [master]
paths-ignore:
- 'docs/**'
- 'apidocs/**'
- 'README.md'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
linux:
runs-on: ubuntu-latest
strategy:
matrix:
flavor: [arch, debian, ubuntu]
name: Linux
steps:
- uses: actions/checkout@v4
- name: Run tests
run: |
docker build -f Dockerfile.${{ matrix.flavor }} -t profanity .
docker run profanity ./ci-build.sh
code-style:
runs-on: ubuntu-latest
name: Check coding style
continue-on-error: true
env:
GITHUB_WORKSPACE: ${{ runner.workspace }}
steps:
- uses: actions/checkout@v4
# if this check fails, you have to update the number of auto types known and the list of auto types in the check below
- name: Check auto types are up-to-date
run: |
[[ "$(find src -type f -name '*.[ch]' -exec awk '/^#define auto_[\W]*/ {print $2}' '{}' \; | sort -u | wc -l)" == "8" ]] || exit -1
- name: Check auto types are initialized
run: |
grep -P 'auto_(char|gchar|gcharv|guchar|jid|sqlite|gfd|FILE)[\w *]*;$' -r src && exit -1 || true
- name: Install clang-format
run: |
sudo apt-get update
sudo apt-get install -y clang-format
- name: Run clang-format check
run: |
echo $(clang-format --version)
# Find all source files you care about
INCLUDE_REGEX='^.*\.((((c|C)(c|pp|xx|\+\+)?$)|((h|H)h?(pp|xx|\+\+)?$))|(ino|pde|proto|cu))$'
CHECK_PATH='src'
files=$(find "$CHECK_PATH" -name .git -prune -o -regextype posix-egrep -regex "$INCLUDE_REGEX" -print)
if [ -z "$files" ]; then
echo "✅ No source files found to check."
exit 0
fi
# Run clang-format in dry-run mode and collect any improperly formatted files
failed=0
for file in $files; do
if ! output=$(clang-format --dry-run --Werror --style=file "$file" 2>&1); then
echo "❌ Failed on file: $file"
echo "$output"
echo "----------------------------------------"
failed=1
fi
done
if [ $failed -ne 0 ]; then
echo "🚫 One or more files are not properly formatted."
else
echo "✅ All files are properly formatted."
fi
exit $failed
spell-check:
runs-on: ubuntu-latest
name: Check spelling
continue-on-error: true
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt update
sudo apt install -y --no-install-recommends codespell
- name: Check spelling
run: |
codespell
coverage:
runs-on: ubuntu-latest
name: Code Coverage
steps:
- uses: actions/checkout@v4
- name: Build and run coverage
run: |
docker build -f Dockerfile.arch -t profanity-cov .
docker run profanity-cov ./ci-build.sh --coverage-only