chore: add install-flex, fix Blacksmith ARM64 CI (build tools + test timeouts), fix per-branch DB#11
Merged
lgarceau768 merged 9 commits intoflexfrom Apr 23, 2026
Merged
Conversation
- add install-flex: single curl | bash installer that clones the flex
branch, builds the binary, writes the AWS SSO profile, writes
~/.config/opencode/opencode.json, and appends opencode-work() to
the user's shell rc file; all steps are idempotent
- hardcode SSO start URL and us-east-2 SSO region; prompt only for
account ID and preferred AWS region
- correct sso_role_name from AdministratorAccess to ClaudeCodeAccess
- fix opencode-work(): replace undeclared \${opencode_args[@]} with
"\$@", replace hardcoded path and arch with runtime uname detection
- add Quick Install section to LOCAL_AWS_SETUP.md
|
Thanks for your contribution! This PR doesn't have a linked issue. All PRs must reference an existing issue. Please:
See CONTRIBUTING.md for details. |
|
This PR doesn't fully meet our contributing guidelines and PR template. What needs to be fixed:
Please edit this PR description to address the above within 2 hours, or it will be automatically closed. If you believe this was flagged incorrectly, please let a maintainer know. |
…B fragmentation Without this, every build bakes the current git branch name as the installation channel, causing OpenCode to open a new empty SQLite database each time you rebuild from a different branch (opencode-chore-bolster-install.db, opencode-feat-mcp-awareness.db, etc). Setting OPENCODE_CHANNEL=flex means all Flexion fork builds share opencode-flex.db regardless of which branch was built.
…unners Blacksmith's ubuntu-2404 runners run on ARM64 hardware (RUNNER_ARCH=ARM64). The previous action only built an explicit bun download URL for X64, so ARM64 fell through to oven-sh/setup-bun@v2's default path which downloads bun-linux-aarch64.zip and extracts it via the system unzip command. Blacksmith's ARM64 Ubuntu image doesn't pre-install unzip, causing all e2e and unit CI jobs to fail at the Setup Bun step. Two changes: - Add a Linux step that installs unzip if not already present (direct fix) - Rewrite the URL construction with case/esac covering both X64 and ARM64 for all OS variants, replacing the x64-only if block (architecture fix)
…ion on ARM64 tree-sitter-powershell builds a native addon via node-gyp during bun install. Blacksmith ARM64 runners don't pre-install make or g++, so the build fails with: gyp ERR! not found: make Extend the prerequisite step to also check for make and install build-essential (which provides make + g++) when missing, alongside the existing unzip check.
…in test timeouts Plugin integration tests (auth-override, plugin config providers) each create a fresh temp dir and trigger @npmcli/arborist to install @opencode-ai/plugin from the npm registry. On Blacksmith ARM64, this network fetch takes 10-30 s per test, consistently hitting the 30 s bun test timeout. Two changes to the unit job in test.yml: - Cache ~/.npm across runs so arborist finds tarballs locally on repeat runs - Pre-warm step: npm install @opencode-ai/plugin once before tests run, which populates ~/.npm so arborist's per-test installs resolve from cache (~0.5 s) rather than the network (~10-30 s)
…t timeout
Root cause of all 7 test timeouts:
config.ts fires a background @npmcli/arborist.reify() for @opencode-ai/plugin
in every .opencode/ directory it discovers. plugin/index.ts and tool/registry.ts
then call waitForDependencies() which joins that fiber before loading plugins
or custom tools. On Blacksmith ARM64, a cold arborist fetch takes 10-30 s per
test. Running in parallel across a 4-vCPU runner saturates CPU/IO and starves
even unrelated tests (session.processor, snapshot.revert) past their 30 s limit.
Fixes:
- flag.ts: add OPENCODE_DISABLE_PLUGIN_DEPS_INSTALL flag
- config.ts: guard the npmSvc.install() + deps.push() block with the new flag
- preload.ts: set OPENCODE_DISABLE_PLUGIN_DEPS_INSTALL=true for all tests
(safe: bun resolves @opencode-ai/plugin from the workspace node_modules;
tests do not author plugins that import the SDK at runtime)
- snapshot.test.ts: raise timeout on the 280-file revert test to 60 s
(git operations across 280 files can push past 30 s on ARM64)
Blacksmith ARM64 runner subprocess startup overhead can consume 2-3 s, pushing the 'loop waits while shell runs' test past its 3 s failsafe. The test validates ordering (loop waits while shell is running), not wall time, so a larger timeout doesn't change what is being tested.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
install-flex: singlecurl | bashinstaller (clone flex branch, build binary, write AWS SSO config, appendopencode-work(); idempotent)OPENCODE_CHANNEL=flexso all Flexion fork builds shareopencode-flex.dbunzipmissing → bun zip extraction failsmake/g++missing →node-gypcan't buildtree-sitter-powershell@opencode-ai/pluginnpm fetch per test → plugin/tool tests timeout at 30 sBlacksmith ARM64 runner — failure layers
setup-bununzipnot installedunzip+build-essentialif absent (Linux only)bun installmake/g++not installedbuild-essential@npmcli/arborist.reify()runs per-test, fetches from npm (10–30 s each)OPENCODE_DISABLE_PLUGIN_DEPS_INSTALLflag skips the install; set intest/preload.tsrevert handles large mixed batches(280 files)Why
OPENCODE_DISABLE_PLUGIN_DEPS_INSTALLis safe for tests:config.tsfires a background@npmcli/arborist.reify()for@opencode-ai/pluginin every.opencode/directory, thenplugin/index.tsandtool/registry.tscallwaitForDependencies()before loading plugins/tools. In production this ensures user-authored plugins canimport { … } from "@opencode-ai/plugin". In tests, bun resolves@opencode-ai/pluginfrom the monorepo workspacenode_modulesdirectly — no per-test install needed.Session loss fix (per-branch DB fragmentation)
OpenCode bakes
InstallationChannelfrom the current git branch at build time and names the SQLite DB after it. Every branch rebuild created a new empty database.OPENCODE_CHANNEL=flexininstall-flexpins the channel so all Flexion builds shareopencode-flex.db.Changes
.github/actions/setup-bun/action.yml— build tools prereq step + ARM64/X64 URL construction.github/workflows/test.yml— npm cache + pre-warm (belt-and-suspenders; primary fix is the flag)packages/opencode/src/flag/flag.ts—OPENCODE_DISABLE_PLUGIN_DEPS_INSTALLflagpackages/opencode/src/config/config.ts— guard arborist install with flagpackages/opencode/test/preload.ts— set flag + commentpackages/opencode/test/snapshot/snapshot.test.ts— 60 s timeout for 280-file revert testinstall-flex— new installer,OPENCODE_CHANNEL=flexbuild flagLOCAL_AWS_SETUP.md— Quick Install sectionChecklist