mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2025-08-22 22:34:01 -07:00
Working on pybuilder flow, main build + unittests working
This commit is contained in:
parent
6fece0a96b
commit
bd75a6b1ce
3 changed files with 168 additions and 0 deletions
165
build.py
Normal file
165
build.py
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pybuilder.core import use_plugin, init, task
|
||||||
|
from enum import Enum
|
||||||
|
import glob
|
||||||
|
import shutil
|
||||||
|
import warnings
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
use_plugin("python.core")
|
||||||
|
#use_plugin("python.unittest")
|
||||||
|
use_plugin("python.flake8")
|
||||||
|
use_plugin("python.coverage")
|
||||||
|
use_plugin("exec")
|
||||||
|
|
||||||
|
name = "youtube-dl"
|
||||||
|
default_task = ["clean", "analyze","offlinetest","build"]
|
||||||
|
version = "0.0.0"
|
||||||
|
|
||||||
|
OS = Enum('OS',['Linux','MacOS', 'Windows'])
|
||||||
|
|
||||||
|
|
||||||
|
@init
|
||||||
|
def set_properties(project):
|
||||||
|
project.set_property("dir_source_main_python", "youtube_dl")
|
||||||
|
project.set_property("dir_source_unittest_python", "test")
|
||||||
|
project.set_property("dir_source_main_scripts", "devscripts")
|
||||||
|
#project.set_property("unittest_module_glob", "test*")
|
||||||
|
project.set_property('coverage_break_build', False)
|
||||||
|
sys.path.append("./youtube_dl")
|
||||||
|
from version import __version__
|
||||||
|
project.version = __version__
|
||||||
|
type = OS.Linux
|
||||||
|
if sys.platform == "linux" or sys.platform == "linux2":
|
||||||
|
type = OS.Linux
|
||||||
|
elif sys.platform == "darwin":
|
||||||
|
type = OS.MacOS
|
||||||
|
elif sys.platform == "win32":
|
||||||
|
type = OS.Windows
|
||||||
|
project.os = type
|
||||||
|
|
||||||
|
|
||||||
|
def delete(logger, path):
|
||||||
|
if (os.path.exists(path)):
|
||||||
|
logger.info("Deleting: " + path)
|
||||||
|
if (os.path.isfile(path)):
|
||||||
|
os.remove(path)
|
||||||
|
elif (os.path.isdir(path)):
|
||||||
|
shutil.rmtree(path)
|
||||||
|
|
||||||
|
@task
|
||||||
|
def clean(logger, project):
|
||||||
|
delete_patterns = [
|
||||||
|
"*/__pycache__",
|
||||||
|
"*/testdata",
|
||||||
|
"*.pyc",
|
||||||
|
"*.class",
|
||||||
|
"*.dump",
|
||||||
|
"*.part*",
|
||||||
|
"*.ytdl",
|
||||||
|
"*.info.json",
|
||||||
|
"*.mp4",
|
||||||
|
"*.m4a",
|
||||||
|
"*.flv",
|
||||||
|
"*.mp3",
|
||||||
|
"*.avi",
|
||||||
|
"*.mkv",
|
||||||
|
"*.webm",
|
||||||
|
"*.3gp",
|
||||||
|
"*.wav",
|
||||||
|
"*.ape",
|
||||||
|
"*.swf",
|
||||||
|
"*.jpg",
|
||||||
|
"*.png",
|
||||||
|
]
|
||||||
|
|
||||||
|
for pat in delete_patterns:
|
||||||
|
for file in glob.glob(pat):
|
||||||
|
delete(logger, file)
|
||||||
|
|
||||||
|
delete_files = [
|
||||||
|
'youtube-dl.1.temp.md',
|
||||||
|
'youtube-dl.1',
|
||||||
|
'youtube-dl.bash-completion',
|
||||||
|
'README.txt',
|
||||||
|
'MANIFEST',
|
||||||
|
'build/',
|
||||||
|
'dist/',
|
||||||
|
'.coverage',
|
||||||
|
'cover/',
|
||||||
|
'youtube-dl.tar.gz',
|
||||||
|
'youtube-dl.zsh',
|
||||||
|
'youtube-dl.fish',
|
||||||
|
'youtube_dl/extractor/lazy_extractors.py',
|
||||||
|
'CONTRIBUTING.md.tmp',
|
||||||
|
'youtube-dl',
|
||||||
|
'youtube-dl.exe'
|
||||||
|
]
|
||||||
|
|
||||||
|
for file in delete_files:
|
||||||
|
delete(logger, file)
|
||||||
|
|
||||||
|
|
||||||
|
@task
|
||||||
|
## build for the current operating system
|
||||||
|
def build(logger, project):
|
||||||
|
if (project.os == OS.Linux or project.os == OS.MacOS):
|
||||||
|
buildUnix(logger, project)
|
||||||
|
elif project.os == OS.Windows:
|
||||||
|
buildWin32(logger, project)
|
||||||
|
else:
|
||||||
|
logger.error("Operating system detection failed, please manually select an OS to build for!")
|
||||||
|
logger.error("$ pyb buildUnix or $ pyb buildWin32")
|
||||||
|
|
||||||
|
|
||||||
|
def mkdir_p(path):
|
||||||
|
try:
|
||||||
|
return os.mkdir(path)
|
||||||
|
except FileExistsError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
@task
|
||||||
|
def buildUnix(logger, project):
|
||||||
|
logger.info(project.version)
|
||||||
|
mkdir_p("zip")
|
||||||
|
source_dirs = [
|
||||||
|
"youtube_dl", "youtube_dl/downloader", "youtube_dl/extractor", "youtube_dl/postprocessor"
|
||||||
|
]
|
||||||
|
for dir in source_dirs:
|
||||||
|
mkdir_p("zip/"+dir)
|
||||||
|
subprocess.run("cp -pPr "+dir+"/*.py zip/"+dir+"/", shell=True)
|
||||||
|
subprocess.run("touch -t 200001010101 zip/youtube_dl/*.py zip/youtube_dl/*/*.py", shell=True)
|
||||||
|
subprocess.run("mv zip/youtube_dl/__main__.py zip/",shell=True)
|
||||||
|
subprocess.run("cd zip ; zip -q ../youtube-dl youtube_dl/*.py youtube_dl/*/*.py __main__.py",shell=True)
|
||||||
|
subprocess.run("rm -rf zip", shell=True)
|
||||||
|
subprocess.run("echo '#!/usr/bin/env python' > youtube-dl ; cat youtube-dl.zip >> youtube-dl ; rm youtube-dl.zip; chmod a+x youtube-dl", shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
@task
|
||||||
|
def buildWin32(logger, project):
|
||||||
|
subprocess.run("python -m setup.py py2exe")
|
||||||
|
|
||||||
|
@task
|
||||||
|
def offlinetest(logger,project):
|
||||||
|
subprocess.run("python -m nose --verbose test \
|
||||||
|
--exclude test_age_restriction.py \
|
||||||
|
--exclude test_download.py \
|
||||||
|
--exclude test_iqiyi_sdk_interpreter.py \
|
||||||
|
--exclude test_socks.py \
|
||||||
|
--exclude test_subtitles.py \
|
||||||
|
--exclude test_write_annotations.py \
|
||||||
|
--exclude test_youtube_lists.py \
|
||||||
|
--exclude test_youtube_signature.py",
|
||||||
|
shell=True)
|
||||||
|
|
||||||
|
@task
|
||||||
|
def test(logger, project):
|
||||||
|
subprocess.run("nosetests --with-coverage \
|
||||||
|
--cover-package=youtube_dl \
|
||||||
|
--cover-html \
|
||||||
|
--verbose \
|
||||||
|
--processes 4 test",
|
||||||
|
shell=True)
|
||||||
|
|
3
pyproject.toml
Normal file
3
pyproject.toml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[build-system]
|
||||||
|
requires = ["pybuilder>=0.12.0"]
|
||||||
|
build-backend = "pybuilder.pep517"
|
0
setup.py
Normal file → Executable file
0
setup.py
Normal file → Executable file
Loading…
Add table
Add a link
Reference in a new issue