Compare commits

..

No commits in common. "a6a8f6b6d6775caa031e5016b79db28c6aaadfcb" and "c0c9cac55446f7bf48370ba60c06f9cf5bc48d15" have entirely different histories.

14 changed files with 57 additions and 114 deletions

View File

@ -74,7 +74,8 @@ on:
default: true default: true
type: boolean type: boolean
permissions: {} permissions:
contents: read
jobs: jobs:
process: process:
@ -185,10 +186,8 @@ jobs:
f.write(f'matrix={json.dumps(matrix)}') f.write(f'matrix={json.dumps(matrix)}')
unix: unix:
needs: [process] needs: process
if: inputs.unix if: inputs.unix
permissions:
contents: read
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
CHANNEL: ${{ inputs.channel }} CHANNEL: ${{ inputs.channel }}
@ -200,7 +199,6 @@ jobs:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 # Needed for changelog fetch-depth: 0 # Needed for changelog
persist-credentials: false
- uses: actions/setup-python@v6 - uses: actions/setup-python@v6
with: with:
@ -231,7 +229,7 @@ jobs:
[[ "${version}" != "${downgraded_version}" ]] [[ "${version}" != "${downgraded_version}" ]]
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v4
with: with:
name: build-bin-${{ github.job }} name: build-bin-${{ github.job }}
path: | path: |
@ -241,10 +239,8 @@ jobs:
linux: linux:
name: ${{ matrix.os }} (${{ matrix.arch }}) name: ${{ matrix.os }} (${{ matrix.arch }})
needs: [process]
if: inputs.linux || inputs.linux_armv7l || inputs.musllinux if: inputs.linux || inputs.linux_armv7l || inputs.musllinux
permissions: needs: process
contents: read
runs-on: ${{ matrix.runner }} runs-on: ${{ matrix.runner }}
strategy: strategy:
fail-fast: false fail-fast: false
@ -262,13 +258,11 @@ jobs:
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with:
persist-credentials: false
- name: Cache requirements - name: Cache requirements
if: matrix.cache_requirements if: matrix.cache_requirements
id: cache-venv id: cache-venv
uses: actions/cache@v5 uses: actions/cache@v4
env: env:
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
with: with:
@ -306,7 +300,7 @@ jobs:
docker compose up --build --exit-code-from "${SERVICE}" "${SERVICE}" docker compose up --build --exit-code-from "${SERVICE}" "${SERVICE}"
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v4
with: with:
name: build-bin-${{ matrix.os }}_${{ matrix.arch }} name: build-bin-${{ matrix.os }}_${{ matrix.arch }}
path: | path: |
@ -314,7 +308,7 @@ jobs:
compression-level: 0 compression-level: 0
macos: macos:
needs: [process] needs: process
if: inputs.macos if: inputs.macos
permissions: permissions:
contents: read contents: read
@ -327,14 +321,11 @@ jobs:
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with:
persist-credentials: false
# NB: Building universal2 does not work with python from actions/setup-python # NB: Building universal2 does not work with python from actions/setup-python
- name: Cache requirements - name: Cache requirements
id: cache-venv id: cache-venv
uses: actions/cache@v5 uses: actions/cache@v4
env: env:
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
with: with:
@ -408,7 +399,7 @@ jobs:
[[ "$version" != "$downgraded_version" ]] [[ "$version" != "$downgraded_version" ]]
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v4
with: with:
name: build-bin-${{ github.job }} name: build-bin-${{ github.job }}
path: | path: |
@ -418,7 +409,7 @@ jobs:
windows: windows:
name: windows (${{ matrix.arch }}) name: windows (${{ matrix.arch }})
needs: [process] needs: process
if: inputs.windows if: inputs.windows
permissions: permissions:
contents: read contents: read
@ -460,9 +451,6 @@ jobs:
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with:
persist-credentials: false
- uses: actions/setup-python@v6 - uses: actions/setup-python@v6
with: with:
python-version: ${{ matrix.python_version }} python-version: ${{ matrix.python_version }}
@ -471,7 +459,7 @@ jobs:
- name: Cache requirements - name: Cache requirements
id: cache-venv id: cache-venv
if: matrix.arch == 'arm64' if: matrix.arch == 'arm64'
uses: actions/cache@v5 uses: actions/cache@v4
env: env:
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1 SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
with: with:
@ -531,7 +519,7 @@ jobs:
} }
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v4
with: with:
name: build-bin-${{ github.job }}-${{ matrix.arch }} name: build-bin-${{ github.job }}-${{ matrix.arch }}
path: | path: |
@ -540,17 +528,17 @@ jobs:
compression-level: 0 compression-level: 0
meta_files: meta_files:
if: always() && !cancelled()
needs: needs:
- process - process
- unix - unix
- linux - linux
- macos - macos
- windows - windows
if: always() && !failure() && !cancelled()
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Download artifacts - name: Download artifacts
uses: actions/download-artifact@v7 uses: actions/download-artifact@v5
with: with:
path: artifact path: artifact
pattern: build-bin-* pattern: build-bin-*
@ -612,13 +600,13 @@ jobs:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
if: env.GPG_SIGNING_KEY if: env.GPG_SIGNING_KEY
run: | run: |
gpg --batch --import <<< "${GPG_SIGNING_KEY}" gpg --batch --import <<< "${{ secrets.GPG_SIGNING_KEY }}"
for signfile in ./SHA*SUMS; do for signfile in ./SHA*SUMS; do
gpg --batch --detach-sign "$signfile" gpg --batch --detach-sign "$signfile"
done done
- name: Upload artifacts - name: Upload artifacts
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v4
with: with:
name: build-${{ github.job }} name: build-${{ github.job }}
path: | path: |

