aboutsummaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
Diffstat (limited to '.github')
-rw-r--r--.github/qt_helper.py107
-rw-r--r--.github/workflows/build.yml34
2 files changed, 23 insertions, 118 deletions
diff --git a/.github/qt_helper.py b/.github/qt_helper.py
deleted file mode 100644
index 309b3974..00000000
--- a/.github/qt_helper.py
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/usr/bin/env python3
-import defusedxml.ElementTree
-import hashlib
-import mmap
-import pathlib
-import subprocess
-import sys
-import urllib.parse
-import urllib.request
-import xml.etree.ElementTree as ET
-
-MAX_TRIES = 32
-
-def fetch_links_to_archives(os, target, major, minor, patch, toolchain):
- MAX_XML_SIZE = 1024 * 1024 * 1024
- MIRROR = 'download.qt.io'
- base_url = f'https://{MIRROR}/online/qtsdkrepository/{os}/{target}/qt{major}_{major}{minor}{patch}'
- url = f'{base_url}/Updates.xml'
- for _ in range(MAX_TRIES):
- try:
- resp = urllib.request.urlopen(url).read(MAX_XML_SIZE)
- update_xml = defusedxml.ElementTree.fromstring(resp)
- break
- except KeyboardInterrupt:
- raise
- except BaseException as e:
- print('error', e, flush=True)
- else:
- return
- for pkg in update_xml.findall('./PackageUpdate'):
- name = pkg.find('.//Name')
- if name == None:
- continue
- if name.text != f'qt.qt{major}.{major}{minor}{patch}.{toolchain}':
- continue
- version = pkg.find('.//Version')
- if version == None:
- continue
- archives = pkg.find('.//DownloadableArchives')
- if archives == None or archives.text == None:
- continue
- for archive in archives.text.split(', '):
- url = f'{base_url}/{name.text}/{version.text}{archive}'
- file_name = pathlib.Path(urllib.parse.urlparse(url).path).name
- yield {'name': file_name, 'url': url}
-
-def download(links):
- metalink = ET.Element('metalink', xmlns = "urn:ietf:params:xml:ns:metalink")
- for link in links:
- file = ET.SubElement(metalink, 'file', name = link['name'])
- ET.SubElement(file, 'url').text = link['url']
- data = ET.tostring(metalink, encoding='UTF-8', xml_declaration=True)
- for _ in range(MAX_TRIES):
- with subprocess.Popen([
- 'aria2c',
- '--connect-timeout=8',
- '--console-log-level=warn',
- '--continue',
- '--follow-metalink=mem',
- '--max-concurrent-downloads=100',
- '--max-connection-per-server=16',
- '--max-file-not-found=100',
- '--max-tries=100',
- '--min-split-size=1MB',
- '--retry-wait=1',
- '--split=100',
- '--summary-interval=0',
- '--timeout=8',
- '--user-agent=',
- '--metalink-file=-',
- ], stdin=subprocess.PIPE) as aria:
- aria.communicate(data)
- if aria.wait() == 0:
- return True
- return False
-
-def calc_hash_sum(files):
- obj = hashlib.new('sha256')
- for path in files:
- with open(path, 'rb') as f:
- with mmap.mmap(f.fileno(), 0, mmap.MAP_SHARED, mmap.PROT_READ) as m:
- file_hash = hashlib.new('sha256', m).digest()
- obj.update(file_hash)
- return obj.digest().hex()
-
-def extract_archives(files, out='.', targets=[]):
- for path in files:
- if subprocess.Popen(['7z', 'x', '-bd', '-y', '-aoa', f'-o{out}', path] + targets,
- stdout=subprocess.DEVNULL,
- ).wait() != 0:
- return False
- return True
-
-def main():
- os, target, version, toolchain, expect = sys.argv[1:]
- major, minor, patch = version.split('.')
- links = [*fetch_links_to_archives(os, target, major, minor, patch, toolchain)]
- print(*[l['url'].encode() for l in links], sep='\n', flush=True)
- assert download(links)
- result = calc_hash_sum([l['name'] for l in links])
- print('result', result, 'expect', expect, flush=True)
- assert result == expect
- assert extract_archives([l['name'] for l in links], '.', ['{}.{}.{}'.format(major, minor, patch)])
- [pathlib.Path(l['name']).unlink() for l in links]
-
-if __name__ == '__main__':
- main()
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 85e48bf0..67bfdc17 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -5,6 +5,8 @@ on: [push, pull_request]
env:
FREE_DISKSPACE: |
sudo rm -rf /usr/local/.ghcup /usr/share/dotnet /usr/share/swift /usr/share/miniconda
+ QT_TAG: v5.15.17-lts-lgpl
+ QT_PREFIX: ${{ github.workspace }}/qt-install
jobs:
build-macos:
@@ -66,25 +68,35 @@ jobs:
run: build/release/bin/monero-wallet-gui --test-qml
macos-bundle:
- runs-on: macos-13
+ runs-on: macos-15
steps:
- uses: actions/checkout@v1
with:
submodules: recursive
- name: install dependencies
- run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm miniupnpc expat libunwind-headers protobuf pkg-config pyenv p7zip aria2
- - name: install dependencies
+ run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm miniupnpc expat libunwind-headers protobuf pkg-config
+ - name: clone qt repo
+ run: git clone -b "${QT_TAG}" --recursive --depth 1 --shallow-submodules https://github.com/qt/qt5
+ - name: build qt from source
run: |
- pyenv install 3.12.0
- pip install defusedxml
- - name: download qt
- run: python monero-gui/.github/qt_helper.py mac_x64 desktop 5.15.2 clang_64 c384008156fe63cc183bade0316828c598ff3e5074397c0c9ccc588d6cdc5aca
- working-directory: ../
- - name: build
+ cd qt5
+ mkdir build && cd build
+ ../configure -prefix "${QT_PREFIX}" -opensource -confirm-license -release -nomake examples -nomake tests -no-rpath -skip qtwebengine -skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtnetworkauth -skip qtpurchasing -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qttools -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip gamepad -skip serialbus -skip location -skip webengine
+ make -j"$(sysctl -n hw.ncpu)"
+ make install
+ cd ../qttools/src/linguist/lrelease
+ ../../../../build/qtbase/bin/qmake
+ make -j"$(sysctl -n hw.ncpu)"
+ make install
+ cd ../../../../qttools/src/macdeployqt/macdeployqt/
+ ../../../../build/qtbase/bin/qmake
+ make -j"$(sysctl -n hw.ncpu)"
+ make install
+ - name: build monero-gui
run: |
mkdir build && cd build
- cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH=/Users/runner/work/monero-gui/5.15.2/clang_64 ..
- make
+ cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH="${QT_PREFIX}" ..
+ make -j"$(sysctl -n hw.ncpu)"
- name: deploy
run: make deploy
working-directory: build