aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/release.yml
blob: ada508be82826084c09ec79576eb4c3d1b2fea73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
name: Release
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

jobs:
  prepare:
    permissions:
      contents: write
    runs-on: ubuntu-latest
    outputs:
      channel: ${{ steps.set_channel.outputs.channel }}
      version: ${{ steps.update_version.outputs.version }}
      head_sha: ${{ steps.get_target.outputs.head_sha }}

    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - uses: actions/setup-python@v4
        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: |
          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
        run: |
          make doc
          sed '/### /Q' Changelog.md >> ./CHANGELOG
          echo '### ${{ steps.update_version.outputs.version }}' >> ./CHANGELOG
          python ./devscripts/make_changelog.py -vv -c >> ./CHANGELOG
          echo >> ./CHANGELOG
          grep -Poz '(?s)### \d+\.\d+\.\d+.+' 'Changelog.md' | head -n -1 >> ./CHANGELOG
          cat ./CHANGELOG > Changelog.md

      - 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
          git add -u
          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 != '' && !inputs.prerelease
        run: git push origin ${{ github.event.ref }}

  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:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: "3.10"

      - name: Install Requirements
        run: |
          sudo apt-get -y install pandoc man
          python -m pip install -U pip setuptools wheel twine
          python -m pip install -U -r requirements.txt

      - name: Prepare
        run: |
          python devscripts/update-version.py ${{ needs.prepare.outputs.version }}
          python devscripts/make_lazy_extractors.py

      - name: Build and publish on PyPI
        env:
          TWINE_USERNAME: __token__
          TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
        if: env.TWINE_PASSWORD != '' && !inputs.prerelease
        run: |
          rm -rf dist/*
          make pypi-files
          python devscripts/set-variant.py pip -M "You installed yt-dlp with pip or using the wheel from PyPi; Use that to update"
          python setup.py sdist bdist_wheel
          twine upload dist/*

      - name: Checkout Homebrew repository
        env:
          BREW_TOKEN: ${{ secrets.BREW_TOKEN }}
          PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
        if: env.BREW_TOKEN != '' && env.PYPI_TOKEN != '' && !inputs.prerelease
        uses: actions/checkout@v3
        with:
          repository: yt-dlp/homebrew-taps
          path: taps
          ssh-key: ${{ secrets.BREW_TOKEN }}

      - name: Update Homebrew Formulae
        env:
          BREW_TOKEN: ${{ secrets.BREW_TOKEN }}
          PYPI_TOKEN: ${{ secrets.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
          git -C taps/ config user.email github-actions@example.com
          git -C taps/ commit -am 'yt-dlp: ${{ needs.prepare.outputs.version }}'
          git -C taps/ push

  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 }}