@@ -14,27 +14,34 @@ jobs:
1414 name : Create Release
1515 runs-on : ubuntu-latest
1616 outputs :
17- release_id : ${{ steps.create_release.outputs.id }}
18- upload_url : ${{ steps.create_release.outputs.upload_url }}
17+ release_id : ${{ steps.create_release.outputs.result }}
18+ permissions :
19+ contents : write
1920 steps :
2021 - name : Checkout code
2122 uses : actions/checkout@v4
2223
2324 - name : Create Release
2425 id : create_release
25- uses : actions/create-release@v1
26- env :
27- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
26+ uses : actions/github-script@v7
2827 with :
29- tag_name : ${{ github.ref }}
30- release_name : Release ${{ github.ref }}
31- draft : true
32- prerelease : false
28+ script : |
29+ const release = await github.rest.repos.createRelease({
30+ owner: context.repo.owner,
31+ repo: context.repo.repo,
32+ tag_name: context.ref.replace('refs/tags/', ''),
33+ name: `Release ${context.ref.replace('refs/tags/', '')}`,
34+ draft: true,
35+ prerelease: false
36+ });
37+ return release.data.id;
3338
3439 build :
3540 name : Build ${{ matrix.target }}
3641 needs : create-release
3742 runs-on : ${{ matrix.os }}
43+ permissions :
44+ contents : write
3845 strategy :
3946 matrix :
4047 include :
@@ -83,19 +90,19 @@ jobs:
8390 targets : ${{ matrix.target }}
8491
8592 - name : Cache cargo registry
86- uses : actions/cache@v3
93+ uses : actions/cache@v4
8794 with :
8895 path : ~/.cargo/registry
8996 key : ${{ matrix.target }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
9097
9198 - name : Cache cargo index
92- uses : actions/cache@v3
99+ uses : actions/cache@v4
93100 with :
94101 path : ~/.cargo/git
95102 key : ${{ matrix.target }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
96103
97104 - name : Cache cargo build
98- uses : actions/cache@v3
105+ uses : actions/cache@v4
99106 with :
100107 path : target
101108 key : ${{ matrix.target }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
@@ -157,46 +164,47 @@ jobs:
157164 $hash = Get-FileHash -Path "${{ matrix.asset_name }}.zip" -Algorithm SHA256
158165 "$($hash.Hash.ToLower()) ${{ matrix.asset_name }}.zip" | Out-File -FilePath "${{ matrix.asset_name }}.zip.sha256" -NoNewline
159166
160- - name : Upload Release Asset (Unix)
161- if : matrix.os != 'windows-latest'
162- uses : actions/upload-release-asset@v1
163- env :
164- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
165- with :
166- upload_url : ${{ needs.create-release.outputs.upload_url }}
167- asset_path : ./${{ matrix.asset_name }}.tar.gz
168- asset_name : ${{ matrix.asset_name }}.tar.gz
169- asset_content_type : application/gzip
170-
171- - name : Upload Release Asset (Windows)
172- if : matrix.os == 'windows-latest'
173- uses : actions/upload-release-asset@v1
174- env :
175- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
176- with :
177- upload_url : ${{ needs.create-release.outputs.upload_url }}
178- asset_path : ./${{ matrix.asset_name }}.zip
179- asset_name : ${{ matrix.asset_name }}.zip
180- asset_content_type : application/zip
181-
182- - name : Upload SHA256 (Unix)
183- if : matrix.os != 'windows-latest'
184- uses : actions/upload-release-asset@v1
185- env :
186- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
187- with :
188- upload_url : ${{ needs.create-release.outputs.upload_url }}
189- asset_path : ./${{ matrix.asset_name }}.tar.gz.sha256
190- asset_name : ${{ matrix.asset_name }}.tar.gz.sha256
191- asset_content_type : text/plain
192-
193- - name : Upload SHA256 (Windows)
194- if : matrix.os == 'windows-latest'
195- uses : actions/upload-release-asset@v1
196- env :
197- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
167+ - name : Upload Release Assets
168+ uses : actions/github-script@v7
198169 with :
199- upload_url : ${{ needs.create-release.outputs.upload_url }}
200- asset_path : ./${{ matrix.asset_name }}.zip.sha256
201- asset_name : ${{ matrix.asset_name }}.zip.sha256
202- asset_content_type : text/plain
170+ script : |
171+ const fs = require('fs');
172+ const path = require('path');
173+
174+ const releaseId = ${{ needs.create-release.outputs.release_id }};
175+
176+ // Determine file extension based on OS
177+ const isWindows = '${{ matrix.os }}' === 'windows-latest';
178+ const archiveExt = isWindows ? 'zip' : 'tar.gz';
179+ const archiveName = `${{ matrix.asset_name }}.${archiveExt}`;
180+ const checksumName = `${archiveName}.sha256`;
181+
182+ // Upload main archive
183+ console.log(`Uploading ${archiveName}...`);
184+ const archiveData = fs.readFileSync(archiveName);
185+ await github.rest.repos.uploadReleaseAsset({
186+ owner: context.repo.owner,
187+ repo: context.repo.repo,
188+ release_id: releaseId,
189+ name: archiveName,
190+ data: archiveData,
191+ headers: {
192+ 'content-type': isWindows ? 'application/zip' : 'application/gzip',
193+ 'content-length': archiveData.length
194+ }
195+ });
196+
197+ // Upload checksum
198+ console.log(`Uploading ${checksumName}...`);
199+ const checksumData = fs.readFileSync(checksumName);
200+ await github.rest.repos.uploadReleaseAsset({
201+ owner: context.repo.owner,
202+ repo: context.repo.repo,
203+ release_id: releaseId,
204+ name: checksumName,
205+ data: checksumData,
206+ headers: {
207+ 'content-type': 'text/plain',
208+ 'content-length': checksumData.length
209+ }
210+ });
0 commit comments