Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
e42f1e5
Explain why one session cost what it did (CLI + app session view) (#1…
iamtoruk Oct 6, 2026
ad242b3
test: wait for the lifetime phase before the dashboard exit checks (#…
iamtoruk Oct 6, 2026
756511e
fix(copilot): count agent-host requests and their output (#1651)
iamtoruk Oct 6, 2026
1a7284c
fix(copilot): count store-row output for unclosed sessions, price gro…
iamtoruk Oct 6, 2026
574a6af
fix(pricing): take the maker's price for bare model ids (#1653)
iamtoruk Oct 6, 2026
2444afb
fix(cursor): stop counting billed CLI sessions twice, mark guessed-mo…
iamtoruk Oct 6, 2026
253c9fe
fix(antigravity): count cache reads and price the standalone app's mo…
iamtoruk Oct 6, 2026
bbb3c5a
fix(pricing): price Mistral Large 4 at its preview rate until LiteLLM…
iamtoruk Oct 6, 2026
e22664e
Restore usage from Mistral Vibe Unified Harness sessions (#1599)
ozymandiashh Oct 6, 2026
b2be8eb
feat: mark estimated dollars the same way in every view (#1657)
iamtoruk Oct 6, 2026
063e427
feat(providers): add Command Code (#1658)
iamtoruk Oct 6, 2026
d093545
chore(deps-dev): bump source-map-js from 1.2.1 to 1.2.2 in /app (#1666)
dependabot[bot] Oct 7, 2026
09cb6f7
chore(deps-dev): bump js-yaml from 4.3.0 to 4.3.2 in /app (#1633)
dependabot[bot] Oct 7, 2026
1566af2
chore(deps): bump proxy-addr from 2.0.7 to 2.0.8 (#1665)
dependabot[bot] Oct 7, 2026
0975713
chore(deps): bump @modelcontextprotocol/sdk from 1.30.1 to 1.31.0 (#1…
dependabot[bot] Oct 7, 2026
30dc330
chore(deps): bump source-map-js from 1.2.1 to 1.2.2 in /dash (#1662)
dependabot[bot] Oct 7, 2026
41e8923
chore(deps): bump postcss from 8.5.15 to 8.5.29 in /dash (#1632)
dependabot[bot] Oct 7, 2026
9938fa1
chore(deps-dev): bump browserslist from 4.28.2 to 4.29.3 in /dash (#1…
dependabot[bot] Oct 7, 2026
36b8a67
chore(deps): bump source-map-js from 1.2.1 to 1.2.2 in /windows (#1661)
dependabot[bot] Oct 7, 2026
62b17fd
chore(deps-dev): bump joi from 18.2.3 to 18.2.9 in /app (#1668)
dependabot[bot] Oct 7, 2026
81e2eb1
chore(deps): bump rustls from 0.23.38 to 0.23.45 in /windows/src-taur…
dependabot[bot] Oct 7, 2026
a3dab28
chore(deps): bump source-map-js from 1.2.1 to 1.2.2 (#1660)
dependabot[bot] Oct 7, 2026
2c8d4ae
Fix Antigravity 2.16 quota decoding in CLI and desktop (#1667)
ozymandiashh Oct 7, 2026
f3f6c4c
feat: CodeBurn for VS Code (#1670)
iamtoruk Oct 7, 2026
ec2822a
feat(windows): localize the Windows tray into Simplified Chinese (#1608)
mvanhorn Oct 7, 2026
c87d299
fix(claude): discover macOS Claude-3p Cowork sessions (#1579)
akapti Oct 7, 2026
d4933ed
fix(devin): price SWE-2 at Cognition's list rate (#1674)
iamtoruk Oct 7, 2026
6639437
feat(mistral-vibe): scan WSL homes for sessions (#1681)
iamtoruk Oct 7, 2026
39b9b3a
feat(quota): Command Code quota and ClinePass from the Cline sign-in …
iamtoruk Oct 7, 2026
4332b17
feat: Google AI plan presets and the Antigravity tier label (#1683)
iamtoruk Oct 7, 2026
d049b38
fix(cline-cli): stop billing cache tokens twice (#1675)
iamtoruk Oct 7, 2026
c826f1a
fix(models): price kimi-for-coding by the model it served on the call…
iamtoruk Oct 7, 2026
3c18649
fix(grok): read per-request usage from logs/unified.jsonl (#1677)
iamtoruk Oct 7, 2026
1284290
fix(codex): mask fork replay records against the parent rollout (#1678)
iamtoruk Oct 7, 2026
01705cf
fix: key the daily project split per real path, not per label (#1679)
iamtoruk Oct 7, 2026
75d557e
feat(app): transient project selector in the desktop top bar (#1680)
iamtoruk Oct 7, 2026
5e3308e
feat(menubar): sign and notarize in CI, pin updates to our team, fixe…
iamtoruk Oct 8, 2026
fce75d5
feat(app,windows): one-click updates for the desktop app and the Wind…
iamtoruk Oct 8, 2026
687ca2f
fix(kimicode): use state.json cwd when workDir is absent (#1688)
iamtoruk Oct 8, 2026
1192816
docs: note the Claude Code usage CodeBurn cannot see in transcripts (…
iamtoruk Oct 8, 2026
d3fecff
feat(sessions): fold subagent sessions into their parent row (#1690)
iamtoruk Oct 8, 2026
d49a6a4
fix(claude): attribute each call to the project of its own cwd (#1689)
iamtoruk Oct 8, 2026
bc62059
feat: group projects by git repository (#1691)
iamtoruk Oct 8, 2026
8fb4789
feat: group a deleted sibling clone with its repository by folder nam…
iamtoruk Oct 8, 2026
f63fd96
fix: fold subagents into top sessions (#1694)
iamtoruk Oct 8, 2026
eb51aba
feat: project links put a folder in a repo project (#1695)
iamtoruk Oct 8, 2026
b875d9c
fix: one timezone per daily cache, re-derive settling days on seal (#…
iamtoruk Oct 8, 2026
9d9ac21
chore: refresh bundled LiteLLM price snapshot (#1697)
iamtoruk Oct 8, 2026
1fba972
fix: Cursor import clears covered days on a new build's first run (#1…
iamtoruk Oct 8, 2026
3c42399
chore: update vulnerable transitive dependencies (#1699)
iamtoruk Oct 8, 2026
1bb697b
fix: tell a missing bundled CLI from a refused or failed stat (#1700)
iamtoruk Oct 8, 2026
a0e66e3
fix: desktop not-found panel gives app advice, not npm (#1701)
iamtoruk Oct 9, 2026
b876a31
feat: telemetry for CLI error causes, provider read failures and upda…
iamtoruk Oct 9, 2026
a01bf87
feat(codex): show thread names from session_index.jsonl (#1687)
ozymandiashh Oct 9, 2026
83a18e1
fix: make npm run dev work on Windows (#1629)
uttamdeb Oct 9, 2026
c52457f
chore: remove stray dist-* build folders committed in #1689 and ignor…
iamtoruk Oct 10, 2026
f5906a0
fix(copilot): price JetBrains claude-opus-4.7 as Opus 4.7 (#1705)
iamtoruk Oct 10, 2026
7390810
fix(codex): count cache writes toward the long-context threshold, tie…
iamtoruk Oct 10, 2026
ae30d67
fix(projects): stop the git origin walk at the folder's own repo (#1707)
iamtoruk Oct 10, 2026
18c4d40
fix(projects): take project row money from the day set only (#1708)
iamtoruk Oct 10, 2026
5253b89
fix(cache): keep midnight-straddling turns whole on the settle reseal…
iamtoruk Oct 10, 2026
ef58a17
fix(cache): keep history exact when a cache upgrade meets a timezone …
iamtoruk Oct 10, 2026
b62e4a3
fix(cache): drop stale cursor-agent slices on days a Cursor import co…
iamtoruk Oct 10, 2026
039a4e4
fix(overview): group thousands in the integer part of costs only (#1714)
iamtoruk Oct 10, 2026
514ef70
fix(currency): show USD instead of a foreign symbol when no FX rate i…
iamtoruk Oct 10, 2026
4af19b7
fix(pricing): apply Anthropic long-context tiers to Claude calls (#1716)
iamtoruk Oct 10, 2026
ed3c3f4
fix(cursor): parse the full lookback regardless of the requested rang…
iamtoruk Oct 10, 2026
89bc459
fix(cursor-agent): leave Cursor IDE chat transcripts to the cursor pr…
iamtoruk Oct 10, 2026
aa85ed2
fix(optimize): stop flagging delivered and editing sessions as low-wo…
iamtoruk Oct 10, 2026
9565118
fix(optimize): price deferred MCP tools as name lines, once per call …
iamtoruk Oct 10, 2026
c2cfbd1
fix(compare): never request a model pair the current period does not …
iamtoruk Oct 10, 2026
389c14c
fix(ui): mark estimated headline totals with ~ on every hero (#1722)
iamtoruk Oct 10, 2026
ddacfcb
fix(plans): word flat subscriptions past their price as API value (#1…
iamtoruk Oct 10, 2026
02dff28
perf(codex): resolve fork parents once on the main thread (#1725)
iamtoruk Oct 10, 2026
e7c67a6
perf(devin): read only the metadata fields the parser uses (#1726)
iamtoruk Oct 10, 2026
6f4c3f7
perf(models): memoize short display names by model id (#1727)
iamtoruk Oct 10, 2026
247957f
perf(cursor): stop JSON and menubar answers waiting on cursor.com (#1…
iamtoruk Oct 10, 2026
26c99ed
fix(antigravity): fall back to the chat model and map Gemini 3.8 Flas…
dcaldr Oct 10, 2026
da5311a
ci(mac): make the signed menubar and desktop workflows import the Dev…
iamtoruk Oct 10, 2026
4877345
feat(pr): attribute PR work honestly and show one shot, review runs a…
iamtoruk Oct 10, 2026
4c779ef
fix(commandcode): show the monthly window (#1734)
iamtoruk Oct 10, 2026
ff7c40e
fix(menubar): check a provider when its settings open, keep the dock …
iamtoruk Oct 10, 2026
6ddd8b6
fix(quota): say when Cline's saved login expired and how to renew it …
iamtoruk Oct 10, 2026
ec24de6
fix(pr): charge pushed branches to their PR and show every PR's detai…
iamtoruk Oct 10, 2026
c1457e4
chore: release 0.9.26 (#1732)
iamtoruk Oct 10, 2026
a2f44fc
chore: Flathub hash for desktop-v0.9.26 (#1738)
iamtoruk Oct 10, 2026
08b06ae
chore(vscode): release extension 1.0.1 with CLI 0.9.26 (#1739)
iamtoruk Oct 10, 2026
7431a34
test(cursor-sync): use a week window so the test passes at any hour (…
iamtoruk Oct 11, 2026
679d2f7
feat(update): one codeburn update command for CLI, menu bar and deskt…
iamtoruk Oct 11, 2026
290d1c7
feat(update): desktop updates its companions and itself in one click …
iamtoruk Oct 11, 2026
517058c
feat(update): menubar pill checks and updates through the engine (#1742)
iamtoruk Oct 11, 2026
4c1d524
feat(update): Windows tray updates the CLI through the engine (#1743)
iamtoruk Oct 11, 2026
666a690
fix(menubar): read the download whole so Electron's Node cannot crash…
iamtoruk Oct 11, 2026
7ecc87f
chore: release 0.9.27 (#1746)
iamtoruk Oct 11, 2026
bde62e3
chore: Flathub hash for desktop-v0.9.27 (#1747)
iamtoruk Oct 11, 2026
3af46cf
chore(vscode): release extension 1.0.2 with CLI 0.9.27 (#1748)
iamtoruk Oct 11, 2026
3ebcfb1
fix: say the desktop update restarts on its own, and that a multi-PR …
iamtoruk Oct 11, 2026
354492e
Copilot: count every agent round and bill exact credits in VS Code ch…
iamtoruk Oct 12, 2026
9a40cc6
Windows tray: fall back past a broken managed CLI to Volta and PATH i…
iamtoruk Oct 13, 2026
0c9068b
feat(menubar): translate the tray popover, settings and Capacity Dock
shanhe0814 Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
132 changes: 132 additions & 0 deletions .github/workflows/build-desktop-mac.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: Build macOS desktop

# Builds, signs and notarizes the desktop app for arm64 and x64 in one electron-builder run,
# so a single latest-mac.yml lists both zips. Read-only like the Windows installer workflow:
# the release owner uploads the artifact to the desktop-v* release by hand.
on:
push:
tags:
- 'desktop-v*'
workflow_dispatch:

permissions:
contents: read

jobs:
mac:
runs-on: macos-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@v6

- uses: actions/setup-node@v6
with:
node-version: 22.13.0
cache: npm
cache-dependency-path: |
package-lock.json
app/package-lock.json

- name: Check tag matches the app version
if: github.ref_type == 'tag'
run: test "desktop-v$(node -p "require('./app/package.json').version")" = "$GITHUB_REF_NAME"

- name: Install dependencies
run: |
npm ci
npm ci --prefix app

- name: Check secrets and write notary key
env:
MACOS_CERT_P12_BASE64: ${{ secrets.MACOS_CERT_P12_BASE64 }}
MACOS_CERT_PASSWORD: ${{ secrets.MACOS_CERT_PASSWORD }}
APPSTORE_API_KEY_P8_BASE64: ${{ secrets.APPSTORE_API_KEY_P8_BASE64 }}
APPSTORE_API_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}
APPSTORE_API_ISSUER_ID: ${{ secrets.APPSTORE_API_ISSUER_ID }}
run: |
for name in MACOS_CERT_P12_BASE64 MACOS_CERT_PASSWORD APPSTORE_API_KEY_P8_BASE64 APPSTORE_API_KEY_ID APPSTORE_API_ISSUER_ID; do
if [ -z "${!name}" ]; then echo "::error::secret $name is not set"; exit 1; fi
done
echo "$APPSTORE_API_KEY_P8_BASE64" | base64 --decode > "$RUNNER_TEMP/notary.p8"
# Keychain Access exports a legacy p12 (RC2-40, sha1 MAC, 1 iteration) that the
# runner's `security import` rejects as a wrong password; rewrap it in a form it reads.
# electron-builder's own temporary keychain fails to unlock on this runner, so import
# into our keychain (as release-menubar.yml does) and let it find the identity there.
umask 077
openssl3="$(brew --prefix openssl@3)/bin/openssl"
cert="$RUNNER_TEMP/signing.p12"
keychain="$RUNNER_TEMP/codeburn-signing.keychain-db"
base64 --decode <<< "$MACOS_CERT_P12_BASE64" > "$cert.in"
"$openssl3" pkcs12 -legacy -in "$cert.in" -passin env:MACOS_CERT_PASSWORD -nodes -out "$cert.pem"
export cert_password="$(openssl rand -hex 24)"
echo "::add-mask::$cert_password"
"$openssl3" pkcs12 -export -legacy -in "$cert.pem" -out "$cert" -passout env:cert_password \
-keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -macalg sha1 -iter 2048
rm -f "$cert.in" "$cert.pem"
keychain_password="$(openssl rand -hex 24)"
echo "::add-mask::$keychain_password"
security create-keychain -p "$keychain_password" "$keychain"
security set-keychain-settings -lut 21600 "$keychain"
security unlock-keychain -p "$keychain_password" "$keychain"
security import "$cert" -k "$keychain" -P "$cert_password" -f pkcs12 -T /usr/bin/codesign -T /usr/bin/security
rm -f "$cert"
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$keychain_password" "$keychain" > /dev/null
# shellcheck disable=SC2046
security list-keychains -d user -s "$keychain" $(security list-keychains -d user | tr -d '"')
security find-identity -v -p codesigning "$keychain" | grep -q 'Developer ID Application: .*(XRVP7P7F9M)' \
|| { echo "::error::No Developer ID Application identity for team XRVP7P7F9M in MACOS_CERT_P12_BASE64."; exit 1; }

- name: Build, sign and notarize
working-directory: app
env:
APPLE_API_KEY: ${{ runner.temp }}/notary.p8
APPLE_API_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}
APPLE_API_ISSUER: ${{ secrets.APPSTORE_API_ISSUER_ID }}
run: |
npm run stage-cli
npm run build
CSC_IDENTITY_AUTO_DISCOVERY=true npx electron-builder --mac --publish never \
-c.mac.identity="Resham Joshi (XRVP7P7F9M)" \
-c.mac.hardenedRuntime=true \
-c.dmg.sign=true

- name: Notarize and staple the dmgs
working-directory: app/release
env:
APPLE_API_KEY_ID: ${{ secrets.APPSTORE_API_KEY_ID }}
APPLE_API_ISSUER: ${{ secrets.APPSTORE_API_ISSUER_ID }}
run: |
for dmg in CodeBurn-*.dmg; do
xcrun notarytool submit "$dmg" --key "$RUNNER_TEMP/notary.p8" --key-id "$APPLE_API_KEY_ID" --issuer "$APPLE_API_ISSUER" --wait
xcrun stapler staple "$dmg"
done

- name: Verify signatures
working-directory: app/release
run: |
for app in mac-arm64/CodeBurn.app mac/CodeBurn.app; do
codesign --verify --deep --strict "$app"
spctl --assess --type execute --verbose "$app"
done
for dmg in CodeBurn-*.dmg; do xcrun stapler validate "$dmg"; done
grep -Eq 'url: CodeBurn-[0-9.]+-arm64-mac\.zip' latest-mac.yml
grep -Eq 'url: CodeBurn-[0-9.]+-mac\.zip' latest-mac.yml

- name: Remove notary key
if: always()
run: |
rm -f "$RUNNER_TEMP/notary.p8"
security delete-keychain "$RUNNER_TEMP/codeburn-signing.keychain-db" 2>/dev/null || true

- name: Upload artifact
uses: actions/upload-artifact@v6
with:
name: CodeBurn-macOS
path: |
app/release/CodeBurn-*.dmg
app/release/CodeBurn-*.dmg.blockmap
app/release/CodeBurn-*-mac.zip
app/release/CodeBurn-*-mac.zip.blockmap
app/release/latest-mac.yml
if-no-files-found: error
retention-days: 30
38 changes: 37 additions & 1 deletion .github/workflows/build-windows-installer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,11 @@ jobs:
working-directory: windows
run: npm ci

# The staged tray MSI needs no updater signature: the tray updates from its own windows-v* line.
- name: Build tray app
working-directory: windows
run: npm run tauri build
shell: bash
run: npm run tauri build -- --no-sign

- name: Build NSIS installer
run: npm --prefix app run package:win
Expand All @@ -88,6 +90,7 @@ jobs:
path: |
app/release/CodeBurn-Setup-*.exe
app/release/CodeBurn-Setup-*.exe.blockmap
app/release/latest.yml
if-no-files-found: error
retention-days: 30

Expand All @@ -107,3 +110,36 @@ jobs:
node app/scripts/verify-windows-installer.mjs \
--tag "$RELEASE_TAG" \
--release-assets "$RUNNER_TEMP/release-assets.json"

# Last step of a desktop release: point the app's update feed at it. Runs only after the
# live-asset check passes, and refuses to move the feed backwards.
publish-update-feeds:
needs: verify-release-assets
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v6

- name: Publish desktop update feeds
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ github.event.release.tag_name || inputs.release_tag }}
run: |
set -euo pipefail
cd "$RUNNER_TEMP"
version="${RELEASE_TAG#desktop-v}"
gh api "repos/$GITHUB_REPOSITORY/releases/tags/$RELEASE_TAG" --jq '[.assets[].name]' > release-assets.json
gh release download "$RELEASE_TAG" -R "$GITHUB_REPOSITORY" -p 'latest*.yml'
node "$GITHUB_WORKSPACE/app/scripts/update-feed.mjs" --tag "$RELEASE_TAG" --release-assets release-assets.json latest*.yml
if gh release view update-feeds -R "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
current=$(gh release download update-feeds -R "$GITHUB_REPOSITORY" -p latest-mac.yml -O - 2>/dev/null | sed -n 's/^version: //p' || true)
if [ -n "$current" ] && [ "$(printf '%s\n%s\n' "$current" "$version" | sort -V | tail -1)" != "$version" ]; then
echo "::error::update-feeds already serves $current, newer than $version"
exit 1
fi
else
gh release create update-feeds -R "$GITHUB_REPOSITORY" --prerelease --latest=false \
--title "Update feeds" --notes "Update metadata for the apps. Not a release to download."
fi
gh release upload update-feeds -R "$GITHUB_REPOSITORY" latest*.yml --clobber
3 changes: 2 additions & 1 deletion .github/workflows/build-windows-store.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ jobs:

- name: Build tray app
working-directory: windows
run: npm run tauri build -- --no-bundle
shell: bash
run: npm run tauri build -- --no-bundle --no-sign

- name: Build Microsoft Store package
run: npm --prefix app run package:store
Expand Down
59 changes: 53 additions & 6 deletions .github/workflows/release-menubar-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ name: Release Windows Menubar

# Triggers on a `windows-v*` tag push (e.g. `git tag windows-v0.9.20 && git push origin
# windows-v0.9.20`), or manually via the Actions tab. Mirrors release-menubar.yml, which
# does the same job for the macOS menubar under the `mac-v*` tags. The produced `.msi` is
# unsigned; users see a SmartScreen prompt on first run until we add signing.
# does the same job for the macOS menubar under the `mac-v*` tags. The produced `.msi` has no
# Authenticode signature, so SmartScreen prompts on first run; the tray's one-click updater
# instead checks the minisign signature written into windows-latest.json on update-feeds.
on:
push:
tags:
Expand Down Expand Up @@ -54,9 +55,20 @@ jobs:
working-directory: windows
run: npm ci

# Without the updater key the MSI ships unsigned for the updater and the feed is left alone.
- name: Build MSI bundle
working-directory: windows
run: npm run tauri build
shell: bash
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
run: |
if [ -n "$TAURI_SIGNING_PRIVATE_KEY" ]; then
npm run tauri build
else
echo "::warning::TAURI_SIGNING_PRIVATE_KEY is not set; building without an updater signature"
npm run tauri build -- --no-sign
fi

- name: Collect artifacts
shell: bash
Expand Down Expand Up @@ -98,8 +110,43 @@ jobs:

This `.msi` is a developer preview. The recommended install is the Microsoft
Store (https://apps.microsoft.com/detail/9P0R4ZL5XMB8), which is signed and
updates itself. Preview builds do not update themselves: the tray app reports
that a newer version exists and links to the release, and you take it by
re-running `codeburn menubar --force` or downloading the new `.msi` here.
updates itself. Previews built with the updater key install newer previews from
the tray in one click, after checking their signature. Older previews link to the
release instead: take it by re-running `codeburn menubar --force` or downloading
the new `.msi` here.
files: release-artifacts/*
fail_on_unmatched_files: true

# Last: point the tray's updater at the release, once its MSI is live on it.
- name: Publish tray update feed
if: startsWith(github.ref, 'refs/tags/windows-v')
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
version="${GITHUB_REF_NAME#windows-v}"
msi="CodeBurn.Menubar_${version}_x64_en-US.msi"
gh release view "$GITHUB_REF_NAME" -R "$GITHUB_REPOSITORY" --json assets --jq '.assets[].name' | grep -Fqx "$msi"
sig=$(find windows/src-tauri/target/release/bundle/msi -name "*_${version}_x64_en-US.msi.sig" | head -1)
if [ -z "$sig" ]; then
echo "::warning::no updater signature for $msi; update-feeds/windows-latest.json not changed"
exit 0
fi
VERSION="$version" MSI="$msi" SIG="$sig" node -e '
const fs = require("fs")
const { VERSION, MSI, SIG } = process.env
fs.writeFileSync("windows-latest.json", JSON.stringify({
version: VERSION,
pub_date: new Date().toISOString(),
platforms: {
"windows-x86_64": {
signature: fs.readFileSync(SIG, "utf8").trim(),
url: `https://github.com/getagentseal/codeburn/releases/download/windows-v${VERSION}/${MSI}`,
},
},
}, null, 2))'
gh release view update-feeds -R "$GITHUB_REPOSITORY" >/dev/null 2>&1 || \
gh release create update-feeds -R "$GITHUB_REPOSITORY" --prerelease --latest=false \
--title "Update feeds" --notes "Update metadata for the apps. Not a release to download."
gh release upload update-feeds -R "$GITHUB_REPOSITORY" windows-latest.json --clobber
Loading
Loading