diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..f9c8ccd7 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,131 @@ +name: Build + +on: + pull_request: + push: + branches: + - 'master' + tags: + - '**' + +jobs: + build-linux: + runs-on: [ "self-hosted", "aws_autoscaling"] + + env: + CONTAINER_TMP: /opt/ + HOST_TMP: /home/runner/work/_temp/ + DEBIAN_FRONTEND: noninteractive + BOOST_VERSION: "1.80.0" + + container: + image: ubuntu:22.04 + volumes: + - /home/runner/work/_temp/:/opt/ + + steps: + - name: Install dependencies + run: | + env && \ + apt update && \ + apt install -y \ + build-essential \ + libssl-dev \ + cmake \ + git \ + unzip \ + libicu-dev \ + curl \ + pkg-config \ + libspdlog-dev + + - name: Print toolchain information + run: | + git --version + cc --version + cmake --version + + - name: Checkout sources + uses: actions/checkout@v3 + with: + submodules: 'recursive' + fetch-depth: 0 + + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + # Workaround: https://github.com/actions/checkout/issues/1169 + - name: Mark directory as safe + run: | + git config --system --add safe.directory $PWD + + - name: Install boost + uses: MarkusJx/install-boost@v2.4.1 + id: install-boost + with: + # A list of supported versions can be found here: + # https://github.com/MarkusJx/prebuilt-boost/blob/main/versions-manifest.json + boost_version: ${{ env.BOOST_VERSION }} + boost_install_dir: ${{ env.CONTAINER_TMP }} + platform_version: 22.04 + toolset: gcc + arch: x86 + + - name: Configure CMake + env: + BOOST_ROOT: "${{ steps.install-boost.outputs.BOOST_ROOT }}" + run: | + cmake -G "Unix Makefiles" \ + -B build \ + -DCMAKE_BUILD_TYPE=Release + + - name: Build proof-producer + env: + BOOST_ROOT: "${{ steps.install-boost.outputs.BOOST_ROOT }}" + run: | + cd build + make + cd .. + + - name: Create .deb package + # always build deb packages to check that they're buildable + # although, push them only on tags (see later) + run: | + mkdir -p .debpkg/usr/bin + cp ./build/bin/proof-generator/proof-generator .debpkg/usr/bin + + chmod +x .debpkg/usr/bin/proof-generator + mkdir -p .debpkg/DEBIAN + + - uses: jiro4989/build-deb-action@v3 + with: + package: proof-generator + package_root: .debpkg + maintainer: =nil; Foundation + version: 0.1 + arch: 'amd64' + desc: 'zkllvm proof-generator' + + - name: Install aws tools + # these steps run only on tag push => deb package release + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + run: | + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + ./aws/install + pip3 install mkrepo + + - name: Upload packages to repository + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + env: + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} + run: | + PROOF_GENERATOR_PACKAGE=`ls proof-generator*.deb | cut -d'/' -f2` + POOL="ubuntu/pool/main/p/proof-generator" + aws s3api put-object --bucket deb.nil.foundation --key $POOL/$PROOF_GENERATOR_PACKAGE --body $PROOF_GENERATOR_PACKAGE + mkrepo s3://deb.nil.foundation/ubuntu/ + diff --git a/README.md b/README.md index c1691aa4..3552b62c 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,27 @@ ${ZKLLVM_BUILD:-build}/bin/assigner/assigner -b ${ZKLLVM_BUILD:-build}/examples/ ./bin/proof-generator/proof-generator --circuit=./merkle_tree_sha2_256_circuit.crt --assignment-table=/balances_tree.tbl --proof=./proof.txt ``` +# Releases + +## DEB packages + +Building DEB packages is tested on every CI run. +This way developers can be sure that their code can be built to a package +before they merge it. + +To make a DEB release: + +1. Update the version in the `VERSION` file, for example, `v0.42.0`. +2. Push this commit to the `master` branch. +3. Push a tag on this commit, named same as the version: + + ``` + git tag v0.42.0 + git push origin v0.42.0 + ``` + +4. Wait for CI to build and publish the package. + ## Toolchain Docker image Build an image: diff --git a/VERSION b/VERSION new file mode 100644 index 00000000..6c6aa7cb --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.1.0 \ No newline at end of file