Skip to content

Merge pull request #192 from n7space/dependabot/github_actions/dot-gi… #98

Merge pull request #192 from n7space/dependabot/github_actions/dot-gi…

Merge pull request #192 from n7space/dependabot/github_actions/dot-gi… #98

Workflow file for this run

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