Skip to content

Install dependencies for Windows #365

Install dependencies for Windows

Install dependencies for Windows #365

name: Windows build
on:
push:
branches-ignore:
- 'dependabot**'
tags:
- '*'
paths-ignore:
- '**/lsan.supp'
- 'buildScripts/travis/*'
- 'buildScripts/azure/*'
- 'buildScripts/docker/*'
- 'azure-pipelines.yml'
- '.cirrus.yml'
- '.travis.yml'
- '.mergify.yml'
- 'Brewfile'
- '**/*.html'
- '**/*.txt'
- '**/*.md'
- 'installer/packages/**/meta/prebuild-mac.sh'
- 'installer/packages/**/meta/prebuild-linux-gnu.sh'
- '**/*.dockerfile'
- '**/*.Dockerfile'
- '**/Dockerfile'
- '**/Dockerfile.*'
- 'plugins/robots/checker/scripts/build-checker-installer.sh'
- '.github/workflows/centos.yml'
pull_request:
branches-ignore:
- 'dependabot**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
include:
- qt-version: '5.15'
mingw-version: '8.1'
mingw-bitness: '64'
mingw-short-version: '81'
python-version: '3.11'
deploy-installer: true
defaults:
run:
shell: msys2 {0}
steps:
- name: Setup msys2
uses: msys2/setup-msys2@v2
with:
path-type: inherit
msystem: MINGW${{ matrix.mingw-bitness }}
- name: Download packages to msys2
run: |
ARCH=${{ matrix.mingw-bitness }}
PLATFORM=${{ matrix.mingw-bitness == '32' && 'i686' || 'x86_64' }}
pacman --verbose --noconfirm -S msys/zlib-devel dos2unix ccache rsync unzip openssh mingw$ARCH/mingw-w64-$PLATFORM-libzip mingw$ARCH/mingw-w64-$PLATFORM-libusb mingw$ARCH/mingw-w64-$PLATFORM-zlib mingw$ARCH/mingw-w64-$PLATFORM-pkg-config
- name: Inject slug/short variables
uses: rlespinasse/[email protected]
- name: Prepare build directory name
shell: bash
run: |
DIR=$(realpath $(cygpath -u "$GITHUB_WORKSPACE")/../build)
echo "BUILD_DIR=$DIR" >> $GITHUB_ENV
- name: Create build directory
run: mkdir -vp ${{ env.BUILD_DIR }}
- name: Configure git
shell: bash
run: |
git config --global core.symlinks true
git config --global core.autocrlf true
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
dir: C:\
version: '${{matrix.qt-version}}'
arch: win${{ matrix.mingw-bitness }}_mingw${{matrix.mingw-short-version}}
modules: 'qtscript'
archives: 'qtbase qtmultimedia qtsvg qtscript qttools qtserialport qtimageformats qtwinextras'
tools: 'tools_mingw,qt.tools.win${{ matrix.mingw-bitness }}_mingw${{matrix.mingw-short-version}}0 tools_ifw'
add-tools-to-path: true
cache: true
extra: '--external 7z'
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
# After Qt install action, that spoils pythonLocation variable
- name: Set up Python ${{matrix.python-version}}
uses: actions/setup-python@v5
with:
python-version: ${{matrix.python-version}}
architecture: ${{ matrix.mingw-bitness == '32' && 'x86' || 'x64' }}
- name: Check PATH
run: echo PATH="$PATH"
- name: Check available tools
run: |
set -xueo pipefail
uname -a
rsync --version
ls "$IQTA_TOOLS/" "$QT_ROOT_DIR/"
qmake --version && qmake -query
python3 --version
which g++
g++ --version
- name: QMake
timeout-minutes: 1
run: |
cd ${{ env.BUILD_DIR }}
qmake $GITHUB_WORKSPACE/studio.pro -spec win32-g++ CONFIG+=release CONFIG+=sanitizer CONFIG+=sanitize_undefined CONFIG+=tests CONFIG+=noPch PYTHON_PATH="${pythonLocation}" PYTHON_VERSION=${{matrix.python-version}}
- name: QMake all
timeout-minutes: 5
run: |
cd ${{ env.BUILD_DIR }}
mingw32-make -j $(nproc) qmake_all
- name: Make all
timeout-minutes: 70
run: |
cd ${{ env.BUILD_DIR }}
mingw32-make -j $(nproc) all
- name: Unit tests
timeout-minutes: 5
run: |
cd ${{ env.BUILD_DIR }}
export TRIK_PYTHONPATH=$(cygpath -w "${pythonLocation}/Lib")
mingw32-make -k check
- name: Prepare all dlls
if: false
run: |
for file in $(ls ${{ env.BUILD_DIR }}/bin/*.exe || :) ; do windeployqt --release $file ; done
- name: Download tests
run: |
curl --output tests.7z "https://dl.trikset.com/edu/.solutions20200701/testing_small.7z"
7z x tests.7z
ls $GITHUB_WORKSPACE/testing_small
- name: Tests
id: tests
timeout-minutes: 2
continue-on-error: true
run: |
echo "$PATH"
echo ------
cd ${{ env.BUILD_DIR }}/bin
python "${{ github.workspace }}\buildScripts\tests\fieldstest.py" 2D-model.exe "${{ github.workspace }}\testing_small"
- name: Push binaries
if: false
uses: actions/upload-artifact@v4
with:
name: binaries-${{ matrix.qt-version}}
path: ${{ env.BUILD_DIR }}/bin
- name: Build installer
run: |
cd $GITHUB_WORKSPACE/installer
./build-trik-studio.sh "${QT_ROOT_DIR}/bin" "${IQTA_TOOLS}/QtInstallerFramework/*/bin" "${{ env.BUILD_DIR }}"
- name: Push installer
uses: actions/upload-artifact@v4
with:
name: trik-studio-auto-installer-qt${{ matrix.qt-version}}
path: |
installer/trik-studio*installer*.exe
installer/trik_studio*.qs
installer/reinstall*
- name: Check errors
if: ${{ steps.tests.outcome == 'failure' }}
run: |
echo Errors occurred in the step Tests
exit 1
- name: Get tag
run: echo "CURRENT_TAG=$(git tag --contains HEAD | sort -Vr | head -n1)" >> $GITHUB_ENV
- name: Check tag
if: ${{ env.CURRENT_TAG != ''}}
run: echo "GITHUB_REF_SLUG=${{ env.CURRENT_TAG }}" >> $GITHUB_ENV
- name: Deploy installer
if: ${{ matrix.deploy-installer && github.event_name != 'pull_request' && github.repository_owner == 'trikset' }}
run: |
install -m 600 -D /dev/null ~/.ssh/id_rsa
echo "${{ secrets.DL_PRIVATE_SSH_KEY }}" > ~/.ssh/id_rsa
rsync -v --rsh="ssh -o StrictHostKeyChecking=no" installer/trik-studio*installer*.exe ${{ secrets.DL_USERNAME }}@${{ secrets.DL_HOST }}:~/dl/ts/fresh/installer/trik-studio-${{ env.GITHUB_REF_SLUG }}-x86_64-installer.exe
- name: Prepare for RDP connection
if: false #comment this line to create RDP session
continue-on-error: true
shell: pwsh
env:
NGROK_AUTH_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }}
run: |
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-name "fDenyTSConnections" -Value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -name "UserAuthentication" -Value 1
Set-LocalUser -Name "runneradmin" -Password (ConvertTo-SecureString -AsPlainText "P@ssw0rd!" -Force)
Invoke-WebRequest https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-windows-amd64.zip -OutFile ngrok.zip
Expand-Archive ngrok.zip
.\ngrok\ngrok.exe authtoken $Env:NGROK_AUTH_TOKEN
choco install far dependencies
.\ngrok\ngrok.exe tcp 3389
install-windows-installer:
needs: [build]
uses: ./.github/workflows/installer.yml
with:
os: windows-latest
artifact_name: trik-studio-auto-installer-qt5.15
shell: msys2 {0}
deploy_archive: true
secrets: inherit