You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2022/10/01 16:44:44 UTC

[pulsar-client-cpp] branch main updated: Build release artifacts (#15)

This is an automated email from the ASF dual-hosted git repository.

mmerli pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-client-cpp.git


The following commit(s) were added to refs/heads/main by this push:
     new 0b1eabd  Build release artifacts (#15)
0b1eabd is described below

commit 0b1eabda92bd6896fa4c996ed185687a3d547cda
Author: Matteo Merli <mm...@apache.org>
AuthorDate: Sat Oct 1 09:44:40 2022 -0700

    Build release artifacts (#15)
---
 .github/workflows/ci-build-binary-artifacts.yaml   | 122 +++++++++++++++++++++
 .github/workflows/ci-pr-validation.yaml            |   4 +-
 pkg/deb/Dockerfile                                 |  16 +--
 pkg/deb/build-deb.sh                               |   4 +-
 pkg/deb/{docker-build-deb.sh => create-images.sh}  |  13 ++-
 ...cker-build-deb.sh => docker-build-deb-arm64.sh} |   6 +-
 ...ker-build-deb.sh => docker-build-deb-x86_64.sh} |   4 +-
 pkg/rpm/Dockerfile                                 |  16 +--
 pkg/rpm/build-rpm.sh                               |   2 +-
 .../docker-build-deb.sh => rpm/create-images.sh}   |  13 ++-
 ...cker-build-rpm.sh => docker-build-rpm-arm64.sh} |   9 +-
 ...ker-build-rpm.sh => docker-build-rpm-x86_64.sh} |   7 +-
 12 files changed, 179 insertions(+), 37 deletions(-)

diff --git a/.github/workflows/ci-build-binary-artifacts.yaml b/.github/workflows/ci-build-binary-artifacts.yaml
new file mode 100644
index 0000000..61b1fe4
--- /dev/null
+++ b/.github/workflows/ci-build-binary-artifacts.yaml
@@ -0,0 +1,122 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+name: CI - Build binary artifacts
+on:
+  push:
+    branches:
+      - '*'
+    tags:
+      - '*'
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.ref }}
+  cancel-in-progress: true
+
+jobs:
+
+  deb-packaging-x86_64:
+    name: Build Debian Package - x86_64
+    runs-on: ubuntu-20.04
+    timeout-minutes: 120
+
+    steps:
+      - name: checkout
+        uses: actions/checkout@v2
+
+      - name: Package Pulsar source
+        run: build-support/generate-source-archive.sh
+
+      - name: Build Debian packages
+        run: pkg/deb/docker-build-deb-x86_64.sh
+
+      - name: Upload artifacts
+        uses: actions/upload-artifact@v3
+        with:
+          name: deb-x86_64
+          path: pkg/deb/BUILD/DEB
+
+  deb-packaging-arm64:
+    name: Build Debian Package - Arm64
+    runs-on: ubuntu-20.04
+    timeout-minutes: 120
+
+    steps:
+      - name: checkout
+        uses: actions/checkout@v2
+
+      - name: Set up QEMU
+        uses: docker/setup-qemu-action@v1
+
+      - name: Package Pulsar source
+        run: build-support/generate-source-archive.sh
+
+      - name: Build Debian packages
+        run: pkg/deb/docker-build-deb-arm64.sh
+
+      - name: Upload artifacts
+        uses: actions/upload-artifact@v3
+        with:
+          name: deb-arm64
+          path: pkg/deb/BUILD/DEB
+
+  rpm-packaging-x86_64:
+    name: Build RPM Package - x86_64
+    runs-on: ubuntu-20.04
+    timeout-minutes: 120
+
+    steps:
+      - name: checkout
+        uses: actions/checkout@v2
+
+      - name: Package Pulsar source
+        run: build-support/generate-source-archive.sh
+
+      - name: Build RPM packages
+        run: pkg/rpm/docker-build-rpm-x86_64.sh
+
+      - name: Upload artifacts
+        uses: actions/upload-artifact@v3
+        with:
+          name: rpm-x86_64
+          path: pkg/rpm/RPMS
+
+  rpm-packaging-arm64:
+    name: Build RPM Package - arm64
+    runs-on: ubuntu-20.04
+    timeout-minutes: 120
+
+    steps:
+      - name: checkout
+        uses: actions/checkout@v2
+
+      - name: Set up QEMU
+        uses: docker/setup-qemu-action@v1
+
+      - name: Package Pulsar source
+        run: build-support/generate-source-archive.sh
+
+      - name: Build RPM packages
+        run: pkg/rpm/docker-build-rpm-arm64.sh
+
+      - name: Upload artifacts
+        uses: actions/upload-artifact@v3
+        with:
+          name: rpm-arm64
+          path: pkg/rpm/RPMS
diff --git a/.github/workflows/ci-pr-validation.yaml b/.github/workflows/ci-pr-validation.yaml
index e0a9c7f..4887214 100644
--- a/.github/workflows/ci-pr-validation.yaml
+++ b/.github/workflows/ci-pr-validation.yaml
@@ -164,7 +164,7 @@ jobs:
       - name: Build Debian packages
         run: |
           echo "Build Debian packages"
