/
/
/
1name: 'Generate Release Notes'
2description: 'Generate complete release notes with PR categorization, frontend changes, and merged contributors'
3inputs:
4 version:
5 description: 'The version being released'
6 required: true
7 previous-tag:
8 description: 'The previous release tag to compare against'
9 required: false
10 default: ''
11 head-sha:
12 description: 'The exact source commit used as the comparison head'
13 required: true
14 repository-path:
15 description: 'Path to the checked-out release source'
16 required: false
17 default: '.'
18 channel:
19 description: 'The release channel (stable, rc, beta, nightly)'
20 required: true
21 github-token:
22 description: 'GitHub token for API access'
23 required: true
24 important-notes:
25 description: 'Important notes to display at the top (breaking changes, critical info, etc.)'
26 required: false
27 default: ''
28outputs:
29 release-notes-file:
30 description: 'Path to a file with the complete generated release notes including frontend changes'
31 value: ${{ steps.generate.outputs.release-notes-file }}
32runs:
33 using: 'composite'
34 steps:
35 - name: Set up Python
36 uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
37 with:
38 python-version-file: '${{ inputs.repository-path }}/.python-version'
39 check-latest: true
40
41 - name: Install dependencies
42 shell: bash
43 run: |
44 pip install PyGithub PyYAML
45
46 - name: Generate complete release notes
47 id: generate
48 shell: bash
49 env:
50 GITHUB_TOKEN: ${{ inputs.github-token }}
51 VERSION: ${{ inputs.version }}
52 PREVIOUS_TAG: ${{ inputs.previous-tag }}
53 HEAD_SHA: ${{ inputs.head-sha }}
54 CHANNEL: ${{ inputs.channel }}
55 GITHUB_REPOSITORY: ${{ github.repository }}
56 GITHUB_SERVER_URL: ${{ github.server_url }}
57 IMPORTANT_NOTES: ${{ inputs.important-notes }}
58 RELEASE_NOTES_FILE: ${{ runner.temp }}/release-notes.md
59 run: |
60 cd "${{ inputs.repository-path }}"
61 chmod +x ${{ github.action_path }}/generate_notes.py
62 python3 ${{ github.action_path }}/generate_notes.py
63