1+ name : Create and Update Releases
2+
3+ on :
4+ push :
5+ branches :
6+ - main
7+
8+ jobs :
9+ get-release :
10+ runs-on : ubuntu-latest
11+ outputs :
12+ latest_release : ${{ steps.get_latest_release.outputs.latest_release }}
13+ steps :
14+ - name : Checkout repository
15+ uses : actions/checkout@v3
16+
17+ - name : Get the latest release tag
18+ id : get_latest_release
19+ env :
20+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
21+ run : |
22+ LATEST_RELEASE=$(gh release list --limit 1 --json tagName --jq '.[0].tagName' || echo "none")
23+ echo "Latest release tag: $LATEST_RELEASE"
24+ echo "::set-output name=latest_release::$LATEST_RELEASE"
25+ echo "latest_release=${latest_release}" >> $GITHUB_ENV
26+ continue-on-error : true
27+
28+ create-release :
29+ needs : get-release
30+ runs-on : ubuntu-latest
31+ if : needs.get-release.outputs.latest_release == ''
32+ steps :
33+ - name : print latest release output
34+ run : echo "Latest release ${{ needs.get-release.outputs.latest_release }}"
35+
36+ - name : Checkout repository
37+ uses : actions/checkout@v3
38+
39+ - name : Release doesn't exist so create one
40+ id : create_release
41+ env :
42+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
43+ run : |
44+ gh release create v1.0.0 --generate-notes --prerelease=false
45+ echo "Release created"
46+
47+ - name : Zip files of folders
48+ id : zip_folders
49+ run : |
50+ mkdir -p temp
51+ for folder in */; do
52+ if [ -d "$folder" ]; then
53+ folder_name=$(basename "$folder")
54+ zip -r "temp/${folder_name}.zip" "$folder_name"
55+ fi
56+ done
57+ echo "Zip files created"
58+
59+ - name : upload files to the release
60+ id : upload_files
61+ env :
62+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
63+ run : |
64+ for file in temp/*.zip; do
65+ gh release upload v1.0.0 "$file" --clobber
66+ echo "Uploaded $file, waiting to avoid rate limits..."
67+ sleep 3
68+ done
69+
70+ - name : clean up
71+ run : |
72+ rm -r temp
73+
74+ update-release :
75+ needs : get-release
76+ runs-on : ubuntu-latest
77+ if : needs.get-release.outputs.latest_release != ''
78+ steps :
79+ - name : Checkout repository
80+ uses : actions/checkout@v3
81+
82+ - name : Fetch latest tags
83+ run : |
84+ git fetch --tags
85+
86+ - name : Get changed files
87+ id : get_changes
88+ run : |
89+ if [ -n "${{ needs.get-release.outputs.latest_release }}" ]; then
90+ git fetch origin refs/tags/${{ needs.get-release.outputs.latest_release }}:refs/tags/${{ needs.get-release.outputs.latest_release }}
91+ changed_files=$(git diff --name-only ${{ needs.get-release.outputs.latest_release }} HEAD)
92+ echo "Changed files: $changed_files"
93+ echo "$changed_files" > changed_files.txt
94+ else
95+ echo "No latest release found"
96+ echo "" > changed_files.txt
97+ fi
98+
99+ - name : Identify changed folders
100+ id : identify_folders
101+ run : |
102+ if [ -s changed_files.txt ]; then
103+ changed_folders=$(awk -F/ '{print $1}' changed_files.txt | sort | uniq)
104+ echo "Changed folders: $changed_folders"
105+ echo "$changed_folders" > changed_folders.txt
106+ else
107+ echo "No changed files"
108+ echo "" > changed_folders.txt
109+ fi
110+
111+ - name : Archive changed folders
112+ run : |
113+ mkdir -p temp_archives
114+ while IFS= read -r folder; do
115+ if [ -d "$folder" ]; then
116+ zip -r "temp_archives/$folder.zip" "$folder"
117+ echo "Archived $folder"
118+ else
119+ echo "Folder $folder does not exist"
120+ fi
121+ done < changed_folders.txt
122+
123+ - name : Upload archives to release
124+ if : needs.get-release.outputs.latest_release != ''
125+ env :
126+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
127+ run : |
128+ while IFS= read -r folder; do
129+ archive="temp_archives/$folder.zip"
130+ if [ -f "$archive" ]; then
131+ gh release upload ${{ needs.get-release.outputs.latest_release }} "$archive" --clobber
132+ echo "Uploaded $archive, waiting to avoid rate limits..."
133+ else
134+ echo "Archive $archive not found"
135+ fi
136+ done < changed_folders.txt
137+
138+ - name : Clean up
139+ if : (needs.get-release.outputs.latest_release != '') && ( steps. )
140+ run : |
141+ rm -r temp_archives
142+ rm changed_folders.txt
143+ rm changed_files.txt
0 commit comments