Prepare release #23
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Prepare release | |
permissions: | |
contents: write | |
pull-requests: write | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: "Release version (without leading 'v')" | |
required: true | |
type: string | |
release_branch: | |
description: "Release branch name" | |
required: true | |
type: string | |
default: "main" | |
pre_release: | |
description: "Pre-release? (Don't render changelog)" | |
required: true | |
type: boolean | |
default: false | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: false | |
jobs: | |
pre_release_tasks: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Validate input | |
run: | | |
if [[ ${{ inputs.version }} = v* ]] | |
then | |
echo "::error title=Invalid Version::Invalid version number given" | |
exit 1 | |
fi | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
lfs: true | |
ref: "${{ inputs.release_branch }}" | |
- name: Setup Python 3.11 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Configure Git | |
run: | | |
git config --global user.email "${{ github.actor }}@users.noreply.github.com" | |
git config --global user.name "${{ github.actor }}" | |
- name: Install dkist | |
run: | | |
python -m pip install . | |
- name: Update attrs | |
run: | | |
python -c "from dkist.net.attrs_values import attempt_local_update; attempt_local_update(user_file='./dkist/data/api_search_values.json', silence_errors=False)" | |
- name: Commit Attrs | |
run: | | |
git update-index --refresh | |
git diff-index --quiet HEAD -- || git commit -m "Update attrs values before release [skip ci]" dkist/data/api_search_values.json | |
- name: Install towncrier | |
run: python -m pip install --upgrade towncrier pre-commit | |
- name: Run towncrier in draft to capture the output | |
run: towncrier build --draft --version ${{ inputs.version }} --yes > release-changelog.rst | |
- name: Convert to markdown with pandoc | |
uses: docker://pandoc/core:2.9 | |
with: | |
args: >- | |
--wrap=none | |
-t markdown_strict | |
--output=release-changelog.md | |
release-changelog.rst | |
- name: Capture Markdown Changelog | |
id: markdown-changelog | |
run: | | |
{ | |
echo 'content<<EOF' | |
cat release-changelog.md | |
echo EOF | |
} >> "$GITHUB_OUTPUT" | |
- name: Cleanup Temporary Changelog Files | |
run: rm release-changelog.md release-changelog.rst | |
- name: Debug md changelog | |
run: | | |
echo "${{ steps.markdown-changelog.outputs.content }}" | |
- name: Run towncrier | |
if: ${{ ! inputs.pre_release }} | |
run: | | |
towncrier build --version ${{ inputs.version }} --yes | |
- name: Run pre-commit | |
run: | | |
git add . | |
pre-commit run || true | |
git add . | |
- name: Commit Changelog | |
run: | | |
git diff-index --quiet HEAD -- || git commit -m "Render changelog for v${{ inputs.version }}" | |
- name: Create Pull Request | |
uses: peter-evans/create-pull-request@v6 | |
with: | |
branch: "prepare-v${{ inputs.version }}" | |
title: 'Prepare for release of v${{ inputs.version }}' | |
body: | | |
This PR renders the changelog and updates the JSON attrs before release of v${{ inputs.version }}. | |
A draft release has been made with the changelog, release it after merge to trigger the release. | |
labels: | | |
no changelog | |
- name: Create draft GitHub Release | |
uses: actions/github-script@v7 | |
id: create-release | |
with: | |
script: | | |
return await github.rest.repos.createRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
tag_name: "v${{ inputs.version }}", | |
name: "v${{ inputs.version }}", | |
body: `${{ steps.markdown-changelog.outputs.content }}`, | |
draft: true | |
}); |