summaryrefslogtreecommitdiffstats
path: root/.github/workflows/release.yml
blob: e07fc0c077dc2f1bf9bfb25fa9b8cb8d86e688b2 (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
name: Release
on: workflow_dispatch
permissions:
  contents: read

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

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

      - uses: actions/setup-python@v4
        with:
          python-version: "3.10"

      - name: Update version
        id: update_version
        run: |
          python devscripts/update-version.py ${{ vars.PUSH_VERSION_COMMIT == '' && '"$(date -u +"%H%M%S")"' || '' }} | \
            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
        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
          echo "head_sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"

      - name: Update master
        if: vars.PUSH_VERSION_COMMIT != ''
        run: git push origin ${{ github.event.ref }}

  publish_pypi_homebrew:
    needs: prepare
    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 != ''
        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 != ''
        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 != ''
        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

  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:
      version: ${{ needs.prepare.outputs.version }}
      target_commitish: ${{ needs.prepare.outputs.head_sha }}