Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
bit-pm
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
燕伟桐
bit-pm
Commits
dd4987a9
Unverified
提交
dd4987a9
authored
7月 21, 2025
作者:
Will Chen
提交者:
GitHub
7月 21, 2025
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Verify release (#679)
Context:
https://github.com/electron/forge/issues/3965
上级
15defa72
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
183 行增加
和
0 行删除
+183
-0
release.yml
.github/workflows/release.yml
+16
-0
package.json
package.json
+1
-0
README.md
scripts/README.md
+38
-0
verify-release-assets.js
scripts/verify-release-assets.js
+128
-0
没有找到文件。
.github/workflows/release.yml
浏览文件 @
dd4987a9
...
@@ -71,3 +71,19 @@ jobs:
...
@@ -71,3 +71,19 @@ jobs:
APPLE_ID
:
${{ secrets.APPLE_ID }}
APPLE_ID
:
${{ secrets.APPLE_ID }}
APPLE_PASSWORD
:
${{ secrets.APPLE_PASSWORD }}
APPLE_PASSWORD
:
${{ secrets.APPLE_PASSWORD }}
run
:
npm run publish
run
:
npm run publish
verify-assets
:
name
:
Verify Release Assets
needs
:
build
runs-on
:
ubuntu-latest
steps
:
-
name
:
Github checkout
uses
:
actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
# v4.1.1
-
name
:
Use Node.js
uses
:
actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e
# v4.3.0
with
:
node-version
:
20
-
name
:
Verify all release assets are uploaded
env
:
GITHUB_TOKEN
:
${{ secrets.GITHUB_TOKEN }}
run
:
node scripts/verify-release-assets.js
package.json
浏览文件 @
dd4987a9
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
"package"
:
"npm run clean && electron-forge package"
,
"package"
:
"npm run clean && electron-forge package"
,
"make"
:
"npm run clean && electron-forge make"
,
"make"
:
"npm run clean && electron-forge make"
,
"publish"
:
"npm run clean && electron-forge publish"
,
"publish"
:
"npm run clean && electron-forge publish"
,
"verify-release"
:
"node scripts/verify-release-assets.js"
,
"ts"
:
"npm run ts:main && npm run ts:workers"
,
"ts"
:
"npm run ts:main && npm run ts:workers"
,
"ts:main"
:
"npx tsc -p tsconfig.app.json --noEmit"
,
"ts:main"
:
"npx tsc -p tsconfig.app.json --noEmit"
,
"ts:workers"
:
"npx tsc -p workers/tsc/tsconfig.json --noEmit"
,
"ts:workers"
:
"npx tsc -p workers/tsc/tsconfig.json --noEmit"
,
...
...
scripts/README.md
浏览文件 @
dd4987a9
...
@@ -26,3 +26,41 @@ chmod +x scripts/extract-codebase.ts
...
@@ -26,3 +26,41 @@ chmod +x scripts/extract-codebase.ts
-
Extracts files with extensions: .ts, .tsx, .js, .jsx, .css
-
Extracts files with extensions: .ts, .tsx, .js, .jsx, .css
-
Formats output with markdown code blocks, including file paths
-
Formats output with markdown code blocks, including file paths
-
Writes all extracted code to a single markdown file
-
Writes all extracted code to a single markdown file
## verify-release-assets.js
A script that verifies all expected binary assets are present in the GitHub release for the current version in
`package.json`
.
### Usage
```
bash
# Set GITHUB_TOKEN environment variable
export
GITHUB_TOKEN
=
your_github_token
# Run the verification script
npm run verify-release
# Or run directly
node scripts/verify-release-assets.js
```
### Expected Assets
The script verifies the presence of these 7 assets for each release:
1.
`dyad-{version}-1.x86_64.rpm`
(Linux RPM)
2.
`dyad-{version}-full.nupkg`
(Windows NuGet package)
3.
`dyad-{version}.Setup.exe`
(Windows installer)
4.
`dyad-darwin-arm64-{version}.zip`
(macOS Apple Silicon)
5.
`dyad-darwin-x64-{version}.zip`
(macOS Intel)
6.
`dyad_{version}_amd64.deb`
(Linux DEB)
7.
`RELEASES`
(Windows update manifest)
### Features
-
Reads version from
`package.json`
automatically
-
Fetches release information from GitHub API
-
Lists all expected vs actual assets
-
Fails with clear error messages if assets are missing
-
Shows warnings for unexpected assets
-
Provides detailed release summary on success
scripts/verify-release-assets.js
0 → 100755
浏览文件 @
dd4987a9
#!/usr/bin/env node
const
fs
=
require
(
"fs"
);
const
path
=
require
(
"path"
);
/**
* Verifies that all expected binary assets are present in the GitHub release
* for the version specified in package.json
*/
async
function
verifyReleaseAssets
()
{
try
{
// Read version from package.json
const
packagePath
=
path
.
join
(
__dirname
,
".."
,
"package.json"
);
const
packageJson
=
JSON
.
parse
(
fs
.
readFileSync
(
packagePath
,
"utf8"
));
const
version
=
packageJson
.
version
;
console
.
log
(
`🔍 Verifying release assets for version
${
version
}
...`
);
// GitHub API configuration
const
owner
=
"dyad-sh"
;
const
repo
=
"dyad"
;
const
token
=
process
.
env
.
GITHUB_TOKEN
;
if
(
!
token
)
{
throw
new
Error
(
"GITHUB_TOKEN environment variable is required"
);
}
// Fetch all releases (including drafts)
const
tagName
=
`v
${
version
}
`
;
console
.
log
(
`📡 Fetching all releases to find:
${
tagName
}
`
);
const
allReleasesUrl
=
`https://api.github.com/repos/
${
owner
}
/
${
repo
}
/releases`
;
const
response
=
await
fetch
(
allReleasesUrl
,
{
headers
:
{
Authorization
:
`token
${
token
}
`
,
Accept
:
"application/vnd.github.v3+json"
,
"User-Agent"
:
"dyad-release-verifier"
,
},
});
if
(
!
response
.
ok
)
{
throw
new
Error
(
`GitHub API error:
${
response
.
status
}
${
response
.
statusText
}
`
,
);
}
const
allReleases
=
await
response
.
json
();
const
release
=
allReleases
.
find
((
r
)
=>
r
.
tag_name
===
tagName
);
if
(
!
release
)
{
throw
new
Error
(
`Release
${
tagName
}
not found in published releases or drafts. Make sure the release exists.`
,
);
}
const
assets
=
release
.
assets
||
[];
console
.
log
(
`📦 Found
${
assets
.
length
}
assets in release
${
tagName
}
`
);
console
.
log
(
`📄 Release status:
${
release
.
draft
?
"DRAFT"
:
"PUBLISHED"
}
`
);
// Define expected assets
const
expectedAssets
=
[
`dyad-
${
version
}
-1.x86_64.rpm`
,
`dyad-
${
version
}
-full.nupkg`
,
`dyad-
${
version
}
.Setup.exe`
,
`dyad-darwin-arm64-
${
version
}
.zip`
,
`dyad-darwin-x64-
${
version
}
.zip`
,
`dyad_
${
version
}
_amd64.deb`
,
"RELEASES"
,
];
console
.
log
(
"📋 Expected assets:"
);
expectedAssets
.
forEach
((
asset
)
=>
console
.
log
(
` -
${
asset
}
`
));
console
.
log
(
""
);
// Get actual asset names
const
actualAssets
=
assets
.
map
((
asset
)
=>
asset
.
name
);
console
.
log
(
"📋 Actual assets:"
);
actualAssets
.
forEach
((
asset
)
=>
console
.
log
(
` -
${
asset
}
`
));
console
.
log
(
""
);
// Check for missing assets
const
missingAssets
=
expectedAssets
.
filter
(
(
expected
)
=>
!
actualAssets
.
includes
(
expected
),
);
if
(
missingAssets
.
length
>
0
)
{
console
.
error
(
"❌ VERIFICATION FAILED!"
);
console
.
error
(
"📭 Missing assets:"
);
missingAssets
.
forEach
((
asset
)
=>
console
.
error
(
` -
${
asset
}
`
));
console
.
error
(
""
);
console
.
error
(
"Please ensure all platforms have completed their builds and uploads."
,
);
process
.
exit
(
1
);
}
// Check for unexpected assets (optional warning)
const
unexpectedAssets
=
actualAssets
.
filter
(
(
actual
)
=>
!
expectedAssets
.
includes
(
actual
),
);
if
(
unexpectedAssets
.
length
>
0
)
{
console
.
warn
(
"⚠️ Unexpected assets found:"
);
unexpectedAssets
.
forEach
((
asset
)
=>
console
.
warn
(
` -
${
asset
}
`
));
console
.
warn
(
""
);
}
console
.
log
(
"✅ VERIFICATION PASSED!"
);
console
.
log
(
`🎉 All
${
expectedAssets
.
length
}
expected assets are present in release
${
tagName
}
`
,
);
console
.
log
(
""
);
console
.
log
(
"📊 Release Summary:"
);
console
.
log
(
` Release:
${
release
.
name
||
tagName
}
`
);
console
.
log
(
` Tag:
${
release
.
tag_name
}
`
);
console
.
log
(
` Published:
${
release
.
published_at
}
`
);
console
.
log
(
` URL:
${
release
.
html_url
}
`
);
}
catch
(
error
)
{
console
.
error
(
"❌ Error verifying release assets:"
,
error
.
message
);
process
.
exit
(
1
);
}
}
// Run the verification
verifyReleaseAssets
();
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论