-          BUILD_IMAGE=1 pkg/deb/docker-build-deb.sh
+          BUILD_IMAGE=1 pkg/deb/docker-build-deb-x86_64.sh
 
   rpm-packaging:
     name: Build RPM Package
@@ -181,7 +181,7 @@ jobs:
       - name: Build RPM packages
         run: |
           echo "Build RPM packages"
-          BUILD_IMAGE=1 pkg/rpm/docker-build-rpm.sh
+          BUILD_IMAGE=1 pkg/rpm/docker-build-rpm-x86_64.sh
 
 #  apk-packaging:
 #    name: Build Alpine Linux APK Package
diff --git a/pkg/deb/Dockerfile b/pkg/deb/Dockerfile
index 171c829..839f05a 100644
--- a/pkg/deb/Dockerfile
+++ b/pkg/deb/Dockerfile
@@ -19,7 +19,9 @@
 
 # Build pulsar client library in Centos with tools to
 
-FROM --platform=linux/amd64 debian:9
+FROM debian:9
+
+ARG PLATFORM
 
 # perl is required to install OpenSSL
 RUN apt-get update -y && \
@@ -33,11 +35,11 @@ RUN curl -O -L https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/
     ./b2 address-model=64 cxxflags=-fPIC link=static threading=multi variant=release install && \
     rm -rf /boost_1_79_0.tar.gz /boost_1_79_0
 
