Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
6028243
Guard repository size
joeVenner Jul 3, 2026
72809b9
fix: correct Poe provider logo and brand color
garethpaul Jul 3, 2026
24c7c11
Reject nonfinite OpenCode usage values
joeVenner Jul 3, 2026
76d3c66
Bound OpenCode reset intervals
joeVenner Jul 3, 2026
cfb0ac5
Reject nonfinite OpenAI cost values
joeVenner Jul 3, 2026
3c10294
Merge remote-tracking branch 'origin/main' into codex/pr-1869
steipete Jul 4, 2026
a2ca935
fix: finalize nonfinite OpenAI cost guard
steipete Jul 4, 2026
94c340a
fix: sync app-side Poe brand color to Poe purple
garethpaul Jul 4, 2026
07c0920
Merge remote-tracking branch 'origin/main' into codex/pr-1858
steipete Jul 4, 2026
1f204c8
chore: harden repository size guard
steipete Jul 4, 2026
a9e47e7
Merge pull request #1869 from joeVenner/fix/openai-admin-nonfinite-cost
steipete Jul 4, 2026
0da6a1e
feat: add Galician localization
steipete Jul 4, 2026
826d5e4
Merge remote-tracking branch 'origin/main' into codex/pr-1872-galician
steipete Jul 4, 2026
d420ec7
Merge remote-tracking branch 'origin/main' into codex/pr-1868-poe
steipete Jul 4, 2026
5292b45
fix: finish Poe branding update
steipete Jul 4, 2026
4103631
Merge pull request #1858 from joeVenner/chore/repository-size-guard
steipete Jul 4, 2026
6a3007a
Merge remote-tracking branch 'origin/main' into codex/pr-1868-poe
steipete Jul 4, 2026
eb82e6e
Merge remote-tracking branch 'origin/main' into codex/pr-1872-galician
steipete Jul 4, 2026
a6e0860
Merge remote-tracking branch 'origin/main' into codex/pr-1866-opencode
steipete Jul 4, 2026
6a71978
test: strengthen OpenCode overflow proof
steipete Jul 4, 2026
781a3ff
Merge pull request #1868 from garethpaul/fix-poe-logo
steipete Jul 4, 2026
f9ee1f8
Merge pull request #1874 from steipete/codex/pr-1872-galician
steipete Jul 4, 2026
efb7839
feat: add ClawRouter usage provider
steipete Jul 4, 2026
c784296
Merge pull request #1866 from joeVenner/fix/opencode-nonfinite-reset
steipete Jul 4, 2026
1efb2da
fix: render ClawRouter CLI usage
steipete Jul 4, 2026
7e5ed1f
Merge remote-tracking branch 'origin/main' into codex/pr-1876-cli
steipete Jul 4, 2026
cec3d6d
Add Russian localization (#1860)
Kirchberg Jul 4, 2026
4c2ede0
Fix Gemini helper timeout reliability (#1873)
steipete Jul 4, 2026
b5b1a1a
Merge pull request #1876 from steipete/feat/clawrouter-provider
steipete Jul 4, 2026
2d077cd
docs: finalize 0.38.1 release
steipete Jul 4, 2026
9ce9be5
fix: load notarization credentials for releases
steipete Jul 4, 2026
b435e27
Fix Claude keychain prompt toggle (#1879)
steipete Jul 4, 2026
d88b670
Fix Claude keychain prompt safety tests (#1882)
steipete Jul 4, 2026
2fa61d0
Add Kimi monthly subscription usage (#1839)
zhiyue Jul 4, 2026
f84a171
docs: update appcast for 0.38.1
steipete Jul 4, 2026
f6732bd
fix: validate repository size from index blobs (#1875)
steipete Jul 4, 2026
bd50467
chore: merge latest main before release closeout
steipete Jul 4, 2026
143e087
fix: repair live Sparkle update verification
steipete Jul 4, 2026
93cb123
chore: start 0.38.2 development
steipete Jul 4, 2026
bc29d89
feat: add Mistral balance metrics
steipete Jul 4, 2026
97c0035
feat(sakana): surface pay-as-you-go credit balance (#1825)
ss251 Jul 4, 2026
c153164
docs: define provider presentation precedence
steipete Jul 1, 2026
c0e864d
docs: accept provider presentation design
steipete Jul 4, 2026
bc1bc1d
Merge pull request #1815 from steipete/codex/menu-provider-presentati…
steipete Jul 4, 2026
9d7e45f
Merge pull request #1885 from steipete/codex/pr-1779-mistral-balance
steipete Jul 4, 2026
3db8772
fix: include Dia for OpenCode cookie import (#1830)
steipete Jul 4, 2026
1e49619
feat: add Codex project cost rollups (#1884)
steipete Jul 4, 2026
a1da184
Show read-only Codex reset credit inventory (#1690)
brahimhamichan Jul 4, 2026
3191f12
Show shorter cost comparison periods (#1816)
steipete Jul 4, 2026
2c56846
Notify on Claude extra-window quota thresholds (Fable, Daily Routines…
cleanerzkp Jul 4, 2026
8b417a0
test: prevent keychain prompts during test runs (#1897)
steipete Jul 4, 2026
cfd747f
Fix slow Claude CLI failure refreshes (#1899)
steipete Jul 4, 2026
f47cbb7
fix: guard Mistral billing cost overflow (#1889)
joeVenner Jul 4, 2026
c5cf41c
refactor: compact reset credit expiries (#1902)
steipete Jul 4, 2026
52cad29
chore: prepare 0.39.0 release
steipete Jul 4, 2026
d79592c
fix: keep Alibaba Safe Storage keychain read non-interactive (#1900)
steipete Jul 4, 2026
e437044
docs: update appcast for 0.39.0
steipete Jul 4, 2026
23e2d30
chore: start 0.39.1 development
steipete Jul 4, 2026
2e325b8
Guard Mistral credit balances (#1890)
joeVenner Jul 4, 2026
f837c33
docs: note Mistral credit validation
steipete Jul 4, 2026
e677087
ci: modernize build toolchains (#1905)
steipete Jul 4, 2026
4f281ab
Add Mistral widget support (#1891)
joeVenner Jul 5, 2026
19f03ad
docs: note Mistral widget support
steipete Jul 5, 2026
17347d8
Settings window layout (#1901)
Zihao-Qi Jul 5, 2026
5c60833
Improve long reset countdown precision (#1892)
konon4 Jul 5, 2026
37e4225
Add Devin extra usage balance
FNDEVVE Jul 5, 2026
68f5f91
docs: update 0.39.1 changelog
steipete Jul 5, 2026
ec83fcb
fix: preserve external language overrides (#1895)
Zihao-Qi Jul 5, 2026
71a768b
feat: distinguish quota warning markers (#1906)
Alekstodo Jul 5, 2026
f1de700
feat: add cost chart scale labels (#1898)
FNDEVVE Jul 5, 2026
9f1a96c
feat: show raw Codex credit totals
avenoxai Jul 5, 2026
7807679
feat: support Cursor on Linux
DonnieFi Jul 5, 2026
9a00284
fix: separate Claude history after account switching (#1903)
ss251 Jul 5, 2026
cda65e7
docs: note Claude history isolation
steipete Jul 5, 2026
88e8a53
feat: add read-only claude-swap accounts (#1909)
optimiz-r Jul 5, 2026
9ad35de
docs: note claude-swap accounts
steipete Jul 5, 2026
e3c2ade
fix: scope provider refresh state (#1911)
hhh2210 Jul 5, 2026
45b000c
docs: note scoped provider refresh
steipete Jul 5, 2026
6c4cf3a
fix: prefer claude-swap account cards (#1913)
optimiz-r Jul 5, 2026
8e9a844
docs: note claude-swap precedence
steipete Jul 5, 2026
68939ad
fix: detect usable providers on first launch (#1921)
steipete Jul 5, 2026
8cbe848
perf: reduce idle cost scan CPU (#1923)
steipete Jul 5, 2026
ba378a2
fix: include Claude Desktop local-agent usage (#1922)
Zihao-Qi Jul 5, 2026
5dc3e9a
fix: distinguish debug menu bar icons
steipete Jul 5, 2026
ab47178
feat: add claude-swap account switching (#1924)
steipete Jul 5, 2026
1037705
chore: prepare 0.40.0 release
steipete Jul 5, 2026
215efbd
fix: use passwordless release keychain
steipete Jul 5, 2026
a345464
docs: update appcast for 0.40.0
steipete Jul 5, 2026
89b8a50
perf: reuse cached Codex cost aggregates (#1926)
steipete Jul 5, 2026
ec58c22
chore: start 0.40.1 development
steipete Jul 5, 2026
b43a0ef
fix: hide passive Codex credit errors (#1927)
steipete Jul 6, 2026
94ed5d9
[codex] Fix Kimi rate limit ordering (#1914)
Zihao-Qi Jul 6, 2026
76a63dc
Add Kimi widget support (#1918)
joeVenner Jul 6, 2026
ff1c6c7
Cap Codex session display when weekly quota is exhausted (#1930)
Yuxin-Qiao Jul 6, 2026
b007975
Reject non-finite Kimi K2 usage values (#1915)
joeVenner Jul 6, 2026
8479841
fix: keep settings selectors interactive on macOS 27 (#1936)
steipete Jul 6, 2026
4fe943f
fix: reject invalid Kimi K2 timestamps (#1916)
joeVenner Jul 6, 2026
5f90987
fix: update Amp usage dashboard (#1933)
3kh0 Jul 6, 2026
1c80b20
fix: show sub-1% usage accurately (#1946)
devYRPauli Jul 6, 2026
70ef850
fix: roll Claude reset dates across the year boundary (#1947)
devYRPauli Jul 6, 2026
e2c1c6f
fix: preserve fractional Claude web utilization (#1948)
devYRPauli Jul 6, 2026
b5d4e27
fix: use Gemini Flash metrics when Pro is absent (#1950)
devYRPauli Jul 6, 2026
72aaaf3
fix: preserve Devin one-percent usage (#1938)
Lex-ic-on Jul 6, 2026
dcccce8
Fix Kimi subscription quota rows (#1953)
steipete Jul 6, 2026
4484fad
fix: detect Tahoe no-window menu block (#1954)
steipete Jul 6, 2026
53f81ce
fix: stop repeated browser keychain prompts (#1955)
steipete Jul 6, 2026
3e5ace2
fix: add Model Studio region support to Alibaba Token Plan provider (…
harshav167 Jul 6, 2026
63c69fd
Guide Gemini users to Antigravity on consumer-tier shutdown (#1931)
Yuxin-Qiao Jul 6, 2026
d370d35
Add Antigravity pace (#1951)
Zihao-Qi Jul 6, 2026
8155f18
Add CLI cards view (#1925)
DonnieFi Jul 6, 2026
8df7a36
chore: prepare 0.41.0 release
steipete Jul 6, 2026
8021ed8
feat(claude): show Max usage multiplier (5x/20x) in plan label (#1932)
kes02 Jul 6, 2026
093ed82
Describe revoked Ollama API keys accurately (#1943)
joeVenner Jul 6, 2026
c5066c8
Point Ollama login recovery to the current sign-in page (#1941)
joeVenner Jul 6, 2026
27cff88
fix: harden release validation
steipete Jul 6, 2026
a83a83f
docs: update appcast for 0.41.0
steipete Jul 6, 2026
c923e3e
fix: keep release builds from dirtying projects
steipete Jul 7, 2026
46edb38
chore: start 0.41.1 development
steipete Jul 7, 2026
8106e7d
Agent Sessions: track live Codex and Claude sessions across Macs (#1968)
steipete Jul 7, 2026
30ae39a
Recognize Ollama WorkOS session cookies (#1942)
joeVenner Jul 7, 2026
aa401f1
Detect Ollama WorkOS sign-in redirects (#1944)
joeVenner Jul 7, 2026
b8a40a1
Fix Gemini Plus plan display from loadCodeAssist paidTier
Yuxin-Qiao Jul 7, 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
  •  
  •  
  •  
53 changes: 35 additions & 18 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,20 @@ concurrency:
cancel-in-progress: true

env:
SWIFT_VERSION: 6.2.1
SWIFT_VERSION: 6.3.3
SWIFTLY_VERSION: 1.1.3
SWIFTLY_SIGNING_FINGERPRINT: E813C892820A6FA13755B268F167DF1ACF9CE069

jobs:
changes:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 5
outputs:
macos-tests: ${{ steps.macos-tests.outputs.macos-tests }}
macos-tests-reason: ${{ steps.macos-tests.outputs.macos-tests-reason }}
changed-path-count: ${{ steps.macos-tests.outputs.changed-path-count }}
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0

Expand Down Expand Up @@ -72,10 +74,10 @@ jobs:
} >> "$GITHUB_STEP_SUMMARY"

lint:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Install lint tools
run: ./Scripts/install_lint_tools.sh swiftlint
Expand All @@ -87,25 +89,27 @@ jobs:
needs: changes
if: ${{ needs.changes.outputs.macos-tests == 'true' }}
runs-on: macos-15-intel
timeout-minutes: 40
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
shard-index: [0, 1, 2, 3]
shard-count: [4]
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Select Xcode 26.1.1 (if present) or fallback to default
- name: Select Xcode 26.3 or 26.2
run: |
set -euo pipefail
for candidate in /Applications/Xcode_26.1.1.app /Applications/Xcode_26.1.app /Applications/Xcode.app; do
# Both versions are part of the official macOS 15 runner image.
for candidate in /Applications/Xcode_26.3.app /Applications/Xcode_26.2.app; do
if [[ -d "$candidate" ]]; then
sudo xcode-select -s "${candidate}/Contents/Developer"
echo "DEVELOPER_DIR=${candidate}/Contents/Developer" >> "$GITHUB_ENV"
break
fi
done
[[ "$(/usr/bin/xcodebuild -version)" == Xcode\ 26.* ]]
/usr/bin/xcodebuild -version

- name: Swift toolchain version
Expand All @@ -119,7 +123,8 @@ jobs:
run: ./Scripts/lint.sh lint-macos

- name: Swift Test
timeout-minutes: 35
# Intel cold builds can spend ~26 minutes compiling the full test target before isolated suites start.
timeout-minutes: 50
run: |
CODEXBAR_TEST_GROUP_SIZE=1 \
CODEXBAR_TEST_SUITE_TIMEOUT=120 \
Expand Down Expand Up @@ -148,15 +153,15 @@ jobs:
} >> "$GITHUB_STEP_SUMMARY"

lint-build-test:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
timeout-minutes: 5
needs:
- changes
- lint
- swift-test-macos
if: ${{ always() && !cancelled() }}
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Verify lint and macOS test jobs
run: |
Expand Down Expand Up @@ -202,7 +207,7 @@ jobs:
runs-on: ubuntu-24.04-arm
runs-on: ${{ matrix.runs-on }}
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Runner info
run: |
Expand All @@ -212,10 +217,10 @@ jobs:

- name: Restore Swift toolchain cache
id: swift-toolchain-cache
uses: actions/cache@v6.0.0
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ~/.local/share/swiftly
key: swift-${{ runner.os }}-${{ runner.arch }}-${{ env.SWIFT_VERSION }}-v2
key: swift-${{ runner.os }}-${{ runner.arch }}-${{ env.SWIFT_VERSION }}-swiftly-${{ env.SWIFTLY_VERSION }}

- name: Install Swift ${{ env.SWIFT_VERSION }} via swiftly
shell: bash
Expand All @@ -234,22 +239,34 @@ jobs:
fi

SWIFTLY_ARCH="$(uname -m)"
SWIFTLY_ARCHIVE="$RUNNER_TEMP/swiftly-${SWIFTLY_VERSION}-${SWIFTLY_ARCH}.tar.gz"
SWIFTLY_SIGNATURE="${SWIFTLY_ARCHIVE}.sig"
SWIFTLY_HOME_DIR="$HOME/.local/share/swiftly"
SWIFTLY_BIN_DIR="$HOME/.local/bin"
SWIFT_GNUPGHOME="$(mktemp -d)"
SWIFT_KEYS="$RUNNER_TEMP/swift-signing-keys.asc"
POST_INSTALL_SCRIPT="$(mktemp)"

mkdir -p "$SWIFTLY_BIN_DIR"
chmod 700 "$SWIFT_GNUPGHOME"
echo "Swift toolchain cache hit: ${{ steps.swift-toolchain-cache.outputs.cache-hit }}"
curl -fsSL "https://download.swift.org/swiftly/linux/swiftly-${SWIFTLY_ARCH}.tar.gz" -o /tmp/swiftly.tar.gz
tar -xzf /tmp/swiftly.tar.gz -C /tmp
curl -fsSL "https://download.swift.org/swiftly/linux/swiftly-${SWIFTLY_VERSION}-${SWIFTLY_ARCH}.tar.gz" -o "$SWIFTLY_ARCHIVE"
curl -fsSL "https://download.swift.org/swiftly/linux/swiftly-${SWIFTLY_VERSION}-${SWIFTLY_ARCH}.tar.gz.sig" -o "$SWIFTLY_SIGNATURE"
curl -fsSL --compressed "https://www.swift.org/keys/all-keys.asc" -o "$SWIFT_KEYS"
GNUPGHOME="$SWIFT_GNUPGHOME" gpg --batch --import "$SWIFT_KEYS"
SIGNATURE_STATUS="$(GNUPGHOME="$SWIFT_GNUPGHOME" gpg --batch --status-fd=1 \
--verify "$SWIFTLY_SIGNATURE" "$SWIFTLY_ARCHIVE" 2>&1)"
printf '%s\n' "$SIGNATURE_STATUS"
grep -Fq "[GNUPG:] VALIDSIG ${SWIFTLY_SIGNING_FINGERPRINT} " <<< "$SIGNATURE_STATUS"
tar -xzf "$SWIFTLY_ARCHIVE" -C /tmp
/tmp/swiftly init --assume-yes --skip-install

. "$SWIFTLY_HOME_DIR/env.sh"
echo "$SWIFTLY_BIN_DIR" >> "$GITHUB_PATH"
echo "SWIFTLY_HOME_DIR=$SWIFTLY_HOME_DIR" >> "$GITHUB_ENV"
echo "SWIFTLY_BIN_DIR=$SWIFTLY_BIN_DIR" >> "$GITHUB_ENV"

swiftly install "$SWIFT_VERSION" --use --assume-yes --post-install-file "$POST_INSTALL_SCRIPT"
swiftly install "$SWIFT_VERSION" --use --assume-yes --verify --post-install-file "$POST_INSTALL_SCRIPT"
if [[ -s "$POST_INSTALL_SCRIPT" ]]; then
sudo apt-get update
sudo bash "$POST_INSTALL_SCRIPT"
Expand Down
39 changes: 28 additions & 11 deletions .github/workflows/release-cli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,24 +88,29 @@ jobs:
runs-on: ${{ matrix.runs-on }}
env:
RELEASE_TAG: ${{ inputs.tag || github.ref_name }}
SWIFT_VERSION: 6.2.1
SWIFTLY_VERSION: 1.1.3
SWIFTLY_SIGNING_FINGERPRINT: E813C892820A6FA13755B268F167DF1ACF9CE069
SWIFT_STATIC_LINUX_SDK_URL: https://download.swift.org/swift-6.2.1-release/static-sdk/swift-6.2.1-RELEASE/swift-6.2.1-RELEASE_static-linux-0.0.1.artifactbundle.tar.gz
SWIFT_STATIC_LINUX_SDK_CHECKSUM: 08e1939a504e499ec871b36826569173103e4562769e12b9b8c2a50f098374ad
SQLITE_AMALGAMATION_VERSION: "3530200"
SQLITE_AMALGAMATION_SHA3_256: 81142986038e18f96c4a54e1a72562ae17e502a916f2a7701eff43388cbf1a40
SQLITE_AMALGAMATION_VERSION: "3530300"
SQLITE_AMALGAMATION_SHA3_256: d45c688a8cb23f68611a894a756a12d7eb6ab6e9e2468ca70adbeab3808b5ab9
steps:
- uses: actions/checkout@v7
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

- name: Select Xcode 26.1.1 (if present) or fallback to default
- name: Select Xcode 26.3 or 26.2
if: matrix.platform == 'macos'
run: |
set -euo pipefail
for candidate in /Applications/Xcode_26.1.1.app /Applications/Xcode_26.1.app /Applications/Xcode.app; do
# Both versions are part of the official macOS 15 runner image.
for candidate in /Applications/Xcode_26.3.app /Applications/Xcode_26.2.app; do
if [[ -d "$candidate" ]]; then
sudo xcode-select -s "${candidate}/Contents/Developer"
echo "DEVELOPER_DIR=${candidate}/Contents/Developer" >> "$GITHUB_ENV"
break
fi
done
[[ "$(/usr/bin/xcodebuild -version)" == Xcode\ 26.* ]]
/usr/bin/xcodebuild -version

- name: Runner info
Expand All @@ -129,7 +134,7 @@ jobs:
exit 1
fi

- name: Install Swift 6.2.1 via swiftly
- name: Install Swift ${{ env.SWIFT_VERSION }} via swiftly
if: matrix.platform == 'linux'
shell: bash
run: |
Expand All @@ -141,21 +146,33 @@ jobs:
fi

SWIFTLY_ARCH="$(uname -m)"
SWIFTLY_ARCHIVE="$RUNNER_TEMP/swiftly-${SWIFTLY_VERSION}-${SWIFTLY_ARCH}.tar.gz"
SWIFTLY_SIGNATURE="${SWIFTLY_ARCHIVE}.sig"
SWIFTLY_HOME_DIR="$HOME/.local/share/swiftly"
SWIFTLY_BIN_DIR="$HOME/.local/bin"
SWIFT_GNUPGHOME="$(mktemp -d)"
SWIFT_KEYS="$RUNNER_TEMP/swift-signing-keys.asc"
POST_INSTALL_SCRIPT="$(mktemp)"

mkdir -p "$SWIFTLY_BIN_DIR"
curl -fsSL "https://download.swift.org/swiftly/linux/swiftly-${SWIFTLY_ARCH}.tar.gz" -o /tmp/swiftly.tar.gz
tar -xzf /tmp/swiftly.tar.gz -C /tmp
chmod 700 "$SWIFT_GNUPGHOME"
curl -fsSL "https://download.swift.org/swiftly/linux/swiftly-${SWIFTLY_VERSION}-${SWIFTLY_ARCH}.tar.gz" -o "$SWIFTLY_ARCHIVE"
curl -fsSL "https://download.swift.org/swiftly/linux/swiftly-${SWIFTLY_VERSION}-${SWIFTLY_ARCH}.tar.gz.sig" -o "$SWIFTLY_SIGNATURE"
curl -fsSL --compressed "https://www.swift.org/keys/all-keys.asc" -o "$SWIFT_KEYS"
GNUPGHOME="$SWIFT_GNUPGHOME" gpg --batch --import "$SWIFT_KEYS"
SIGNATURE_STATUS="$(GNUPGHOME="$SWIFT_GNUPGHOME" gpg --batch --status-fd=1 \
--verify "$SWIFTLY_SIGNATURE" "$SWIFTLY_ARCHIVE" 2>&1)"
printf '%s\n' "$SIGNATURE_STATUS"
grep -Fq "[GNUPG:] VALIDSIG ${SWIFTLY_SIGNING_FINGERPRINT} " <<< "$SIGNATURE_STATUS"
tar -xzf "$SWIFTLY_ARCHIVE" -C /tmp
/tmp/swiftly init --assume-yes --skip-install

. "$SWIFTLY_HOME_DIR/env.sh"
echo "$SWIFTLY_BIN_DIR" >> "$GITHUB_PATH"
echo "SWIFTLY_HOME_DIR=$SWIFTLY_HOME_DIR" >> "$GITHUB_ENV"
echo "SWIFTLY_BIN_DIR=$SWIFTLY_BIN_DIR" >> "$GITHUB_ENV"

swiftly install 6.2.1 --use --assume-yes --post-install-file "$POST_INSTALL_SCRIPT"
swiftly install "$SWIFT_VERSION" --use --assume-yes --verify --post-install-file "$POST_INSTALL_SCRIPT"
if [[ -s "$POST_INSTALL_SCRIPT" ]]; then
sudo apt-get update
sudo bash "$POST_INSTALL_SCRIPT"
Expand Down Expand Up @@ -393,15 +410,15 @@ jobs:

- name: Upload workflow artifact (manual runs)
if: github.event_name == 'workflow_dispatch'
uses: actions/upload-artifact@v7.0.1
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: codexbar-cli-${{ matrix.name }}
path: |
${{ steps.pkg.outputs.out_dir }}/${{ steps.pkg.outputs.asset }}
${{ steps.pkg.outputs.out_dir }}/${{ steps.pkg.outputs.asset }}.sha256

update-homebrew-tap:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
needs: build-cli
if: github.event_name == 'release'
steps:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/upstream-monitor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@ on:

jobs:
check-upstreams:
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
permissions:
issues: write
contents: read

steps:
- name: Checkout repository
uses: actions/checkout@v7
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0

Expand Down Expand Up @@ -91,7 +91,7 @@ jobs:

- name: Create or update issue
if: steps.check.outputs.upstream_commits > 0 || steps.check.outputs.quotio_commits > 0
uses: actions/github-script@v9.0.0
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const upstreamCommits = '${{ steps.check.outputs.upstream_commits }}';
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ Codexbar.app/
# Release artifacts
*.ipa
*.dSYM*
*.xcarchive/
*.xcresult/
*.zip
*.delta
*.dmg
Expand Down
7 changes: 6 additions & 1 deletion .mac-release.env
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,16 @@ MAC_RELEASE_DOWNLOAD_URL_PREFIX='https://github.com/steipete/CodexBar/releases/d

MAC_RELEASE_PRECHECK='make check && make test'
MAC_RELEASE_PACKAGE_CMD='Scripts/sign-and-notarize.sh'
MAC_RELEASE_OP_ITEM='API Key - App Store Connect - Personal - Release'
MAC_RELEASE_OP_VAULT=Molty
MAC_RELEASE_OP_FIELDS='APP_STORE_CONNECT_KEY_ID APP_STORE_CONNECT_ISSUER_ID APP_STORE_CONNECT_API_KEY_P8'
MAC_RELEASE_OP_USE_SERVICE_ACCOUNT=1
MAC_RELEASE_CODESIGN_IDENTITY='Developer ID Application: Peter Steinberger (Y5PE65HELJ)'
MAC_RELEASE_CODESIGN_OP_ITEM='Default Release Keychain'
MAC_RELEASE_CODESIGN_OP_ITEM='Developer ID Release Keychain'
MAC_RELEASE_CODESIGN_OP_VAULT=Molty
MAC_RELEASE_CODESIGN_OP_USE_SERVICE_ACCOUNT=1
MAC_RELEASE_CODESIGN_KEYCHAIN_MANAGED=1
MAC_RELEASE_CODESIGN_PASSWORDLESS=1
MAC_RELEASE_TAG_SIGNED=1
MAC_RELEASE_TAG_FORCE=1
MAC_RELEASE_GENERATE_APPCAST_ARGS='--maximum-deltas 0'
Expand Down
5 changes: 3 additions & 2 deletions .swiftformat
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SwiftFormat configuration for Peekaboo project
# SwiftFormat configuration for CodexBar
# Compatible with Swift 6 strict concurrency mode

# IMPORTANT: Don't remove self where it's required for Swift 6 concurrency
Expand Down Expand Up @@ -39,7 +39,8 @@
--enumthreshold 0

# Swift 6 specific
--swiftversion 6.2
--swiftversion 6.3
--disable redundantSendable # Keep explicit concurrency contracts visible

# Other
--stripunusedargs closure-only
Expand Down
Loading