55 tags :
66 - " *"
77
8+ env :
9+ SVN_USERNAME : ${{ secrets.SVN_USERNAME }}
10+ SVN_PASSWORD : ${{ secrets.SVN_PASSWORD }}
11+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
12+
813jobs :
14+ extract-release-notes :
15+ name : Extract Release Notes
16+ runs-on : ubuntu-latest
17+ outputs :
18+ release_notes : ${{ steps.release_notes.outputs.release_notes }}
19+ steps :
20+ - uses : actions/checkout@v3
21+
22+ - name : Find Readme File
23+ id : find_readme
24+ run : |
25+ for file in readme.txt Readme.txt README.txt README.md Readme.md readme.md; do
26+ if [ -f "$file" ]; then
27+ echo "readme_file=$file" >> $GITHUB_ENV
28+ break
29+ fi
30+ done
31+
32+ source $GITHUB_ENV
33+
34+ if [ -z "$readme_file" ]; then
35+ echo "::error::Readme file not found."
36+ exit 1
37+ fi
38+
39+ - name : Extract Release Notes
40+ id : release_notes
41+ run : |
42+ changelog_section_start="== Changelog =="
43+ readme_file="$readme_file"
44+
45+ if [[ "$GITHUB_REF" == refs/tags/* ]]; then
46+ plugin_version="${GITHUB_REF#refs/tags/}"
47+ else
48+ echo "::error::This workflow must be triggered by a tag push."
49+ exit 1
50+ fi
51+
52+ in_changelog=0
53+ found_version=0
54+ release_notes=""
55+
56+ while IFS= read -r line; do
57+ if [[ "$line" == "$changelog_section_start" ]]; then
58+ in_changelog=1
59+ continue
60+ fi
61+
62+ if [[ $in_changelog -eq 0 ]]; then
63+ continue
64+ fi
65+
66+ if [[ "$line" == "= ${plugin_version} =" ]]; then
67+ found_version=1
68+ continue
69+ fi
70+
71+ if [[ $found_version -eq 1 ]] && echo "$line" | grep -qE '^= [0-9]+\.[0-9]+\.[0-9]+ =$'; then
72+ break
73+ fi
74+
75+ if [[ $found_version -eq 1 ]] && echo "$line" | grep -qE '^\*'; then
76+ release_notes+="${line}\n"
77+ continue
78+ fi
79+ done < "$readme_file"
80+
81+ if [[ -z "$release_notes" ]]; then
82+ echo "::error::Failed to extract release notes for version ${plugin_version}."
83+ exit 1
84+ fi
85+
86+ # Output in a format usable by later jobs
87+ release_notes="${release_notes//'%'/'%25'}"
88+ release_notes="${release_notes//$'\n'/'%0A'}"
89+ release_notes="${release_notes//$'\r'/'%0D'}"
90+ echo "release_notes=$release_notes" >> $GITHUB_OUTPUT
91+
992 update-trunk :
1093 name : Update trunk in WordPress SVN
1194 runs-on : ubuntu-latest
12-
95+ needs : extract-release-notes
1396 steps :
1497 - uses : actions/checkout@v3
1598
@@ -18,22 +101,16 @@ jobs:
18101 sudo apt-get update
19102 sudo apt-get install -y subversion
20103
21- - name : WordPress Plugin Deploy (Trunk Only)
104+ - name : Deploy to trunk
22105 uses : 10up/action-wordpress-plugin-deploy@stable
23106 with :
24- skip-existing-assets : true
25107 skip-tags : true
26108 generate-zip : false
27109
28- env :
29- SVN_USERNAME : ${{ secrets.SVN_USERNAME }}
30- SVN_PASSWORD : ${{ secrets.SVN_PASSWORD }}
31-
32110 tag-release :
33111 name : Tag SVN Release
34112 runs-on : ubuntu-latest
35113 needs : update-trunk
36-
37114 steps :
38115 - uses : actions/checkout@v3
39116
@@ -47,38 +124,34 @@ jobs:
47124 run : |
48125 echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
49126
50- - name : WordPress Plugin Deploy (Tag Only)
127+ - name : Deploy tag
51128 uses : 10up/action-wordpress-plugin-deploy@stable
52129 with :
53130 skip-trunk : true
54131 skip-assets : true
55132 generate-zip : false
56133 tag : ${{ steps.version.outputs.version }}
57134
58- env :
59- SVN_USERNAME : ${{ secrets.SVN_USERNAME }}
60- SVN_PASSWORD : ${{ secrets.SVN_PASSWORD }}
61-
62135 github-release :
63- name : Create GitHub Release
64- runs-on : ubuntu-latest
65- needs : [tag-release]
66-
67- steps :
68- - uses : actions/checkout@v3
69-
70- - name : Extract Plugin Version
71- id : version
72- run : |
73- echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
136+ name : Create GitHub Release
137+ runs-on : ubuntu-latest
138+ needs : [tag-release, extract-release-notes]
139+ steps :
140+ - uses : actions/checkout@v3
74141
75- - name : Create ZIP
76- run : |
77- zip -r "${{ github.event.repository.name }}.zip" . -x ".git/*" ".github/*"
142+ - name : Extract Plugin Version
143+ id : version
144+ run : |
145+ echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
78146
79- - name : Create GitHub Release
80- uses : softprops/action-gh-release@v2
81- with :
82- tag_name : ${{ steps.version.outputs.version }}
83- files : ${{ github.event.repository.name }}.zip
147+ - name : Create ZIP Archive
148+ run : |
149+ zip -r "${{ github.event.repository.name }}.zip" . -x ".git/*" ".github/*"
84150
151+ - name : Publish GitHub Release
152+ uses : softprops/action-gh-release@v2
153+ with :
154+ tag_name : ${{ steps.version.outputs.version }}
155+ name : ${{ steps.version.outputs.version }}
156+ body : ${{ needs.extract-release-notes.outputs.release_notes }}
157+ files : ${{ github.event.repository.name }}.zip
0 commit comments