打包、签名与发布
Packaging, signing & release
Produce signed installers or packages and a tagged release.
20 条本项目编写的提案 · 分类 v1.1 · 新增基准运行 0 次。下方验证方式与部分得分规则是设计,不是执行结果。
- 典型应用
- Xcode · signtool · GitHub Releases
- 小类 GUI 需求标签
HY· 混合
数字员工关联
本项目的小类归属,不代表员工能力实证或已导入基准覆盖。验收与价值指标均为建议,未测量 ROI。
关联岗位
- IT 与软件交付 · 分别对应服务工单、恢复的配置、身份记录、仓库修复、通过的 CI 和发布包。
任务提案 · 20
展开查看完整原文与建议检查方式;两种界面均保留提案英文原文。
R02.02.01.03-T01 Sign, notarize and staple a macOS app for distribution outside the App Store
原始指令
On the Mac, `~/build/Clipper.app` is unsigned. Sign it and all nested frameworks/helpers with the `Developer ID Application` identity of the sandbox team in the keychain, enabling Hardened Runtime with only the entitlements in `entitlements.plist`, submit it with notarytool using keychain profile `ci-sandbox`, staple the ticket, and zip it as `Clipper-2.3.zip`.
- 平台
mac· macOS- 应用
- codesign · notarytool · Xcode
- 交互表面
term· 终端desk· 桌面 GUI- GUI 需求 · 任务设定
HY· 混合- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令click· 指向与点击- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 4 / 5
建议验证方式
`codesign --verify --deep --strict` OK; every Mach-O signed with runtime flag and same Team ID; entitlements equal the file; `spctl -a -vv` accepted 'Notarized Developer ID'; `stapler validate` OK on the app inside the zip.
建议部分得分
30% nested code signed correctly; 20% hardened runtime + entitlements; 30% notarized; 20% stapled zip
R02.02.01.03-T02 Authenticode-sign an MSI and verify it
原始指令
On Windows, sign `C:\out\FieldSync-1.8.0.msi` with the test code-signing certificate `Lab Code Signing` in the CurrentUser store using SHA-256 and the sandbox RFC 3161 timestamp server `http://ts.lab.test`. Verify the signature.
- 平台
win· Windows- 应用
- signtool
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 2 / 5
建议验证方式
`signtool verify /pa /v` succeeds (lab root trusted on grader); digest SHA256; signer thumbprint equals the lab cert; RFC 3161 timestamp present from ts.lab.test; MSI content (streams other than signature) unchanged.
建议部分得分
40% signed with right cert; 20% SHA-256; 30% timestamp; 10% verified
R02.02.01.03-T03 Build a per-machine MSI installer with WiX including upgrade logic
原始指令
Create a WiX v4 installer for `C:\work\FieldSync\publish\` (app + 40 files): per-machine install to Program Files, Start menu shortcut, file association for `.fsync`, major-upgrade handling with a fixed UpgradeCode, and an uninstall that leaves user data in `%APPDATA%` intact.
- 平台
win· Windows- 应用
- WiX · msiexec
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 3 / 5
建议验证方式
Grader VM: msiexec /i silent install succeeds; files and shortcut present; .fsync opens the app (assoc); installing v1.8.1 built from the same project upgrades in place (one ARP entry); uninstall removes files, keeps %APPDATA% data.
建议部分得分
30% install layout; 20% shortcut + association; 30% major upgrade; 20% clean uninstall
R02.02.01.03-T04 Archive and export a Mac app with Developer ID through Xcode Organizer
原始指令
In Xcode, archive the `Notely` scheme (Release), then use Organizer > Distribute App > Developer ID to export with the sandbox team's signing identity and automatic notarization upload, and save the exported app to `~/Exports/Notely/`. Fix the archive's version to 3.1 (build 310) first in the target's General tab.
- 平台
mac· macOS- 应用
- Xcode
- 交互表面
desk· 桌面 GUI- GUI 需求 · 任务设定
G2· GUI 必要- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
click· 指向与点击type· 文字与表单nav· 平移 / 缩放 / 滚动- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 3 / 5
建议验证方式
~/Library/Developer/Xcode/Archives has a Notely archive with CFBundleShortVersionString 3.1 and CFBundleVersion 310; exported app signed Developer ID with hardened runtime; Organizer's distribution log (ExportOptions.plist method developer-id) present. eslogger exec events detect xcodebuild, notarytool or codesign runs not spawned by Xcode.app (e.g. from Terminal), which void the archive/export milestones.
建议部分得分
25% version set; 30% archive created; 30% Developer ID export; 15% notarization submitted
R02.02.01.03-T05 Build a wheel and sdist and publish to a sandbox package index
原始指令
Build sdist and wheel for `/work/tinyorm` and upload them to the sandbox devpi index `http://devpi.lab.test/team/dev` using the token in `~/.config/devpi_token`, then verify installation from that index in a fresh venv.
- 平台
lin· Linuxmac· macOSwin· Windows- 应用
- build · twine · devpi
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 2 / 5
建议验证方式
devpi index lists both files for the project version with metadata matching pyproject; `twine check` passes; `pip install -i ... tinyorm==<ver>` in a clean venv imports successfully.
建议部分得分
40% builds pass twine check; 40% uploaded; 20% installable
R02.02.01.03-T06 Package a Linux daemon as a .deb with a systemd unit and maintainer scripts
原始指令
Create a Debian package `metricsd_1.4.0_amd64.deb` from `/work/metricsd/dist/` that installs the binary to `/usr/bin`, config to `/etc/metricsd/` as a conffile, a systemd unit enabled on install, a system user created in postinst, and clean removal on purge. Lintian must be clean of errors.
- 平台
lin· Linux- 应用
- dpkg-deb · debhelper · lintian
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 3 / 5
建议验证方式
On a clean Debian VM: dpkg -i works; service active as user metricsd; edited config preserved on upgrade to 1.4.1 test package; purge removes user and config; lintian reports 0 errors.
建议部分得分
30% install + service; 25% conffile behavior; 25% purge; 20% lintian
R02.02.01.03-T07 Publish a CLI through a Homebrew tap with bottles
原始指令
Create a Homebrew tap repo on the sandbox Git server for `/work/logq` (Go CLI): a formula that builds from the release tarball with checksum, installs shell completions and a man page, has a test block, and bottles for arm64_sonoma built in CI. `brew install lab/tap/logq` must work on the Mac.
- 平台
mac· macOS- 应用
- Homebrew · git
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
G2· GUI 必要- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 3 / 5
建议验证方式
`brew audit --strict --new lab/tap/logq` clean; `brew install` pours the bottle (no build from source) on arm64; completions and man page installed; `brew test` passes.
建议部分得分
35% formula installs; 20% audit clean; 25% bottle poured; 20% completions/man/test
R02.02.01.03-T08 Draft a GitHub release with changelog, artifacts and checksums
原始指令
For `/work/cli-tool` on the sandbox GitHub-compatible forge, create tag `v2.4.0` on `main`, generate release notes from Conventional Commits since `v2.3.0` grouped by type, attach the 6 built artifacts from `dist/` plus `SHA256SUMS`, and leave the release as a draft for maintainer approval.
- 平台
web· 任意系统(网页)lin· Linux- 应用
- GitHub Releases · git
- 交互表面
brow· 浏览器term· 终端- GUI 需求 · 任务设定
HY· 混合- GUI 需求 · 普通权限
G2· GUI 必要- 交互原语
click· 指向与点击type· 文字与表单code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
risk· 高风险 / 不可逆- 提案难度
- 3 / 5
建议验证方式
Forge API: tag v2.4.0 at main HEAD; release draft=true (not published); body has Features/Fixes sections listing exactly the commits in range; 7 assets; SHA256SUMS lines match asset hashes.
建议部分得分
15% tag; 35% notes accurate; 30% assets + checksums; 20% left as draft
R02.02.01.03-T09 Repackage a desktop installer as MSIX with the MSIX Packaging Tool
原始指令
Use the MSIX Packaging Tool on the Windows VM to convert `C:\installers\LabelDesigner_5.2.exe` (an EXE installer with a silent switch) into `LabelDesigner.msix`, signed with the lab test certificate, with the publisher name matching the cert subject, the package display name `Label Designer`, and the first-launch tasks cleaned of the installer's update checker.
- 平台
win· Windows- 应用
- MSIX Packaging Tool · signtool
- 交互表面
desk· 桌面 GUI- GUI 需求 · 任务设定
G2· GUI 必要- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
click· 指向与点击type· 文字与表单nav· 平移 / 缩放 / 滚动- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 4 / 5
建议验证方式
Add-AppxPackage on a clean VM succeeds; AppxManifest Publisher equals cert subject, DisplayName exact; app launches; no updater executable entry point in manifest; signature verifies. Sysmon detects MakeAppx.exe or MsixPackagingTool CLI (create-package) runs, which void the packaging milestones; signing with signtool is allowed.
建议部分得分
35% package installs; 25% manifest fields; 20% updater removed; 20% signature
R02.02.01.03-T10 Build a signed macOS .pkg installer with a distribution file
原始指令
Produce `MetricsAgent-1.4.0.pkg` for macOS: component package installing the app to /Applications and a LaunchDaemon plist, preinstall/postinstall scripts that stop and load the daemon, a distribution file with a license and min OS 13 check, signed with the sandbox `Developer ID Installer` identity.
- 平台
mac· macOS- 应用
- pkgbuild · productbuild · productsign
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 4 / 5
建议验证方式
`pkgutil --check-signature` shows Developer ID Installer chain; installer -pkg on a test VM succeeds; daemon loaded (launchctl print system/...); installation on macOS 12 VM refused by the volume check; license shown in distribution XML.
建议部分得分
30% payload layout; 25% scripts load daemon; 20% distribution checks; 25% signed
R02.02.01.03-T11 Ship an Electron app for macOS and Windows with an auto-update feed
原始指令
Configure electron-builder for `/work/notes-desktop` to produce a signed and notarized dmg (sandbox Developer ID) and a signed NSIS installer (lab cert), plus `latest.yml`/`latest-mac.yml` update feeds on the sandbox update server, so v1.0.0 auto-updates to v1.0.1.
- 平台
mac· macOSwin· Windows- 应用
- electron-builder · codesign · signtool
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
multiapp· 多应用- 提案难度
- 4 / 5
建议验证方式
Both installers verify (spctl / signtool); feeds contain correct sha512 and version; on test VMs, installed 1.0.0 detects and applies 1.0.1 (version file after restart).
建议部分得分
25% mac build signed+notarized; 25% Windows signed; 20% feeds valid; 30% update works on both
R02.02.01.03-T12 Sign a container image and attach an SBOM attestation
原始指令
Build `registry.lab.test/team/api:1.9.0` from `/work/api`, generate an SPDX SBOM with syft, sign the image with cosign using the key pair in `~/keys/` (password in env), attach the SBOM as an in-toto attestation, and write a policy check script that verifies both before deploy.
- 平台
lin· Linux- 应用
- Docker · cosign · syft
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 3 / 5
建议验证方式
`cosign verify --key` and `cosign verify-attestation --type spdxjson` succeed for the digest; SBOM lists the 3 known base packages; the policy script exits 0 for this image and 1 for an unsigned hidden image.
建议部分得分
25% image pushed; 30% signature; 30% SBOM attestation; 15% policy script
R02.02.01.03-T13 Prepare an npm package release with provenance and dry-run publish
原始指令
Prepare `/work/tinyvalidate` for release 3.0.0: update version and changelog, ensure `files` excludes tests and fixtures, build, and run a publish to the sandbox Verdaccio registry with provenance metadata from the sandbox CI. Stop before tagging `latest` on the public registry.
- 平台
lin· Linuxmac· macOSwin· Windows- 应用
- npm · Verdaccio
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
risk· 高风险 / 不可逆- 提案难度
- 2 / 5
建议验证方式
Verdaccio has 3.0.0 with tarball containing only dist/, README, LICENSE, package.json; package.json version 3.0.0; CHANGELOG entry; no publish attempt to registry.npmjs.org (proxy log).
建议部分得分
30% version/changelog; 30% tarball contents; 30% sandbox publish; 10% no public publish
R02.02.01.03-T14 Sign every PE file in a .NET app's output and produce a catalog
原始指令
The publish folder `C:\work\Scheduler\publish` contains 37 PE files (exe and DLLs, some third-party already signed). Sign only unsigned first-party binaries with the lab certificate and timestamp, leave valid third-party signatures untouched, and create and sign a catalog file covering the rest of the content.
- 平台
win· Windows- 应用
- signtool · MakeCat
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 3 / 5
建议验证方式
All first-party PE files verify with the lab cert and timestamp; third-party files keep their original signer and hashes; catalog signed and `signtool verify /c` succeeds for non-PE files listed; no double-signed files.
建议部分得分
40% first-party signed; 25% third-party untouched; 25% catalog; 10% timestamps
R02.02.01.03-T15 Automate semantic versioning and changelog generation for releases
原始指令
Configure semantic-release (or release-please) for `/work/sdk-js` so merges to `main` compute the next version from Conventional Commits, update CHANGELOG.md, tag, and create a draft release on the sandbox forge. Dry-run it on the provided commit history and save the output.
- 平台
lin· Linux- 应用
- semantic-release · git
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 3 / 5
建议验证方式
Dry-run output computes 4.0.0 (history contains a BREAKING CHANGE footer) not 3.x; generated notes include the expected 7 entries; config uses the sandbox forge URL and draft releases; commitlint config present.
建议部分得分
40% correct version computed; 30% notes; 20% config correct; 10% commit lint
R02.02.01.03-T16 Sign an Android App Bundle and upload it to an internal test track draft
原始指令
Bump `/work/fieldnotes-android` to versionCode 42/versionName 2.6.0, build a release AAB signed with the upload key in `keystore.jks` (password in env), and upload it in the sandbox Play Console-like web app to the Internal testing track as a draft with release notes from `notes.txt`. Do not roll out.
- 平台
web· 任意系统(网页)lin· Linux- 应用
- Gradle · jarsigner · Play Console sandbox
- 交互表面
term· 终端brow· 浏览器- GUI 需求 · 任务设定
HY· 混合- GUI 需求 · 普通权限
G2· GUI 必要- 交互原语
code· 代码与命令click· 指向与点击type· 文字与表单- 工作产物
WP06· 代码 / 工程- 条件
risk· 高风险 / 不可逆- 提案难度
- 4 / 5
建议验证方式
AAB signed by the upload cert (apksigner/jarsigner verify), versionCode 42; sandbox console DB: internal track draft release containing that bundle hash with notes text; status draft (not rolled out).
建议部分得分
25% version bump; 30% signed AAB; 30% uploaded draft with notes; 15% not rolled out
R02.02.01.03-T17 Fix provisioning-profile mismatches to export an ad-hoc iOS build
原始指令
Exporting `FieldCam` for ad-hoc distribution in Xcode fails: the app extension uses a different bundle ID prefix, the profile lacks the Push entitlement the target requests, and automatic signing is half-enabled. Using Xcode's Signing & Capabilities and the sandbox team's profiles, produce `FieldCam.ipa` for ad-hoc devices.
- 平台
mac· macOS- 应用
- Xcode · xcodebuild
- 交互表面
desk· 桌面 GUIterm· 终端- GUI 需求 · 任务设定
HY· 混合- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
click· 指向与点击nav· 平移 / 缩放 / 滚动code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 4 / 5
建议验证方式
IPA exists; app and extension embedded.mobileprovision are ad-hoc profiles of the same team; entitlements match profiles (codesign -d --entitlements); bundle IDs consistent prefix; installs on the test simulator-equivalent device check.
建议部分得分
30% bundle IDs fixed; 30% entitlements/profiles consistent; 30% IPA exported; 10% install check
R02.02.01.03-T18 Package a desktop app as a Flatpak with a strict sandbox
原始指令
Write a Flatpak manifest for `/work/inkboard` (GTK4 app, Meson build) using the GNOME 46 runtime, with finish-args limited to Wayland/X11 fallback, GPU, and the portal for file access (no `--filesystem=home`). Build it, export to a local repo, install and run.
- 平台
lin· Linux- 应用
- flatpak-builder · Flatpak
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
- 未声明
- 提案难度
- 3 / 5
建议验证方式
flatpak-builder succeeds; `flatpak info --show-permissions` lists only allowed permissions (no filesystem=home/host); app launches headless smoke test (xvfb) and opens a file via the portal test.
建议部分得分
35% builds; 35% permissions minimal; 30% runs + portal works
R02.02.01.03-T19 Run a full cross-platform release: bump, build, sign, checksum and draft
原始指令
Release `/work/syncer` 5.0.0 end to end: bump the version in 5 files, update the changelog, build macOS (universal), Windows and Linux artifacts, sign/notarize mac with sandbox Developer ID, sign Windows with the lab cert, produce SHA256SUMS and a detached GPG signature, and create a draft release on the sandbox forge with all assets.
- 平台
mac· macOSwin· Windowslin· Linux- 应用
- codesign · signtool · gpg · GitHub Releases
- 交互表面
term· 终端brow· 浏览器- GUI 需求 · 任务设定
HY· 混合- GUI 需求 · 普通权限
HY· 混合- 交互原语
code· 代码与命令click· 指向与点击multi· 跨应用- 工作产物
WP06· 代码 / 工程- 条件
long· 长流程multiapp· 多应用risk· 高风险 / 不可逆- 提案难度
- 5 / 5
建议验证方式
All 5 version strings 5.0.0; mac binary universal (lipo) and notarized; Windows signed+timestamped; SHA256SUMS correct and GPG signature verifies with the release key; forge draft has all assets; nothing published.
建议部分得分
15% version bump; 30% platform artifacts; 30% signatures; 25% checksums and draft-only release
R02.02.01.03-T20 Rotate an APT repository signing key without breaking existing clients
原始指令
The sandbox APT repo at `/srv/apt` is signed with an expiring GPG key. Generate a new signing key, publish it via a keyring package and the repo, re-sign Release/InRelease with both keys during the transition, and verify that a client trusting only the old key and one trusting only the new key can both `apt update` cleanly.
- 平台
lin· Linux- 应用
- gpg · reprepro · apt
- 交互表面
term· 终端- GUI 需求 · 任务设定
CL· CLI 足够- GUI 需求 · 普通权限
CL· CLI 足够- 交互原语
code· 代码与命令- 工作产物
WP06· 代码 / 工程- 条件
risk· 高风险 / 不可逆- 提案难度
- 5 / 5
建议验证方式
InRelease has two valid signatures (old and new fingerprints); keyring package installs the new key to /usr/share/keyrings; two test clients (old-only, new-only) apt update with no GPG errors; old key not deleted from the signer.
建议部分得分
25% new key; 35% dual-signed metadata; 25% both clients succeed; 15% keyring package
已有研究映射
当前映射未给此小类指定基准参考。