-
Notifications
You must be signed in to change notification settings - Fork 0
145 lines (122 loc) · 4.81 KB
/
deploy.yml
File metadata and controls
145 lines (122 loc) · 4.81 KB
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
name: Create Release
on:
push:
tags:
- '*.*.*' # Match semantic versioning tags
# Removed branches trigger to ensure it only runs on tags
# branches:
# - master
jobs:
create_release:
# No need to check against branches, workflow only triggers on tags
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Find Readme File
id: find_readme
run: |
for file in readme.txt Readme.txt README.txt README.md Readme.md readme.md; do
if [ -f "$file" ]; then
echo "Readme file found: $file"
echo "readme_file=$file" >> $GITHUB_ENV
break
fi
done
# Ensure the variable is available within the current step
source $GITHUB_ENV
if [ -z "$readme_file" ]; then
echo "::error::Readme file not found."
exit 1
fi
- name: Extract Release Notes
id: release_notes
run: |
changelog_section_start="== Changelog =="
readme_file="$readme_file"
# Extract the tag name from GITHUB_REF (plugin_version)
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
plugin_version="${GITHUB_REF#refs/tags/}"
echo "DEBUG: Plugin latest version found: $plugin_version."
else
echo "::error::This workflow must be triggered by a tag push."
exit 1
fi
in_changelog=0
found_version=0
release_notes=""
echo "DEBUG: Starting to extract release notes from $readme_file for version $plugin_version."
while IFS= read -r line; do
echo "DEBUG: Processing line: $line"
# Start processing after the changelog header
if [[ "$line" == "$changelog_section_start" ]]; then
in_changelog=1
echo "DEBUG: Found changelog section header."
continue
fi
# Skip if not in changelog section
if [[ $in_changelog -eq 0 ]]; then
echo "DEBUG: Skipping line (not in changelog section)."
continue
fi
# Check for the current version header
if [[ "$line" == "= ${plugin_version} =" ]]; then
found_version=1
echo "DEBUG: Found version header for $plugin_version."
continue
fi
# Break if a new version header is found after the current version
if [[ $found_version -eq 1 ]] && echo "$line" | grep -qE '^= [0-9]+\.[0-9]+\.[0-9]+ =$'; then
echo "DEBUG: Found a new version header. Stopping collection."
break
fi
# Collect lines starting with '*' if we are in the current version section
if [[ $found_version -eq 1 ]] && echo "$line" | grep -qE '^\*'; then
echo "DEBUG: Found changelog entry: $line"
release_notes+="${line}\n"
continue
fi
# Log skipped lines in the current version section
if [[ $found_version -eq 1 ]]; then
echo "DEBUG: Skipping line (not a changelog entry): $line"
fi
done < "$readme_file"
if [[ -z "$release_notes" ]]; then
echo "::error::Failed to extract release notes for version ${plugin_version}."
exit 1
fi
echo "DEBUG: Successfully extracted release notes."
echo "DEBUG: Release notes content:"
echo -e "$release_notes"
# Write the release notes with actual line breaks
echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV
echo -e "$release_notes" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Create zip file
run: |
REPO_NAME=$(basename `git rev-parse --show-toplevel`)
zip -r ${REPO_NAME}.zip . -x '*.git*' -x '.github/*' -x '*.distignore*' -x 'CHANGELOG.txt'
echo "repo_name=${REPO_NAME}" >> $GITHUB_ENV
# Source to make repo_name available in subsequent steps
source $GITHUB_ENV
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref_name }}
release_name: "${{ github.ref_name }}"
body: ${{ env.RELEASE_NOTES }}
draft: false
prerelease: false
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./${{ env.repo_name }}.zip
asset_name: ${{ env.repo_name }}.zip
asset_content_type: application/zip