Skip to content

Commit 0d9bd36

Browse files
authored
Merge branch 'anomalyco:dev' into dev
2 parents 1c6dc9e + cf5cfb4 commit 0d9bd36

35 files changed

Lines changed: 153 additions & 33 deletions

File tree

.github/actions/setup-bun/action.yml

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
name: "Setup Bun"
22
description: "Setup Bun with caching and install dependencies"
3+
inputs:
4+
cross-compile:
5+
description: "Pre-cache canary cross-compile binaries for all targets"
6+
required: false
7+
default: "false"
38
runs:
49
using: "composite"
510
steps:
@@ -11,10 +16,72 @@ runs:
1116
restore-keys: |
1217
${{ runner.os }}-bun-
1318
19+
- name: Get baseline download URL
20+
id: bun-url
21+
shell: bash
22+
run: |
23+
if [ "$RUNNER_ARCH" = "X64" ]; then
24+
case "$RUNNER_OS" in
25+
macOS) OS=darwin ;;
26+
Linux) OS=linux ;;
27+
Windows) OS=windows ;;
28+
esac
29+
echo "url=https://github.com/oven-sh/bun/releases/download/canary/bun-${OS}-x64-baseline.zip" >> "$GITHUB_OUTPUT"
30+
fi
31+
1432
- name: Setup Bun
1533
uses: oven-sh/setup-bun@v2
1634
with:
17-
bun-version-file: package.json
35+
bun-version-file: ${{ !steps.bun-url.outputs.url && 'package.json' || '' }}
36+
bun-download-url: ${{ steps.bun-url.outputs.url }}
37+
38+
- name: Pre-cache canary cross-compile binaries
39+
if: inputs.cross-compile == 'true'
40+
shell: bash
41+
run: |
42+
BUN_VERSION=$(bun --revision)
43+
if echo "$BUN_VERSION" | grep -q "canary"; then
44+
SEMVER=$(echo "$BUN_VERSION" | sed 's/^\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/')
45+
echo "Bun version: $BUN_VERSION (semver: $SEMVER)"
46+
CACHE_DIR="$HOME/.bun/install/cache"
47+
mkdir -p "$CACHE_DIR"
48+
TMP_DIR=$(mktemp -d)
49+
for TARGET in linux-aarch64 linux-x64 linux-x64-baseline linux-aarch64-musl linux-x64-musl linux-x64-musl-baseline darwin-aarch64 darwin-x64 windows-x64 windows-x64-baseline; do
50+
DEST="$CACHE_DIR/bun-${TARGET}-v${SEMVER}"
51+
if [ -f "$DEST" ]; then
52+
echo "Already cached: $DEST"
53+
continue
54+
fi
55+
URL="https://github.com/oven-sh/bun/releases/download/canary/bun-${TARGET}.zip"
56+
echo "Downloading $TARGET from $URL"
57+
if curl -sfL -o "$TMP_DIR/bun.zip" "$URL"; then
58+
unzip -qo "$TMP_DIR/bun.zip" -d "$TMP_DIR"
59+
if echo "$TARGET" | grep -q "windows"; then
60+
BIN_NAME="bun.exe"
61+
else
62+
BIN_NAME="bun"
63+
fi
64+
mv "$TMP_DIR/bun-${TARGET}/$BIN_NAME" "$DEST"
65+
chmod +x "$DEST"
66+
rm -rf "$TMP_DIR/bun-${TARGET}" "$TMP_DIR/bun.zip"
67+
echo "Cached: $DEST"
68+
# baseline bun resolves "bun-darwin-x64" to the baseline cache key
69+
# so copy the modern binary there too
70+
if [ "$TARGET" = "darwin-x64" ]; then
71+
BASELINE_DEST="$CACHE_DIR/bun-darwin-x64-baseline-v${SEMVER}"
72+
if [ ! -f "$BASELINE_DEST" ]; then
73+
cp "$DEST" "$BASELINE_DEST"
74+
echo "Cached (baseline alias): $BASELINE_DEST"
75+
fi
76+
fi
77+
else
78+
echo "Skipped: $TARGET (not available)"
79+
fi
80+
done
81+
rm -rf "$TMP_DIR"
82+
else
83+
echo "Not a canary build ($BUN_VERSION), skipping pre-cache"
84+
fi
1885
1986
- name: Install dependencies
2087
run: bun install

