mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-04-07 03:10:15 -04:00
Add pre-built V8 static library to SRC_URI and set RUSTY_V8_ARCHIVE to avoid network access during compilation. Add -* to KEYWORDS since the package now depends on pre-built architecture-specific binaries. Signed-off-by: Huang Rui <vowstar@gmail.com>
130 lines
5.3 KiB
Bash
130 lines
5.3 KiB
Bash
# Copyright 2025-2026 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
EAPI=8
|
|
|
|
# NOTE: This package uses a pre-built crate tarball instead of listing individual
|
|
# crates in CRATES="". This approach is required because:
|
|
# 1. Codex has 800+ crate dependencies, which triggers Portage QA warnings:
|
|
# "QA Notice: This package uses a very large number of CRATES. Please provide
|
|
# a crate tarball instead and fetch it via SRC_URI."
|
|
# 2. Stricter ebuild QA checks (e.g., in CI pipelines) fail with too many crates.
|
|
#
|
|
# The crate tarball is auto-generated by GitHub Actions at:
|
|
# https://github.com/gentoo-zh-drafts/codex/
|
|
# Workflow source code for auditing:
|
|
# https://github.com/gentoo-zh-drafts/codex/blob/crate-dist/.github/workflows/crates.yml
|
|
# This allows anyone to review and verify the crate packaging process.
|
|
|
|
CRATES="
|
|
"
|
|
|
|
declare -A GIT_CRATES=(
|
|
[crossterm]='https://github.com/nornagon/crossterm;87db8bfa6dc99427fd3b071681b07fc31c6ce995;crossterm-%commit%'
|
|
[nucleo-matcher]='https://github.com/helix-editor/nucleo;4253de9faabb4e5c6d81d946a5e35a90f87347ee;nucleo-%commit%/matcher'
|
|
[nucleo]='https://github.com/helix-editor/nucleo;4253de9faabb4e5c6d81d946a5e35a90f87347ee;nucleo-%commit%'
|
|
[ratatui]='https://github.com/nornagon/ratatui;9b2ad1298408c45918ee9f8241a6f95498cdbed2;ratatui-%commit%'
|
|
[runfiles]='https://github.com/dzbarsky/rules_rust;b56cbaa8465e74127f1ea216f813cd377295ad81;rules_rust-%commit%/rust/runfiles'
|
|
[tokio-tungstenite]='https://github.com/openai-oss-forks/tokio-tungstenite;132f5b39c862e3a970f731d709608b3e6276d5f6;tokio-tungstenite-%commit%'
|
|
[tungstenite]='https://github.com/openai-oss-forks/tungstenite-rs;9200079d3b54a1ff51072e24d81fd354f085156f;tungstenite-rs-%commit%'
|
|
)
|
|
|
|
RUST_MIN_VER="1.93.0"
|
|
|
|
# python3 .github/scripts/rusty_v8_bazel.py resolved-v8-crate-version
|
|
RUSTY_V8_TAG="146.4.0"
|
|
|
|
inherit cargo
|
|
|
|
DESCRIPTION="Codex CLI - OpenAI's AI-powered coding agent"
|
|
HOMEPAGE="https://github.com/openai/codex"
|
|
|
|
# The crate tarball URL uses ${PV} so it auto-updates when bumping versions.
|
|
# This tarball is generated by: https://github.com/gentoo-zh-drafts/codex/
|
|
# See .github/workflows/crates.yml for the generation process.
|
|
SRC_URI="
|
|
https://github.com/openai/${PN}/archive/rust-v${PV}.tar.gz -> ${P}.tar.gz
|
|
https://github.com/gentoo-zh-drafts/codex/releases/download/rust-v${PV}/codex-rust-v${PV}-crates.tar.xz
|
|
amd64? (
|
|
https://github.com/openai/codex/releases/download/rusty-v8-v${RUSTY_V8_TAG}/librusty_v8_release_x86_64-unknown-linux-musl.a.gz
|
|
-> rusty_v8_${RUSTY_V8_TAG}_librusty_v8_release_x86_64-unknown-linux-musl.a.gz
|
|
https://github.com/openai/codex/releases/download/rusty-v8-v${RUSTY_V8_TAG}/src_binding_release_x86_64-unknown-linux-musl.rs
|
|
-> rusty_v8_${RUSTY_V8_TAG}_src_binding_release_x86_64-unknown-linux-musl.rs
|
|
)
|
|
arm64? (
|
|
https://github.com/openai/codex/releases/download/rusty-v8-v${RUSTY_V8_TAG}/librusty_v8_release_aarch64-unknown-linux-musl.a.gz
|
|
-> rusty_v8_${RUSTY_V8_TAG}_librusty_v8_release_aarch64-unknown-linux-musl.a.gz
|
|
https://github.com/openai/codex/releases/download/rusty-v8-v${RUSTY_V8_TAG}/src_binding_release_aarch64-unknown-linux-musl.rs
|
|
-> rusty_v8_${RUSTY_V8_TAG}_src_binding_release_aarch64-unknown-linux-musl.rs
|
|
)
|
|
${CARGO_CRATE_URIS}
|
|
"
|
|
|
|
S="${WORKDIR}/${PN}-rust-v${PV}/codex-rs"
|
|
|
|
LICENSE="Apache-2.0"
|
|
# Dependent crate licenses
|
|
LICENSE+="
|
|
Apache-2.0 BSD-2 BSD Boost-1.0 CC0-1.0 CDLA-Permissive-2.0 ISC MIT
|
|
MPL-2.0 Unicode-3.0 ZLIB
|
|
"
|
|
SLOT="0"
|
|
KEYWORDS="-* ~amd64 ~arm64"
|
|
# Tests fail due to ring crate conflicts with system OpenSSL
|
|
RESTRICT="test"
|
|
|
|
DEPEND="
|
|
dev-libs/openssl:=
|
|
sys-apps/dbus
|
|
"
|
|
RDEPEND="${DEPEND}"
|
|
BDEPEND="virtual/pkgconfig"
|
|
|
|
# rust does not use *FLAGS from make.conf, silence portage warning
|
|
QA_FLAGS_IGNORED="usr/bin/${PN}"
|
|
|
|
gen_git_crate_dir() {
|
|
# https://github.com/gentoo/gentoo/blob/b09dd88412fe2d5eee5a8891e08bfa2d67848da3/eclass/cargo.eclass#L442
|
|
IFS=';' read -r crate_uri commit crate_dir <<<"${GIT_CRATES[$1]}"
|
|
echo "${WORKDIR}/${crate_dir//%commit%/${commit}}"
|
|
}
|
|
|
|
src_prepare() {
|
|
default
|
|
|
|
# Fix tokio-tungstenite's git dependency on tungstenite
|
|
sed -i '/^\[dependencies\.tungstenite\]/,/^$/{
|
|
s|git = "https://github.com/openai-oss-forks/tungstenite-rs"|path = "'"$(gen_git_crate_dir tungstenite)"'"|
|
|
/^rev = /d
|
|
}' "$(gen_git_crate_dir tokio-tungstenite)/Cargo.toml" || die
|
|
|
|
# Remove the [patch.crates-io] section and add path-based patches
|
|
sed -i '/^\[patch\.crates-io\]/,/^$/d' "${S}/Cargo.toml" || die
|
|
sed -i '/^\[patch\."ssh:\/\/git@github\.com/,/^$/d' "${S}/Cargo.toml" || die
|
|
|
|
# Add new patch section with local paths
|
|
cat >> "${S}/Cargo.toml" <<-EOF || die
|
|
|
|
[patch.crates-io]
|
|
crossterm = { path = "$(gen_git_crate_dir crossterm)" }
|
|
ratatui = { path = "$(gen_git_crate_dir ratatui)" }
|
|
tokio-tungstenite = { path = "$(gen_git_crate_dir tokio-tungstenite)" }
|
|
tungstenite = { path = "$(gen_git_crate_dir tungstenite)" }
|
|
EOF
|
|
}
|
|
|
|
src_compile() {
|
|
local rusty_v8_triple
|
|
use amd64 && rusty_v8_triple=x86_64-unknown-linux-musl
|
|
use arm64 && rusty_v8_triple=aarch64-unknown-linux-musl
|
|
|
|
RUSTY_V8_ARCHIVE="${DISTDIR}/rusty_v8_${RUSTY_V8_TAG}_librusty_v8_release_${rusty_v8_triple}.a.gz" \
|
|
RUSTY_V8_SRC_BINDING_PATH="${DISTDIR}/rusty_v8_${RUSTY_V8_TAG}_src_binding_release_${rusty_v8_triple}.rs" \
|
|
cargo_src_compile --package codex-cli
|
|
}
|
|
|
|
src_install() {
|
|
dobin "$(cargo_target_dir)/codex"
|
|
einstalldocs
|
|
}
|