chore(build): default OpenCode to latest

Stop pinning OpenCode in package metadata and resolve the latest release during sidecar bundling/runtime, while still allowing OPENCODE_VERSION to pin for reproducible builds.
This commit is contained in:
Benjamin Shafii
2026-02-06 10:22:43 -08:00
parent a809bb95fd
commit 609ca9c5e2
10 changed files with 216 additions and 33 deletions

View File

@@ -60,23 +60,35 @@ jobs:
- name: Download OpenCode sidecar
shell: bash
env:
OPENCODE_VERSION: 1.1.36
GITHUB_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
version="${OPENCODE_VERSION}"
if [ -n "${GITHUB_TOKEN:-}" ]; then
latest=$(curl -fsSL \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/anomalyco/opencode/releases/latest \
| sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p')
version="${OPENCODE_VERSION:-}"
if [ -z "$version" ] || [ "$version" = "latest" ]; then
latest=""
if [ -n "${GITHUB_TOKEN:-}" ]; then
latest=$(curl -fsSL \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/anomalyco/opencode/releases/latest \
| sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p')
else
latest=$(curl -fsSL \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/anomalyco/opencode/releases/latest \
| sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p')
fi
if [ -n "$latest" ]; then
version="$latest"
fi
fi
if [ -z "$version" ]; then
echo "Unable to resolve OpenCode version (set OPENCODE_VERSION to pin)." >&2
exit 1
fi
opencode_asset="opencode-linux-x64-baseline.tar.gz"
url="https://github.com/anomalyco/opencode/releases/download/v${version}/${opencode_asset}"
tmp_dir="$RUNNER_TEMP/opencode"

View File

@@ -35,23 +35,36 @@ jobs:
- name: Install OpenCode CLI
shell: bash
env:
OPENCODE_VERSION: 1.1.36
GITHUB_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
version="${OPENCODE_VERSION}"
if [ -n "${GITHUB_TOKEN:-}" ]; then
latest=$(curl -fsSL \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/anomalyco/opencode/releases/latest \
| sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p')
version="${OPENCODE_VERSION:-}"
if [ -z "$version" ] || [ "$version" = "latest" ]; then
latest=""
if [ -n "${GITHUB_TOKEN:-}" ]; then
latest=$(curl -fsSL \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/anomalyco/opencode/releases/latest \
| sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p')
else
latest=$(curl -fsSL \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/anomalyco/opencode/releases/latest \
| sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p')
fi
if [ -n "$latest" ]; then
version="$latest"
fi
fi
if [ -z "$version" ]; then
echo "Unable to resolve OpenCode version (set OPENCODE_VERSION to pin)." >&2
exit 1
fi
curl -fsSL https://opencode.ai/install | bash -s -- --version "$version"
echo "$HOME/.opencode/bin" >> "$GITHUB_PATH"

View File

@@ -157,7 +157,49 @@ jobs:
id: opencode-version
shell: bash
run: |
node -e "const pkg=require('./packages/desktop/package.json'); if (!pkg.opencodeVersion) { throw new Error('opencodeVersion missing'); } console.log('version=' + pkg.opencodeVersion);" >> "$GITHUB_OUTPUT"
node <<'NODE' >> "$GITHUB_OUTPUT"
const fs = require('fs');
async function resolveLatest() {
const res = await fetch('https://api.github.com/repos/anomalyco/opencode/releases/latest', {
headers: {
'Accept': 'application/vnd.github+json',
'X-GitHub-Api-Version': '2022-11-28',
},
});
if (!res.ok) throw new Error(`Failed to resolve latest OpenCode version (HTTP ${res.status})`);
const data = await res.json();
const tag = (typeof data.tag_name === 'string' ? data.tag_name : '').trim();
let v = tag.startsWith('v') ? tag.slice(1) : tag;
v = v.trim();
if (!v) throw new Error('OpenCode latest release tag missing');
return v;
}
async function main() {
const pkg = JSON.parse(fs.readFileSync('./packages/desktop/package.json', 'utf8'));
const configuredRaw = (process.env.OPENCODE_VERSION || pkg.opencodeVersion || '').toString().trim();
if (configuredRaw && configuredRaw.toLowerCase() !== 'latest') {
const normalized = configuredRaw.startsWith('v') ? configuredRaw.slice(1) : configuredRaw;
const resolved = normalized.trim();
if (process.env.GITHUB_ENV) {
fs.appendFileSync(process.env.GITHUB_ENV, `OPENCODE_VERSION=${resolved}\n`);
}
console.log('version=' + resolved);
return;
}
const latest = await resolveLatest();
if (process.env.GITHUB_ENV) {
fs.appendFileSync(process.env.GITHUB_ENV, `OPENCODE_VERSION=${latest}\n`);
}
console.log('version=' + latest);
}
main().catch((err) => {
console.error(err);
process.exit(1);
});
NODE
- name: Download OpenCode sidecar
shell: bash

View File

@@ -320,7 +320,49 @@ jobs:
id: opencode-version
shell: bash
run: |
node -e "const pkg=require('./packages/desktop/package.json'); if (!pkg.opencodeVersion) { throw new Error('opencodeVersion missing'); } console.log('version=' + pkg.opencodeVersion);" >> "$GITHUB_OUTPUT"
node <<'NODE' >> "$GITHUB_OUTPUT"
const fs = require('fs');
async function resolveLatest() {
const res = await fetch('https://api.github.com/repos/anomalyco/opencode/releases/latest', {
headers: {
'Accept': 'application/vnd.github+json',
'X-GitHub-Api-Version': '2022-11-28',
},
});
if (!res.ok) throw new Error(`Failed to resolve latest OpenCode version (HTTP ${res.status})`);
const data = await res.json();
const tag = (typeof data.tag_name === 'string' ? data.tag_name : '').trim();
let v = tag.startsWith('v') ? tag.slice(1) : tag;
v = v.trim();
if (!v) throw new Error('OpenCode latest release tag missing');
return v;
}
async function main() {
const pkg = JSON.parse(fs.readFileSync('./packages/desktop/package.json', 'utf8'));
const configuredRaw = (process.env.OPENCODE_VERSION || pkg.opencodeVersion || '').toString().trim();
if (configuredRaw && configuredRaw.toLowerCase() !== 'latest') {
const normalized = configuredRaw.startsWith('v') ? configuredRaw.slice(1) : configuredRaw;
const resolved = normalized.trim();
if (process.env.GITHUB_ENV) {
fs.appendFileSync(process.env.GITHUB_ENV, `OPENCODE_VERSION=${resolved}\n`);
}
console.log('version=' + resolved);
return;
}
const latest = await resolveLatest();
if (process.env.GITHUB_ENV) {
fs.appendFileSync(process.env.GITHUB_ENV, `OPENCODE_VERSION=${latest}\n`);
}
console.log('version=' + latest);
}
main().catch((err) => {
console.error(err);
process.exit(1);
});
NODE
- name: Download OpenCode sidecar
shell: bash