diff --git a/Makefile b/Makefile index b253cb1..e777eeb 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,16 @@ TOPDIR ?= $(CURDIR)/.rpmbuild +ARCH ?= x86_64 -.PHONY: srpm clean +.PHONY: srpm srpm-x86_64 srpm-aarch64 clean srpm: - ./make-srpm.sh + ARCH="$(ARCH)" TOPDIR="$(TOPDIR)" ./make-srpm.sh + +srpm-x86_64: + ARCH="x86_64" TOPDIR="$(TOPDIR)" ./make-srpm.sh + +srpm-aarch64: + ARCH="aarch64" TOPDIR="$(TOPDIR)" ./make-srpm.sh clean: rm -rf "$(TOPDIR)" diff --git a/codex.spec b/codex.spec index efdedad..41c9dc5 100644 --- a/codex.spec +++ b/codex.spec @@ -1,4 +1,5 @@ %global up_version %{?up_version}%{!?up_version:0} +%global package_arch %{?package_arch}%{!?package_arch:x86_64} %global debug_package %{nil} %global _build_id_links none %{!?bash_completions_dir:%global bash_completions_dir %{_datadir}/bash-completion/completions} @@ -12,9 +13,9 @@ Summary: OpenAI Codex command-line interface License: Apache-2.0 URL: https://github.com/openai/codex -Source0: %{name}-%{version}-x86_64-unknown-linux-musl.tar.gz +Source0: %{name}-%{version}-%{package_arch}-unknown-linux-musl.tar.gz -BuildArch: x86_64 +ExclusiveArch: x86_64 aarch64 Requires: git %description diff --git a/make-srpm.sh b/make-srpm.sh index e47b2b5..18c6d4c 100755 --- a/make-srpm.sh +++ b/make-srpm.sh @@ -7,7 +7,20 @@ SOURCES_DIR="$TOPDIR/SOURCES" SRPMS_DIR="$TOPDIR/SRPMS" SPECS_DIR="$TOPDIR/SPECS" WORK_DIR="$(mktemp -d)" -LATEST_URL="https://github.com/openai/codex/releases/latest/download/codex-x86_64-unknown-linux-musl.tar.gz" +ARCH="${ARCH:-x86_64}" + +case "$ARCH" in + x86_64|aarch64) + ;; + *) + echo "Unsupported ARCH: $ARCH. Supported values: x86_64, aarch64" >&2 + exit 1 + ;; +esac + +ASSET_BASENAME="codex-$ARCH-unknown-linux-musl" +LATEST_URL="https://github.com/openai/codex/releases/latest/download/$ASSET_BASENAME.tar.gz" +LATEST_RELEASE_API="https://api.github.com/repos/openai/codex/releases/latest" cleanup() { rm -rf "$WORK_DIR" @@ -16,26 +29,35 @@ trap cleanup EXIT mkdir -p "$SOURCES_DIR" "$SRPMS_DIR" "$SPECS_DIR" -ARCHIVE="$WORK_DIR/codex-x86_64-unknown-linux-musl.tar.gz" -echo "Downloading latest Codex release tarball..." +ARCHIVE="$WORK_DIR/$ASSET_BASENAME.tar.gz" +echo "Downloading latest Codex release tarball for $ARCH..." curl -fL --retry 3 --retry-delay 2 -o "$ARCHIVE" "$LATEST_URL" mkdir -p "$WORK_DIR/unpack" tar -xzf "$ARCHIVE" -C "$WORK_DIR/unpack" -UPSTREAM_BINARY="$WORK_DIR/unpack/codex-x86_64-unknown-linux-musl" +UPSTREAM_BINARY="$WORK_DIR/unpack/$ASSET_BASENAME" if [[ ! -x "$UPSTREAM_BINARY" ]]; then - echo "Expected upstream binary codex-x86_64-unknown-linux-musl, but it was not found." >&2 + echo "Expected upstream binary $ASSET_BASENAME, but it was not found." >&2 exit 1 fi -VERSION="$("$UPSTREAM_BINARY" --version | awk '{print $2}')" -if [[ -z "$VERSION" ]]; then - echo "Failed to determine Codex version from downloaded binary." >&2 +echo "Resolving latest release tag..." +TAG="$( + curl -fsSL --retry 3 --retry-delay 2 "$LATEST_RELEASE_API" \ + | sed -n 's/.*"tag_name":[[:space:]]*"\([^"]*\)".*/\1/p' \ + | head -n1 +)" +if [[ -z "$TAG" ]]; then + echo "Failed to determine latest release tag from GitHub API." >&2 exit 1 fi -TAG="rust-v$VERSION" +VERSION="${TAG#rust-v}" +if [[ -z "$VERSION" || "$VERSION" == "$TAG" ]]; then + echo "Unexpected tag format: $TAG (expected rust-v)." >&2 + exit 1 +fi SOURCE_TREE="$WORK_DIR/codex-$VERSION" mkdir -p "$SOURCE_TREE" @@ -49,15 +71,17 @@ curl -fL --retry 3 --retry-delay 2 \ -o "$SOURCE_TREE/README.md" \ "https://raw.githubusercontent.com/openai/codex/$TAG/README.md" -SOURCE_ARCHIVE="$SOURCES_DIR/codex-$VERSION-x86_64-unknown-linux-musl.tar.gz" +SOURCE_ARCHIVE="$SOURCES_DIR/codex-$VERSION-$ARCH-unknown-linux-musl.tar.gz" tar -C "$WORK_DIR" -czf "$SOURCE_ARCHIVE" "codex-$VERSION" cp codex.spec "$SPECS_DIR/codex.spec" echo "Building SRPM for version $VERSION..." rpmbuild \ + --target "$ARCH" \ --define "_topdir $TOPDIR" \ --define "up_version $VERSION" \ + --define "package_arch $ARCH" \ -bs "$SPECS_DIR/codex.spec" echo