DevTube 3.0: modernize for Laravel 12/13 (PHP 8.3+) on a single yt-dlp engine#15
Merged
Merged
Conversation
Keep design/plan working docs out of the public repo.
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Revives the package on a modern stack and consolidates three dead download engines into one working
yt-dlp-based engine. This is a breaking3.0release.^8.3, Laravel 12 & 13, PHPUnit 12, Mockery, Orchestra Testbench.yt-dlpbinary vianorkunas/youtube-dl-phpv2. Removedmasih/youtubedownloader,athlon1600/youtube-downloader, the custom cURL scraper, and the deadMediaDownload/DownloadConfig/HelperTraitclasses. Dropped the hardcodedversionfield.DevTubeServiceProvideras one shared singleton'devtube', aliased toDownloader::class):Downloaderservice,MediaFileresult DTO (keeps vendor types out of the public API),DownloadExceptionDevTubefacade,devtube:downloadArtisan command, thinDownloadshim'devtube' -> DevTube(non-existent class) binding that fatally errored on resolution.config/devtube.php(bin_path,download_path,default_format,output_template,formats).Download/ Artisan) and a 2.x -> 3.0 migration guide.Notable fix
norkunas/youtube-dl-phpv2 declaresVideo::getFile(): SplFileInfo(non-nullable) but returnsnullfor errored videos — calling it unconditionally throws aTypeError. The mapping now only readsgetFile()whengetError() === null.Breaking changes (for consumers)
yt-dlpbinary (plusffmpegfor mp3/audio).download()returns aCollectionofMediaFileobjects, not arrays: use$media->path()instead of$media['file']->getPathname().config/devtube.phpschema changed — re-publish with--tag=config --force.Test plan
composer testgreen locally: 15 tests / 34 assertions (Unit + Feature) on PHP 8.3.composer validate --strictpasses.assertSame), facade resolution, command registration, anddevtube:downloadexit-code contract.php artisan devtube:download "<url>" --format=mp3against a realyt-dlpinstall.v3.0.0after merge (breaking release; Packagist is git-tag driven).