mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 00:25:15 +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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  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:
 | 
			
		||||
    runs-on: macos-11
 | 
			
		||||
    needs: prepare
 | 
			
		||||
@@ -194,8 +237,8 @@ jobs:
 | 
			
		||||
          python-version: '3.8'
 | 
			
		||||
    - name: Install Requirements
 | 
			
		||||
      run: |  # Custom pyinstaller built with https://github.com/yt-dlp/pyinstaller-builds
 | 
			
		||||
          python -m pip install --upgrade 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
 | 
			
		||||
          python -m pip install -U pip setuptools wheel py2exe
 | 
			
		||||
          pip install -U "https://yt-dlp.github.io/Pyinstaller-Builds/x86_64/pyinstaller-5.3-py3-none-any.whl" -r requirements.txt
 | 
			
		||||
 | 
			
		||||
    - name: Prepare
 | 
			
		||||
      run: |
 | 
			
		||||
@@ -230,8 +273,8 @@ jobs:
 | 
			
		||||
          architecture: 'x86'
 | 
			
		||||
    - name: Install Requirements
 | 
			
		||||
      run: |
 | 
			
		||||
          python -m pip install --upgrade pip setuptools wheel
 | 
			
		||||
          pip install "https://yt-dlp.github.io/Pyinstaller-Builds/i686/pyinstaller-5.3-py3-none-any.whl" -r requirements.txt
 | 
			
		||||
          python -m pip install -U pip setuptools wheel
 | 
			
		||||
          pip install -U "https://yt-dlp.github.io/Pyinstaller-Builds/i686/pyinstaller-5.3-py3-none-any.whl" -r requirements.txt
 | 
			
		||||
 | 
			
		||||
    - name: Prepare
 | 
			
		||||
      run: |
 | 
			
		||||
@@ -252,7 +295,7 @@ jobs:
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write  # for action-gh-release
 | 
			
		||||
    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:
 | 
			
		||||
    - 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.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_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.zip | awk '{print $1 "  yt-dlp_linux.zip"}' >> SHA2-256SUMS
 | 
			
		||||
          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.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_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.zip | awk '{print $1 "  yt-dlp_linux.zip"}' >> SHA2-512SUMS
 | 
			
		||||
 | 
			
		||||
@@ -322,6 +369,8 @@ jobs:
 | 
			
		||||
          artifact/yt-dlp_macos
 | 
			
		||||
          artifact/yt-dlp_macos.zip
 | 
			
		||||
          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.zip
 | 
			
		||||
          _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_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_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_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
 | 
			
		||||
 
 | 
			
		||||
@@ -12,9 +12,8 @@ from PyInstaller.__main__ import run as run_pyinstaller
 | 
			
		||||
 | 
			
		||||
from devscripts.utils import read_version
 | 
			
		||||
 | 
			
		||||
OS_NAME, MACHINE, ARCH = sys.platform, platform.machine(), platform.architecture()[0][:2]
 | 
			
		||||
if MACHINE in ('x86_64', 'AMD64') or ('i' in MACHINE and '86' in MACHINE):
 | 
			
		||||
    # NB: Windows x86 has MACHINE = AMD64 irrespective of bitness
 | 
			
		||||
OS_NAME, MACHINE, ARCH = sys.platform, platform.machine().lower(), platform.architecture()[0][:2]
 | 
			
		||||
if MACHINE in ('x86', 'x86_64', 'amd64', 'i386', 'i686'):
 | 
			
		||||
    MACHINE = 'x86' if ARCH == '32' else ''
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -63,7 +62,7 @@ def exe(onedir):
 | 
			
		||||
    name = '_'.join(filter(None, (
 | 
			
		||||
        'yt-dlp',
 | 
			
		||||
        {'win32': '', 'darwin': 'macos'}.get(OS_NAME, OS_NAME),
 | 
			
		||||
        MACHINE
 | 
			
		||||
        MACHINE,
 | 
			
		||||
    )))
 | 
			
		||||
    return name, ''.join(filter(None, (
 | 
			
		||||
        'dist/',
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ from .utils import (
 | 
			
		||||
    Popen,
 | 
			
		||||
    cached_method,
 | 
			
		||||
    deprecation_warning,
 | 
			
		||||
    remove_end,
 | 
			
		||||
    shell_quote,
 | 
			
		||||
    system_identifier,
 | 
			
		||||
    traverse_obj,
 | 
			
		||||
@@ -35,9 +36,14 @@ def _get_variant_and_executable_path():
 | 
			
		||||
            return 'py2exe', path
 | 
			
		||||
        if sys._MEIPASS == os.path.dirname(path):
 | 
			
		||||
            return f'{sys.platform}_dir', path
 | 
			
		||||
        if sys.platform == 'darwin' and version_tuple(platform.mac_ver()[0]) < (10, 15):
 | 
			
		||||
            return 'darwin_legacy_exe', path
 | 
			
		||||
        return f'{sys.platform}_exe', path
 | 
			
		||||
        if sys.platform == 'darwin':
 | 
			
		||||
            machine = '_legacy' if version_tuple(platform.mac_ver()[0]) < (10, 15) else ''
 | 
			
		||||
        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__)
 | 
			
		||||
    if isinstance(__loader__, zipimporter):
 | 
			
		||||
@@ -68,10 +74,13 @@ def current_git_head():
 | 
			
		||||
_FILE_SUFFIXES = {
 | 
			
		||||
    'zip': '',
 | 
			
		||||
    'py2exe': '_min.exe',
 | 
			
		||||
    'win32_exe': '.exe',
 | 
			
		||||
    'win_exe': '.exe',
 | 
			
		||||
    'win_x86_exe': '_x86.exe',
 | 
			
		||||
    'darwin_exe': '_macos',
 | 
			
		||||
    'darwin_legacy_exe': '_macos_legacy',
 | 
			
		||||
    'linux_exe': '_linux',
 | 
			
		||||
    'linux_aarch64_exe': '_linux_aarch64',
 | 
			
		||||
    'linux_armv7l_exe': '_linux_armv7l',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_NON_UPDATEABLE_REASONS = {
 | 
			
		||||
@@ -161,10 +170,7 @@ class Updater:
 | 
			
		||||
    @functools.cached_property
 | 
			
		||||
    def release_name(self):
 | 
			
		||||
        """The release filename"""
 | 
			
		||||
        label = _FILE_SUFFIXES[detect_variant()]
 | 
			
		||||
        if label and platform.architecture()[0][:2] == '32':
 | 
			
		||||
            label = f'_x86{label}'
 | 
			
		||||
        return f'yt-dlp{label}'
 | 
			
		||||
        return f'yt-dlp{_FILE_SUFFIXES[detect_variant()]}'
 | 
			
		||||
 | 
			
		||||
    @functools.cached_property
 | 
			
		||||
    def release_hash(self):
 | 
			
		||||
 
 | 
			
		||||
@@ -2006,9 +2006,10 @@ def system_identifier():
 | 
			
		||||
    with contextlib.suppress(OSError):  # We may not have access to the executable
 | 
			
		||||
        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(),
 | 
			
		||||
        python_implementation,
 | 
			
		||||
        platform.machine(),
 | 
			
		||||
        platform.architecture()[0],
 | 
			
		||||
        platform.platform(),
 | 
			
		||||
        ssl.OPENSSL_VERSION,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user