View File

@ -4,14 +4,10 @@ on:
schedule: schedule:
- cron: '0 22 1,6,11,16,21,27 * *' - cron: '0 22 1,6,11,16,21,27 * *'
permissions: {}
jobs: jobs:
build: build:
if: | if: |
vars.KEEP_CACHE_WARM || github.event_name == 'workflow_dispatch' vars.KEEP_CACHE_WARM || github.event_name == 'workflow_dispatch'
permissions:
contents: read
uses: ./.github/workflows/build.yml uses: ./.github/workflows/build.yml
with: with:
version: '999999' version: '999999'
@ -23,3 +19,5 @@ jobs:
musllinux: false musllinux: false
macos: true macos: true
windows: true windows: true
permissions:
contents: read

View File

@ -16,8 +16,8 @@ on:
- yt_dlp/extractor/youtube/jsc/**.py - yt_dlp/extractor/youtube/jsc/**.py
- yt_dlp/extractor/youtube/pot/**.py - yt_dlp/extractor/youtube/pot/**.py
- yt_dlp/utils/_jsruntime.py - yt_dlp/utils/_jsruntime.py
permissions:
permissions: {} contents: read
concurrency: concurrency:
group: challenge-tests-${{ github.event.pull_request.number || github.ref }} group: challenge-tests-${{ github.event.pull_request.number || github.ref }}
@ -26,8 +26,6 @@ concurrency:
jobs: jobs:
tests: tests:
name: Challenge Tests name: Challenge Tests
permissions:
contents: read
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: false fail-fast: false
@ -38,8 +36,6 @@ jobs:
QJS_VERSION: '2025-04-26' # Earliest version with rope strings QJS_VERSION: '2025-04-26' # Earliest version with rope strings
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with:
persist-credentials: false
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6 uses: actions/setup-python@v6
with: with:

View File

@ -9,8 +9,6 @@ on:
schedule: schedule:
- cron: '59 11 * * 5' - cron: '59 11 * * 5'
permissions: {}
jobs: jobs:
analyze: analyze:
name: Analyze (${{ matrix.language }}) name: Analyze (${{ matrix.language }})
@ -28,8 +26,6 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v6 uses: actions/checkout@v6
with:
persist-credentials: false
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v4 uses: github/codeql-action/init@v4

View File

@ -22,8 +22,8 @@ on:
- yt_dlp/extractor/__init__.py - yt_dlp/extractor/__init__.py
- yt_dlp/extractor/common.py - yt_dlp/extractor/common.py
- yt_dlp/extractor/extractors.py - yt_dlp/extractor/extractors.py
permissions:
permissions: {} contents: read
concurrency: concurrency:
group: core-${{ github.event.pull_request.number || github.ref }} group: core-${{ github.event.pull_request.number || github.ref }}
@ -33,8 +33,6 @@ jobs:
tests: tests:
name: Core Tests name: Core Tests
if: "!contains(github.event.head_commit.message, 'ci skip')" if: "!contains(github.event.head_commit.message, 'ci skip')"
permissions:
contents: read
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: false fail-fast: false
@ -60,7 +58,6 @@ jobs:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6 uses: actions/setup-python@v6
with: with:

View File

@ -1,19 +1,15 @@
name: Download Tests name: Download Tests
on: [push, pull_request] on: [push, pull_request]
permissions:
permissions: {} contents: read
jobs: jobs:
quick: quick:
name: Quick Download Tests name: Quick Download Tests
if: "contains(github.event.head_commit.message, 'ci run dl')" if: "contains(github.event.head_commit.message, 'ci run dl')"
permissions:
contents: read
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with:
persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v6 uses: actions/setup-python@v6
with: with:
@ -27,8 +23,6 @@ jobs:
full: full:
name: Full Download Tests name: Full Download Tests
if: "contains(github.event.head_commit.message, 'ci run dl all')" if: "contains(github.event.head_commit.message, 'ci run dl all')"
permissions:
contents: read
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: true fail-fast: true
@ -43,8 +37,6 @@ jobs:
python-version: pypy-3.11 python-version: pypy-3.11
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with:
persist-credentials: false
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v6 uses: actions/setup-python@v6
with: with:

View File

@ -3,14 +3,13 @@ on:
issues: issues:
types: [opened] types: [opened]
permissions: {} permissions:
issues: write
jobs: jobs:
lockdown: lockdown:
name: Issue Lockdown name: Issue Lockdown
if: vars.ISSUE_LOCKDOWN if: vars.ISSUE_LOCKDOWN
permissions:
issues: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: "Lock new issue" - name: "Lock new issue"

View File

@ -1,19 +1,15 @@
name: Quick Test name: Quick Test
on: [push, pull_request] on: [push, pull_request]
permissions:
permissions: {} contents: read
jobs: jobs:
tests: tests:
name: Core Test name: Core Test
if: "!contains(github.event.head_commit.message, 'ci skip all')" if: "!contains(github.event.head_commit.message, 'ci skip all')"
permissions:
contents: read
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with:
persist-credentials: false
- name: Set up Python 3.10 - name: Set up Python 3.10
uses: actions/setup-python@v6 uses: actions/setup-python@v6
with: with:
@ -28,13 +24,9 @@ jobs:
check: check:
name: Code check name: Code check
if: "!contains(github.event.head_commit.message, 'ci skip all')" if: "!contains(github.event.head_commit.message, 'ci skip all')"
permissions:
contents: read
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with:
persist-credentials: false
- uses: actions/setup-python@v6 - uses: actions/setup-python@v6
with: with:
python-version: '3.10' python-version: '3.10'

View File

@ -14,31 +14,31 @@ on:
- ".github/workflows/release-master.yml" - ".github/workflows/release-master.yml"
concurrency: concurrency:
group: release-master group: release-master
permissions:
permissions: {} contents: read
jobs: jobs:
release: release:
if: vars.BUILD_MASTER if: vars.BUILD_MASTER
permissions:
contents: write
id-token: write # mandatory for trusted publishing
uses: ./.github/workflows/release.yml uses: ./.github/workflows/release.yml
with: with:
prerelease: true prerelease: true
source: ${{ (github.repository != 'yt-dlp/yt-dlp' && vars.MASTER_ARCHIVE_REPO) || 'master' }} source: ${{ (github.repository != 'yt-dlp/yt-dlp' && vars.MASTER_ARCHIVE_REPO) || 'master' }}
target: 'master' target: 'master'
permissions:
contents: write
id-token: write # mandatory for trusted publishing
secrets: inherit secrets: inherit
publish_pypi: publish_pypi:
needs: [release] needs: [release]
if: vars.MASTER_PYPI_PROJECT if: vars.MASTER_PYPI_PROJECT
runs-on: ubuntu-latest
permissions: permissions:
id-token: write # mandatory for trusted publishing id-token: write # mandatory for trusted publishing
runs-on: ubuntu-latest
steps: steps:
- name: Download artifacts - name: Download artifacts
uses: actions/download-artifact@v7 uses: actions/download-artifact@v5
with: with:
path: dist path: dist
name: build-pypi name: build-pypi

View File

@ -2,14 +2,12 @@ name: Release (nightly)
on: on:
schedule: schedule:
- cron: '23 23 * * *' - cron: '23 23 * * *'
permissions:
permissions: {} contents: read
jobs: jobs:
check_nightly: check_nightly:
if: vars.BUILD_NIGHTLY if: vars.BUILD_NIGHTLY
permissions:
contents: read
runs-on: ubuntu-latest runs-on: ubuntu-latest
outputs: outputs:
commit: ${{ steps.check_for_new_commits.outputs.commit }} commit: ${{ steps.check_for_new_commits.outputs.commit }}
@ -17,7 +15,6 @@ jobs:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false
- name: Check for new commits - name: Check for new commits
id: check_for_new_commits id: check_for_new_commits
run: | run: |
@ -38,25 +35,25 @@ jobs:
release: release:
needs: [check_nightly] needs: [check_nightly]
if: ${{ needs.check_nightly.outputs.commit }} if: ${{ needs.check_nightly.outputs.commit }}
permissions:
contents: write
id-token: write # mandatory for trusted publishing
uses: ./.github/workflows/release.yml uses: ./.github/workflows/release.yml
with: with:
prerelease: true prerelease: true
source: ${{ (github.repository != 'yt-dlp/yt-dlp' && vars.NIGHTLY_ARCHIVE_REPO) || 'nightly' }} source: ${{ (github.repository != 'yt-dlp/yt-dlp' && vars.NIGHTLY_ARCHIVE_REPO) || 'nightly' }}
target: 'nightly' target: 'nightly'
permissions:
contents: write
id-token: write # mandatory for trusted publishing
secrets: inherit secrets: inherit
publish_pypi: publish_pypi:
needs: [release] needs: [release]
if: vars.NIGHTLY_PYPI_PROJECT if: vars.NIGHTLY_PYPI_PROJECT
runs-on: ubuntu-latest
permissions: permissions:
id-token: write # mandatory for trusted publishing id-token: write # mandatory for trusted publishing
runs-on: ubuntu-latest
steps: steps:
- name: Download artifacts - name: Download artifacts
uses: actions/download-artifact@v7 uses: actions/download-artifact@v5
with: with:
path: dist path: dist
name: build-pypi name: build-pypi

View File

@ -56,7 +56,8 @@ on:
default: false default: false
type: boolean type: boolean
permissions: {} permissions:
contents: read
jobs: jobs:
prepare: prepare:
@ -149,31 +150,29 @@ jobs:
run: git push origin "${GITHUB_EVENT_REF}" run: git push origin "${GITHUB_EVENT_REF}"
build: build:
needs: [prepare] needs: prepare
permissions:
contents: read
uses: ./.github/workflows/build.yml uses: ./.github/workflows/build.yml
with: with:
version: ${{ needs.prepare.outputs.version }} version: ${{ needs.prepare.outputs.version }}
channel: ${{ needs.prepare.outputs.channel }} channel: ${{ needs.prepare.outputs.channel }}
origin: ${{ needs.prepare.outputs.target_repo }} origin: ${{ needs.prepare.outputs.target_repo }}
linux_armv7l: ${{ inputs.linux_armv7l }} linux_armv7l: ${{ inputs.linux_armv7l }}
permissions:
contents: read
secrets: secrets:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
publish_pypi: publish_pypi:
needs: [prepare, build] needs: [prepare, build]
if: ${{ needs.prepare.outputs.pypi_project }} if: ${{ needs.prepare.outputs.pypi_project }}
permissions:
contents: read
id-token: write # mandatory for trusted publishing
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
id-token: write # mandatory for trusted publishing
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 # Needed for changelog fetch-depth: 0
persist-credentials: false
- uses: actions/setup-python@v6 - uses: actions/setup-python@v6
with: with:
python-version: "3.10" python-version: "3.10"
@ -210,7 +209,7 @@ jobs:
- name: Upload artifacts - name: Upload artifacts
if: github.event_name != 'workflow_dispatch' if: github.event_name != 'workflow_dispatch'
uses: actions/upload-artifact@v6 uses: actions/upload-artifact@v4
with: with:
name: build-pypi name: build-pypi
path: | path: |
@ -237,8 +236,7 @@ jobs:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false - uses: actions/download-artifact@v5
- uses: actions/download-artifact@v7
with: with:
path: artifact path: artifact
pattern: build-* pattern: build-*

View File

@ -4,14 +4,13 @@ on:
issue_comment: issue_comment:
types: [created, edited] types: [created, edited]
permissions: {} permissions:
issues: write
jobs: jobs:
sanitize-comment: sanitize-comment:
name: Sanitize comment name: Sanitize comment
if: vars.SANITIZE_COMMENT && !github.event.issue.pull_request if: vars.SANITIZE_COMMENT && !github.event.issue.pull_request
permissions:
issues: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Sanitize comment - name: Sanitize comment

View File

@ -14,9 +14,8 @@ on:
- devscripts/setup_variables.py - devscripts/setup_variables.py
- devscripts/setup_variables_tests.py - devscripts/setup_variables_tests.py
- devscripts/utils.py - devscripts/utils.py
permissions:
permissions: {} contents: read
env: env:
ACTIONLINT_VERSION: "1.7.9" ACTIONLINT_VERSION: "1.7.9"
ACTIONLINT_SHA256SUM: 233b280d05e100837f4af1433c7b40a5dcb306e3aa68fb4f17f8a7f45a7df7b4 ACTIONLINT_SHA256SUM: 233b280d05e100837f4af1433c7b40a5dcb306e3aa68fb4f17f8a7f45a7df7b4
@ -25,13 +24,9 @@ env:
jobs: jobs:
check: check:
name: Check workflows name: Check workflows
permissions:
contents: read
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
with:
persist-credentials: false
- uses: actions/setup-python@v6 - uses: actions/setup-python@v6
with: with:
python-version: "3.10" # Keep this in sync with release.yml's prepare job python-version: "3.10" # Keep this in sync with release.yml's prepare job

View File

@ -3026,10 +3026,6 @@ class YoutubeDL:
format_selector = self.format_selector format_selector = self.format_selector
while True: while True:
if interactive_format_selection: if interactive_format_selection:
if not formats:
# Bypass interactive format selection if no formats & --ignore-no-formats-error
formats_to_download = None
break
req_format = input(self._format_screen('\nEnter format selector ', self.Styles.EMPHASIS) req_format = input(self._format_screen('\nEnter format selector ', self.Styles.EMPHASIS)
+ '(Press ENTER for default, or Ctrl+C to quit)' + '(Press ENTER for default, or Ctrl+C to quit)'
+ self._format_screen(': ', self.Styles.EMPHASIS)) + self._format_screen(': ', self.Styles.EMPHASIS))