mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[build] Create armv7l and aarch64 releases (#5449)
Closes #5436 Authored by: MrOctopus, pukkandan
This commit is contained in:
		
							
								
								
									
										59
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										59
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							| @@ -114,6 +114,49 @@ jobs: | |||||||
|         git -C taps/ push |         git -C taps/ push | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   build_linux_arm: | ||||||
|  |     permissions: | ||||||
|  |       packages: write  # for Creating cache | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     needs: prepare | ||||||
|  |     strategy: | ||||||
|  |       matrix: | ||||||
|  |         architecture: | ||||||
|  |         - armv7 | ||||||
|  |         - aarch64 | ||||||
|  |  | ||||||
|  |     steps: | ||||||
|  |     - uses: actions/checkout@v3 | ||||||
|  |       with: | ||||||
|  |         path: ./repo | ||||||
|  |     - name: Virtualized Install, Prepare & Build | ||||||
|  |       uses: yt-dlp/run-on-arch-action@v2 | ||||||
|  |       with: | ||||||
|  |         githubToken: ${{ github.token }}  # To cache image | ||||||
|  |         arch: ${{ matrix.architecture }} | ||||||
|  |         distro: ubuntu18.04  # Standalone executable should be built on minimum supported OS | ||||||
|  |         dockerRunArgs: --volume "${PWD}/repo:/repo" | ||||||
|  |         install: |  # Installing Python 3.10 from the Deadsnakes repo raises errors | ||||||
|  |           apt update | ||||||
|  |           apt -y install zlib1g-dev python3.8 python3.8-dev python3.8-distutils python3-pip | ||||||
|  |           python3.8 -m pip install -U pip setuptools wheel | ||||||
|  |           # Cannot access requirements.txt from the repo directory at this stage | ||||||
|  |           python3.8 -m pip install -U Pyinstaller mutagen pycryptodomex websockets brotli certifi | ||||||
|  |  | ||||||
|  |         run: | | ||||||
|  |           cd repo | ||||||
|  |           python3.8 -m pip install -U Pyinstaller -r requirements.txt  # Cached version may be out of date | ||||||
|  |           python3.8 devscripts/update-version.py ${{ needs.prepare.outputs.version_suffix }} | ||||||
|  |           python3.8 devscripts/make_lazy_extractors.py | ||||||
|  |           python3.8 pyinst.py | ||||||
|  |  | ||||||
|  |     - name: Upload artifacts | ||||||
|  |       uses: actions/upload-artifact@v3 | ||||||
|  |       with: | ||||||
|  |         path: |  # run-on-arch-action designates armv7l as armv7 | ||||||
|  |           repo/dist/yt-dlp_linux_${{ (matrix.architecture == 'armv7' && 'armv7l') || matrix.architecture }} | ||||||
|  |  | ||||||
|  |  | ||||||
|   build_macos: |   build_macos: | ||||||
|     runs-on: macos-11 |     runs-on: macos-11 | ||||||
|     needs: prepare |     needs: prepare | ||||||
| @@ -194,8 +237,8 @@ jobs: | |||||||
|           python-version: '3.8' |           python-version: '3.8' | ||||||
|     - name: Install Requirements |     - name: Install Requirements | ||||||
|       run: |  # Custom pyinstaller built with https://github.com/yt-dlp/pyinstaller-builds |       run: |  # Custom pyinstaller built with https://github.com/yt-dlp/pyinstaller-builds | ||||||
|           python -m pip install --upgrade pip setuptools wheel py2exe |           python -m pip install -U pip setuptools wheel py2exe | ||||||
|           pip install "https://yt-dlp.github.io/Pyinstaller-Builds/x86_64/pyinstaller-5.3-py3-none-any.whl" -r requirements.txt |           pip install -U "https://yt-dlp.github.io/Pyinstaller-Builds/x86_64/pyinstaller-5.3-py3-none-any.whl" -r requirements.txt | ||||||
|  |  | ||||||
|     - name: Prepare |     - name: Prepare | ||||||
|       run: | |       run: | | ||||||
| @@ -230,8 +273,8 @@ jobs: | |||||||
|           architecture: 'x86' |           architecture: 'x86' | ||||||
|     - name: Install Requirements |     - name: Install Requirements | ||||||
|       run: | |       run: | | ||||||
|           python -m pip install --upgrade pip setuptools wheel |           python -m pip install -U pip setuptools wheel | ||||||
|           pip install "https://yt-dlp.github.io/Pyinstaller-Builds/i686/pyinstaller-5.3-py3-none-any.whl" -r requirements.txt |           pip install -U "https://yt-dlp.github.io/Pyinstaller-Builds/i686/pyinstaller-5.3-py3-none-any.whl" -r requirements.txt | ||||||
|  |  | ||||||
|     - name: Prepare |     - name: Prepare | ||||||
|       run: | |       run: | | ||||||
| @@ -252,7 +295,7 @@ jobs: | |||||||
|     permissions: |     permissions: | ||||||
|       contents: write  # for action-gh-release |       contents: write  # for action-gh-release | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     needs: [prepare, build_unix, build_windows, build_windows32, build_macos, build_macos_legacy] |     needs: [prepare, build_unix, build_linux_arm, build_windows, build_windows32, build_macos, build_macos_legacy] | ||||||
|  |  | ||||||
|     steps: |     steps: | ||||||
|     - uses: actions/checkout@v3 |     - uses: actions/checkout@v3 | ||||||
| @@ -279,6 +322,8 @@ jobs: | |||||||
|           sha256sum artifact/yt-dlp_macos | awk '{print $1 "  yt-dlp_macos"}' >> SHA2-256SUMS |           sha256sum artifact/yt-dlp_macos | awk '{print $1 "  yt-dlp_macos"}' >> SHA2-256SUMS | ||||||
|           sha256sum artifact/yt-dlp_macos.zip | awk '{print $1 "  yt-dlp_macos.zip"}' >> SHA2-256SUMS |           sha256sum artifact/yt-dlp_macos.zip | awk '{print $1 "  yt-dlp_macos.zip"}' >> SHA2-256SUMS | ||||||
|           sha256sum artifact/yt-dlp_macos_legacy | awk '{print $1 "  yt-dlp_macos_legacy"}' >> SHA2-256SUMS |           sha256sum artifact/yt-dlp_macos_legacy | awk '{print $1 "  yt-dlp_macos_legacy"}' >> SHA2-256SUMS | ||||||
|  |           sha256sum artifact/yt-dlp_linux_armv7l | awk '{print $1 "  yt-dlp_linux_armv7l"}' >> SHA2-256SUMS | ||||||
|  |           sha256sum artifact/yt-dlp_linux_aarch64 | awk '{print $1 "  yt-dlp_linux_aarch64"}' >> SHA2-256SUMS | ||||||
|           sha256sum artifact/dist/yt-dlp_linux | awk '{print $1 "  yt-dlp_linux"}' >> SHA2-256SUMS |           sha256sum artifact/dist/yt-dlp_linux | awk '{print $1 "  yt-dlp_linux"}' >> SHA2-256SUMS | ||||||
|           sha256sum artifact/dist/yt-dlp_linux.zip | awk '{print $1 "  yt-dlp_linux.zip"}' >> SHA2-256SUMS |           sha256sum artifact/dist/yt-dlp_linux.zip | awk '{print $1 "  yt-dlp_linux.zip"}' >> SHA2-256SUMS | ||||||
|           sha512sum artifact/yt-dlp | awk '{print $1 "  yt-dlp"}' >> SHA2-512SUMS |           sha512sum artifact/yt-dlp | awk '{print $1 "  yt-dlp"}' >> SHA2-512SUMS | ||||||
| @@ -290,6 +335,8 @@ jobs: | |||||||
|           sha512sum artifact/yt-dlp_macos | awk '{print $1 "  yt-dlp_macos"}' >> SHA2-512SUMS |           sha512sum artifact/yt-dlp_macos | awk '{print $1 "  yt-dlp_macos"}' >> SHA2-512SUMS | ||||||
|           sha512sum artifact/yt-dlp_macos.zip | awk '{print $1 "  yt-dlp_macos.zip"}' >> SHA2-512SUMS |           sha512sum artifact/yt-dlp_macos.zip | awk '{print $1 "  yt-dlp_macos.zip"}' >> SHA2-512SUMS | ||||||
|           sha512sum artifact/yt-dlp_macos_legacy | awk '{print $1 "  yt-dlp_macos_legacy"}' >> SHA2-512SUMS |           sha512sum artifact/yt-dlp_macos_legacy | awk '{print $1 "  yt-dlp_macos_legacy"}' >> SHA2-512SUMS | ||||||
|  |           sha512sum artifact/yt-dlp_linux_armv7l | awk '{print $1 "  yt-dlp_linux_armv7l"}' >> SHA2-512SUMS | ||||||
|  |           sha512sum artifact/yt-dlp_linux_aarch64 | awk '{print $1 "  yt-dlp_linux_aarch64"}' >> SHA2-512SUMS | ||||||
|           sha512sum artifact/dist/yt-dlp_linux | awk '{print $1 "  yt-dlp_linux"}' >> SHA2-512SUMS |           sha512sum artifact/dist/yt-dlp_linux | awk '{print $1 "  yt-dlp_linux"}' >> SHA2-512SUMS | ||||||
|           sha512sum artifact/dist/yt-dlp_linux.zip | awk '{print $1 "  yt-dlp_linux.zip"}' >> SHA2-512SUMS |           sha512sum artifact/dist/yt-dlp_linux.zip | awk '{print $1 "  yt-dlp_linux.zip"}' >> SHA2-512SUMS | ||||||
|  |  | ||||||
| @@ -322,6 +369,8 @@ jobs: | |||||||
|           artifact/yt-dlp_macos |           artifact/yt-dlp_macos | ||||||
|           artifact/yt-dlp_macos.zip |           artifact/yt-dlp_macos.zip | ||||||
|           artifact/yt-dlp_macos_legacy |           artifact/yt-dlp_macos_legacy | ||||||
|  |           artifact/yt-dlp_linux_armv7l | ||||||
|  |           artifact/yt-dlp_linux_aarch64 | ||||||
|           artifact/dist/yt-dlp_linux |           artifact/dist/yt-dlp_linux | ||||||
|           artifact/dist/yt-dlp_linux.zip |           artifact/dist/yt-dlp_linux.zip | ||||||
|           _update_spec |           _update_spec | ||||||
|   | |||||||
| @@ -201,6 +201,8 @@ File|Description | |||||||
| [yt-dlp_min.exe](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_min.exe)|Windows (Win7 SP1+) standalone x64 binary built with `py2exe`<br/> ([Not recommended](#standalone-py2exe-builds-windows)) | [yt-dlp_min.exe](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_min.exe)|Windows (Win7 SP1+) standalone x64 binary built with `py2exe`<br/> ([Not recommended](#standalone-py2exe-builds-windows)) | ||||||
| [yt-dlp_linux](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux)|Linux standalone x64 binary | [yt-dlp_linux](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux)|Linux standalone x64 binary | ||||||
| [yt-dlp_linux.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux.zip)|Unpackaged Linux executable (no auto-update) | [yt-dlp_linux.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux.zip)|Unpackaged Linux executable (no auto-update) | ||||||
|  | [yt-dlp_linux_armv7l](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux_armv7l)|Linux standalone armv7l (32-bit) binary | ||||||
|  | [yt-dlp_linux_aarch64](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux_aarch64)|Linux standalone aarch64 (64-bit) binary | ||||||
| [yt-dlp_win.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_win.zip)|Unpackaged Windows executable (no auto-update) | [yt-dlp_win.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_win.zip)|Unpackaged Windows executable (no auto-update) | ||||||
| [yt-dlp_macos.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos.zip)|Unpackaged MacOS (10.15+) executable (no auto-update) | [yt-dlp_macos.zip](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos.zip)|Unpackaged MacOS (10.15+) executable (no auto-update) | ||||||
| [yt-dlp_macos_legacy](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos_legacy)|MacOS (10.9+) standalone x64 executable | [yt-dlp_macos_legacy](https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos_legacy)|MacOS (10.9+) standalone x64 executable | ||||||
|   | |||||||
| @@ -12,9 +12,8 @@ from PyInstaller.__main__ import run as run_pyinstaller | |||||||
| 
 | 
 | ||||||
| from devscripts.utils import read_version | from devscripts.utils import read_version | ||||||
| 
 | 
 | ||||||
| OS_NAME, MACHINE, ARCH = sys.platform, platform.machine(), platform.architecture()[0][:2] | OS_NAME, MACHINE, ARCH = sys.platform, platform.machine().lower(), platform.architecture()[0][:2] | ||||||
| if MACHINE in ('x86_64', 'AMD64') or ('i' in MACHINE and '86' in MACHINE): | if MACHINE in ('x86', 'x86_64', 'amd64', 'i386', 'i686'): | ||||||
|     # NB: Windows x86 has MACHINE = AMD64 irrespective of bitness |  | ||||||
|     MACHINE = 'x86' if ARCH == '32' else '' |     MACHINE = 'x86' if ARCH == '32' else '' | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @@ -63,7 +62,7 @@ def exe(onedir): | |||||||
|     name = '_'.join(filter(None, ( |     name = '_'.join(filter(None, ( | ||||||
|         'yt-dlp', |         'yt-dlp', | ||||||
|         {'win32': '', 'darwin': 'macos'}.get(OS_NAME, OS_NAME), |         {'win32': '', 'darwin': 'macos'}.get(OS_NAME, OS_NAME), | ||||||
|         MACHINE |         MACHINE, | ||||||
|     ))) |     ))) | ||||||
|     return name, ''.join(filter(None, ( |     return name, ''.join(filter(None, ( | ||||||
|         'dist/', |         'dist/', | ||||||
|   | |||||||
| @@ -15,6 +15,7 @@ from .utils import ( | |||||||
|     Popen, |     Popen, | ||||||
|     cached_method, |     cached_method, | ||||||
|     deprecation_warning, |     deprecation_warning, | ||||||
|  |     remove_end, | ||||||
|     shell_quote, |     shell_quote, | ||||||
|     system_identifier, |     system_identifier, | ||||||
|     traverse_obj, |     traverse_obj, | ||||||
| @@ -35,9 +36,14 @@ def _get_variant_and_executable_path(): | |||||||
|             return 'py2exe', path |             return 'py2exe', path | ||||||
|         if sys._MEIPASS == os.path.dirname(path): |         if sys._MEIPASS == os.path.dirname(path): | ||||||
|             return f'{sys.platform}_dir', path |             return f'{sys.platform}_dir', path | ||||||
|         if sys.platform == 'darwin' and version_tuple(platform.mac_ver()[0]) < (10, 15): |         if sys.platform == 'darwin': | ||||||
|             return 'darwin_legacy_exe', path |             machine = '_legacy' if version_tuple(platform.mac_ver()[0]) < (10, 15) else '' | ||||||
|         return f'{sys.platform}_exe', path |         else: | ||||||
|  |             machine = f'_{platform.machine().lower()}' | ||||||
|  |             # Ref: https://en.wikipedia.org/wiki/Uname#Examples | ||||||
|  |             if machine[1:] in ('x86', 'x86_64', 'amd64', 'i386', 'i686'): | ||||||
|  |                 machine = '_x86' if platform.architecture()[0][:2] == '32' else '' | ||||||
|  |         return f'{remove_end(sys.platform, "32")}{machine}_exe', path | ||||||
| 
 | 
 | ||||||
|     path = os.path.dirname(__file__) |     path = os.path.dirname(__file__) | ||||||
|     if isinstance(__loader__, zipimporter): |     if isinstance(__loader__, zipimporter): | ||||||
| @@ -68,10 +74,13 @@ def current_git_head(): | |||||||
| _FILE_SUFFIXES = { | _FILE_SUFFIXES = { | ||||||
|     'zip': '', |     'zip': '', | ||||||
|     'py2exe': '_min.exe', |     'py2exe': '_min.exe', | ||||||
|     'win32_exe': '.exe', |     'win_exe': '.exe', | ||||||
|  |     'win_x86_exe': '_x86.exe', | ||||||
|     'darwin_exe': '_macos', |     'darwin_exe': '_macos', | ||||||
|     'darwin_legacy_exe': '_macos_legacy', |     'darwin_legacy_exe': '_macos_legacy', | ||||||
|     'linux_exe': '_linux', |     'linux_exe': '_linux', | ||||||
|  |     'linux_aarch64_exe': '_linux_aarch64', | ||||||
|  |     'linux_armv7l_exe': '_linux_armv7l', | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| _NON_UPDATEABLE_REASONS = { | _NON_UPDATEABLE_REASONS = { | ||||||
| @@ -161,10 +170,7 @@ class Updater: | |||||||
|     @functools.cached_property |     @functools.cached_property | ||||||
|     def release_name(self): |     def release_name(self): | ||||||
|         """The release filename""" |         """The release filename""" | ||||||
|         label = _FILE_SUFFIXES[detect_variant()] |         return f'yt-dlp{_FILE_SUFFIXES[detect_variant()]}' | ||||||
|         if label and platform.architecture()[0][:2] == '32': |  | ||||||
|             label = f'_x86{label}' |  | ||||||
|         return f'yt-dlp{label}' |  | ||||||
| 
 | 
 | ||||||
|     @functools.cached_property |     @functools.cached_property | ||||||
|     def release_hash(self): |     def release_hash(self): | ||||||
|   | |||||||
| @@ -2006,9 +2006,10 @@ def system_identifier(): | |||||||
|     with contextlib.suppress(OSError):  # We may not have access to the executable |     with contextlib.suppress(OSError):  # We may not have access to the executable | ||||||
|         libc_ver = platform.libc_ver() |         libc_ver = platform.libc_ver() | ||||||
| 
 | 
 | ||||||
|     return 'Python %s (%s %s) - %s (%s%s)' % ( |     return 'Python %s (%s %s %s) - %s (%s%s)' % ( | ||||||
|         platform.python_version(), |         platform.python_version(), | ||||||
|         python_implementation, |         python_implementation, | ||||||
|  |         platform.machine(), | ||||||
|         platform.architecture()[0], |         platform.architecture()[0], | ||||||
|         platform.platform(), |         platform.platform(), | ||||||
|         ssl.OPENSSL_VERSION, |         ssl.OPENSSL_VERSION, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 MrOctopus
					MrOctopus