]> jfr.im git - yt-dlp.git/blobdiff - .github/workflows/release.yml
[build] Various build workflow improvements
[yt-dlp.git] / .github / workflows / release.yml
index e07fc0c077dc2f1bf9bfb25fa9b8cb8d86e688b2..ada508be82826084c09ec79576eb4c3d1b2fea73 100644 (file)
@@ -1,5 +1,22 @@
 name: Release
-on: workflow_dispatch
+on:
+  workflow_dispatch:
+    inputs:
+      version:
+        description: Version tag (YYYY.MM.DD[.REV])
+        required: false
+        default: ''
+        type: string
+      channel:
+        description: Update channel (stable/nightly/...)
+        required: false
+        default: ''
+        type: string
+      prerelease:
+        description: Pre-release
+        default: false
+        type: boolean
+
 permissions:
   contents: read
 
@@ -9,8 +26,9 @@ jobs:
       contents: write
     runs-on: ubuntu-latest
     outputs:
+      channel: ${{ steps.set_channel.outputs.channel }}
       version: ${{ steps.update_version.outputs.version }}
-      head_sha: ${{ steps.push_release.outputs.head_sha }}
+      head_sha: ${{ steps.get_target.outputs.head_sha }}
 
     steps:
       - uses: actions/checkout@v3
@@ -21,10 +39,18 @@ jobs:
         with:
           python-version: "3.10"
 
+      - name: Set channel
+        id: set_channel
+        run: |
+          CHANNEL="${{ github.repository == 'yt-dlp/yt-dlp' && 'stable' || github.repository }}"
+          echo "channel=${{ inputs.channel || '$CHANNEL' }}" > "$GITHUB_OUTPUT"
+
       - name: Update version
         id: update_version
         run: |
-          python devscripts/update-version.py ${{ vars.PUSH_VERSION_COMMIT == '' && '"$(date -u +"%H%M%S")"' || '' }} | \
+          REVISION="${{ vars.PUSH_VERSION_COMMIT == '' && '$(date -u +"%H%M%S")' || '' }}"
+          REVISION="${{ inputs.prerelease && '$(date -u +"%H%M%S")' || '$REVISION' }}"
+          python devscripts/update-version.py ${{ inputs.version || '$REVISION' }} | \
             grep -Po "version=\d+\.\d+\.\d+(\.\d+)?" >> "$GITHUB_OUTPUT"
 
       - name: Update documentation
@@ -39,6 +65,7 @@ jobs:
 
       - name: Push to release
         id: push_release
+        if: ${{ !inputs.prerelease }}
         run: |
           git config --global user.name github-actions
           git config --global user.email github-actions@example.com
@@ -46,14 +73,30 @@ jobs:
           git commit -m "Release ${{ steps.update_version.outputs.version }}" \
             -m "Created by: ${{ github.event.sender.login }}" -m ":ci skip all :ci run dl"
           git push origin --force ${{ github.event.ref }}:release
+
+      - name: Get target commitish
+        id: get_target
+        run: |
           echo "head_sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
 
       - name: Update master
-        if: vars.PUSH_VERSION_COMMIT != ''
+        if: vars.PUSH_VERSION_COMMIT != '' && !inputs.prerelease
         run: git push origin ${{ github.event.ref }}
 
-  publish_pypi_homebrew:
+  build:
     needs: prepare
+    uses: ./.github/workflows/build.yml
+    with:
+      version: ${{ needs.prepare.outputs.version }}
+      channel: ${{ needs.prepare.outputs.channel }}
+    permissions:
+      contents: read
+      packages: write # For package cache
+    secrets:
+      GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
+
+  publish_pypi_homebrew:
+    needs: [prepare, build]
     runs-on: ubuntu-latest
 
     steps:
@@ -77,7 +120,7 @@ jobs:
         env:
           TWINE_USERNAME: __token__
           TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
-        if: env.TWINE_PASSWORD != ''
+        if: env.TWINE_PASSWORD != '' && !inputs.prerelease
         run: |
           rm -rf dist/*
           make pypi-files
@@ -89,7 +132,7 @@ jobs:
         env:
           BREW_TOKEN: ${{ secrets.BREW_TOKEN }}
           PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
-        if: env.BREW_TOKEN != '' && env.PYPI_TOKEN != ''
+        if: env.BREW_TOKEN != '' && env.PYPI_TOKEN != '' && !inputs.prerelease
         uses: actions/checkout@v3
         with:
           repository: yt-dlp/homebrew-taps
@@ -100,7 +143,7 @@ jobs:
         env:
           BREW_TOKEN: ${{ secrets.BREW_TOKEN }}
           PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
-        if: env.BREW_TOKEN != '' && env.PYPI_TOKEN != ''
+        if: env.BREW_TOKEN != '' && env.PYPI_TOKEN != '' && !inputs.prerelease
         run: |
           python devscripts/update-formulae.py taps/Formula/yt-dlp.rb "${{ needs.prepare.outputs.version }}"
           git -C taps/ config user.name github-actions
@@ -108,22 +151,13 @@ jobs:
           git -C taps/ commit -am 'yt-dlp: ${{ needs.prepare.outputs.version }}'
           git -C taps/ push
 
-  build:
-    needs: prepare
-    uses: ./.github/workflows/build.yml
-    with:
-      version: ${{ needs.prepare.outputs.version }}
-    permissions:
-      contents: read
-      packages: write # For package cache
-    secrets:
-      GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
-
   publish:
     needs: [prepare, build]
     uses: ./.github/workflows/publish.yml
     permissions:
       contents: write
     with:
+      channel: ${{ needs.prepare.outputs.channel }}
+      prerelease: ${{ inputs.prerelease }}
       version: ${{ needs.prepare.outputs.version }}
       target_commitish: ${{ needs.prepare.outputs.head_sha }}