Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
ce66f8a
fix: single-own firmware runtime services
RobVanProd Jul 13, 2026
2425a58
docs: record corrected 8-hour soak pass
RobVanProd Jul 13, 2026
a154ac7
release: gate all-platform companion packages
RobVanProd Jul 13, 2026
2a3f79f
docs: add Android upload key runbook
RobVanProd Jul 13, 2026
f7b8fe6
release: verify managed runtime inside native installers
RobVanProd Jul 13, 2026
f469cd4
ci: make companion native rehearsal reproducible
RobVanProd Jul 13, 2026
bf8d0f8
release: bind Android emulator evidence to APK
RobVanProd Jul 13, 2026
778abd2
release: prove desktop runtime launches from native package
RobVanProd Jul 14, 2026
9eb1f81
release: require desktop target install evidence
RobVanProd Jul 14, 2026
75fe4cb
release: bind promotion to companion v1 evidence
RobVanProd Jul 14, 2026
3faec3e
test: lock companion promotion packet command
RobVanProd Jul 14, 2026
8991607
test: make companion evidence contracts cross-platform
RobVanProd Jul 14, 2026
58846ef
test: normalize companion contract success exits
RobVanProd Jul 14, 2026
1828769
desktop: restore packaged runtime execute bit
RobVanProd Jul 14, 2026
c03e592
test: normalize portable evidence checker exits
RobVanProd Jul 14, 2026
3297d49
test: report sanitized signing failure detail
RobVanProd Jul 14, 2026
956c7f2
fix: validate Android upload RSA size on Linux
RobVanProd Jul 14, 2026
678130b
fix: materialize Unix Python runtime symlinks
RobVanProd Jul 14, 2026
b427066
test: report desktop runtime content differences
RobVanProd Jul 14, 2026
d96e96c
fix: verify macOS signed runtime identity
RobVanProd Jul 14, 2026
fcef68f
fix: compare signed Mach-O runtime content
RobVanProd Jul 14, 2026
a6fdac2
test: report signed Mach-O byte differences
RobVanProd Jul 14, 2026
b9f30b3
fix: normalize Mach-O signature envelope sizes
RobVanProd Jul 14, 2026
8cddfef
fix: materialize Mach-O proof arrays portably
RobVanProd Jul 14, 2026
200382f
fix: require installer Mach-O signatures
RobVanProd Jul 14, 2026
30fd866
ci: bound Android emulator device wait
RobVanProd Jul 14, 2026
d389307
ci: share Android AVD home explicitly
RobVanProd Jul 14, 2026
8093d2d
release: close native runtime payload gate
RobVanProd Jul 14, 2026
d942fa8
fix: verify long release paths on Windows
RobVanProd Jul 14, 2026
69763d3
release: add companion privacy policy surface
RobVanProd Jul 14, 2026
afbebbd
docs: align hosted privacy policy wording
RobVanProd Jul 14, 2026
4dc053d
release: verify hosted privacy policy
RobVanProd Jul 14, 2026
efa15f5
fix: validate privacy timestamps cross-platform
RobVanProd Jul 14, 2026
29c9490
fix: return success from privacy contract
RobVanProd Jul 14, 2026
2c50de3
release: require desktop signing and provenance
RobVanProd Jul 14, 2026
e4622bf
fix: scope companion evidence blockers
RobVanProd Jul 14, 2026
609d1f3
release: add desktop signing credential preflight
RobVanProd Jul 14, 2026
e81cbef
fix: size signing keys across crypto providers
RobVanProd Jul 14, 2026
95b30ee
fix: return success from signing contract
RobVanProd Jul 14, 2026
732bfe4
release: validate all-platform signing credentials
RobVanProd Jul 14, 2026
7f47fd0
docs: enforce corrected eight-hour release evidence
RobVanProd Jul 14, 2026
d68d10d
release: guard private signing credentials
RobVanProd Jul 14, 2026
a759897
ci: bind companion artifacts to branch head
RobVanProd Jul 14, 2026
6658997
test: normalize candidate rejection output
RobVanProd Jul 14, 2026
1e672c1
fix: hash long companion artifact paths
RobVanProd Jul 14, 2026
d5a7108
ci: upgrade Gradle action runtime
RobVanProd Jul 14, 2026
9d6ddc2
fix: prove exact Windows MSI replacement
RobVanProd Jul 14, 2026
b1d7fc4
test: align desktop bundle install fixture
RobVanProd Jul 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions .github/workflows/companion-signing-readiness.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Companion Signing Readiness

