diff options
| author | CoprDistGit <infra@openeuler.org> | 2026-11-09 13:19:57 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2026-11-09 13:19:57 +0000 |
| commit | 88d83e88358b760a7fc361f0eb1b6299139c2386 (patch) | |
| tree | 68daf843f74ec3dfc21ac54c0db5182654bf1ea0 /opencode.spec | |
| parent | 2a3212fbc66cefe17631efbcb5780da768690b27 (diff) | |
automatic import of opencode
Diffstat (limited to 'opencode.spec')
| -rw-r--r-- | opencode.spec | 189 |
1 files changed, 152 insertions, 37 deletions
diff --git a/opencode.spec b/opencode.spec index a171208..2fc675a 100644 --- a/opencode.spec +++ b/opencode.spec @@ -1,59 +1,185 @@ -# opencode 1.19.5 for openEuler 24.03 LTS SP4 (x86_64). +# Source build of opencode 1.19.5 for openEuler 24.03 LTS SP4. # -# The COPR project this package is built in runs every build with network -# access disabled (enable_net=false), so %prep/%build must not download -# anything: every remote artifact has to be shipped inside the SRPM. +# 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. # -# Upstream is a Bun/TypeScript monorepo without a prebuilt dist/ tree, and Bun -# is not part of the openEuler build toolchain, so an in-chroot compilation -# would require vendoring the whole npm dependency tree plus the Bun runtime. -# Per spec-rules-nodejs (TypeScript/monorepo packages must use an upstream -# artifact that already ships the compiled payload), the package is built from -# the upstream-published standalone linux-x64 release tarball, which embeds the -# CLI, the embedded Web UI and the Bun runtime. +# 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. %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: 3%{?dist} +Release: 2%{?dist} Summary: The open source coding agent License: MIT URL: https://github.com/anomalyco/opencode -# Upstream-published standalone linux-x64 archive (contains the "opencode" -# executable built by upstream with bun --compile). -Source0: opencode-linux-x64.tar.gz -Source1: opencode-LICENSE +# Source0 is a zero-byte placeholder; %prep fetches the real archive. +Source0: opencode-1.19.5.tar.gz +Source1: models-api.json.xz 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 ships the upstream-published standalone Linux x86_64 -executable, which already embeds the CLI, the embedded Web UI and the Bun -runtime. It requires only glibc at runtime; Node.js and Bun are not needed -after installation. +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 -# Nothing is downloaded here: the build chroot has no network access. -tar -xzf %{SOURCE0} +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 | head -1 | 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 -# Prebuilt upstream artifact (bun --compile output): nothing to compile. +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 -install -Dpm 0755 opencode %{buildroot}%{_bindir}/opencode -install -Dpm 0644 %{SOURCE1} %{buildroot}%{_licensedir}/%{name}/LICENSE +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 -export HOME=%{_builddir} %{buildroot}%{_bindir}/opencode --version | grep -qx '%{version}' %files @@ -61,17 +187,6 @@ export HOME=%{_builddir} %{_bindir}/opencode %changelog -* Mon Nov 09 2026 user_76c6f026 <user_76c6f026@eur.openeuler.cn> - 1.19.5-3 -- Make the build work offline: the COPR project disables network access during - builds (enable_net=false), so the GitHub source proxy, the Huawei Cloud - Node/Bun mirrors and the npm install step in %prep/%build all failed with - "no source mirror was reachable" -- Package the upstream-published standalone linux-x64 release artifact, which - already embeds the CLI, the Web UI and the Bun runtime (spec-rules-nodejs: - TypeScript monorepo without a prebuilt dist/ tree cannot be compiled from - source in the openEuler chroot) -- Ship the upstream LICENSE as Source1 and drop the models.dev snapshot that - was only consumed by the removed in-tree build * Thu Oct 29 2026 user_76c6f026 <user_76c6f026@eur.openeuler.cn> - 1.19.5-2 - Build opencode 1.19.5 from source for openEuler 24.03 LTS SP4 x86_64 - Fetch upstream source from a GitHub proxy at build time; use Huawei Cloud |
