diff --git a/.copr/Makefile b/.copr/Makefile new file mode 100644 index 0000000..854ae9d --- /dev/null +++ b/.copr/Makefile @@ -0,0 +1,9 @@ +.PHONY: srpm + +outdir ?= $(CURDIR)/.rpmbuild/SRPMS +TOPDIR ?= $(CURDIR)/.rpmbuild + +srpm: + $(MAKE) -C "$(CURDIR)" srpm TOPDIR="$(TOPDIR)" + mkdir -p "$(outdir)" + cp "$(TOPDIR)"/SRPMS/*.src.rpm "$(outdir)"/ diff --git a/Makefile b/Makefile index e777eeb..d4f90f7 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,15 @@ TOPDIR ?= $(CURDIR)/.rpmbuild -ARCH ?= x86_64 .PHONY: srpm srpm-x86_64 srpm-aarch64 clean srpm: - ARCH="$(ARCH)" TOPDIR="$(TOPDIR)" ./make-srpm.sh + TOPDIR="$(TOPDIR)" ./make-srpm.sh srpm-x86_64: - ARCH="x86_64" TOPDIR="$(TOPDIR)" ./make-srpm.sh + TOPDIR="$(TOPDIR)" ./make-srpm.sh srpm-aarch64: - ARCH="aarch64" TOPDIR="$(TOPDIR)" ./make-srpm.sh + TOPDIR="$(TOPDIR)" ./make-srpm.sh clean: rm -rf "$(TOPDIR)" diff --git a/codex.spec b/codex.spec index 41c9dc5..f95162d 100644 --- a/codex.spec +++ b/codex.spec @@ -1,5 +1,4 @@ %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} @@ -13,7 +12,8 @@ Summary: OpenAI Codex command-line interface License: Apache-2.0 URL: https://github.com/openai/codex -Source0: %{name}-%{version}-%{package_arch}-unknown-linux-musl.tar.gz +Source0: %{name}-%{version}-x86_64-unknown-linux-musl.tar.gz +Source1: %{name}-%{version}-aarch64-unknown-linux-musl.tar.gz ExclusiveArch: x86_64 aarch64 Requires: git @@ -22,7 +22,13 @@ Requires: git OpenAI Codex is a coding assistant that runs in your terminal. %prep -%autosetup -n %{name}-%{version} +%setup -q -c -T +%ifarch x86_64 +tar -xzf %{SOURCE0} --strip-components=1 +%endif +%ifarch aarch64 +tar -xzf %{SOURCE1} --strip-components=1 +%endif %build diff --git a/make-srpm.sh b/make-srpm.sh index 18c6d4c..34383cd 100755 --- a/make-srpm.sh +++ b/make-srpm.sh @@ -7,19 +7,6 @@ SOURCES_DIR="$TOPDIR/SOURCES" SRPMS_DIR="$TOPDIR/SRPMS" SPECS_DIR="$TOPDIR/SPECS" WORK_DIR="$(mktemp -d)" -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() { @@ -29,19 +16,6 @@ trap cleanup EXIT mkdir -p "$SOURCES_DIR" "$SRPMS_DIR" "$SPECS_DIR" -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/$ASSET_BASENAME" -if [[ ! -x "$UPSTREAM_BINARY" ]]; then - echo "Expected upstream binary $ASSET_BASENAME, but it was not found." >&2 - exit 1 -fi - echo "Resolving latest release tag..." TAG="$( curl -fsSL --retry 3 --retry-delay 2 "$LATEST_RELEASE_API" \ @@ -58,30 +32,49 @@ 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" - -install -pm 0755 "$UPSTREAM_BINARY" "$SOURCE_TREE/codex" echo "Downloading LICENSE and README for $TAG..." curl -fL --retry 3 --retry-delay 2 \ - -o "$SOURCE_TREE/LICENSE" \ + -o "$WORK_DIR/LICENSE" \ "https://raw.githubusercontent.com/openai/codex/$TAG/LICENSE" curl -fL --retry 3 --retry-delay 2 \ - -o "$SOURCE_TREE/README.md" \ + -o "$WORK_DIR/README.md" \ "https://raw.githubusercontent.com/openai/codex/$TAG/README.md" -SOURCE_ARCHIVE="$SOURCES_DIR/codex-$VERSION-$ARCH-unknown-linux-musl.tar.gz" -tar -C "$WORK_DIR" -czf "$SOURCE_ARCHIVE" "codex-$VERSION" +for ARCH in x86_64 aarch64; do + ASSET_BASENAME="codex-$ARCH-unknown-linux-musl" + LATEST_URL="https://github.com/openai/codex/releases/latest/download/$ASSET_BASENAME.tar.gz" + ARCHIVE="$WORK_DIR/$ASSET_BASENAME.tar.gz" + UNPACK_DIR="$WORK_DIR/unpack-$ARCH" + SOURCE_TREE="$WORK_DIR/codex-$VERSION-$ARCH" -cp codex.spec "$SPECS_DIR/codex.spec" + echo "Downloading latest Codex release tarball for $ARCH..." + curl -fL --retry 3 --retry-delay 2 -o "$ARCHIVE" "$LATEST_URL" + + mkdir -p "$UNPACK_DIR" + tar -xzf "$ARCHIVE" -C "$UNPACK_DIR" + + UPSTREAM_BINARY="$UNPACK_DIR/$ASSET_BASENAME" + if [[ ! -x "$UPSTREAM_BINARY" ]]; then + echo "Expected upstream binary $ASSET_BASENAME, but it was not found." >&2 + exit 1 + fi + + mkdir -p "$SOURCE_TREE/codex-$VERSION" + install -pm 0755 "$UPSTREAM_BINARY" "$SOURCE_TREE/codex-$VERSION/codex" + install -pm 0644 "$WORK_DIR/LICENSE" "$SOURCE_TREE/codex-$VERSION/LICENSE" + install -pm 0644 "$WORK_DIR/README.md" "$SOURCE_TREE/codex-$VERSION/README.md" + + SOURCE_ARCHIVE="$SOURCES_DIR/codex-$VERSION-$ARCH-unknown-linux-musl.tar.gz" + tar -C "$SOURCE_TREE" -czf "$SOURCE_ARCHIVE" "codex-$VERSION" +done + +sed "s/^%global up_version .*/%global up_version $VERSION/" \ + 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