-RUN curl -O -L https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-x86_64.tar.gz && \
-    tar xfz cmake-3.24.0-linux-x86_64.tar.gz && \
-    cp cmake-3.24.0-linux-x86_64/bin/* /usr/bin/ && \
-    cp -r cmake-3.24.0-linux-x86_64/share/cmake-3.24 /usr/share/ && \
-    rm -rf cmake-3.24.0-linux-x86_64 cmake-3.24.0-linux-x86_64.tar.gz
+RUN curl -O -L https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-${PLATFORM}.tar.gz && \
+    tar xfz cmake-3.24.0-linux-${PLATFORM}.tar.gz && \
+    cp cmake-3.24.0-linux-${PLATFORM}/bin/* /usr/bin/ && \
+    cp -r cmake-3.24.0-linux-${PLATFORM}/share/cmake-3.24 /usr/share/ && \
+    rm -rf cmake-3.24.0-linux-${PLATFORM} cmake-3.24.0-linux-${PLATFORM}.tar.gz
 
 # Download and copile protoubf
 RUN curl -O -L  https://github.com/google/protobuf/releases/download/v3.20.0/protobuf-cpp-3.20.0.tar.gz && \
@@ -74,7 +76,7 @@ RUN curl -O -L https://github.com/google/snappy/releases/download/1.1.3/snappy-1
 RUN curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz && \
     tar xfz OpenSSL_1_1_1n.tar.gz && \
     cd openssl-OpenSSL_1_1_1n/ && \
-    ./Configure -fPIC --prefix=/usr/local/ssl/ linux-x86_64 && \
+    ./Configure -fPIC --prefix=/usr/local/ssl/ linux-${PLATFORM} && \
     make -j8 && make install && \
     rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n
 
diff --git a/pkg/deb/build-deb.sh b/pkg/deb/build-deb.sh
index 5835714..b1d30ec 100755
--- a/pkg/deb/build-deb.sh
+++ b/pkg/deb/build-deb.sh
@@ -51,7 +51,7 @@ cat <<EOF > $DEST_DIR/DEBIAN/control
 Package: apache-pulsar-client
 Version: ${VERSION}
 Maintainer: Apache Pulsar <de...@pulsar.apache.org>
-Architecture: amd64
+Architecture: ${PLATFORM}
 Description: The Apache Pulsar client contains a C++ and C APIs to interact with Apache Pulsar brokers.
 EOF
 
@@ -61,7 +61,7 @@ cat <<EOF > $DEVEL_DEST_DIR/DEBIAN/control
 Package: apache-pulsar-client-dev
 Version: ${VERSION}
 Maintainer: Apache Pulsar <de...@pulsar.apache.org>
-Architecture: amd64
+Architecture: ${PLATFORM}
 Depends: apache-pulsar-client
 Description: The Apache Pulsar client contains a C++ and C APIs to interact with Apache Pulsar brokers.
 EOF
diff --git a/pkg/deb/docker-build-deb.sh b/pkg/deb/create-images.sh
similarity index 74%
copy from pkg/deb/docker-build-deb.sh
copy to pkg/deb/create-images.sh
index 85e4cef..ad85357 100755
--- a/pkg/deb/docker-build-deb.sh
+++ b/pkg/deb/create-images.sh
@@ -18,12 +18,15 @@
 # under the License.
 #
 
-set -ex
+set -e -x
 
 ROOT_DIR=$(git rev-parse --show-toplevel)
+cd $ROOT_DIR/pkg/deb
 
-IMAGE_NAME=apachepulsar/pulsar-build:debian-9-2.11-x86_64
+# ARM
+IMAGE=apachepulsar/pulsar-build:debian-9-2.11-arm64
+docker build --platform arm64 -t $IMAGE . --build-arg PLATFORM=aarch64
 
-docker pull $IMAGE_NAME
-docker run -v $ROOT_DIR:/pulsar-client-cpp $IMAGE_NAME \
-        /pulsar-client-cpp/pkg/deb/build-deb.sh
+# X86_64
+IMAGE=apachepulsar/pulsar-build:debian-9-2.11-x86_64
+docker build --platform x86_64 -t $IMAGE . --build-arg PLATFORM=x86_64
diff --git a/pkg/deb/docker-build-deb.sh b/pkg/deb/docker-build-deb-arm64.sh
similarity index 85%
copy from pkg/deb/docker-build-deb.sh
copy to pkg/deb/docker-build-deb-arm64.sh
index 85e4cef..5a814b2 100755
--- a/pkg/deb/docker-build-deb.sh
+++ b/pkg/deb/docker-build-deb-arm64.sh
@@ -22,8 +22,10 @@ set -ex
 
 ROOT_DIR=$(git rev-parse --show-toplevel)
 
-IMAGE_NAME=apachepulsar/pulsar-build:debian-9-2.11-x86_64
+IMAGE_NAME=apachepulsar/pulsar-build:debian-9-2.11-arm64
 
 docker pull $IMAGE_NAME
-docker run -v $ROOT_DIR:/pulsar-client-cpp $IMAGE_NAME \
+docker run -v $ROOT_DIR:/pulsar-client-cpp \
+        --env PLATFORM=arm64 \
+        $IMAGE_NAME \
         /pulsar-client-cpp/pkg/deb/build-deb.sh
diff --git a/pkg/deb/docker-build-deb.sh b/pkg/deb/docker-build-deb-x86_64.sh
similarity index 91%
copy from pkg/deb/docker-build-deb.sh
copy to pkg/deb/docker-build-deb-x86_64.sh
index 85e4cef..5a958a6 100755
--- a/pkg/deb/docker-build-deb.sh
+++ b/pkg/deb/docker-build-deb-x86_64.sh
@@ -25,5 +25,7 @@ ROOT_DIR=$(git rev-parse --show-toplevel)
 IMAGE_NAME=apachepulsar/pulsar-build:debian-9-2.11-x86_64
 
 docker pull $IMAGE_NAME
-docker run -v $ROOT_DIR:/pulsar-client-cpp $IMAGE_NAME \
+docker run -v $ROOT_DIR:/pulsar-client-cpp \
+        --env PLATFORM=amd64 \
+        $IMAGE_NAME \
         /pulsar-client-cpp/pkg/deb/build-deb.sh
diff --git a/pkg/rpm/Dockerfile b/pkg/rpm/Dockerfile
index 246ca23..e4b809b 100644
--- a/pkg/rpm/Dockerfile
+++ b/pkg/rpm/Dockerfile
@@ -21,9 +21,11 @@
 
 FROM centos:7
 
+ARG PLATFORM
+
 RUN yum update -y && \
     yum install -y gcc-c++ make rpm-build which \
-                createrepo libstdc++-static.x86_64 python3
+                createrepo libstdc++-static python3
 
 # Download and compile boost
 # GCC 4.8.2 implementation of std::regex is buggy, so we install boost::regex here
@@ -34,11 +36,11 @@ RUN curl -O -L https://boostorg.jfrog.io/artifactory/main/release/1.79.0/source/
     ./b2 address-model=64 cxxflags=-fPIC link=static threading=multi variant=release install && \
     rm -rf /boost_1_79_0.tar.gz /boost_1_79_0
 
-RUN curl -O -L https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-x86_64.tar.gz && \
-    tar xfz cmake-3.24.0-linux-x86_64.tar.gz && \
-    cp cmake-3.24.0-linux-x86_64/bin/* /usr/bin/ && \
-    cp -r cmake-3.24.0-linux-x86_64/share/cmake-3.24 /usr/share/ && \
-    rm -rf cmake-3.24.0-linux-x86_64 cmake-3.24.0-linux-x86_64.tar.gz
+RUN curl -O -L https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-${PLATFORM}.tar.gz && \
+    tar xfz cmake-3.24.0-linux-${PLATFORM}.tar.gz && \
+    cp cmake-3.24.0-linux-${PLATFORM}/bin/* /usr/bin/ && \
+    cp -r cmake-3.24.0-linux-${PLATFORM}/share/cmake-3.24 /usr/share/ && \
+    rm -rf cmake-3.24.0-linux-${PLATFORM} cmake-3.24.0-linux-${PLATFORM}.tar.gz
 
 # Download and copile protoubf
 RUN curl -O -L  https://github.com/google/protobuf/releases/download/v3.20.0/protobuf-cpp-3.20.0.tar.gz && \
@@ -75,7 +77,7 @@ RUN curl -O -L https://github.com/google/snappy/releases/download/1.1.3/snappy-1
 RUN curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz && \
     tar xfz OpenSSL_1_1_1n.tar.gz && \
     cd openssl-OpenSSL_1_1_1n/ && \
-    ./Configure -fPIC --prefix=/usr/local/ssl/ linux-x86_64 && \
+    ./Configure -fPIC --prefix=/usr/local/ssl/ linux-${PLATFORM} && \
     make -j8 && make install && \
     rm -rf /OpenSSL_1_1_1n.tar.gz /openssl-OpenSSL_1_1_1n
 
diff --git a/pkg/rpm/build-rpm.sh b/pkg/rpm/build-rpm.sh
index 977ae72..6f15a84 100755
--- a/pkg/rpm/build-rpm.sh
+++ b/pkg/rpm/build-rpm.sh
@@ -39,5 +39,5 @@ rpmbuild -v -bb --clean \
         --define "_topdir $PWD" \
         SPECS/pulsar-client.spec
 
-cd RPMS/x86_64
+cd RPMS/${PLATFORM}
 createrepo .
diff --git a/pkg/deb/docker-build-deb.sh b/pkg/rpm/create-images.sh
similarity index 74%
rename from pkg/deb/docker-build-deb.sh
rename to pkg/rpm/create-images.sh
index 85e4cef..9bfb3ee 100755
--- a/pkg/deb/docker-build-deb.sh
+++ b/pkg/rpm/create-images.sh
@@ -18,12 +18,15 @@
 # under the License.
 #
 
-set -ex
+set -e -x
 
 ROOT_DIR=$(git rev-parse --show-toplevel)
+cd $ROOT_DIR/pkg/rpm
 
-IMAGE_NAME=apachepulsar/pulsar-build:debian-9-2.11-x86_64
+# ARM
+IMAGE=apachepulsar/pulsar-build:centos-7-2.11-arm64
+docker build --platform arm64 -t $IMAGE . --build-arg PLATFORM=aarch64
 
-docker pull $IMAGE_NAME
-docker run -v $ROOT_DIR:/pulsar-client-cpp $IMAGE_NAME \
-        /pulsar-client-cpp/pkg/deb/build-deb.sh
+# X86_64
+IMAGE=apachepulsar/pulsar-build:centos-7-2.11-x86_64
+docker build --platform x86_64 -t $IMAGE . --build-arg PLATFORM=x86_64
diff --git a/pkg/rpm/docker-build-rpm.sh b/pkg/rpm/docker-build-rpm-arm64.sh
similarity index 81%
copy from pkg/rpm/docker-build-rpm.sh
copy to pkg/rpm/docker-build-rpm-arm64.sh
index 3c50a51..07d05d6 100755
--- a/pkg/rpm/docker-build-rpm.sh
+++ b/pkg/rpm/docker-build-rpm-arm64.sh
@@ -20,10 +20,13 @@
 
 set -ex
 
-ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../.. &> /dev/null && pwd )"
-IMAGE_NAME=apachepulsar/pulsar-build:centos-7-2.11-x86_64
+ROOT_DIR=$(git rev-parse --show-toplevel)
+
+IMAGE_NAME=apachepulsar/pulsar-build:centos-7-2.11-arm64
 
 docker pull $IMAGE_NAME
 
-docker run -v $ROOT_DIR:/pulsar-client-cpp $IMAGE_NAME \
+docker run -v $ROOT_DIR:/pulsar-client-cpp \
+        --env PLATFORM=aarch64 \
+        $IMAGE_NAME \
         /pulsar-client-cpp/pkg/rpm/build-rpm.sh
diff --git a/pkg/rpm/docker-build-rpm.sh b/pkg/rpm/docker-build-rpm-x86_64.sh
similarity index 87%
rename from pkg/rpm/docker-build-rpm.sh
rename to pkg/rpm/docker-build-rpm-x86_64.sh
index 3c50a51..69707c1 100755
--- a/pkg/rpm/docker-build-rpm.sh
+++ b/pkg/rpm/docker-build-rpm-x86_64.sh
@@ -20,10 +20,13 @@
 
 set -ex
 
-ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../.. &> /dev/null && pwd )"
+ROOT_DIR=$(git rev-parse --show-toplevel)
+
 IMAGE_NAME=apachepulsar/pulsar-build:centos-7-2.11-x86_64
 
 docker pull $IMAGE_NAME
 
-docker run -v $ROOT_DIR:/pulsar-client-cpp $IMAGE_NAME \
+docker run -v $ROOT_DIR:/pulsar-client-cpp \
+        --env PLATFORM=x86_64 \
+        $IMAGE_NAME \
         /pulsar-client-cpp/pkg/rpm/build-rpm.sh