Skip to content

Commit 5075040

Browse files
committed
support re-tagging and releasing old versions
the previous commit fixed tagging releases with light tags this commit supports re-tagging the old releases, and creating releases for tags that dont have releases.
1 parent 6318929 commit 5075040

File tree

1 file changed

+45
-21
lines changed

1 file changed

+45
-21
lines changed

.github/workflows/module_release.yml

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,15 @@ on:
1818
description: "Publish to forge.puppet.com"
1919
type: boolean
2020
default: true
21+
edit:
22+
description: "Re-tag and regenerate release notes"
23+
type: boolean
24+
default: false
2125

2226
env:
2327
FORGE_API_KEY: ${{ secrets.FORGE_API_KEY }}
28+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2430

2531
jobs:
2632
check:
@@ -50,55 +56,73 @@ jobs:
5056

5157
- name: "Checkout tag ${{ inputs.tag }}"
5258
if: ${{ inputs.tag != '' }}
53-
id: checkout
5459
run: |
5560
git checkout refs/tags/${{ inputs.tag }}
56-
echo "tag=${{ inputs.tag }}" >> $GITHUB_OUTPUT
5761
58-
- name: "Get metadata version"
59-
id: "get_version"
62+
- name: "Get metadata"
63+
id: metadata
6064
run: |
6165
metadata_version=$(jq --raw-output .version metadata.json)
6266
if [[ -n "${{ inputs.tag }}" ]] ; then
63-
tag=${{ steps.checkout.outputs.tag }}
67+
tag=${{ inputs.tag }}
6468
if [[ "${metadata_version}" != "${tag/v}" ]] ; then
6569
echo "::error::tag ${tag/v} does not match metadata version ${metadata_version}"
6670
exit 1
6771
fi
72+
else
73+
tag="v${metadata_version}"
6874
fi
75+
echo "tag=${tag}" >> $GITHUB_OUTPUT
6976
echo "version=${metadata_version}" >> $GITHUB_OUTPUT
7077
71-
- name: "PDK build ${{ steps.get_version.outputs.version }}"
78+
- name: "PDK build ${{ steps.metadata.outputs.version }}"
7279
uses: "docker://puppet/pdk:3.0.0.0"
7380
with:
7481
args: "build"
7582

7683
- name: "Generate release notes for Github"
77-
if: ${{ inputs.release == true || inputs.release == 'true' }}
84+
continue-on-error: true
7885
run: |
7986
export GH_HOST=github.com
8087
gh extension install chelnak/gh-changelog
8188
gh changelog get --latest | sed -e "1,/^\[Full Changelog\]/ d" > OUTPUT.md
8289
echo "::group::release notes"
8390
cat OUTPUT.md
8491
echo "::endgroup::"
85-
env:
86-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
8792
88-
- name: "Create release for v${{ steps.get_version.outputs.version }}"
89-
if: ${{ inputs.release == true || inputs.release == 'true' }}
93+
- name: "Tag ${{ steps.metadata.outputs.tag }}"
94+
id: tag
9095
run: |
91-
if [[ -z "${{ inputs.tag }}" ]] ; then
92-
# create an annotated tag -- gh release create DOES NOT do this for us!
93-
# TODO move this to an automatic action when a release_prep PR is merged
94-
git config --local user.email "${{ github.repository_owner }}@users.noreply.github.com"
95-
git config --local user.name "GitHub Actions"
96-
git tag -a -m "v${{ steps.get_version.outputs.version }}" "v${{ steps.get_version.outputs.version }}"
97-
git push origin tag "v${{ steps.get_version.outputs.version }}"
96+
# create an annotated tag -- gh release create DOES NOT do this for us!
97+
# TODO move this to an automatic action when a release_prep PR is merged
98+
git config --local user.email "${{ github.repository_owner }}@users.noreply.github.com"
99+
git config --local user.name "GitHub Actions"
100+
101+
# overwrite existing tag?
102+
if [[ -n "${{ inputs.tag }}" ]] ; then
103+
if [[ "${{ inputs.edit }}" == "true" ]] ; then
104+
arg="-f"
105+
else
106+
skip_tag=1
107+
fi
108+
fi
109+
110+
if [[ -z "${skip_tag}" ]] ; then
111+
git tag -a $arg -F OUTPUT.md "${{ steps.metadata.outputs.tag }}"
112+
git push $arg origin tag "${{ steps.metadata.outputs.tag }}"
113+
fi
114+
115+
if gh release view "${{ steps.metadata.outputs.tag }}" > /dev/null ; then
116+
echo "release_action=edit" >> $GITHUB_OUTPUT
117+
echo "undraft=${{ inputs.edit }}" >> $GITHUB_OUTPUT
118+
else
119+
echo "release_action=create" >> $GITHUB_OUTPUT
98120
fi
99-
gh release create v${{ steps.get_version.outputs.version }} --title v${{ steps.get_version.outputs.version }} -F OUTPUT.md
100-
env:
101-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
121+
122+
- name: "${{ steps.tag.outputs.release_action }} release for ${{ steps.metadata.outputs.tag }}"
123+
if: ${{ inputs.release == true || inputs.release == 'true' || steps.tag.outputs.undraft == 'true' }}
124+
run: |
125+
gh release ${{ steps.tag.outputs.release_action }} ${{ steps.metadata.outputs.tag }} --draft=false --title ${{ steps.metadata.outputs.tag }} -F OUTPUT.md
102126
103127
- name: "Publish module"
104128
if: ${{ inputs.publish == true || inputs.publish == 'true' }}

0 commit comments

Comments
 (0)