Merge pull request #192 from n7space/dependabot/github_actions/dot-gi… #98
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: Build asn1scc.IDE | |
on: [push] | |
env: | |
PLUGIN_NAME: Asn1Acn | |
QT_VERSION: 6.2.2 | |
QT_CREATOR_VERSION: 6.0.2 | |
QT_CREATOR_SNAPSHOT: NO | |
CMAKE_VERSION: 3.18.3 | |
NINJA_VERSION: 1.10.1 | |
ASN1SCC_VERSION: 4.2.5.0f | |
FUZZER_VERSION: 0.9 | |
PUSC_VERSION: 1.1.0 | |
jobs: | |
build: | |
name: ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
matrix: | |
config: | |
- { | |
name: "Windows 2019 MSVC", | |
artifact: "Windows-x64", | |
os: windows-2019, | |
cc: "cl", cxx: "cl", | |
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", | |
tests: "OFF" | |
} | |
- { | |
name: "Ubuntu Latest GCC", | |
artifact: "Linux-x64", | |
os: ubuntu-latest, | |
cc: "gcc", cxx: "g++", | |
tests: "OFF" | |
} | |
- { | |
name: "macOS Latest Clang", | |
artifact: "macOS-x64", | |
os: macos-latest, | |
cc: "clang", cxx: "clang++", | |
tests: "OFF" | |
} | |
- { | |
name: "Ubuntu Latest GCC - Tests", | |
artifact: "Linux-x64-Tests", | |
os: ubuntu-latest, | |
cc: "gcc", cxx: "g++", | |
tests: "ON" | |
} | |
steps: | |
- uses: actions/checkout@v1 | |
- name: Download Ninja and CMake | |
shell: cmake -P {0} | |
run: | | |
set(cmake_version "$ENV{CMAKE_VERSION}") | |
set(ninja_version "$ENV{NINJA_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) | |
# Add to PATH environment variable | |
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir) | |
set(path_separator ":") | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(path_separator ";") | |
endif() | |
file(APPEND "$ENV{GITHUB_PATH}" "$ENV{GITHUB_WORKSPACE}${path_separator}${cmake_dir}") | |
if (NOT "${{ runner.os }}" STREQUAL "Windows") | |
execute_process( | |
COMMAND chmod +x ninja | |
COMMAND chmod +x ${cmake_dir}/cmake | |
) | |
endif() | |
- name: Install system libs | |
shell: cmake -P {0} | |
run: | | |
if ("${{ runner.os }}" STREQUAL "Linux") | |
execute_process( | |
COMMAND sudo apt update | |
) | |
execute_process( | |
COMMAND sudo apt install libgl1-mesa-dev | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
message(FATAL_ERROR "FAILED TO INSTALL DEPENDENCIES") | |
endif() | |
endif() | |
- name: Download Qt | |
id: qt | |
shell: cmake -P {0} | |
run: | | |
set(qt_version "$ENV{QT_VERSION}") | |
string(REGEX MATCH "^[0-9]+" qt_version_major "${qt_version}") | |
string(REPLACE "." "" qt_version_dotless "${qt_version}") | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(url_os "windows_x86") | |
set(qt_package_arch_suffix "win64_msvc2019_64") | |
set(qt_dir_prefix "${qt_version}/msvc2019_64") | |
set(qt_package_suffix "-Windows-Windows_10-MSVC2019-Windows-Windows_10-X86_64") | |
elseif ("${{ runner.os }}" STREQUAL "Linux") | |
set(url_os "linux_x64") | |
set(qt_package_arch_suffix "gcc_64") | |
set(qt_dir_prefix "${qt_version}/gcc_64") | |
if("${qt_version_major}" STREQUAL "5") | |
set(qt_package_suffix "-Linux-RHEL_7_6-GCC-Linux-RHEL_7_6-X86_64") | |
else() | |
set(qt_package_suffix "-Linux-RHEL_8_2-GCC-Linux-RHEL_8_2-X86_64") | |
endif() | |
elseif ("${{ runner.os }}" STREQUAL "macOS") | |
set(url_os "mac_x64") | |
set(qt_package_arch_suffix "clang_64") | |
if("${qt_version_major}" STREQUAL "5") | |
set(qt_dir_prefix "${qt_version}/clang_64") | |
set(qt_package_suffix "-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64") | |
else() | |
set(qt_dir_prefix "${qt_version}/macos") | |
set(qt_package_suffix "-MacOS-MacOS_11_00-Clang-MacOS-MacOS_11_00-X86_64-ARM64") | |
endif() | |
endif() | |
set(qt_base_url "https://download.qt.io/online/qtsdkrepository/${url_os}/desktop/qt${qt_version_major}_${qt_version_dotless}") | |
file(DOWNLOAD "${qt_base_url}/Updates.xml" ./Updates.xml SHOW_PROGRESS) | |
file(READ ./Updates.xml updates_xml) | |
string(REGEX MATCH "<Name>qt.qt${qt_version_major}.*<Version>([0-9+-.]+)</Version>" updates_xml_output "${updates_xml}") | |
set(qt_package_version ${CMAKE_MATCH_1}) | |
file(MAKE_DIRECTORY qt) | |
# Save the path for other steps | |
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qt/${qt_dir_prefix}" qt_dir) | |
message("::set-output name=qt_dir::${qt_dir}") | |
message("Downloading Qt to ${qt_dir}") | |
function(downloadAndExtract url archive) | |
message("Downloading ${url}") | |
file(DOWNLOAD "${url}" ./${archive} SHOW_PROGRESS) | |
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${archive} WORKING_DIRECTORY qt) | |
endfunction() | |
foreach(package qtbase qtdeclarative) | |
downloadAndExtract( | |
"${qt_base_url}/qt.qt${qt_version_major}.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" | |
${package}.7z | |
) | |
endforeach() | |
if("${qt_version_major}" STREQUAL "6") | |
foreach(package qt5compat qtshadertools) | |
downloadAndExtract( | |
"${qt_base_url}/qt.qt6.${qt_version_dotless}.${package}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" | |
${package}.7z | |
) | |
endforeach() | |
endif() | |
# uic depends on libicu56.so | |
if ("${{ runner.os }}" STREQUAL "Linux") | |
downloadAndExtract( | |
"${qt_base_url}/qt.qt${qt_version_major}.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}icu-linux-Rhel7.2-x64.7z" | |
icu.7z | |
) | |
endif() | |
- name: Download Qt Creator | |
id: qt_creator | |
shell: cmake -P {0} | |
run: | | |
string(REGEX MATCH "([0-9]+.[0-9]+).[0-9]+" outvar "$ENV{QT_CREATOR_VERSION}") | |
set(qtc_base_url "https://download.qt.io/official_releases/qtcreator/${CMAKE_MATCH_1}/$ENV{QT_CREATOR_VERSION}/installer_source") | |
set(qtc_snapshot "$ENV{QT_CREATOR_SNAPSHOT}") | |
if (qtc_snapshot) | |
set(qtc_base_url "https://download.qt.io/snapshots/qtcreator/${CMAKE_MATCH_1}/$ENV{QT_CREATOR_VERSION}/installer_source/${qtc_snapshot}") | |
endif() | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(qtc_platform "windows_x64") | |
elseif ("${{ runner.os }}" STREQUAL "Linux") | |
set(qtc_platform "linux_x64") | |
elseif ("${{ runner.os }}" STREQUAL "macOS") | |
set(qtc_platform "mac_x64") | |
endif() | |
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qtcreator" qtc_dir) | |
# Save the path for other steps | |
message("::set-output name=qtc_dir::${qtc_dir}") | |
file(MAKE_DIRECTORY qtcreator) | |
message("Downloading Qt Creator from ${qtc_base_url}/${qtc_platform}") | |
foreach(package qtcreator qtcreator_dev) | |
file(DOWNLOAD | |
"${qtc_base_url}/${qtc_platform}/${package}.7z" ./${package}.7z SHOW_PROGRESS) | |
execute_process(COMMAND | |
${CMAKE_COMMAND} -E tar xvf ../${package}.7z WORKING_DIRECTORY qtcreator) | |
endforeach() | |
# Add QTCreator bin path to PATH environment variable | |
set(path_separator ":") | |
if ("${{ runner.os }}" STREQUAL "Windows") | |
set(path_separator ";") | |
endif() | |
file(APPEND "$ENV{GITHUB_PATH}" "${path_separator}${qtc_dir}/bin") | |
- name: Build | |
shell: cmake -P {0} | |
run: | | |
set(ENV{CC} ${{ matrix.config.cc }}) | |
set(ENV{CXX} ${{ matrix.config.cxx }}) | |
set(ENV{MACOSX_DEPLOYMENT_TARGET} "10.13") | |
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() | |
set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") | |
set(build_plugin_py "scripts/build_plugin.py") | |
foreach(dir "share/qtcreator/scripts" "Qt Creator.app/Contents/Resources/scripts" "Contents/Resources/scripts") | |
if(EXISTS "${{ steps.qt_creator.outputs.qtc_dir }}/${dir}/build_plugin.py") | |
set(build_plugin_py "${dir}/build_plugin.py") | |
break() | |
endif() | |
endforeach() | |
execute_process( | |
COMMAND python | |
-u | |
"${{ steps.qt_creator.outputs.qtc_dir }}/${build_plugin_py}" | |
--name "$ENV{PLUGIN_NAME}-$ENV{QT_CREATOR_VERSION}-${{ matrix.config.artifact }}" | |
--src . | |
--build build | |
--qt-path "${{ steps.qt.outputs.qt_dir }}" | |
--qtc-path "${{ steps.qt_creator.outputs.qtc_dir }}" | |
--output-path "$ENV{GITHUB_WORKSPACE}" | |
--add-config=-DWITH_TESTS=${{ matrix.config.tests }} | |
--build-type=Release | |
RESULT_VARIABLE result | |
) | |
if (NOT result EQUAL 0) | |
string(REGEX MATCH "FAILED:.*$" error_message "${output}") | |
string(REPLACE "\n" "%0A" error_message "${error_message}") | |
message("::error::${error_message}") | |
message(FATAL_ERROR "BUILD HAS FAILED") | |
endif() | |
- name: Run tests | |
if: ${{ matrix.config.tests == 'ON' }} | |
shell: cmake -P {0} | |
run: | | |
#Tests run only for Linux | |
#If statements are for future purpose | |
set(ENV{QT_QPA_PLATFORM} "offscreen") | |
if ("${{ runner.os }}" STREQUAL "Linux") | |
set(plugin_filepath "$ENV{GITHUB_WORKSPACE}/build/build/lib/qtcreator/plugins/libAsn1Acn.so") | |
set(qtc_plugin_path ${{ steps.qt_creator.outputs.qtc_dir }}/lib/qtcreator/plugins) | |
elseif("${{ runner.os }}" STREQUAL "Windows") | |
set(plugin_filepath "$ENV{GITHUB_WORKSPACE}/build/build/lib/qtcreator/plugins/Asn1Acn.dll") | |
set(qtc_plugin_path ${{ steps.qt_creator.outputs.qtc_dir }}/lib/qtcreator/plugins) | |
elseif("${{ runner.os }}" STREQUAL "macOS") | |
set(plugin_filepath "$ENV{GITHUB_WORKSPACE}/build/build/Qt Creator.app/Contents/PlugIns/libAsn1Acn.dylib") | |
set(qtc_plugin_path ${{ steps.qt_creator.outputs.qtc_dir }}/Contents/PlugIns) | |
endif() | |
file(COPY ${plugin_filepath} DESTINATION ${qtc_plugin_path}) | |
execute_process( | |
COMMAND qtcreator -test "ASN.1/ACN" | |
RESULT_VARIABLE result | |
) | |
if(result EQUAL 1) | |
message(FATAL_ERROR "1 TEST HAS FAILED") | |
elseif(result GREATER_EQUAL 2) | |
message(FATAL_ERROR "${result} TESTS HAVE FAILED") | |
endif() | |
- name: Build package | |
if: ${{ matrix.config.tests == 'OFF' }} | |
shell: cmake -P {0} | |
run: | | |
set(package_content "package") | |
set(daemon_sharepoint_cookie "daemon_sharepoint_cookie") | |
if ("${{ runner.os }}" STREQUAL "Linux") | |
set(plugin_bin_path "${package_content}/libexec/qtcreator") | |
set(plugin_resources_path "${package_content}/share/qtcreator") | |
elseif("${{ runner.os }}" STREQUAL "Windows") | |
set(plugin_bin_path "${package_content}/bin") | |
set(plugin_resources_path "${package_content}/share/qtcreator") | |
elseif("${{ runner.os }}" STREQUAL "macOS") | |
set(plugin_bin_path "${package_content}/Qt Creator.app/Contents/Resources") | |
set(plugin_resources_path "${package_content}/Qt Creator.app/Contents/Resources") | |
endif() | |
set(plugin_pusc_path "${plugin_resources_path}/asn1acn/libs/PUS-C") | |
file(MAKE_DIRECTORY ${plugin_bin_path}) | |
file(MAKE_DIRECTORY ${plugin_resources_path}) | |
file(MAKE_DIRECTORY ${plugin_pusc_path}) | |
file(MAKE_DIRECTORY ${daemon_sharepoint_cookie}) | |
set(asn1sccUrl "https://github.com/ttsiodras/asn1scc/releases/download/$ENV{ASN1SCC_VERSION}/asn1scc-bin-$ENV{ASN1SCC_VERSION}.tar.bz2") | |
message("Downloading ASN1SCC from ${asn1sccUrl}") | |
file(DOWNLOAD "${asn1sccUrl}" $ENV{GITHUB_WORKSPACE}/asn1scc.tar.bz2 SHOW_PROGRESS) | |
message("Extracting ASN1SCC from file") | |
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf $ENV{GITHUB_WORKSPACE}/asn1scc.tar.bz2 WORKING_DIRECTORY ${plugin_bin_path}) | |
set(daemonUrl "https://n7space-my.sharepoint.com/:u:/p/kgrochowski/EZSwzkHV-C1Mn1nppkUqKIcBjFpzsn67G_N_1RMW2Yr7dQ?download=1") | |
message("Downloading ASN1SCC Daemon from ${daemonUrl}") | |
execute_process(COMMAND curl -c "$ENV{GITHUB_WORKSPACE}/${daemon_sharepoint_cookie}}" -fsSL ${daemonUrl} -o $ENV{GITHUB_WORKSPACE}/asn1scc-daemon.7z) | |
message("Extracting ASN1SCC Daemon from file") | |
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf $ENV{GITHUB_WORKSPACE}/asn1scc-daemon.7z) | |
set(puscUrl "https://github.com/n7space/asn1-pusc-lib/releases/download/$ENV{PUSC_VERSION}/Asn1Acn-PusC-Library-$ENV{PUSC_VERSION}.7z") | |
message("Downloading PUSC from ${puscUrl}") | |
file(DOWNLOAD "${puscUrl}" $ENV{GITHUB_WORKSPACE}/pusc-lib.tar SHOW_PROGRESS) | |
message("Extracting PUSC from file") | |
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf $ENV{GITHUB_WORKSPACE}/pusc-lib.tar WORKING_DIRECTORY ${plugin_pusc_path}) | |
if ("${{ runner.os }}" STREQUAL "Linux") | |
set(fuzzerUrl "https://github.com/n7space/asn1scc.Fuzzer/releases/download/$ENV{FUZZER_VERSION}/asn1scc-Fuzzer-$ENV{FUZZER_VERSION}-linux-x64.tar.gz") | |
message("Downloading Fuzzer from ${fuzzerUrl}") | |
file(DOWNLOAD "${fuzzerUrl}" $ENV{GITHUB_WORKSPACE}//asn1scc-fuzzer.tar.gz SHOW_PROGRESS) | |
message("Extracting Fuzzer from file") | |
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf $ENV{GITHUB_WORKSPACE}/asn1scc-fuzzer.tar.gz WORKING_DIRECTORY ${plugin_bin_path}) | |
endif() | |
file(COPY $ENV{GITHUB_WORKSPACE}/asn1scc/daemon DESTINATION ${plugin_bin_path}/asn1scc) | |
file(COPY $ENV{GITHUB_WORKSPACE}/generic-highlighter DESTINATION ${plugin_resources_path}) | |
file(COPY $ENV{GITHUB_WORKSPACE}/templates DESTINATION ${plugin_resources_path}) | |
file(COPY $ENV{GITHUB_WORKSPACE}/snippets DESTINATION ${plugin_resources_path}) | |
file(RENAME $ENV{GITHUB_WORKSPACE}/LICENSE $ENV{GITHUB_WORKSPACE}/$ENV{PLUGIN_NAME}-LICENSE) | |
file(RENAME $ENV{GITHUB_WORKSPACE}/README.md $ENV{GITHUB_WORKSPACE}/$ENV{PLUGIN_NAME}-README.md) | |
file(COPY $ENV{GITHUB_WORKSPACE}/$ENV{PLUGIN_NAME}-LICENSE DESTINATION ${package_content}) | |
file(COPY $ENV{GITHUB_WORKSPACE}/$ENV{PLUGIN_NAME}-README.md DESTINATION ${package_content}) | |
file(GLOB package_filelist ${package_content}/*) | |
execute_process(COMMAND | |
7z a $ENV{GITHUB_WORKSPACE}/${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}.7z | |
${package_filelist}) | |
- uses: actions/upload-artifact@v2 | |
if: ${{ matrix.config.tests == 'OFF' }} | |
id: upload_artifact | |
with: | |
path: ./${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}.7z | |
name: ${{ env.PLUGIN_NAME}}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }}.7z | |
release: | |
if: ${{ github.ref_type == 'tag' }} | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- name: Create Release | |
id: create_release | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ github.ref_name }} | |
release_name: ${{ github.ref_name }} | |
draft: false | |
prerelease: false | |
- name: Store Release url | |
run: | | |
echo "${{ steps.create_release.outputs.upload_url }}" > ./upload_url | |
- uses: actions/upload-artifact@v1 | |
with: | |
path: ./upload_url | |
name: upload_url | |
publish: | |
if: ${{ github.ref_type == 'tag' }} | |
needs: release | |
name: ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
matrix: | |
config: | |
- { | |
name: "Windows 2019 x64", | |
artifact: "Windows-x64.7z", | |
os: ubuntu-latest | |
} | |
- { | |
name: "Linux Latest x64", | |
artifact: "Linux-x64.7z", | |
os: ubuntu-latest | |
} | |
- { | |
name: "macOS Latest x64", | |
artifact: "macOS-x64.7z", | |
os: macos-latest | |
} | |
steps: | |
- name: Download artifact | |
uses: actions/[email protected] | |
with: | |
name: ${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }} | |
path: ./ | |
- name: Download URL | |
uses: actions/[email protected] | |
with: | |
name: upload_url | |
path: ./ | |
- id: set_upload_url | |
run: | | |
upload_url=`cat ./upload_url` | |
echo ::set-output name=upload_url::$upload_url | |
- name: Upload to Release | |
id: upload_to_release | |
uses: actions/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.set_upload_url.outputs.upload_url }} | |
asset_path: ./${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }} | |
asset_name: ${{ env.PLUGIN_NAME }}-${{ env.QT_CREATOR_VERSION }}-${{ matrix.config.artifact }} | |
asset_content_type: application/x-7z-compressed |