1515 name : Create Release
1616 runs-on : ubuntu-latest
1717 outputs :
18- upload_url : ${{ steps.create_release .outputs.upload_url }}
18+ upload_url : ${{ steps.release .outputs.upload_url }}
1919 version : ${{ steps.get_version.outputs.version }}
2020 steps :
21+ - name : Checkout code
22+ uses : actions/checkout@v4
23+
2124 - name : Get version from tag
2225 id : get_version
2326 run : |
@@ -27,14 +30,33 @@ jobs:
2730 echo "version=dev-$(date +%Y%m%d-%H%M%S)" >> $GITHUB_OUTPUT
2831 fi
2932
30- - name : Create Release
31- id : create_release
32- uses : actions/create-release@v1
33+ - name : Check if release exists
34+ id : check_release
35+ run : |
36+ if gh release view "${{ steps.get_version.outputs.version }}" >/dev/null 2>&1; then
37+ echo "exists=true" >> $GITHUB_OUTPUT
38+ echo "Release ${{ steps.get_version.outputs.version }} already exists"
39+ else
40+ echo "exists=false" >> $GITHUB_OUTPUT
41+ echo "Release ${{ steps.get_version.outputs.version }} does not exist"
42+ fi
3343 env :
3444 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
45+
46+ - name : Delete existing release if it exists
47+ if : steps.check_release.outputs.exists == 'true'
48+ run : |
49+ echo "Deleting existing release ${{ steps.get_version.outputs.version }}"
50+ gh release delete "${{ steps.get_version.outputs.version }}" --yes --cleanup-tag
51+ env :
52+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
53+
54+ - name : Create Release
55+ id : release
56+ uses : softprops/action-gh-release@v1
3557 with :
3658 tag_name : ${{ steps.get_version.outputs.version }}
37- release_name : Release ${{ steps.get_version.outputs.version }}
59+ name : Release ${{ steps.get_version.outputs.version }}
3860 body : |
3961 ## Changes in ${{ steps.get_version.outputs.version }}
4062
6385
6486 draft : false
6587 prerelease : false
88+ generate_release_notes : true
6689
6790 build :
6891 name : Build for ${{ matrix.target }}
@@ -160,61 +183,54 @@ jobs:
160183 copy target\${{ matrix.target }}\release\rust-singler.exe ${{ matrix.name }}
161184
162185 - name : Upload Release Asset
163- uses : actions/upload-release-asset@v1
164- env :
165- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
186+ uses : softprops/action-gh-release@v1
166187 with :
167- upload_url : ${{ needs.create-release.outputs.upload_url }}
168- asset_path : ./${{ matrix.name }}
169- asset_name : ${{ matrix.name }}
170- asset_content_type : application/octet-stream
188+ tag_name : ${{ needs.create-release.outputs.version }}
189+ files : ./${{ matrix.name }}
171190
172191 verify-binaries :
173192 name : Verify Built Binaries
174193 needs : [create-release, build]
175194 runs-on : ubuntu-latest
176195 steps :
177- - name : Download all release assets
178- uses : actions/github-script@v7
179- with :
180- script : |
181- const fs = require('fs');
182- const { execSync } = require('child_process');
183-
184- // Get the release
185- const release = await github.rest.repos.getReleaseByTag({
186- owner: context.repo.owner,
187- repo: context.repo.repo,
188- tag: '${{ needs.create-release.outputs.version }}'
189- });
190-
191- console.log(`Found release with ${release.data.assets.length} assets`);
192-
193- for (const asset of release.data.assets) {
194- console.log(`Downloading ${asset.name}...`);
195- const response = await github.rest.repos.getReleaseAsset({
196- owner: context.repo.owner,
197- repo: context.repo.repo,
198- asset_id: asset.id,
199- headers: {
200- Accept: 'application/octet-stream'
201- }
202- });
203-
204- fs.writeFileSync(asset.name, Buffer.from(response.data));
205-
206- // Check file size
207- const stats = fs.statSync(asset.name);
208- console.log(`${asset.name}: ${stats.size} bytes`);
209-
210- if (stats.size < 1000000) { // Less than 1MB might indicate an issue
211- console.warn(`Warning: ${asset.name} seems small (${stats.size} bytes)`);
212- }
213- }
196+ - name : Checkout code
197+ uses : actions/checkout@v4
214198
215- - name : Test Linux binary
199+ - name : Download and verify release assets
216200 run : |
217- if [ -f "rust-singler-linux-amd64" ]; then
218- chmod +x rust-singler-linux-amd64
219- ./rust-singler-linux-amd64 --version || echo "Binary test failed, but continuing..."
220- fi
201+ echo "Downloading release assets for ${{ needs.create-release.outputs.version }}"
202+
203+ # Download all assets from the release
204+ gh release download "${{ needs.create-release.outputs.version }}" --dir ./downloads
205+
206+ echo "Downloaded files:"
207+ ls -la ./downloads/
208+
209+ # Verify each binary
210+ for file in ./downloads/*; do
211+ if [[ -f "$file" ]]; then
212+ filename=$(basename "$file")
213+ size=$(stat -c%s "$file")
214+ echo "📦 $filename: $size bytes"
215+
216+ # Check if file is too small (might indicate build issue)
217+ if (( size < 1000000 )); then
218+ echo "⚠️ Warning: $filename seems small ($size bytes)"
219+ else
220+ echo "✅ $filename looks good"
221+ fi
222+
223+ # Make executable and test (only for Linux binaries on Linux runner)
224+ if [[ "$filename" == *"linux-amd64"* ]]; then
225+ echo "Testing $filename..."
226+ chmod +x "$file"
227+ if "$file" --version 2>/dev/null; then
228+ echo "✅ $filename version check passed"
229+ else
230+ echo "⚠️ $filename version check failed (might be expected in CI)"
231+ fi
232+ fi
233+ fi
234+ done
235+ env :
236+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments