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