Skip to content

Commit 1e434d6

Browse files
committed
Refactor release workflow to improve release management and asset verification
1 parent 60c542a commit 1e434d6

1 file changed

Lines changed: 70 additions & 54 deletions

File tree

.github/workflows/release.yml

Lines changed: 70 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@ jobs:
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
@@ -63,6 +85,7 @@ jobs:
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

Comments
 (0)