Skip to content
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
41 changes: 41 additions & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
Checks: '
*,
-llvmlibc-*,
-android-*,
-altera-*,
-fuchsia*,
-google-readability-todo,
-cppcoreguidelines-init-variables,
-cppcoreguidelines-pro-type-reinterpret-cast,
-llvm-namespace-comment,
-readability-implicit-bool-conversion,
-google-explicit-constructor,
-abseil-string-find-str-contains,
-readability-avoid-return-with-void-value,
-readability-convert-member-functions-to-static,

-google-readability-braces-around-statements,
-google-readability-namespace-comments,
-hicpp-special-member-functions,
-hicpp-braces-around-statements,
-hicpp-explicit-conversions
'

WarningsAsErrors: 'bugprone-exception-escape'
FormatStyle: 'none' # TODO: Replace with 'file' once we have a proper .clang-format file
InheritParentConfig: true
CheckOptions:
misc-include-cleaner.MissingIncludes: 'false'
misc-include-cleaner.IgnoreHeaders: 'CppSockets/OSDetection.*;.*Version.hpp'

bugprone-argument-comment.StrictMode: 1

# Readability
readability-braces-around-statements.ShortStatementLines: 2

readability-identifier-naming.NamespaceCase: CamelCase

readability-identifier-length.IgnoredVariableNames: "^(fd|nb|n|ss|ec|is|os|_.*)$"
readability-identifier-length.IgnoredParameterNames: "^(fd|n|is|os|_.*)$"

cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor: true
113 changes: 113 additions & 0 deletions .github/workflows/cmake-multi-platform.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: CMake on multiple platforms

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
types: [ "opened", "reopened", "synchronize", "ready_for_review" ]

jobs:
build:
runs-on: ${{ matrix.os }}

strategy:
# ensure we don't stop after 1 failure to always have a complete picture of what is failing
fail-fast: false

# Set up a matrix to run the following configurations:
# - ubuntu Debug/Release clang/gcc
# - windows Debug/Release cl
# - macos Debug/Release clang
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
build_type: [Release, Debug]
c_compiler: [gcc, clang, cl]
include:
- os: windows-latest
c_compiler: cl
cpp_compiler: cl
- os: ubuntu-latest
c_compiler: gcc
cpp_compiler: g++
- os: ubuntu-latest
c_compiler: clang
cpp_compiler: clang++
- os: macos-latest
c_compiler: clang
cpp_compiler: clang++
exclude:
- os: windows-latest
c_compiler: gcc
- os: windows-latest
c_compiler: clang
- os: ubuntu-latest
c_compiler: cl
- os: macos-latest
c_compiler: cl
- os: macos-latest
c_compiler: gcc

steps:
- uses: actions/checkout@v3

- name: Set Env
shell: bash
run: |
echo "BUILD_OUTPUT_DIR=${{ github.workspace }}/build" >> "$GITHUB_ENV"

- name: VCPKG Install (Windows)
if: runner.os == 'Windows'
uses: ./.github/workflows/windows-vcpkg
with:
key: ${{ runner.os }}-${{ matrix.build_type }}

- name: Configure CMake
# Configure CMake in a 'build' subdirectory.
# `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B ${{ env.BUILD_OUTPUT_DIR }}
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }}
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }}
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-DFILE_SHARE_BUILD_TESTS=TRUE
-S ${{ github.workspace }}

- name: Build
# Build your program with the given configuration. Note that --config is needed
# because the default Windows generator is a multi-config generator (Visual Studio generator).
run: cmake --build ${{ env.BUILD_OUTPUT_DIR }} --config ${{ matrix.build_type }}

- uses: actions/upload-artifact@v4
if: matrix.os == 'ubuntu-latest' && matrix.build_type == 'Release' && matrix.c_compiler == 'clang'
with:
name: compile_commands.json
path: ${{ env.BUILD_OUTPUT_DIR }}/compile_commands.json

- name: Test
working-directory: ${{ env.BUILD_OUTPUT_DIR }}
# Execute tests defined by the CMake configuration. Note that --build-config is needed
# because the default Windows generator is a multi-config generator (Visual Studio generator).
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ctest --build-config ${{ matrix.build_type }} --test-dir tests --output-on-failure

clang-tidy:
needs: 'build'
runs-on: ubuntu-latest
if: always() && github.event_name == 'pull_request'

steps:
- name: Checkout Code
uses: actions/checkout@v4

