diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | opencode.spec | 201 | ||||
| -rw-r--r-- | sources | 2 |
3 files changed, 205 insertions, 0 deletions
@@ -0,0 +1,2 @@ +/models-api.json.xz +/opencode-1.19.5.tar.gz diff --git a/opencode.spec b/opencode.spec new file mode 100644 index 0000000..a461d65 --- /dev/null +++ b/opencode.spec @@ -0,0 +1,201 @@ +# Source build of opencode 1.19.5 for openEuler 25.09 (x86_64). +# +# Adapted from the openEuler EUR reference SRPM (user_76c6f026/openEuler_summit, +# opencode-1.19.5-2, built for openEuler 24.03 LTS SP4), rebuilt for 25.09. +# +# The EUR upload endpoint rejects SRPMs of a few MB, so this SRPM is kept tiny: +# the upstream source archive is fetched in %prep from a reachable GitHub proxy, +# Node.js and Bun come from Huawei Cloud mirrors, and the npm dependency tree +# is resolved from the Huawei npm mirror. The models.dev snapshot is small +# enough to ship compressed in the SRPM (Source1). +# +# The upstream source is pruned to the CLI + embedded Web UI workspace closure +# (console/stats/desktop/docs/web/storybook/slack/identity/containers/cli/ +# sdk-next/function removed). The ghostty-web dependency, which upstream pins +# to a GitHub commit, is switched to the published 0.3.0 npm package so the +# build does not need GitHub access. +# +# topdir: opencode-1.19.5 + +%global debug_package %{nil} +%global __strip /bin/true + +%global node_version 24.18.0 +%global node_sha256 55aa7153f9d88f28d765fcdad5ae6945b5c0f98a36881703817e4c450fa76742 +%global bun_version 1.4.4 +%global bun_sha256 93ca5a2abe45f3bcac6dd55baff8bb06c4ac824b70f89650b54e5c8b80dbef18 + +%global src_proxy https://ghfast.top/https://github.com/anomalyco/opencode/archive/refs/tags/v1.19.5.tar.gz + +Name: opencode +Version: 1.19.5 +Release: 1%{?dist} +Summary: The open source coding agent + +License: MIT +URL: https://github.com/anomalyco/opencode +# Source0 is a zero-byte placeholder; %prep fetches the real archive. +Source0: opencode-1.19.5.tar.gz +Source1: models-api.json.xz + +# The build downloads x86_64 Node.js/Bun binaries and produces a linux-x64 +# Bun single-file executable; only x86_64 builds are supported. +ExclusiveArch: x86_64 +BuildRequires: bash +BuildRequires: ca-certificates +BuildRequires: chrpath +BuildRequires: coreutils +BuildRequires: cpio +BuildRequires: curl +BuildRequires: findutils +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: git +BuildRequires: glibc-devel +BuildRequires: grep +BuildRequires: gzip +BuildRequires: make +BuildRequires: patch +BuildRequires: python3 +BuildRequires: sed +BuildRequires: tar +BuildRequires: unzip +BuildRequires: which +BuildRequires: xz +BuildRequires: zip +Requires: glibc + +%description +opencode is an AI-powered development tool that runs coding agents in the +terminal. This package is compiled from the upstream TypeScript source using +Bun, and includes the embedded Web UI. It requires only glibc at runtime; +Node.js and Bun are not needed after installation. + +%prep +cd %{_builddir} +src_ok=0 +for url in \ + "%{src_proxy}" \ + "https://gh.llkk.cc/https://github.com/anomalyco/opencode/archive/refs/tags/v1.19.5.tar.gz" \ + "https://gh-proxy.com/https://github.com/anomalyco/opencode/archive/refs/tags/v1.19.5.tar.gz"; do + echo "Fetching source from ${url}" + if curl --fail --location --retry 2 --connect-timeout 30 --max-time 900 \ + --output src.tar.gz "${url}"; then + if tar -tzf src.tar.gz 2>/dev/null | grep -q '^opencode-1.19.5/'; then + src_ok=1 + break + fi + fi + rm -f src.tar.gz +done +if [ "${src_ok}" != "1" ]; then + echo "ERROR: no source mirror was reachable" >&2 + exit 1 +fi +tar -xzf src.tar.gz +cd opencode-1.19.5 + +# Keep only the CLI + embedded-Web-UI workspace closure. +rm -rf packages/console packages/stats packages/enterprise packages/desktop \ + packages/docs packages/web packages/storybook packages/slack \ + packages/identity packages/containers packages/cli packages/sdk-next \ + packages/function + +# Tests, docs, and marketing assets are not build inputs. +rm -rf packages/*/test packages/*/tests packages/*/e2e packages/*/test-browser \ + packages/*/bench packages/*/storybook packages/*/docs packages/*/examples \ + packages/*/example packages/*/__tests__ packages/*/README* \ + packages/*/*/test packages/*/*/tests packages/*/*/e2e \ + packages/*/*/README* sdks github nix infra specs .github README* \ + AGENTS.md CONTRIBUTING.md STATS.md CONTEXT.md perf screenshot-*.png + +python3 - <<'PY' +import json +import os + +path = "package.json" +data = json.load(open(path)) +data["workspaces"]["packages"] = [ + x for x in data["workspaces"]["packages"] + if x not in ("packages/console/*", "packages/stats/*", "packages/slack") + and not (x == "packages/sdk/js" and not os.path.isdir(x)) +] +json.dump(data, open(path, "w"), indent=2) +open(path, "a").write("\n") + +path = "packages/app/package.json" +data = json.load(open(path)) +data["dependencies"]["ghostty-web"] = "0.3.0" +json.dump(data, open(path, "w"), indent=2) +open(path, "a").write("\n") +PY + +xz -dc %{SOURCE1} > models-api.json + +%build +cd opencode-1.19.5 +export HOME="%{_builddir}/%{name}-%{version}/.home" +mkdir -p "$HOME" + +# Node.js 24.18.0 +curl --fail --location --retry 3 --connect-timeout 30 \ + --output node.tar.xz \ + "https://mirrors.huaweicloud.com/nodejs/v%{node_version}/node-v%{node_version}-linux-x64.tar.xz" +echo '%{node_sha256} node.tar.xz' | sha256sum -c - +mkdir -p "$HOME/node" +tar -xJf node.tar.xz -C "$HOME/node" --strip-components=1 +export PATH="$HOME/node/bin:$PATH" +node --version +npm --version + +# Bun 1.4.4 from the npm platform package +curl --fail --location --retry 3 --connect-timeout 30 \ + --output bun.tgz \ + "https://mirrors.huaweicloud.com/repository/npm/@oven/bun-linux-x64/-/bun-linux-x64-%{bun_version}.tgz" +echo '%{bun_sha256} bun.tgz' | sha256sum -c - +mkdir -p "$HOME/bun" +tar -xzf bun.tgz -C "$HOME/bun" --strip-components=1 +export PATH="$HOME/bun/bin:$PATH" +bun --version + +export npm_config_registry="https://mirrors.huaweicloud.com/repository/npm/" +export NPM_CONFIG_REGISTRY="$npm_config_registry" +export BUN_CONFIG_REGISTRY="$npm_config_registry" +export npm_config_prefix="$HOME/npm-global" +export NPM_CONFIG_PREFIX="$npm_config_prefix" +mkdir -p "$npm_config_prefix" +export PATH="$npm_config_prefix/bin:$PATH" +npm install -g node-gyp +node-gyp --version + +export BUN_INSTALL_CACHE_DIR="$HOME/bun-cache" +export BUN_CONFIG_DISABLE_ANALYTICS=1 +export MODELS_DEV_API_JSON="$PWD/models-api.json" +export OPENCODE_VERSION="%{version}" +export OPENCODE_CHANNEL="prod" +export USE_HARD_LINKS=false +export HUSKY=0 + +bun install +bun run --cwd packages/core fix-node-pty || : +cd packages/opencode +bun run script/build.ts --single + +%install +cd opencode-1.19.5 +install -Dpm 0755 packages/opencode/dist/opencode-linux-x64/bin/opencode %{buildroot}%{_bindir}/opencode +install -Dpm 0644 LICENSE %{buildroot}%{_licensedir}/%{name}/LICENSE + +%check +%{buildroot}%{_bindir}/opencode --version | grep -qx '%{version}' + +%files +%license %{_licensedir}/%{name}/LICENSE +%{_bindir}/opencode + +%changelog +* Thu Oct 29 2026 user_76c6f026 <user_76c6f026@eur.openeuler.cn> - 1.19.5-1 +- Build opencode 1.19.5 from source for openEuler 25.09 x86_64 +- Adapt EUR reference spec (24.03 LTS SP4) to the 25.09 chroot +- Fetch upstream source from a GitHub proxy at build time; use Huawei Cloud + Node/Bun/npm mirrors; switch ghostty-web to the published 0.3.0 package @@ -0,0 +1,2 @@ +208cee0297d06b2172933cc3952080b0 models-api.json.xz +d41d8cd98f00b204e9800998ecf8427e opencode-1.19.5.tar.gz |