.github/workflows/compliance-close.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ jobs:
6565
body: closeMessage,
6666
});
6767
68+
try {
69+
await github.rest.issues.removeLabel({
70+
owner: context.repo.owner,
71+
repo: context.repo.repo,
72+
issue_number: item.number,
73+
name: 'needs:compliance',
74+
});
75+
} catch (e) {}
76+
6877
if (isPR) {
6978
await github.rest.pulls.update({
7079
owner: context.repo.owner,

.github/workflows/pr-standards.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,11 @@ jobs:
108108
109109
await removeLabel('needs:title');
110110
111-
// Step 2: Check for linked issue (skip for docs/refactor PRs)
112-
const skipIssueCheck = /^(docs|refactor)\s*(\([a-zA-Z0-9-]+\))?\s*:/.test(title);
111+
// Step 2: Check for linked issue (skip for docs/refactor/feat PRs)
112+
const skipIssueCheck = /^(docs|refactor|feat)\s*(\([a-zA-Z0-9-]+\))?\s*:/.test(title);
113113
if (skipIssueCheck) {
114114
await removeLabel('needs:issue');
115-
console.log('Skipping issue check for docs/refactor PR');
115+
console.log('Skipping issue check for docs/refactor/feat PR');
116116
return;
117117
}
118118
const query = `
@@ -189,7 +189,7 @@ jobs:
189189
190190
const body = pr.body || '';
191191
const title = pr.title;
192-
const isDocsOrRefactor = /^(docs|refactor)\s*(\([a-zA-Z0-9-]+\))?\s*:/.test(title);
192+
const isDocsRefactorOrFeat = /^(docs|refactor|feat)\s*(\([a-zA-Z0-9-]+\))?\s*:/.test(title);
193193
194194
const issues = [];
195195
@@ -225,8 +225,8 @@ jobs:
225225
}
226226
}
227227
228-
// Check: issue reference (skip for docs/refactor)
229-
if (!isDocsOrRefactor && hasIssueSection) {
228+
// Check: issue reference (skip for docs/refactor/feat)
229+
if (!isDocsRefactorOrFeat && hasIssueSection) {
230230
const issueMatch = body.match(/### Issue for this PR\s*\n([\s\S]*?)(?=###|$)/);
231231
const issueContent = issueMatch ? issueMatch[1].trim() : '';
232232
const hasIssueRef = /(closes|fixes|resolves)\s+#\d+/i.test(issueContent) || /#\d+/.test(issueContent);

.github/workflows/publish.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ jobs:
7777
fetch-tags: true
7878

7979
- uses: ./.github/actions/setup-bun
80+
with:
81+
cross-compile: "true"
8082

8183
- name: Setup git committer
8284
id: committer
@@ -88,7 +90,7 @@ jobs:
8890
- name: Build
8991
id: build
9092
run: |
91-
./packages/opencode/script/build.ts
93+
./packages/opencode/script/build.ts --all
9294
env:
9395
OPENCODE_VERSION: ${{ needs.version.outputs.version }}
9496
OPENCODE_RELEASE: ${{ needs.version.outputs.release }}

.github/workflows/sign-cli.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ jobs:
2020
fetch-tags: true
2121

2222
- uses: ./.github/actions/setup-bun
23+
with:
24+
cross-compile: "true"
2325

2426
- name: Build
2527
run: |
26-
./packages/opencode/script/build.ts
28+
./packages/opencode/script/build.ts --all
2729
2830
- name: Upload unsigned Windows CLI
2931
id: upload_unsigned_windows_cli

.github/workflows/test.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,16 @@ on:
88
workflow_dispatch:
99
jobs:
1010
unit:
11-
name: unit (linux)
12-
runs-on: blacksmith-4vcpu-ubuntu-2404
11+
name: unit (${{ matrix.settings.name }})
12+
strategy:
13+
fail-fast: false
14+
matrix:
15+
settings:
16+
- name: linux
17+
host: blacksmith-4vcpu-ubuntu-2404
18+
- name: windows
19+
host: blacksmith-4vcpu-windows-2025
20+
runs-on: ${{ matrix.settings.host }}
1321
defaults:
1422
run:
1523
shell: bash

packages/app/e2e/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { createOpencodeClient } from "@opencode-ai/sdk/v2/client"
22
import { base64Encode } from "@opencode-ai/util/encode"
33

4-
export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost"
4+
export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "127.0.0.1"
55
export const serverPort = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"
66

77
export const serverUrl = `http://${serverHost}:${serverPort}`

packages/app/playwright.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { defineConfig, devices } from "@playwright/test"
22

33
const port = Number(process.env.PLAYWRIGHT_PORT ?? 3000)
4-
const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? `http://localhost:${port}`
5-
const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost"
4+
const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? `http://127.0.0.1:${port}`
5+
const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "127.0.0.1"
66
const serverPort = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"
77
const command = `bun run dev -- --host 0.0.0.0 --port ${port}`
88
const reuse = !process.env.CI

packages/console/app/src/i18n/ar.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@ export const dict = {
344344
"workspace.usage.breakdown.output": "الخرج",
345345
"workspace.usage.breakdown.reasoning": "المنطق",
346346
"workspace.usage.subscription": "الاشتراك (${{amount}})",
347+
"workspace.usage.byok": "BYOK (${{amount}})",
347348

348349
"workspace.cost.title": "التكلفة",
349350
"workspace.cost.subtitle": "تكاليف الاستخدام مقسمة حسب النموذج.",

packages/console/app/src/i18n/br.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ export const dict = {
349349
"workspace.usage.breakdown.output": "Saída",
350350
"workspace.usage.breakdown.reasoning": "Raciocínio",
351351
"workspace.usage.subscription": "assinatura (${{amount}})",
352+
"workspace.usage.byok": "BYOK (${{amount}})",
352353

353354
"workspace.cost.title": "Custo",
354355
"workspace.cost.subtitle": "Custos de uso discriminados por modelo.",

0 commit comments

Comments
 (0)