From 01158760a52e1e88a7e97bbc2684766493c92678 Mon Sep 17 00:00:00 2001 From: agnik Date: Sat, 5 Oct 2024 01:59:08 +0530 Subject: [PATCH] init native packages for fedora --- .github/workflows/release-fedora.yml | 52 ++++++++++++++++++++++++++++ README.md | 13 +++++-- fedora-build.sh | 46 ++++++++++++++++++++++++ package_rpm.sh | 31 +++++++++++++++++ 4 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/release-fedora.yml create mode 100644 fedora-build.sh create mode 100644 package_rpm.sh diff --git a/.github/workflows/release-fedora.yml b/.github/workflows/release-fedora.yml new file mode 100644 index 00000000..12872b74 --- /dev/null +++ b/.github/workflows/release-fedora.yml @@ -0,0 +1,52 @@ +name: Release Stone Prover for Fedora + +on: + push: + tags: + - 'v*.*.*' + +jobs: + build: + runs-on: ubuntu-latest + container: + image: fedora:38 + options: --workdir /github/workspace + env: + TARGET_ARCH: x86_64 + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up environment and build + run: | + chmod +x ./fedora-build.sh + ./fedora-build.sh + + - name: Test + run: | + chmod +x ./test.sh + ./test.sh + + - name: Set version output + id: vars + run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT + + - name: Package RPM + run: | + chmod +x ./package_rpm.sh + ./package_rpm.sh ${{ steps.vars.outputs.tag }} + + + - name: Rename RPM package + run: | + mv /tmp/stone-prover/*.rpm /github/workspace/stone-prover-fedora-${TARGET_ARCH}.rpm + + + - name: Upload files to GitHub release + uses: softprops/action-gh-release@v2 + with: + files: | + /github/workspace/*.rpm + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 8a60b80e..18abc26e 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,10 @@ The goal of this project is to reduce friction and speed up the process of gener - [x] Static binary releases for ARM64 - [x] Minimal Docker images for x86_64 - [x] Native packages for Debian/Ubuntu +- [x] Native packages for Fedora Follow-up work: -- Native packages for Fedora + - Native packages for Alpine - Homebrew packages - Technical documentation for file formats (inputs, outputs, memory, trace, proof), and test data @@ -118,7 +119,15 @@ Download the .deb package from the latest release: wget https://github.com/dipdup-io/stone-packaging/releases/latest/download/stone-prover-linux-x86_64.deb && sudo dpkg -i stone-prover-linux-x86_64.deb ``` -### Creating and Verifying a Test Proof Using the .deb Package +## Download Native Packages for Ubuntu + +Download the .rpm package from the latest release: + +```bash +sudo dnf install https://github.com/dipdup-io/stone-packaging/releases/latest/download/stone-prover-fedora-x86_64.rpm +``` + +### Creating and Verifying a Test Proof Using the Native Packages Clone the repository: diff --git a/fedora-build.sh b/fedora-build.sh new file mode 100644 index 00000000..5c6e158c --- /dev/null +++ b/fedora-build.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# Build script for Fedora +set -o xtrace +set -e +os=$(uname | tr '[:upper:]' '[:lower:]') +arch=$(uname -m | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) + + +# Update and install system dependencies +dnf update -y && dnf install -y \ + git \ + gcc gcc-c++ make wget openssl-devel bzip2-devel libffi-devel \ + elfutils-libelf-devel gmp-devel elfutils-devel clang \ + libstdc++-devel libcxx libcxx-devel ncurses-compat-libs cairo-devel \ + zlib-devel ncurses-devel sqlite-devel \ + rpm-build \ + readline-devel tk-devel gdbm-devel xz-devel \ + +# Install Python 3.9 from source +wget https://www.python.org/ftp/python/3.9.17/Python-3.9.17.tgz \ + && tar xzf Python-3.9.17.tgz \ + && cd Python-3.9.17 \ + && ./configure --enable-optimizations \ + && make altinstall \ + && cd .. && rm -rf Python-3.9.17* + +# Install Python packages +pip3.9 install cpplint pytest numpy sympy==1.12.1 cairo-lang==0.12.0 + +# Install Bazelisk +wget "https://github.com/bazelbuild/bazelisk/releases/download/v1.20.0/bazelisk-$os-$arch" + chmod 755 "bazelisk-$os-$arch" + sudo mv "bazelisk-$os-$arch" /bin/bazelisk + +git clone https://github.com/baking-bad/stone-prover.git /tmp/stone-prover + +cd /tmp/stone-prover || exit + +bazelisk build --cpu=$arch //... + +bazelisk test --cpu=$arch //... + +# Create symbolic links for cpu_air_prover and cpu_air_verifier +ln -s /tmp/stone-prover/build/bazelbin/src/starkware/main/cpu/cpu_air_prover /usr/local/bin/cpu_air_prover +ln -s /tmp/stone-prover/build/bazelbin/src/starkware/main/cpu/cpu_air_verifier /usr/local/bin/cpu_air_verifier + diff --git a/package_rpm.sh b/package_rpm.sh new file mode 100644 index 00000000..c9a48ff3 --- /dev/null +++ b/package_rpm.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +set -e + +# Install dependencies +sudo dnf install -y ruby ruby-devel rubygems gcc make rpm-build + +# Install fpm +sudo gem install --no-document fpm + +# Create a temporary directory for the package + +mkdir -p /tmp/stone-prover/usr/bin + +TAG=$1 + +# Copy binaries into the package directory +cp /usr/local/bin/cpu_air_prover /tmp/stone-prover/usr/bin/ +cp /usr/local/bin/cpu_air_verifier /tmp/stone-prover/usr/bin/ + +# Build the RPM package using fpm +fpm -s dir -t rpm \ + -n stone-prover \ + -v "$(echo $TAG | cut -c 2-)" \ + -a "$(uname -m)" \ + -C /tmp/stone-prover/ \ + --prefix / \ + --depends libdw1 \ + --maintainer "Baking Bad " \ + --description "Stone prover RPM package" \ + -p /tmp/stone-prover/stone-prover.rpm