mirror of https://github.com/wb2osz/direwolf.git
github actions implementation (#396)
* Create codeql-analysis.yml * cmake: add support for Visual Studio 2019 * enable github actions (aka continuous integration) basic implementation to enable github actions with: - triggered each push or pull request - built on ubuntu (multiple version), macOS, windows - the binary has debug facilities enabled - ignore any commit/push on the .github folder - run all tests - create an archive with binaries (available for 90 days) - can manually triggered setting custom cmake flags * cmake: fix MSVC check * github actions: remove ubuntu 18.04; add ubuntu 22.04 * github actions: fix windows ci --------- Co-authored-by: wb2osz <wb2osz@comcast.net>
This commit is contained in:
parent
fedfef92cd
commit
0f92f463f4
|
@ -0,0 +1,170 @@
|
|||
name: 'build direwolf'
|
||||
|
||||
on:
|
||||
# permit to manually trigger the CI
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
cmake_flags:
|
||||
description: 'Custom CMAKE flags'
|
||||
required: false
|
||||
push:
|
||||
paths-ignore:
|
||||
- '.github/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- '.github/**'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: ${{ matrix.config.name }}
|
||||
runs-on: ${{ matrix.config.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
config:
|
||||
- {
|
||||
name: 'Windows Latest MinGW 64bit',
|
||||
os: windows-latest,
|
||||
cc: 'x86_64-w64-mingw32-gcc',
|
||||
cxx: 'x86_64-w64-mingw32-g++',
|
||||
ar: 'x86_64-w64-mingw32-ar',
|
||||
windres: 'x86_64-w64-mingw32-windres',
|
||||
arch: 'x86_64',
|
||||
build_type: 'Release',
|
||||
cmake_extra_flags: '-G "MinGW Makefiles"'
|
||||
}
|
||||
- {
|
||||
name: 'Windows 2019 MinGW 32bit',
|
||||
os: windows-2019,
|
||||
cc: 'i686-w64-mingw32-gcc',
|
||||
cxx: 'i686-w64-mingw32-g++',
|
||||
ar: 'i686-w64-mingw32-ar',
|
||||
windres: 'i686-w64-mingw32-windres',
|
||||
arch: 'i686',
|
||||
build_type: 'Release',
|
||||
cmake_extra_flags: '-G "MinGW Makefiles"'
|
||||
}
|
||||
- {
|
||||
name: 'macOS latest',
|
||||
os: macos-latest,
|
||||
cc: 'clang',
|
||||
cxx: 'clang++',
|
||||
arch: 'x86_64',
|
||||
build_type: 'Release',
|
||||
cmake_extra_flags: ''
|
||||
}
|
||||
- {
|
||||
name: 'Ubuntu latest Debug',
|
||||
os: ubuntu-latest,
|
||||
cc: 'gcc',
|
||||
cxx: 'g++',
|
||||
arch: 'x86_64',
|
||||
build_type: 'Debug',
|
||||
cmake_extra_flags: ''
|
||||
}
|
||||
- {
|
||||
name: 'Ubuntu 22.04',
|
||||
os: ubuntu-22.04,
|
||||
cc: 'gcc',
|
||||
cxx: 'g++',
|
||||
arch: 'x86_64',
|
||||
build_type: 'Release',
|
||||
cmake_extra_flags: ''
|
||||
}
|
||||
- {
|
||||
name: 'Ubuntu 20.04',
|
||||
os: ubuntu-20.04,
|
||||
cc: 'gcc',
|
||||
cxx: 'g++',
|
||||
arch: 'x86_64',
|
||||
build_type: 'Release',
|
||||
cmake_extra_flags: ''
|
||||
}
|
||||
- {
|
||||
name: 'Ubuntu 18.04',
|
||||
os: ubuntu-18.04,
|
||||
cc: 'gcc',
|
||||
cxx: 'g++',
|
||||
arch: 'x86_64',
|
||||
build_type: 'Release',
|
||||
cmake_extra_flags: ''
|
||||
}
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 8
|
||||
- name: dependency
|
||||
shell: bash
|
||||
run: |
|
||||
# this is not perfect but enought for now
|
||||
if [ "$RUNNER_OS" == "Linux" ]; then
|
||||
sudo apt-get update
|
||||
sudo apt-get install libasound2-dev libudev-dev libhamlib-dev gpsd
|
||||
elif [ "$RUNNER_OS" == "macOS" ]; then
|
||||
# just to simplify I use homebrew but
|
||||
# we can use macports (latest direwolf is already available as port)
|
||||
brew install portaudio hamlib gpsd
|
||||
elif [ "$RUNNER_OS" == "Windows" ]; then
|
||||
# add the folder to PATH
|
||||
echo "C:\msys64\mingw32\bin" >> $GITHUB_PATH
|
||||
fi
|
||||
- name: create build environment
|
||||
run: |
|
||||
cmake -E make_directory ${{github.workspace}}/build
|
||||
- name: configure
|
||||
shell: bash
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: |
|
||||
if [ "$RUNNER_OS" == "Windows" ]; then
|
||||
export CC=${{ matrix.config.cc }}
|
||||
export CXX=${{ matrix.config.cxx }}
|
||||
export AR=${{ matrix.config.ar }}
|
||||
export WINDRES=${{ matrix.config.windres }}
|
||||
fi
|
||||
cmake $GITHUB_WORKSPACE \
|
||||
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \
|
||||
-DCMAKE_C_COMPILER=${{ matrix.config.cc }} \
|
||||
-DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} \
|
||||
-DCMAKE_CXX_FLAGS="-Werror" -DUNITTEST=1 \
|
||||
${{ matrix.config.cmake_extra_flags }} \
|
||||
${{ github.event.inputs.cmake_flags }}
|
||||
- name: build
|
||||
shell: bash
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: |
|
||||
if [ "$RUNNER_OS" == "Windows" ]; then
|
||||
export CC=${{ matrix.config.cc }}
|
||||
export CXX=${{ matrix.config.cxx }}
|
||||
export AR=${{ matrix.config.ar }}
|
||||
export WINDRES=${{ matrix.config.windres }}
|
||||
fi
|
||||
cmake --build . --config ${{ matrix.config.build_type }} \
|
||||
${{ github.event.inputs.cmake_flags }}
|
||||
- name: test
|
||||
continue-on-error: true
|
||||
shell: bash
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: |
|
||||
ctest -C ${{ matrix.config.build_type }} \
|
||||
--parallel 2 --output-on-failure \
|
||||
${{ github.event.inputs.cmake_flags }}
|
||||
- name: package
|
||||
shell: bash
|
||||
working-directory: ${{github.workspace}}/build
|
||||
run: |
|
||||
if [ "$RUNNER_OS" == "Windows" ] || [ "$RUNNER_OS" == "macOS" ]; then
|
||||
make package
|
||||
fi
|
||||
- name: archive binary
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: direwolf_${{ matrix.config.os }}_${{ matrix.config.arch }}_${{ github.sha }}
|
||||
path: |
|
||||
${{github.workspace}}/build/direwolf-*.zip
|
||||
${{github.workspace}}/build/direwolf.conf
|
||||
${{github.workspace}}/build/src/*
|
||||
${{github.workspace}}/build/CMakeCache.txt
|
||||
!${{github.workspace}}/build/src/cmake_install.cmake
|
||||
!${{github.workspace}}/build/src/CMakeFiles
|
||||
!${{github.workspace}}/build/src/Makefile
|
|
@ -0,0 +1,73 @@
|
|||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ dev ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ dev ]
|
||||
schedule:
|
||||
- cron: '25 8 * * 4'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'cpp', 'python' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# 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.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
- run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake -DUNITTEST=1 ..
|
||||
make
|
||||
make test
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
|
@ -167,15 +167,16 @@ elseif(APPLE)
|
|||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_MACOS_DNSSD")
|
||||
|
||||
elseif (WIN32)
|
||||
if(NOT VS2015 AND NOT VS2017)
|
||||
message(FATAL_ERROR "You must use Microsoft Visual Studio 2015 or 2017 as compiler")
|
||||
endif()
|
||||
|
||||
if(C_MSVC)
|
||||
if (NOT VS2015 AND NOT VS2017 AND NOT VS2019)
|
||||
message(FATAL_ERROR "You must use Microsoft Visual Studio 2015, 2017 or 2019 as compiler")
|
||||
else()
|
||||
# compile with full multicore
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
||||
|
||||
set(CUSTOM_SHELL_BIN "")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (C_CLANG OR C_GCC)
|
||||
|
|
|
@ -5,7 +5,9 @@ elseif(NOT DEFINED C_GCC AND CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
|||
set(C_GCC 1)
|
||||
elseif(NOT DEFINED C_MSVC AND CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
set(C_MSVC 1)
|
||||
if(MSVC_VERSION GREATER 1910 AND MSVC_VERSION LESS 1919)
|
||||
if(MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS_EQUAL 1929)
|
||||
set(VS2019 ON)
|
||||
elseif(MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS_EQUAL 1919)
|
||||
set(VS2017 ON)
|
||||
elseif(MSVC_VERSION GREATER 1899 AND MSVC_VERSION LESS 1910)
|
||||
set(VS2015 ON)
|
||||
|
|
Loading…
Reference in New Issue