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")
 | 
					  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_MACOS_DNSSD")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
elseif (WIN32)
 | 
					elseif (WIN32)
 | 
				
			||||||
  if(NOT VS2015 AND NOT VS2017)
 | 
					  if(C_MSVC)
 | 
				
			||||||
    message(FATAL_ERROR "You must use Microsoft Visual Studio 2015 or 2017 as compiler")
 | 
					    if (NOT VS2015 AND NOT VS2017 AND NOT VS2019)
 | 
				
			||||||
  endif()
 | 
					      message(FATAL_ERROR "You must use Microsoft Visual Studio 2015, 2017 or 2019 as compiler")
 | 
				
			||||||
 | 
					    else()
 | 
				
			||||||
      # compile with full multicore
 | 
					      # compile with full multicore
 | 
				
			||||||
      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
 | 
					      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
 | 
				
			||||||
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
 | 
					      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
 | 
				
			||||||
 | 
					 | 
				
			||||||
      set(CUSTOM_SHELL_BIN "")
 | 
					      set(CUSTOM_SHELL_BIN "")
 | 
				
			||||||
 | 
					    endif()
 | 
				
			||||||
 | 
					  endif()
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (C_CLANG OR C_GCC)
 | 
					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)
 | 
					  set(C_GCC 1)
 | 
				
			||||||
elseif(NOT DEFINED C_MSVC AND CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
 | 
					elseif(NOT DEFINED C_MSVC AND CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
 | 
				
			||||||
  set(C_MSVC 1)
 | 
					  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)
 | 
					    set(VS2017 ON)
 | 
				
			||||||
  elseif(MSVC_VERSION GREATER 1899 AND MSVC_VERSION LESS 1910)
 | 
					  elseif(MSVC_VERSION GREATER 1899 AND MSVC_VERSION LESS 1910)
 | 
				
			||||||
    set(VS2015 ON)
 | 
					    set(VS2015 ON)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue