From 42a8ac190f8f9f8bc4733c34c8092dd1375dd746 Mon Sep 17 00:00:00 2001 From: qstokkink Date: Fri, 2 Aug 2024 11:39:49 +0200 Subject: [PATCH] WIP: Updated builders to use GitHub Actions --- .github/workflows/build.yml | 92 ++++++++++++++++++++++++++ build/debian/makedist_debian.sh | 37 ++--------- build/debian/tribler/debian/changelog | 16 +++-- build/debian/update_metainfo.py | 49 ++++---------- build/mac/env.sh | 21 +----- build/mac/makedist_macos.sh | 21 +----- build/update_version.py | 47 ------------- build/win/build.py | 2 - build/win/clean.bat | 2 - build/win/makedist_win.bat | 38 +---------- build/win/replace_nsi.py | 32 --------- build/win/requirements.txt | 4 -- build/win/resources/torrenticon.ico | Bin 0 -> 24190 bytes build/win/resources/tribler.nsi | 22 +++--- requirements-build.txt | 20 ++---- setup.py | 31 ++------- tribler.spec | 11 +-- 17 files changed, 152 insertions(+), 293 deletions(-) create mode 100644 .github/workflows/build.yml delete mode 100644 build/update_version.py delete mode 100644 build/win/clean.bat delete mode 100644 build/win/replace_nsi.py delete mode 100644 build/win/requirements.txt create mode 100644 build/win/resources/torrenticon.ico diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..9ec6528997 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,92 @@ +name: Build +on: workflow_dispatch +jobs: + build: + strategy: + matrix: + os: [macos-12, ubuntu-latest, windows-latest] + + runs-on: ${{ matrix.os }} + + steps: + - name: Check out SimpleFC repository (Windows) + if: matrix.os == 'windows-latest' + uses: actions/checkout@v4 + with: + repository: mazinsw/SimpleFC + - name: Build SimpleFC NSIS Plugin (Windows) + if: matrix.os == 'windows-latest' + run: | + copy "bin\x86-unicode\SimpleFC.dll" "C:\Program Files (x86)\NSIS\Plugins\x86-unicode\SimpleFC.dll" + - name: Check out nsProcess repository (Windows) + if: matrix.os == 'windows-latest' + uses: actions/checkout@v4 + with: + repository: simdsoft/nsProcess + submodules: 'true' + - name: Add msbuild to PATH (Windows) + if: matrix.os == 'windows-latest' + uses: microsoft/setup-msbuild@v2 + - name: Build nsProcess NSIS Plugin (Windows) + if: matrix.os == 'windows-latest' + run: | + cd nsProcess + msbuild nsProcess.vcxproj /p:PlatformToolset=v143 /p:Configuration="Release UNICODE" + copy "Release UNICODE\nsProcess.dll" "C:\Program Files (x86)\NSIS\Plugins\x86-unicode\nsProcess.dll" + cd ../Include + copy nsProcess.nsh "C:\Program Files (x86)\NSIS\Include\nsProcess.nsh" + - name: Check-out repository + uses: actions/checkout@v4 + with: + submodules: 'true' + fetch-tags: 'true' + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + cache: 'pip' + cache-dependency-path: | + **/requirements-build.txt + - name: Install Dependencies + run: | + pip install --upgrade -r requirements-build.txt + - name: Setup npm + uses: actions/setup-node@v4 + - name: Build npm + run: | + cd src/tribler/ui/ + npm install + npm run build + - name: Determine tag + shell: bash + run: | + git fetch --tags + git for-each-ref --count=1 --sort=-creatordate --format '%(refname)' refs/tags > raw_tag.txt + echo "GITHUB_TAG=$(git name-rev --tags --name-only $(cat raw_tag.txt))" >> $GITHUB_ENV + - name: Build Executables (Ubuntu) + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt-get install -y --allow-downgrades alien cpio=2.13+dfsg-7 devscripts fakeroot gir1.2-gtk-4.0 rpm + ./build/debian/makedist_debian.sh + - name: Build Executables (MacOS-12) + if: matrix.os == 'macos-12' + run: | + ./build/mac/makedist_macos.sh + - uses: actions/cache/restore@v4 + if: matrix.os == 'windows-latest' + id: restore_cache + with: + path: src/libsodium.dll + key: cache_libsodium_dll + - name: Build Executables (Windows) + if: matrix.os == 'windows-latest' + run: | + ./build/win/makedist_win.bat + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ runner.os }} Build + path: | + dist/*.exe + dist/*.dmg + build/debian/*.deb diff --git a/build/debian/makedist_debian.sh b/build/debian/makedist_debian.sh index 70e7f884a0..cc0d6be344 100755 --- a/build/debian/makedist_debian.sh +++ b/build/debian/makedist_debian.sh @@ -2,53 +2,28 @@ set -x # print all commands set -e # exit when any command fails -LOG_LEVEL=${LOG_LEVEL:-"DEBUG"} - -if [[ ! -d build/debian ]]; then - echo "Please run this script from project root as:\n./build/debian/makedist_debian.sh" -fi - rm -rf build/tribler rm -rf dist/tribler rm -rf build/debian/tribler/usr/share/tribler -if [ ! -z "$VENV" ]; then - echo "Setting venv to $VENV" - source $VENV/bin/activate -else - echo "Creating a new venv" - python3 -m venv build-env - . ./build-env/bin/activate -fi - # ----- Install dependencies before the build -python3 -m pip install --upgrade pip -python3 -m pip install --upgrade -r requirements-build.txt +python3 -m pip install --upgrade PyGObject # ----- Update version -python3 ./build/update_version.py -r . -python3 ./build/debian/update_metainfo.py -r . - -# ----- Build UI -pushd . -cd src/tribler/ui/ -npm install -npm run build -popd +python3 ./build/debian/update_metainfo.py # ----- Build binaries -echo Building Tribler using Cx_Freeze python3 setup.py build # ----- Build dpkg cp -r ./dist/tribler ./build/debian/tribler/usr/share/tribler -TRIBLER_VERSION=$(head -n 1 .TriblerVersion) # read the first line only - # Compose the changelog cd ./build/debian/tribler -dch -v $TRIBLER_VERSION "New release" -dch -v $TRIBLER_VERSION "See https://github.com/Tribler/tribler/releases/tag/$TRIBLER_VERSION for more info" +export DEBEMAIL="info@tribler.org" +export DEBFULLNAME="Tribler" +dch -v $GITHUB_TAG "New release" +dch -v $GITHUB_TAG "See https://github.com/Tribler/tribler/releases/tag/$GITHUB_TAG for more info" dpkg-buildpackage -b -rfakeroot -us -uc diff --git a/build/debian/tribler/debian/changelog b/build/debian/tribler/debian/changelog index b944f3dc06..f5c934425d 100644 --- a/build/debian/tribler/debian/changelog +++ b/build/debian/tribler/debian/changelog @@ -1,20 +1,22 @@ tribler (7.0.0) unstable; urgency=medium - * New release - * See https://github.com/Tribler/tribler/releases/tag/v7.0.0 for more info. + * New release + * See https://github.com/Tribler/tribler/releases/tag/v7.0.0 for more info. + + -- Tribler Thu, 25 Jan 2018 12:31:00 +0100 tribler (6.5.2) unstable; urgency=medium - * New release - * See https://github.com/Tribler/tribler/releases/tag/v6.5.2 for more info. - * See https://github.com/Tribler/tribler/releases/tag/v6.5.1 for more info. + * New release + * See https://github.com/Tribler/tribler/releases/tag/v6.5.2 for more info. + * See https://github.com/Tribler/tribler/releases/tag/v6.5.1 for more info. -- whirm Fri, 13 May 2016 12:04:44 +0200 tribler (6.5.0) unstable; urgency=medium - * New release - * See https://github.com/Tribler/tribler/releases/tag/v6.5.0 for more info. + * New release + * See https://github.com/Tribler/tribler/releases/tag/v6.5.0 for more info. -- whirm Fri, 12 Feb 2016 11:24:43 +0100 diff --git a/build/debian/update_metainfo.py b/build/debian/update_metainfo.py index 114623e154..b48733c80d 100644 --- a/build/debian/update_metainfo.py +++ b/build/debian/update_metainfo.py @@ -1,37 +1,12 @@ -import logging -import time -import xml.etree.ElementTree as xml -from argparse import ArgumentParser -from pathlib import Path - -import defusedxml.ElementTree as defxml - -logger = logging.getLogger(__name__) -logging.basicConfig(level=logging.INFO) - - -def parse_arguments(): - parser = ArgumentParser(description='Update Tribler metainfo.xml') - parser.add_argument('-r', '--repo', type=str, help='path to a repository folder', default='.') - return parser.parse_args() - - -if __name__ == '__main__': - arguments = parse_arguments() - - version = Path('.TriblerVersion').read_text().lstrip('v').rstrip('\n') - - release_info = { - 'version': version, - 'date': time.strftime("%Y-%m-%d", time.localtime()) - } - - logger.info(f'Release info: {release_info}') - metainfo_xml = Path(arguments.repo) / 'build/debian/tribler/usr/share/metainfo/org.tribler.Tribler.metainfo.xml' - - xml_dom = defxml.parse(metainfo_xml) - releases = xml_dom.getroot().find('releases') - release = xml.SubElement(releases, 'release', release_info) - - xml_dom.write(metainfo_xml, encoding='utf-8', xml_declaration=True) - logger.info(f'Content of metainfo.xml: {metainfo_xml.read_text()}') +from os import getenv +from time import localtime, strftime +from xml.etree.ElementTree import SubElement, parse + +if __name__ == "__main__": + metainfo_xml = "build/debian/tribler/usr/share/metainfo/org.tribler.Tribler.metainfo.xml" + tree = parse(metainfo_xml) + root = tree.getroot() + releases_tag = root.find("releases") + releases_tag.append(SubElement(releases_tag, "release", {"version": getenv("GITHUB_TAG"), + "date": strftime("%Y-%m-%d", localtime())})) + tree.write(metainfo_xml, encoding="utf-8", xml_declaration=True) diff --git a/build/mac/env.sh b/build/mac/env.sh index fdacb237c1..2f80ff69ca 100755 --- a/build/mac/env.sh +++ b/build/mac/env.sh @@ -3,28 +3,11 @@ set -x # print all commands set -e # exit when any command fails export APPNAME=Tribler +export DMGNAME="Tribler-$GITHUB_TAG" + export LOG_LEVEL=${LOG_LEVEL:-"DEBUG"} export BUILD_ENV=${BUILD_ENV:-"venv"} -PRE_BUILD_INSTRUCTIONS=$(cat <<-END - git describe --tags | python -c "import sys; print(next(sys.stdin).lstrip('v'))" > .TriblerVersion - git rev-parse HEAD > .TriblerCommit - - export TRIBLER_VERSION=\$(head -n 1 .TriblerVersion) - python3 ./build/update_version.py -r . -END -) - -if [ ! -f .TriblerVersion ]; then - echo "No .TriblerVersion file found, run the following commands:" - echo "$PRE_BUILD_INSTRUCTIONS" - exit 1 -fi - -if [ -e .TriblerVersion ]; then - export DMGNAME="Tribler-$(cat .TriblerVersion)" -fi - # Directories export DIST_DIR=dist export INSTALL_DIR=$DIST_DIR/installdir diff --git a/build/mac/makedist_macos.sh b/build/mac/makedist_macos.sh index 46727beda0..5fed30ed32 100755 --- a/build/mac/makedist_macos.sh +++ b/build/mac/makedist_macos.sh @@ -7,27 +7,10 @@ set -e # exit when any command fails source ./build/mac/env.sh -# ----- Clean up -/bin/rm -rf $DIST_DIR - -# ----- Prepare venv & install dependencies before the build - -python3 -m venv "${BUILD_ENV}" -. "${BUILD_ENV}"/bin/activate -python3 -m pip install --upgrade pip -python3 -m pip install --upgrade -r requirements-build.txt - -# ----- Build UI - -pushd . -cd src/tribler/ui/ -npm install -npm run build -rm -rf node_modules -popd +# ----- Clean UI +rm -rf src/tribler/ui/node_modules # ----- Build - pyinstaller tribler.spec --log-level="${LOG_LEVEL}" mkdir -p $INSTALL_DIR diff --git a/build/update_version.py b/build/update_version.py deleted file mode 100644 index 198cca051f..0000000000 --- a/build/update_version.py +++ /dev/null @@ -1,47 +0,0 @@ -import logging -import os -from argparse import ArgumentParser -from pathlib import Path -from time import ctime - -logger = logging.getLogger(__name__) -logging.basicConfig(level=logging.INFO) - - -def parse_arguments(): - parser = ArgumentParser(description='Update Tribler Version') - parser.add_argument('-r', '--repo', type=str, help='path to a repository folder', default='.') - return parser.parse_args() - - -if __name__ == '__main__': - arguments = parse_arguments() - logger.info(f'Arguments: {arguments}') - - ref_name = Path('.TriblerVersion').read_text().rstrip('\n') - logger.info(f'Tribler tag: {ref_name}') - - commit = Path('.TriblerCommit').read_text().rstrip('\n') - logger.info(f'Git Commit: {commit}') - - build_time = ctime() - logger.info(f'Build time: {build_time}') - - sentry_url = os.environ.get('SENTRY_URL', None) - logger.info(f'Sentry URL (hash): {hash(sentry_url)}') - if sentry_url is None: - logger.critical('Sentry url is not defined. To define sentry url use:' - 'EXPORT SENTRY_URL=\n' - 'If you want to disable sentry, then define the following:' - 'EXPORT SENTRY_URL=') - exit(1) - - version_py = Path(arguments.repo) / 'src/tribler/core/version.py' - logger.info(f'Write info to: {version_py}') - version_py.write_text( - f'version_id = "{ref_name}"\n' - f'build_date = "{build_time}"\n' - f'commit_id = "{commit}"\n' - f'sentry_url = "{sentry_url}"\n' - ) - diff --git a/build/win/build.py b/build/win/build.py index d4b5c80a65..a39a532cda 100644 --- a/build/win/build.py +++ b/build/win/build.py @@ -57,7 +57,6 @@ def get_freeze_build_options(): included_files = [ ("src/tribler/ui/public", "lib/tribler/ui/public"), ("src/tribler/ui/dist", "lib/tribler/ui/dist"), - ("src/tribler/core", "tribler_source/tribler/core"), ("src/tribler/ui/public", "tribler_source/tribler/ui/public"), ("src/tribler/ui/dist", "tribler_source/tribler/ui/dist"), @@ -91,7 +90,6 @@ def get_freeze_build_options(): if platform.system() == 'Linux': _setup_options["build_exe"]["bin_includes"] = "libffi.so" - app_name = "Tribler" if sys.platform != "linux" else "tribler" app_script = "src/tribler/run.py" app_icon_path = "build/win/resources/tribler.ico" if sys.platform == "win32" else "build/mac/resources/tribler.icns" diff --git a/build/win/clean.bat b/build/win/clean.bat deleted file mode 100644 index 4291d61f15..0000000000 --- a/build/win/clean.bat +++ /dev/null @@ -1,2 +0,0 @@ -rmdir /S /Q dist -del /S /Q *.pyc diff --git a/build/win/makedist_win.bat b/build/win/makedist_win.bat index 4cc22b965e..72920d0365 100644 --- a/build/win/makedist_win.bat +++ b/build/win/makedist_win.bat @@ -22,35 +22,8 @@ IF NOT EXIST %NSIS% ( EXIT /b ) -REM ----- Clean up - -call build\win\clean.bat - -REM ----- Prepare venv & install dependencies before the build -if defined VENV ( - call "%VENV%\Scripts\activate.bat" -) else ( - echo VENV environment variable is not set. Skipping. -) - -call python3 -m pip install --upgrade pip -call python3 -m pip install --upgrade -r requirements-build.txt - -REM ----- Build UI -pushd . -cd src/tribler/ui/ -call npm install -call npm run build -popd - REM ----- Build -REM Arno: When adding files here, make sure tribler.nsi actually -REM packs them in the installer .EXE - -ECHO Install pip dependencies for correct py-installer's work -call python3 -m pip install --upgrade -r build\win\requirements.txt - REM Sandip 2024-03-22: Deprecated, we are not using PyInstaller anymore because of issue with False Malware detections. REM %PYTHONHOME%\Scripts\pyinstaller.exe tribler.spec --log-level=%LOG_LEVEL% || exit /b ECHO Building Tribler using Cx_Freeze @@ -64,15 +37,10 @@ REM copy Tribler\Main\Build\Win\tribler.exe.manifest dist\tribler mkdir dist\tribler\tools copy build\win\tools\reset*.bat dist\tribler\tools -REM Laurens, 2016-04-20: Copy the redistributables of 2008, 2012 and 2015 to the install dir -REM Sandip, 2019-10-24: redistributables 2008, 2012 are not necessary anymore -REM copy C:\build\vc_redist_110.exe dist\tribler -copy C:\build\vc_redist_140.exe dist\tribler - REM Copy various libraries required on runtime (libsodium and openssl) -copy C:\build\libsodium.dll dist\tribler\lib +move src\libsodium.dll dist\tribler\lib REM Sandip, 2024-03-26: Some openssl dlls are missing so need to be copied manually. -copy C:\build\openssl\*.dll dist\tribler\lib +copy C:\Program Files\OpenSSL\bin\*.dll dist\tribler\lib @echo Running NSIS @@ -86,7 +54,7 @@ if not defined SKIP_SIGNING_TRIBLER_BINARIES ( signtool.exe sign /f C:\build\certs\certificate.pfx /p "%PASSWORD%" /d "Tribler" /t "http://timestamp.digicert.com" tribler.exe ) :makeinstaller -%NSIS% tribler.nsi || exit /b +%NSIS% /DVERSION=%GITHUB_TAG% tribler.nsi || exit /b move Tribler_*.exe .. cd .. REM Arno: Sign installer diff --git a/build/win/replace_nsi.py b/build/win/replace_nsi.py deleted file mode 100644 index bb35d758c9..0000000000 --- a/build/win/replace_nsi.py +++ /dev/null @@ -1,32 +0,0 @@ -import logging -from argparse import ArgumentParser -from pathlib import Path - -logger = logging.getLogger(__name__) -logging.basicConfig(level=logging.INFO) - - -def parse_arguments(): - parser = ArgumentParser(description='Update Tribler NSI') - parser.add_argument('-r', '--repo', type=str, help='path to a repository folder', default='.') - parser.add_argument('-a', '--architecture', type=str, help='architecture (x86 or x64)', default='x86') - return parser.parse_args() - - -if __name__ == '__main__': - arguments = parse_arguments() - - version = Path('.TriblerVersion').read_text().lstrip('v').rstrip('\n') - tribler_nsi = Path(arguments.repo) / 'build/win/resources/tribler.nsi' - content = tribler_nsi.read_text() - - content = content.replace('__GIT__', version) - if arguments.architecture == 'x64': - content = content.replace('x86', 'x64') - content = content.replace('"32"', '"64"') - content = content.replace('$PROGRAMFILES', '$PROGRAMFILES64') - - tribler_nsi.write_text(content) - - logger.info(f'Content of tribler.nsi: {content}') - diff --git a/build/win/requirements.txt b/build/win/requirements.txt deleted file mode 100644 index 0e56891899..0000000000 --- a/build/win/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ ---no-binary :all: - -typing_extensions==4.2.0 -pydantic==1.9.0 diff --git a/build/win/resources/torrenticon.ico b/build/win/resources/torrenticon.ico new file mode 100644 index 0000000000000000000000000000000000000000..aaea20ee79ffd3be2643be5eb710de444014fa21 GIT binary patch literal 24190 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 F{15Pbq-6jA literal 0 HcmV?d00001 diff --git a/build/win/resources/tribler.nsi b/build/win/resources/tribler.nsi index 447090ce75..f28895f807 100644 --- a/build/win/resources/tribler.nsi +++ b/build/win/resources/tribler.nsi @@ -1,8 +1,4 @@ !define PRODUCT "Tribler" -; Laurens, 2016-03-14: The __GIT__ string will be replaced by update_version_from_git.py -; with the current version of the build. -!define VERSION "__GIT__" -; Laurens, 2016-03-14: The _x86 will be replaced by _x64 if needed in update_version_from_git.py !define BITVERSION "x86" !include "MUI2.nsh" @@ -68,7 +64,7 @@ BrandingText "${PRODUCT}" ;-------------------------------- ;Modern UI Configuration -!define MUI_ICON "tribler_source\resources\tribler.ico" +!define MUI_ICON "..\..\build\win\resources\tribler.ico" !define MUI_COMPONENTSPAGE_SMALLDESC !define MUI_ABORTWARNING @@ -122,14 +118,16 @@ Section "!Main EXE" SecMain ; ExecWait "$INSTDIR\vc_redist_110.exe /q /norestart" ; Libraries dependant on 2015 are: Python, Qt5 - File vc_redist_140.exe - ExecWait "$INSTDIR\vc_redist_140.exe /q /norestart" + File "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Redist\MSVC\v143\vc_redist.x64.exe" + ExecWait "$INSTDIR\vc_redist.x64.exe /q /norestart" FileOpen $9 "$INSTDIR\tribler.exe.log" w FileWrite $9 "" FileClose $9 - AccessControl::GrantOnFile "$INSTDIR\tribler.exe.log" "(BU)" "FullAccess" - AccessControl::GrantOnFile "$INSTDIR\tribler.exe.log" "(S-1-5-32-545)" "FullAccess" + Exec 'icacls "$INSTDIR\tribler.exe.log" /grant *BU:F' + #AccessControl::GrantOnFile "$INSTDIR\tribler.exe.log" "(BU)" "FullAccess" + Exec 'icacls "$INSTDIR\tribler.exe.log" /grant *S-1-5-32-545:F' + #AccessControl::GrantOnFile "$INSTDIR\tribler.exe.log" "(S-1-5-32-545)" "FullAccess" ; End SetOutPath "$INSTDIR" @@ -179,14 +177,14 @@ Section "Make Default For .torrent" SecDefaultTorrent WriteRegBin HKCR bittorrent EditFlags 00000100 WriteRegStr HKCR "bittorrent\shell" "" open WriteRegStr HKCR "bittorrent\shell\open\command" "" '"$INSTDIR\${PRODUCT}.exe" "%1"' - WriteRegStr HKCR "bittorrent\DefaultIcon" "" "$INSTDIR\Tribler\Main\vwxGUI\images\torrenticon.ico" + WriteRegStr HKCR "bittorrent\DefaultIcon" "" "$INSTDIR\tribler_source\resources\torrenticon.ico" SectionEnd Section "Make Default For magnet://" SecDefaultMagnet WriteRegStr HKCR "magnet" "" "URL: Magnet Link Protocol" WriteRegStr HKCR "magnet" "URL Protocol" "" - WriteRegStr HKCR "magnet\DefaultIcon" "" "$INSTDIR\Tribler\Main\vwxGUI\images\torrenticon.ico" + WriteRegStr HKCR "magnet\DefaultIcon" "" "$INSTDIR\tribler_source\resources\torrenticon.ico" WriteRegStr HKCR "magnet\shell\open\command" "" '"$INSTDIR\${PRODUCT}.exe" "%1"' WriteRegStr HKLM "SOFTWARE\Classes\magnet\shell\open\command" "" '"$INSTDIR\${PRODUCT}.exe" "%1"' SectionEnd @@ -199,9 +197,7 @@ SectionEnd !insertmacro MUI_DESCRIPTION_TEXT ${SecDesk} $(DESC_SecDesk) !insertmacro MUI_DESCRIPTION_TEXT ${SecStart} $(DESC_SecStart) !insertmacro MUI_DESCRIPTION_TEXT ${SecDefaultTorrent} $(DESC_SecDefaultTorrent) -!insertmacro MUI_DESCRIPTION_TEXT ${SecDefaultTStream} $(DESC_SecDefaultTStream) !insertmacro MUI_DESCRIPTION_TEXT ${SecDefaultMagnet} $(DESC_SecDefaultMagnet) -!insertmacro MUI_DESCRIPTION_TEXT ${SecDefaultPpsp} $(DESC_SecDefaultPpsp) !insertmacro MUI_FUNCTION_DESCRIPTION_END ;-------------------------------- diff --git a/requirements-build.txt b/requirements-build.txt index cf088a6f22..0a9dca929f 100644 --- a/requirements-build.txt +++ b/requirements-build.txt @@ -1,19 +1,7 @@ -# These are specific versions of the packages that are used for making the build work. -# These are installed before other dependencies. -PyQt5==5.15.10 -PyQt5-sip==12.13.0 -pyqtgraph==0.13.3 - -r requirements.txt -cx_Freeze==7.0.0; sys_platform != 'darwin' -PyInstaller==6.6.0; sys_platform == 'darwin' - -setuptools==65.5.1; sys_platform == 'darwin' -text-unidecode==1.3; sys_platform == 'darwin' - -defusedxml==0.7.1; sys_platform == 'linux2' or sys_platform == 'linux' -markupsafe==2.0.1; sys_platform == 'linux2' or sys_platform == 'linux' -PyGObject==3.44.1; sys_platform == 'linux2' or sys_platform == 'linux' +cx_Freeze; sys_platform != 'darwin' +PyInstaller; sys_platform == 'darwin' -requests==2.31.0 +setuptools +requests diff --git a/setup.py b/setup.py index 2bc3deed6e..e5e2f1b3ce 100644 --- a/setup.py +++ b/setup.py @@ -5,26 +5,12 @@ import shutil from pathlib import Path +from packaging.version import Version from setuptools import find_packages from build.win.build import setup, setup_executables, setup_options -def read_version_from_file(file_path: str) -> str: - """ - Get the version from the file at the given file path. - """ - with open(file_path, encoding="utf-8") as file: - file_content = file.read() - # Use regular expression to find the version pattern - version_match = re.search(r"^version_id = ['\"]([^'\"]*)['\"]", file_content, re.M) - if version_match: - version_str = version_match.group(1) - return version_str.split("-")[0] - msg = "Unable to find version string." - raise RuntimeError(msg) - - def read_requirements(file_name: str, directory: str = ".") -> list[str]: """ Read the pip requirements from the given file name in the given directory. @@ -54,19 +40,14 @@ def read_requirements(file_name: str, directory: str = ".") -> list[str]: # See: entry_points={"gui_scripts": ["tribler=tribler.run:main"]} in setup() below. shutil.copy("src/run_tribler.py", "src/tribler/run.py") -# Read the version from the version file: src/tribler/core/version.py -# Note that, for version.py to include the correct version, it should be generated first using git commands. -# For example: -# git describe --tags | python -c "import sys; print(next(sys.stdin).lstrip("v"))" > .TriblerVersion -# git rev-parse HEAD > .TriblerCommit -# Then, the version.py file can be generated using the following command: -# python build/update_version.py -version_file = os.path.join("src", "tribler", "core", "version.py") -version = read_version_from_file(version_file) +# Turn the tag into a sequence of integer values and normalize into a period-separated string. +raw_version = os.getenv("GITHUB_TAG") +version_numbers = [str(value) for value in map(int, re.findall(r"\d+", raw_version))] +version = Version(".".join(version_numbers)) setup( name="tribler", - version=version, + version=str(version), description="Privacy enhanced BitTorrent client with P2P content discovery", long_description=Path("README.rst").read_text(encoding="utf-8"), long_description_content_type="text/x-rst", diff --git a/tribler.spec b/tribler.spec index f5fc58e432..6d0d7a1ebd 100644 --- a/tribler.spec +++ b/tribler.spec @@ -1,8 +1,10 @@ # -*- mode: python -*- +from packaging.version import Version + block_cipher = None import imp import os -import pkgutil +import re import shutil import sys @@ -20,9 +22,10 @@ sys.path.append(pyipv8_dir) # Import components that are not imported by the main script import tribler.core.components as known_components -from tribler.core.version import version_id - -version_str = version_id.split('-')[0] +# Turn the tag into a sequence of integer values and normalize into a period-separated string. +raw_version = os.getenv("GITHUB_TAG") +version_numbers = [str(value) for value in map(int, re.findall(r"\d+", raw_version))] +version_str = str(Version(".".join(version_numbers))) # On macOS, we always show the console to prevent the double-dock bug (although the OS does not actually show the console). # See https://github.com/Tribler/tribler/issues/3817