on:
workflow_dispatch:

permissions:
contents: read

jobs:
android-upload-key:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: "21"

- name: Validate Android upload signing credentials
shell: pwsh
env:
STACKCHAN_ANDROID_KEYSTORE_B64: ${{ secrets.STACKCHAN_ANDROID_KEYSTORE_B64 }}
STACKCHAN_ANDROID_KEYSTORE_PASSWORD: ${{ secrets.STACKCHAN_ANDROID_KEYSTORE_PASSWORD }}
STACKCHAN_ANDROID_KEY_ALIAS: ${{ secrets.STACKCHAN_ANDROID_KEY_ALIAS }}
STACKCHAN_ANDROID_KEY_PASSWORD: ${{ secrets.STACKCHAN_ANDROID_KEY_PASSWORD }}
run: |
$required = @(
"STACKCHAN_ANDROID_KEYSTORE_B64",
"STACKCHAN_ANDROID_KEYSTORE_PASSWORD",
"STACKCHAN_ANDROID_KEY_ALIAS",
"STACKCHAN_ANDROID_KEY_PASSWORD"
)
foreach ($name in $required) {
if ([string]::IsNullOrWhiteSpace([Environment]::GetEnvironmentVariable($name))) {
throw "$name is required for Android upload signing readiness."
}
}

$keystorePath = Join-Path $env:RUNNER_TEMP "stackchan-companion-upload-readiness.jks"
$keystoreBytes = $null
try {
try {
$keystoreBytes = [Convert]::FromBase64String($env:STACKCHAN_ANDROID_KEYSTORE_B64)
} catch {
throw "STACKCHAN_ANDROID_KEYSTORE_B64 is not valid base64."
}
if ($keystoreBytes.Length -eq 0) {
throw "STACKCHAN_ANDROID_KEYSTORE_B64 decoded to an empty keystore."
}
[IO.File]::WriteAllBytes($keystorePath, $keystoreBytes)
$env:STACKCHAN_ANDROID_KEYSTORE = $keystorePath
./tools/check_android_play_release_readiness.ps1 -RequireUploadSigning -Json
} finally {
if ($null -ne $keystoreBytes) {
[Array]::Clear($keystoreBytes, 0, $keystoreBytes.Length)
}
Remove-Item -LiteralPath $keystorePath -Force -ErrorAction SilentlyContinue
}

windows-authenticode:
runs-on: windows-latest
steps:
- uses: actions/checkout@v7

- name: Validate Windows Authenticode credentials
shell: pwsh
env:
STACKCHAN_WINDOWS_PFX_B64: ${{ secrets.STACKCHAN_WINDOWS_PFX_B64 }}
STACKCHAN_WINDOWS_PFX_PASSWORD: ${{ secrets.STACKCHAN_WINDOWS_PFX_PASSWORD }}
run: |
./tools/check_desktop_release_signing_readiness.ps1 `
-Platform windows `
-RequireReady `
-RequireNativeToolchain `
-Json

macos-developer-id:
runs-on: macos-latest
steps:
- uses: actions/checkout@v7

- name: Validate Developer ID and notarization credentials
shell: pwsh
env:
STACKCHAN_MACOS_CERTIFICATE_B64: ${{ secrets.STACKCHAN_MACOS_CERTIFICATE_B64 }}
STACKCHAN_MACOS_CERTIFICATE_PASSWORD: ${{ secrets.STACKCHAN_MACOS_CERTIFICATE_PASSWORD }}
STACKCHAN_MACOS_SIGNING_IDENTITY: ${{ secrets.STACKCHAN_MACOS_SIGNING_IDENTITY }}
STACKCHAN_MACOS_NOTARIZATION_APPLE_ID: ${{ secrets.STACKCHAN_MACOS_NOTARIZATION_APPLE_ID }}
STACKCHAN_MACOS_NOTARIZATION_PASSWORD: ${{ secrets.STACKCHAN_MACOS_NOTARIZATION_PASSWORD }}
STACKCHAN_MACOS_NOTARIZATION_TEAM_ID: ${{ secrets.STACKCHAN_MACOS_NOTARIZATION_TEAM_ID }}
run: |
./tools/check_desktop_release_signing_readiness.ps1 `
-Platform macos `
-RequireReady `
-RequireNativeToolchain `
-ValidateAppleNotaryCredentials `
-Json
Loading
Loading