mirror of
https://github.com/akuker/RASCSI.git
synced 2026-10-26 04:02:17 +00:00
151 lines
4.7 KiB
YAML
151 lines
4.7 KiB
YAML
name: C++ Tests; Full Static Analysis
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- develop
|
|
- main
|
|
paths:
|
|
- '.github/workflows/cpp.yml'
|
|
- 'cpp/**'
|
|
- 'go/**'
|
|
- 'proto/**'
|
|
pull_request:
|
|
branches:
|
|
- develop
|
|
- main
|
|
types:
|
|
- opened
|
|
- synchronize
|
|
- reopened
|
|
paths:
|
|
- '.github/workflows/cpp.yml'
|
|
- 'cpp/**'
|
|
- 'go/**'
|
|
- 'proto/**'
|
|
|
|
env:
|
|
APT_PACKAGES: groff libspdlog-dev libpcap-dev libevdev2 libev-dev protobuf-compiler libgtest-dev libgmock-dev meson ninja-build
|
|
GO_VERSION: '1.25.13'
|
|
|
|
jobs:
|
|
unit_tests:
|
|
runs-on: ubuntu-24.04
|
|
defaults:
|
|
run:
|
|
working-directory: cpp
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Install dependencies
|
|
run: sudo apt-get install ${{ env.APT_PACKAGES }}
|
|
|
|
- name: Build unit tests
|
|
run: DEBUG=1 make -j $(nproc) test
|
|
|
|
- name: Run unit tests
|
|
run: (set -o pipefail && GTEST_SHUFFLE=1 bin/piscsi_test | tee piscsi_test_log.txt)
|
|
|
|
- name: Upload logs
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: piscsi_test_log.txt
|
|
path: cpp/piscsi_test_log.txt
|
|
|
|
unit_tests_meson:
|
|
runs-on: ubuntu-24.04
|
|
defaults:
|
|
run:
|
|
working-directory: .
|
|
steps:
|
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
|
|
- name: Install dependencies
|
|
run: sudo apt-get install ${{ env.APT_PACKAGES }}
|
|
|
|
- name: Configure build
|
|
run: meson setup build
|
|
|
|
- name: Build unit tests
|
|
run: meson compile -C build
|
|
|
|
- name: Run unit tests
|
|
run: GTEST_SHUFFLE=1 meson test -C build
|
|
|
|
- name: Upload logs
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: testlog.txt
|
|
path: build/meson-logs/testlog.txt
|
|
|
|
sonarcloud:
|
|
runs-on: ubuntu-24.04
|
|
if: >
|
|
(github.event_name == 'push' && github.actor != 'dependabot[bot]' && github.actor != 'dependabot') || (github.event_name
|
|
== 'pull_request' && !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' && github.actor
|
|
!= 'dependabot')
|
|
env:
|
|
BUILD_WRAPPER_OUT_DIR: ${{ github.workspace }}/.build_wrapper_out
|
|
steps:
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Install dependencies
|
|
run: sudo apt-get install ${{ env.APT_PACKAGES }}
|
|
|
|
- uses: actions/setup-go@v7
|
|
with:
|
|
go-version: ${{ env.GO_VERSION }}
|
|
cache-dependency-path: go/go.sum
|
|
|
|
- name: Install Build Wrapper
|
|
uses: SonarSource/sonarqube-scan-action/install-build-wrapper@22918119ff8e1ca75a623e15c8296b6ea4fbe28f # v8.2.1
|
|
|
|
- name: Generate coverage and compilation database
|
|
run: |
|
|
mkdir -p "${{ env.BUILD_WRAPPER_OUT_DIR }}"
|
|
build-wrapper-linux-x86-64 --out-dir "${{ env.BUILD_WRAPPER_OUT_DIR }}" \
|
|
make -j "$(nproc)" -C cpp coverage
|
|
|
|
- name: Validate compilation database
|
|
env:
|
|
COMPILATION_DATABASE: >-
|
|
${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json
|
|
run: |
|
|
test -s "$COMPILATION_DATABASE"
|
|
jq -e 'type == "array" and length > 0' "$COMPILATION_DATABASE" > /dev/null
|
|
jq -r '.[].file' "$COMPILATION_DATABASE" | sort -u \
|
|
| wc -l
|
|
|
|
- name: Run gcov
|
|
working-directory: cpp
|
|
run: gcov --preserve-paths $(find -name '*.gcno')
|
|
|
|
- name: Generate Go sources
|
|
working-directory: go
|
|
run: |
|
|
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.36.11
|
|
export PATH="$(go env GOPATH)/bin:$PATH"
|
|
make proto
|
|
|
|
- name: Generate Go coverage
|
|
working-directory: go
|
|
run: go test -tags nomsgpack -coverprofile=coverage.txt -covermode=atomic ./...
|
|
|
|
- name: Run sonar-scanner
|
|
uses: sonarsource/sonarqube-scan-action@22918119ff8e1ca75a623e15c8296b6ea4fbe28f # v8.2.1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
|
with:
|
|
args: |
|
|
--define sonar.cfamily.compile-commands=${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json
|
|
--define sonar.projectKey=akuker-PISCSI
|
|
--define sonar.organization=piscsi
|
|
--define sonar.sources=cpp,go
|
|
--define sonar.cfamily.gcov.reportsPath=cpp
|
|
--define sonar.go.coverage.reportPaths=go/coverage.txt
|
|
--define sonar.coverage.exclusions=cpp/test/**,go/**/*_test.go
|
|
--define sonar.cpd.exclusions=cpp/test/**
|