build.yml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. name: Build
  2. on:
  3. push:
  4. branches:
  5. - release
  6. jobs:
  7. build_unix:
  8. runs-on: ubuntu-latest
  9. outputs:
  10. ytdlp_version: ${{ steps.bump_version.outputs.ytdlp_version }}
  11. upload_url: ${{ steps.create_release.outputs.upload_url }}
  12. sha256_bin: ${{ steps.sha256_bin.outputs.sha256_bin }}
  13. sha512_bin: ${{ steps.sha512_bin.outputs.sha512_bin }}
  14. sha256_tar: ${{ steps.sha256_tar.outputs.sha256_tar }}
  15. sha512_tar: ${{ steps.sha512_tar.outputs.sha512_tar }}
  16. steps:
  17. - uses: actions/checkout@v2
  18. with:
  19. fetch-depth: 0
  20. - name: Set up Python
  21. uses: actions/setup-python@v2
  22. with:
  23. python-version: '3.8'
  24. - name: Install packages
  25. run: sudo apt-get -y install zip pandoc man
  26. - name: Bump version
  27. id: bump_version
  28. run: |
  29. python devscripts/update-version.py
  30. make issuetemplates
  31. - name: Print version
  32. run: echo "${{ steps.bump_version.outputs.ytdlp_version }}"
  33. - name: Update master
  34. id: push_update
  35. run: |
  36. git config --global user.email "${{ github.event.pusher.email }}"
  37. git config --global user.name "${{ github.event.pusher.name }}"
  38. git add -u
  39. git commit -m "[version] update" -m ":ci skip all"
  40. git pull --rebase origin ${{ github.event.repository.master_branch }}
  41. git push origin ${{ github.event.ref }}:${{ github.event.repository.master_branch }}
  42. echo ::set-output name=head_sha::$(git rev-parse HEAD)
  43. - name: Get Changelog
  44. id: get_changelog
  45. run: |
  46. changelog=$(cat Changelog.md | grep -oPz '(?s)(?<=### ${{ steps.bump_version.outputs.ytdlp_version }}\n{2}).+?(?=\n{2,3}###)') || true
  47. echo "changelog<<EOF" >> $GITHUB_ENV
  48. echo "$changelog" >> $GITHUB_ENV
  49. echo "EOF" >> $GITHUB_ENV
  50. - name: Build lazy extractors
  51. id: lazy_extractors
  52. run: python devscripts/make_lazy_extractors.py
  53. - name: Run Make
  54. run: make all tar
  55. - name: Get SHA2-256SUMS for yt-dlp
  56. id: sha256_bin
  57. run: echo "::set-output name=sha256_bin::$(sha256sum yt-dlp | awk '{print $1}')"
  58. - name: Get SHA2-256SUMS for yt-dlp.tar.gz
  59. id: sha256_tar
  60. run: echo "::set-output name=sha256_tar::$(sha256sum yt-dlp.tar.gz | awk '{print $1}')"
  61. - name: Get SHA2-512SUMS for yt-dlp
  62. id: sha512_bin
  63. run: echo "::set-output name=sha512_bin::$(sha512sum yt-dlp | awk '{print $1}')"
  64. - name: Get SHA2-512SUMS for yt-dlp.tar.gz
  65. id: sha512_tar
  66. run: echo "::set-output name=sha512_tar::$(sha512sum yt-dlp.tar.gz | awk '{print $1}')"
  67. - name: Install dependencies for pypi
  68. env:
  69. PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
  70. if: "env.PYPI_TOKEN != ''"
  71. run: |
  72. python -m pip install --upgrade pip
  73. pip install setuptools wheel twine
  74. - name: Build and publish on pypi
  75. env:
  76. TWINE_USERNAME: __token__
  77. TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
  78. if: "env.TWINE_PASSWORD != ''"
  79. run: |
  80. rm -rf dist/*
  81. python setup.py sdist bdist_wheel
  82. twine upload dist/*
  83. - name: Install SSH private key
  84. env:
  85. BREW_TOKEN: ${{ secrets.BREW_TOKEN }}
  86. if: "env.BREW_TOKEN != ''"
  87. uses: webfactory/ssh-agent@v0.5.3
  88. with:
  89. ssh-private-key: ${{ env.BREW_TOKEN }}
  90. - name: Update Homebrew Formulae
  91. env:
  92. BREW_TOKEN: ${{ secrets.BREW_TOKEN }}
  93. if: "env.BREW_TOKEN != ''"
  94. run: |
  95. git clone git@github.com:yt-dlp/homebrew-taps taps/
  96. python3 devscripts/update-formulae.py taps/Formula/yt-dlp.rb "${{ steps.bump_version.outputs.ytdlp_version }}"
  97. git -C taps/ config user.name github-actions
  98. git -C taps/ config user.email github-actions@example.com
  99. git -C taps/ commit -am 'yt-dlp: ${{ steps.bump_version.outputs.ytdlp_version }}'
  100. git -C taps/ push
  101. - name: Create Release
  102. id: create_release
  103. uses: actions/create-release@v1
  104. env:
  105. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  106. with:
  107. tag_name: ${{ steps.bump_version.outputs.ytdlp_version }}
  108. release_name: yt-dlp ${{ steps.bump_version.outputs.ytdlp_version }}
  109. commitish: ${{ steps.push_update.outputs.head_sha }}
  110. body: |
  111. #### [A description of the various files]((https://github.com/yt-dlp/yt-dlp#release-files)) are in the README
  112. ---
  113. ### Changelog:
  114. ${{ env.changelog }}
  115. draft: false
  116. prerelease: false
  117. - name: Upload yt-dlp Unix binary
  118. id: upload-release-asset
  119. uses: actions/upload-release-asset@v1
  120. env:
  121. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  122. with:
  123. upload_url: ${{ steps.create_release.outputs.upload_url }}
  124. asset_path: ./yt-dlp
  125. asset_name: yt-dlp
  126. asset_content_type: application/octet-stream
  127. - name: Upload Source tar
  128. uses: actions/upload-release-asset@v1
  129. env:
  130. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  131. with:
  132. upload_url: ${{ steps.create_release.outputs.upload_url }}
  133. asset_path: ./yt-dlp.tar.gz
  134. asset_name: yt-dlp.tar.gz
  135. asset_content_type: application/gzip
  136. build_macos:
  137. runs-on: macos-11
  138. needs: build_unix
  139. if: False
  140. outputs:
  141. sha256_macos: ${{ steps.sha256_macos.outputs.sha256_macos }}
  142. sha512_macos: ${{ steps.sha512_macos.outputs.sha512_macos }}
  143. sha256_macos_zip: ${{ steps.sha256_macos_zip.outputs.sha256_macos_zip }}
  144. sha512_macos_zip: ${{ steps.sha512_macos_zip.outputs.sha512_macos_zip }}
  145. steps:
  146. - uses: actions/checkout@v2
  147. # In order to create a universal2 application, the version of python3 in /usr/bin has to be used
  148. - name: Install Requirements
  149. run: |
  150. brew install coreutils
  151. /usr/bin/python3 -m pip install -U --user pip Pyinstaller mutagen pycryptodomex websockets
  152. - name: Bump version
  153. id: bump_version
  154. run: /usr/bin/python3 devscripts/update-version.py
  155. - name: Build lazy extractors
  156. id: lazy_extractors
  157. run: /usr/bin/python3 devscripts/make_lazy_extractors.py
  158. - name: Run PyInstaller Script
  159. run: /usr/bin/python3 pyinst.py --target-architecture universal2 --onefile
  160. - name: Upload yt-dlp MacOS binary
  161. id: upload-release-macos
  162. uses: actions/upload-release-asset@v1
  163. env:
  164. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  165. with:
  166. upload_url: ${{ needs.build_unix.outputs.upload_url }}
  167. asset_path: ./dist/yt-dlp_macos
  168. asset_name: yt-dlp_macos
  169. asset_content_type: application/octet-stream
  170. - name: Get SHA2-256SUMS for yt-dlp_macos
  171. id: sha256_macos
  172. run: echo "::set-output name=sha256_macos::$(sha256sum dist/yt-dlp_macos | awk '{print $1}')"
  173. - name: Get SHA2-512SUMS for yt-dlp_macos
  174. id: sha512_macos
  175. run: echo "::set-output name=sha512_macos::$(sha512sum dist/yt-dlp_macos | awk '{print $1}')"
  176. - name: Run PyInstaller Script with --onedir
  177. run: /usr/bin/python3 pyinst.py --target-architecture universal2 --onedir
  178. - uses: papeloto/action-zip@v1
  179. with:
  180. files: ./dist/yt-dlp_macos
  181. dest: ./dist/yt-dlp_macos.zip
  182. - name: Upload yt-dlp MacOS onedir
  183. id: upload-release-macos-zip
  184. uses: actions/upload-release-asset@v1
  185. env:
  186. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  187. with:
  188. upload_url: ${{ needs.build_unix.outputs.upload_url }}
  189. asset_path: ./dist/yt-dlp_macos.zip
  190. asset_name: yt-dlp_macos.zip
  191. asset_content_type: application/zip
  192. - name: Get SHA2-256SUMS for yt-dlp_macos.zip
  193. id: sha256_macos_zip
  194. run: echo "::set-output name=sha256_macos_zip::$(sha256sum dist/yt-dlp_macos.zip | awk '{print $1}')"
  195. - name: Get SHA2-512SUMS for yt-dlp_macos
  196. id: sha512_macos_zip
  197. run: echo "::set-output name=sha512_macos_zip::$(sha512sum dist/yt-dlp_macos.zip | awk '{print $1}')"
  198. build_windows:
  199. runs-on: windows-latest
  200. needs: build_unix
  201. outputs:
  202. sha256_win: ${{ steps.sha256_win.outputs.sha256_win }}
  203. sha512_win: ${{ steps.sha512_win.outputs.sha512_win }}
  204. sha256_py2exe: ${{ steps.sha256_py2exe.outputs.sha256_py2exe }}
  205. sha512_py2exe: ${{ steps.sha512_py2exe.outputs.sha512_py2exe }}
  206. sha256_win_zip: ${{ steps.sha256_win_zip.outputs.sha256_win_zip }}
  207. sha512_win_zip: ${{ steps.sha512_win_zip.outputs.sha512_win_zip }}
  208. steps:
  209. - uses: actions/checkout@v2
  210. # 3.8 is used for Win7 support
  211. - name: Set up Python 3.8
  212. uses: actions/setup-python@v2
  213. with:
  214. python-version: '3.8'
  215. - name: Install Requirements
  216. # Custom pyinstaller built with https://github.com/yt-dlp/pyinstaller-builds
  217. run: |
  218. python -m pip install --upgrade pip setuptools wheel py2exe
  219. pip install "https://yt-dlp.github.io/Pyinstaller-Builds/x86_64/pyinstaller-4.5.1-py3-none-any.whl" mutagen pycryptodomex websockets
  220. - name: Bump version
  221. id: bump_version
  222. run: python devscripts/update-version.py
  223. - name: Build lazy extractors
  224. id: lazy_extractors
  225. run: python devscripts/make_lazy_extractors.py
  226. - name: Run PyInstaller Script
  227. run: python pyinst.py
  228. - name: Upload yt-dlp.exe Windows binary
  229. id: upload-release-windows
  230. uses: actions/upload-release-asset@v1
  231. env:
  232. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  233. with:
  234. upload_url: ${{ needs.build_unix.outputs.upload_url }}
  235. asset_path: ./dist/yt-dlp.exe
  236. asset_name: yt-dlp.exe
  237. asset_content_type: application/vnd.microsoft.portable-executable
  238. - name: Get SHA2-256SUMS for yt-dlp.exe
  239. id: sha256_win
  240. run: echo "::set-output name=sha256_win::$((Get-FileHash dist\yt-dlp.exe -Algorithm SHA256).Hash.ToLower())"
  241. - name: Get SHA2-512SUMS for yt-dlp.exe
  242. id: sha512_win
  243. run: echo "::set-output name=sha512_win::$((Get-FileHash dist\yt-dlp.exe -Algorithm SHA512).Hash.ToLower())"
  244. - name: Run PyInstaller Script with --onedir
  245. run: python pyinst.py --onedir
  246. - uses: papeloto/action-zip@v1
  247. with:
  248. files: ./dist/yt-dlp
  249. dest: ./dist/yt-dlp_win.zip
  250. - name: Upload yt-dlp Windows onedir
  251. id: upload-release-windows-zip
  252. uses: actions/upload-release-asset@v1
  253. env:
  254. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  255. with:
  256. upload_url: ${{ needs.build_unix.outputs.upload_url }}
  257. asset_path: ./dist/yt-dlp_win.zip
  258. asset_name: yt-dlp_win.zip
  259. asset_content_type: application/zip
  260. - name: Get SHA2-256SUMS for yt-dlp_win.zip
  261. id: sha256_win_zip
  262. run: echo "::set-output name=sha256_win_zip::$((Get-FileHash dist\yt-dlp_win.zip -Algorithm SHA256).Hash.ToLower())"
  263. - name: Get SHA2-512SUMS for yt-dlp_win.zip
  264. id: sha512_win_zip
  265. run: echo "::set-output name=sha512_win_zip::$((Get-FileHash dist\yt-dlp_win.zip -Algorithm SHA512).Hash.ToLower())"
  266. - name: Run py2exe Script
  267. run: python setup.py py2exe
  268. - name: Upload yt-dlp_min.exe Windows binary
  269. id: upload-release-windows-py2exe
  270. uses: actions/upload-release-asset@v1
  271. env:
  272. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  273. with:
  274. upload_url: ${{ needs.build_unix.outputs.upload_url }}
  275. asset_path: ./dist/yt-dlp.exe
  276. asset_name: yt-dlp_min.exe
  277. asset_content_type: application/vnd.microsoft.portable-executable
  278. - name: Get SHA2-256SUMS for yt-dlp_min.exe
  279. id: sha256_py2exe
  280. run: echo "::set-output name=sha256_py2exe::$((Get-FileHash dist\yt-dlp.exe -Algorithm SHA256).Hash.ToLower())"
  281. - name: Get SHA2-512SUMS for yt-dlp_min.exe
  282. id: sha512_py2exe
  283. run: echo "::set-output name=sha512_py2exe::$((Get-FileHash dist\yt-dlp.exe -Algorithm SHA512).Hash.ToLower())"
  284. build_windows32:
  285. runs-on: windows-latest
  286. needs: build_unix
  287. outputs:
  288. sha256_win32: ${{ steps.sha256_win32.outputs.sha256_win32 }}
  289. sha512_win32: ${{ steps.sha512_win32.outputs.sha512_win32 }}
  290. steps:
  291. - uses: actions/checkout@v2
  292. # 3.7 is used for Vista support. See https://github.com/yt-dlp/yt-dlp/issues/390
  293. - name: Set up Python 3.7 32-Bit
  294. uses: actions/setup-python@v2
  295. with:
  296. python-version: '3.7'
  297. architecture: 'x86'
  298. - name: Install Requirements
  299. run: |
  300. python -m pip install --upgrade pip setuptools wheel
  301. pip install "https://yt-dlp.github.io/Pyinstaller-Builds/i686/pyinstaller-4.5.1-py3-none-any.whl" mutagen pycryptodomex websockets
  302. - name: Bump version
  303. id: bump_version
  304. run: python devscripts/update-version.py
  305. - name: Build lazy extractors
  306. id: lazy_extractors
  307. run: python devscripts/make_lazy_extractors.py
  308. - name: Run PyInstaller Script for 32 Bit
  309. run: python pyinst.py
  310. - name: Upload Executable yt-dlp_x86.exe
  311. id: upload-release-windows32
  312. uses: actions/upload-release-asset@v1
  313. env:
  314. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  315. with:
  316. upload_url: ${{ needs.build_unix.outputs.upload_url }}
  317. asset_path: ./dist/yt-dlp_x86.exe
  318. asset_name: yt-dlp_x86.exe
  319. asset_content_type: application/vnd.microsoft.portable-executable
  320. - name: Get SHA2-256SUMS for yt-dlp_x86.exe
  321. id: sha256_win32
  322. run: echo "::set-output name=sha256_win32::$((Get-FileHash dist\yt-dlp_x86.exe -Algorithm SHA256).Hash.ToLower())"
  323. - name: Get SHA2-512SUMS for yt-dlp_x86.exe
  324. id: sha512_win32
  325. run: echo "::set-output name=sha512_win32::$((Get-FileHash dist\yt-dlp_x86.exe -Algorithm SHA512).Hash.ToLower())"
  326. finish:
  327. runs-on: ubuntu-latest
  328. needs: [build_unix, build_windows, build_windows32]
  329. steps:
  330. - name: Make SHA2-256SUMS file
  331. env:
  332. SHA256_BIN: ${{ needs.build_unix.outputs.sha256_bin }}
  333. SHA256_TAR: ${{ needs.build_unix.outputs.sha256_tar }}
  334. SHA256_WIN: ${{ needs.build_windows.outputs.sha256_win }}
  335. SHA256_PY2EXE: ${{ needs.build_windows.outputs.sha256_py2exe }}
  336. SHA256_WIN_ZIP: ${{ needs.build_windows.outputs.sha256_win_zip }}
  337. SHA256_WIN32: ${{ needs.build_windows32.outputs.sha256_win32 }}
  338. SHA256_MACOS: ${{ needs.build_macos.outputs.sha256_macos }}
  339. SHA256_MACOS_ZIP: ${{ needs.build_macos.outputs.sha256_macos_zip }}
  340. run: |
  341. echo "${{ env.SHA256_BIN }} yt-dlp" >> SHA2-256SUMS
  342. echo "${{ env.SHA256_TAR }} yt-dlp.tar.gz" >> SHA2-256SUMS
  343. echo "${{ env.SHA256_WIN }} yt-dlp.exe" >> SHA2-256SUMS
  344. echo "${{ env.SHA256_PY2EXE }} yt-dlp_min.exe" >> SHA2-256SUMS
  345. echo "${{ env.SHA256_WIN32 }} yt-dlp_x86.exe" >> SHA2-256SUMS
  346. echo "${{ env.SHA256_WIN_ZIP }} yt-dlp_win.zip" >> SHA2-256SUMS
  347. # echo "${{ env.SHA256_MACOS }} yt-dlp_macos" >> SHA2-256SUMS
  348. # echo "${{ env.SHA256_MACOS_ZIP }} yt-dlp_macos.zip" >> SHA2-256SUMS
  349. - name: Upload 256SUMS file
  350. id: upload-sums
  351. uses: actions/upload-release-asset@v1
  352. env:
  353. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  354. with:
  355. upload_url: ${{ needs.build_unix.outputs.upload_url }}
  356. asset_path: ./SHA2-256SUMS
  357. asset_name: SHA2-256SUMS
  358. asset_content_type: text/plain
  359. - name: Make SHA2-512SUMS file
  360. env:
  361. SHA512_BIN: ${{ needs.build_unix.outputs.sha512_bin }}
  362. SHA512_TAR: ${{ needs.build_unix.outputs.sha512_tar }}
  363. SHA512_WIN: ${{ needs.build_windows.outputs.sha512_win }}
  364. SHA512_PY2EXE: ${{ needs.build_windows.outputs.sha512_py2exe }}
  365. SHA512_WIN_ZIP: ${{ needs.build_windows.outputs.sha512_win_zip }}
  366. SHA512_WIN32: ${{ needs.build_windows32.outputs.sha512_win32 }}
  367. SHA512_MACOS: ${{ needs.build_macos.outputs.sha512_macos }}
  368. SHA512_MACOS_ZIP: ${{ needs.build_macos.outputs.sha512_macos_zip }}
  369. run: |
  370. echo "${{ env.SHA512_BIN }} yt-dlp" >> SHA2-512SUMS
  371. echo "${{ env.SHA512_TAR }} yt-dlp.tar.gz" >> SHA2-512SUMS
  372. echo "${{ env.SHA512_WIN }} yt-dlp.exe" >> SHA2-512SUMS
  373. echo "${{ env.SHA512_WIN_ZIP }} yt-dlp_win.zip" >> SHA2-512SUMS
  374. echo "${{ env.SHA512_PY2EXE }} yt-dlp_min.exe" >> SHA2-512SUMS
  375. echo "${{ env.SHA512_WIN32 }} yt-dlp_x86.exe" >> SHA2-512SUMS
  376. # echo "${{ env.SHA512_MACOS }} yt-dlp_macos" >> SHA2-512SUMS
  377. # echo "${{ env.SHA512_MACOS_ZIP }} yt-dlp_macos.zip" >> SHA2-512SUMS
  378. - name: Upload 512SUMS file
  379. id: upload-512sums
  380. uses: actions/upload-release-asset@v1
  381. env:
  382. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  383. with:
  384. upload_url: ${{ needs.build_unix.outputs.upload_url }}
  385. asset_path: ./SHA2-512SUMS
  386. asset_name: SHA2-512SUMS
  387. asset_content_type: text/plain