BuildAllAndRelease #38
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: BuildAllAndRelease | |
on: | |
workflow_dispatch: | |
branches: [main] | |
inputs: | |
release_tag_name: | |
description: 'release tag name e.g. "knx_vx.y.z"' | |
required: true | |
env: | |
MATRIX: "{ | |
\"config\": [ | |
{ | |
\"name\": \"Windows Latest MSVC\", | |
\"artifact\": \"Windows-MSVC.tar.xz\", | |
\"os\": \"windows-latest\", | |
\"build_type\": \"Release\", | |
\"cc\": \"cl\", | |
\"cxx\": \"cl\", | |
\"environment_script\": \"C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat\", | |
\"option\": \"-D OC_OSCORE_ENABLED=OFF -DUSE_CONSOLE=OFF\", | |
\"option_name\": \"unsecured\", | |
}, | |
{ | |
\"name\": \"Windows Latest MSVC\", | |
\"artifact\": \"Windows-MSVC.tar.xz\", | |
\"os\": \"windows-latest\", | |
\"build_type\": \"Release\", | |
\"cc\": \"cl\", | |
\"cxx\": \"cl\", | |
\"environment_script\": \"C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat\", | |
\"option\": \"-D OC_OSCORE_ENABLED=ON -DUSE_CONSOLE=OFF\", | |
\"option_name\": \"secured\", | |
}, | |
{ | |
\"name\": \"Windows Latest MSVC\", | |
\"artifact\": \"Windows-MSVC.tar.xz\", | |
\"os\": \"windows-latest\", | |
\"build_type\": \"Release\", | |
\"cc\": \"cl\", | |
\"cxx\": \"cl\", | |
\"environment_script\": \"C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat\", | |
\"option\": \"-D OC_OSCORE_ENABLED=ON -DUSE_CONSOLE=OFF -DOC_DNS_SD_ENABLED=ON\", | |
\"option_name\": \"secured_mdns\", | |
}, | |
{ | |
\"name\": \"Windows Latest MSVC\", | |
\"artifact\": \"Windows-MSVC.tar.xz\", | |
\"os\": \"windows-latest\", | |
\"build_type\": \"Release\", | |
\"cc\": \"cl\", | |
\"cxx\": \"cl\", | |
\"environment_script\": \"C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat\", | |
\"option\": \"-D OC_OSCORE_ENABLED=ON -DUSE_CONSOLE=ON\", | |
\"option_name\": \"secured_debuginfo\", | |
}, | |
] | |
}" | |
jobs: | |
# Makes the matrix available to use | |
setup: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- id: set-matrix | |
run: echo "matrix=$MATRIX" >> $GITHUB_OUTPUT | |
# Builds KNX virtual applications for windows | |
windowsBuilds: | |
needs: setup | |
name: Build ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: false | |
matrix: ${{ fromJSON(needs.setup.outputs.matrix) }} | |
steps: | |
- uses: actions/checkout@v1 | |
- name: Checkout Submodules | |
run: git submodule update --init --recursive | |
- name: Download Ninja and CMake | |
id: cmake_and_ninja | |
shell: cmake -P {0} | |
run: | | |
set(ninja_version "1.9.0") | |
set(cmake_version "3.25.2") | |
message(STATUS "Using host CMake version: ${CMAKE_VERSION}") | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(ninja_suffix "win.zip") | |
set(cmake_suffix "win64-x64.zip") | |
set(cmake_dir "cmake-${cmake_version}-win64-x64/bin") | |
elseif ("${{ runner.os }}" STREQUAL "Linux") | |
set(ninja_suffix "linux.zip") | |
set(cmake_suffix "Linux-x86_64.tar.gz") | |
set(cmake_dir "cmake-${cmake_version}-Linux-x86_64/bin") | |
elseif ("${{ runner.os }}" STREQUAL "macOS") | |
set(ninja_suffix "mac.zip") | |
set(cmake_suffix "Darwin-x86_64.tar.gz") | |
set(cmake_dir "cmake-${cmake_version}-Darwin-x86_64/CMake.app/Contents/bin") | |
endif() | |
set(ninja_url "https://github.com/ninja-build/ninja/releases/download/v${ninja_version}/ninja-${ninja_suffix}") | |
file(DOWNLOAD "${ninja_url}" ./ninja.zip SHOW_PROGRESS) | |
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ninja.zip) | |
set(cmake_url "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/cmake-${cmake_version}-${cmake_suffix}") | |
file(DOWNLOAD "${cmake_url}" ./cmake.zip SHOW_PROGRESS) | |
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./cmake.zip) | |
# Save the path for other steps | |
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir) | |
message("cmake_dir=${cmake_dir}" >> $GITHUB_OUTPUT) | |
if (NOT "${{ runner.os }}" STREQUAL "Windows") | |
execute_process( | |
COMMAND chmod +x ninja | |
COMMAND chmod +x ${cmake_dir}/cmake | |
) | |
endif() | |
- name: folder creation | |
run: | | |
mkdir win_build_${{ matrix.config.option_name }} | |
cd win_build_${{ matrix.config.option_name }} | |
ls | |
- name: Configure | |
shell: cmake -P {0} | |
run: | | |
set(ENV{CC} ${{ matrix.config.cc }}) | |
set(ENV{CXX} ${{ matrix.config.cxx }}) | |
if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") | |
execute_process( | |
COMMAND "${{ matrix.config.environment_script }}" && set | |
OUTPUT_FILE environment_script_output.txt | |
) | |
file(STRINGS environment_script_output.txt output_lines) | |
foreach(line IN LISTS output_lines) | |
if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") | |
set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") | |
endif() | |
endforeach() | |
endif() | |
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/ninja" ninja_program) | |
execute_process( | |
COMMAND cmake | |
-S . | |
-B win_build_${{ matrix.config.option_name }} | |
-D CMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.option }} | |
-G Ninja | |
-D CMAKE_MAKE_PROGRAM=${ninja_program} | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
- name: Build | |
shell: cmake -P {0} | |
run: | | |
set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") | |
if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") | |
file(STRINGS environment_script_output.txt output_lines) | |
foreach(line IN LISTS output_lines) | |
if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") | |
set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") | |
endif() | |
endforeach() | |
endif() | |
execute_process( | |
COMMAND cmake --build win_build_${{ matrix.config.option_name }} | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "Bad exit status") | |
endif() | |
- name: ls | |
run: | | |
cd win_build_${{ matrix.config.option_name }} | |
ls | |
- name: Upload executable ${{ matrix.config.option_name }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: windows_knx_iot_virtual_${{ matrix.config.option_name }} | |
path: | | |
./win_build_${{ matrix.config.option_name }}/knx_iot_virtual_gui_sa.exe | |
./win_build_${{ matrix.config.option_name }}/knx_iot_virtual_gui_pb.exe | |
# Build linux secured | |
linuxSecured: | |
needs: setup | |
# NOTE: Not building with ubuntu-latest on purpose, because that results | |
# in binaries that can only be run on linux machines with newest version, | |
# that have glibc 2.34. | |
# Using ubuntu-20.04 drops that requirement to glibc 2.31. | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Build secured linux binaries | |
run: | | |
# https://github.com/actions/checkout/issues/81 | |
auth_header="$(git config --local --get http.https://github.com/.extraheader)" | |
git submodule sync --recursive | |
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 | |
# create the make files in a subfolder | |
mkdir linuxbuild | |
cd linuxbuild | |
cmake ../. -DOC_OSCORE_ENABLED=ON | |
make all | |
- name: View generated binaries | |
run: | | |
cd linuxbuild | |
ls | |
- name: Upload secured linux binaries | |
uses: actions/upload-artifact@v3 | |
with: | |
name: linux_knx_iot_virtual_secured | |
path: | | |
./linuxbuild/knx_iot_virtual_sa | |
./linuxbuild/knx_iot_virtual_pb | |
# Build linux unsecured | |
linuxUnsecured: | |
needs: setup | |
# NOTE: Not building with ubuntu-latest on purpose, because that results | |
# in binaries that can only be run on linux machines with newest version, | |
# that have glibc 2.34. | |
# Using ubuntu-20.04 drops that requirement to glibc 2.31. | |
runs-on: ubuntu-20.04 | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Build unsecured linux binaries | |
run: | | |
# https://github.com/actions/checkout/issues/81 | |
auth_header="$(git config --local --get http.https://github.com/.extraheader)" | |
git submodule sync --recursive | |
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1 | |
# create the make files in a subfolder | |
mkdir linuxbuild | |
cd linuxbuild | |
cmake ../. -DOC_OSCORE_ENABLED=OFF | |
make all | |
- name: View generated binaries | |
run: | | |
cd linuxbuild | |
ls | |
- name: Upload secured linux binaries | |
uses: actions/upload-artifact@v3 | |
with: | |
name: linux_knx_iot_virtual_unsecured | |
path: | | |
./linuxbuild/knx_iot_virtual_sa | |
./linuxbuild/knx_iot_virtual_pb | |
makerelease: | |
needs: [windowsBuilds, linuxSecured, linuxUnsecured] | |
name: Release archives | |
runs-on: ubuntu-latest | |
# Checkout the code, and fetch all tags (for version) | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
path: knx-iot-virtual | |
- run: | | |
cd knx-iot-virtual | |
git fetch --tags | |
# Figure out what to call the release | |
- name: Release info | |
id: releaseinfo | |
run: | | |
cd knx-iot-virtual | |
#echo "version=$(git describe --tags --dirty --always --long | sed -E 's/-g[0-9a-f]+//g')" >> $GITHUB_OUTPUT | |
echo "version=${{ github.event.inputs.release_tag_name }} " >> $GITHUB_OUTPUT | |
#echo "title=$(git show -s --format=%B | head -n1)" >> $GITHUB_OUTPUT | |
echo "title=${{ github.event.inputs.release_tag_name }}" >> $GITHUB_OUTPUT | |
msg=$(git show -s --format=%B) | |
#escape special chars | |
msg="${msg//'%'/'%25'}" | |
msg="${msg//$'\n'/'%0A'}" | |
msg="${msg//$'\r'/'%0D'}" | |
echo "msg=$msg" >> $GITHUB_OUTPUT | |
# Create a release to publish to | |
- name: Create Release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ steps.releaseinfo.outputs.version }} | |
release_name: ${{ steps.releaseinfo.outputs.title }} | |
body: ${{ steps.releaseinfo.outputs.msg }} | |
# Download all of the previously uploaded artifacts | |
- uses: actions/download-artifact@v1 | |
with: | |
name: linux_knx_iot_virtual_secured | |
- uses: actions/download-artifact@v1 | |
with: | |
name: linux_knx_iot_virtual_unsecured | |
- uses: actions/download-artifact@v1 | |
with: | |
name: windows_knx_iot_virtual_secured | |
- uses: actions/download-artifact@v1 | |
with: | |
name: windows_knx_iot_virtual_unsecured | |
- uses: actions/download-artifact@v1 | |
with: | |
name: windows_knx_iot_virtual_secured_debuginfo | |
# Zip them | |
- name: Zip the release assets | |
run: | | |
zip -r linux_knx_iot_virtual_secured.zip linux_knx_iot_virtual_secured | |
zip -r linux_knx_iot_virtual_unsecured.zip linux_knx_iot_virtual_unsecured | |
zip -r windows_knx_iot_virtual_secured.zip windows_knx_iot_virtual_secured | |
zip -r windows_knx_iot_virtual_unsecured.zip windows_knx_iot_virtual_unsecured | |
zip -r windows_knx_iot_virtual_secured_debuginfo.zip windows_knx_iot_virtual_secured_debuginfo | |
- name: Release secured linux | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{steps.create_release.outputs.upload_url}} | |
asset_path: ./linux_knx_iot_virtual_secured.zip | |
asset_name: linux_knx_iot_virtual_secured.zip | |
asset_content_type: application/zip | |
- name: Release unsecured linux | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{steps.create_release.outputs.upload_url}} | |
asset_path: ./linux_knx_iot_virtual_unsecured.zip | |
asset_name: linux_knx_iot_virtual_unsecured.zip | |
asset_content_type: application/zip | |
- name: Release secured windows | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{steps.create_release.outputs.upload_url}} | |
asset_path: ./windows_knx_iot_virtual_secured.zip | |
asset_name: windows_knx_iot_virtual_secured.zip | |
asset_content_type: application/zip | |
- name: Release unsecured windows | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{steps.create_release.outputs.upload_url}} | |
asset_path: ./windows_knx_iot_virtual_unsecured.zip | |
asset_name: windows_knx_iot_virtual_unsecured.zip | |
asset_content_type: application/zip | |
- name: Release secured debuginfo windows | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{steps.create_release.outputs.upload_url}} | |
asset_path: ./windows_knx_iot_virtual_secured_debuginfo.zip | |
asset_name: windows_knx_iot_virtual_secured_debuginfo.zip | |
asset_content_type: application/zip |