- uses: actions/download-artifact@v4
with:
name: compile_commands.json

- name: clang-tidy review
uses: ZedThree/clang-tidy-review@v0.21.0

# If there are any comments, fail the check
- if: steps.review.outputs.total_comments > 0
run: exit 1
128 changes: 128 additions & 0 deletions .github/workflows/code_scanning.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
name: "Code Scanning"

on:
push:
branches: [ "master" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "master" ]
schedule:
- cron: '20 3 * * 0'

jobs:
codeql:
name: CodeQL
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners
# Consider using larger runners for possible analysis time improvements.
runs-on: ubuntu-latest
timeout-minutes: 360
permissions:
actions: read
contents: read
security-events: write

steps:
- name: Checkout repository
uses: actions/checkout@v3

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: 'c-cpp'
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.

# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality


# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v3

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:c-cpp"

flawfinder:
name: Flawfinder
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: flawfinder_scan
uses: david-a-wheeler/flawfinder@2.0.19
with:
arguments: '--sarif ./'
output: 'flawfinder_results.sarif'

- name: Upload analysis results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: ${{github.workspace}}/flawfinder_results.sarif

microsoft-analyze:
permissions:
actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
name: Microsoft Analyze
runs-on: windows-latest

env:
# Path to the CMake build directory.
build: '${{ github.workspace }}/build'
config: 'Debug'

steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: VCPKG Install (Windows)
uses: ./.github/workflows/windows-vcpkg
with:
key: ${{ runner.os }}-${{ env.config }}

- name: Configure CMake
run: cmake -B ${{ env.build }} -DCMAKE_BUILD_TYPE=${{ env.config }}

# Build is not required unless generated source files are used
# - name: Build CMake
# run: cmake --build ${{ env.build }} --config ${{ env.config }}

- name: Run MSVC Code Analysis
uses: microsoft/msvc-code-analysis-action@v0.1.1
# Provide a unique ID to access the sarif output path
id: run-analysis
with:
cmakeBuildDirectory: ${{ env.build }}
buildConfiguration: ${{ env.config }}
# Ruleset file that will determine what checks will be run
ruleset: NativeRecommendedRules.ruleset
# Paths to ignore analysis of CMake targets and includes
# ignoredPaths: ${{ github.workspace }}/dependencies;${{ github.workspace }}/test

# Upload SARIF file to GitHub Code Scanning Alerts
- name: Upload SARIF to GitHub
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: ${{ steps.run-analysis.outputs.sarif }}

# # Upload SARIF file as an Artifact to download and view
# - name: Upload SARIF as an Artifact
# uses: actions/upload-artifact@v4
# with:
# name: sarif-file
# path: ${{ steps.run-analysis.outputs.sarif }}
37 changes: 37 additions & 0 deletions .github/workflows/windows-vcpkg/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Windows VCPKG

inputs:
key:
required: true
type: string

runs:
using: "composite"
steps:
- name: Set Env
shell: powershell
run: |
echo "VCPKG_ROOT=${env:VCPKG_INSTALLATION_ROOT}" | Out-File -FilePath $env:GITHUB_ENV -Append
echo "VCPKG_CACHE=${env:LOCALAPPDATA}\vcpkg\archives" | Out-File -FilePath $env:GITHUB_ENV -Append

- name: Fetch VCPKG Cache (Windows)
id: fetch-vcpkg-cache
if: runner.os == 'Windows'
uses: actions/cache/restore@v4
with:
key: ${{ inputs.key }}-vcpkg-${{ hashFiles('vcpkg.json') }}
path: ${{ env.VCPKG_CACHE }}

- name: VCPKG Install (Windows)
if: runner.os == 'Windows'
shell: powershell
run: |
echo "CMAKE_TOOLCHAIN_FILE=${env:VCPKG_ROOT}\scripts\buildsystems\vcpkg.cmake" | Out-File -FilePath $env:GITHUB_ENV -Append
vcpkg install

- name: Always Save VCPKG Cache (Windows)
if: always() && runner.os == 'Windows' && steps.fetch-vcpkg-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
key: ${{ steps.fetch-vcpkg-cache.outputs.cache-primary-key }}
path: ${{ env.VCPKG_CACHE }}
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ compile_commands.json

*.tmp
*.gch
*.pch
vgcore.*

.vscode
.vscode/
.cache/
Loading
Loading