Explorar el Código

Merge pull request #13594 from emqx/auto-update-i18-and-docs-on-new-tags

ci: automatically create PRs to emqx/emqx-i18n and emqx/emqx-docs
Ivan Dyachkov hace 1 año
padre
commit
c4dc09a5c4

+ 1 - 0
.github/actions/package-macos/action.yaml

@@ -1,4 +1,5 @@
 name: 'Create MacOS package'
+description: 'Build MacOS package for emqx or emqx-enterprise'
 inputs:
   profile: # emqx, emqx-enterprise
     required: true

+ 1 - 1
.github/actions/prepare-jmeter/action.yaml

@@ -1,5 +1,5 @@
 name: 'Prepare jmeter'
-
+description: 'Download jmeter packages'
 runs:
   using: composite
   steps:

+ 34 - 8
.github/workflows/_pr_entrypoint.yaml

@@ -149,14 +149,24 @@ jobs:
         run: |
           make ensure-rebar3
           make ${PROFILE}-compile test-compile
-          echo "PROFILE=${PROFILE}" | tee -a .env
-          echo "PKG_VSN=$(./pkg-vsn.sh ${PROFILE})" | tee -a .env
+          echo "export PROFILE=${PROFILE}" | tee -a env.sh
+          echo "export PKG_VSN=$(./pkg-vsn.sh ${PROFILE})" | tee -a env.sh
           zip -ryq -x@.github/workflows/.zipignore $PROFILE.zip .
+          make ${PROFILE}-rel
       - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4.3.5
         with:
           name: ${{ matrix.profile }}
           path: ${{ matrix.profile }}.zip
           retention-days: 7
+      - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4.3.5
+        with:
+          name: "${{ matrix.profile }}-schema-dump"
+          path: |
+            env.sh
+            scripts/spellcheck
+            _build/docgen/${{ matrix.profile }}/*.json
+            _build/docgen/${{ matrix.profile }}/*.hocon
+          retention-days: 7
 
   run_emqx_app_tests:
     needs:
@@ -196,16 +206,30 @@ jobs:
       - sanity-checks
     uses: ./.github/workflows/build_slim_packages.yaml
 
-  build_docker_for_test:
+  build_docker_emqx:
+    needs:
+      - init
+      - sanity-checks
+    uses: ./.github/workflows/build_and_push_docker_images.yaml
+    with:
+      profile: emqx
+      publish: false
+    secrets: inherit
+
+  build_docker_emqx_enterprise:
     needs:
       - init
       - sanity-checks
-    uses: ./.github/workflows/build_docker_for_test.yaml
+    uses: ./.github/workflows/build_and_push_docker_images.yaml
+    with:
+      profile: emqx-enterprise
+      publish: false
+    secrets: inherit
 
   spellcheck:
     needs:
       - sanity-checks
-      - build_slim_packages
+      - compile
     uses: ./.github/workflows/spellcheck.yaml
 
   run_conf_tests:
@@ -228,17 +252,19 @@ jobs:
   run_jmeter_tests:
     needs:
       - sanity-checks
-      - build_docker_for_test
+      - build_docker_emqx
     uses: ./.github/workflows/run_jmeter_tests.yaml
 
   run_docker_tests:
     needs:
       - sanity-checks
-      - build_docker_for_test
+      - build_docker_emqx
+      - build_docker_emqx_enterprise
     uses: ./.github/workflows/run_docker_tests.yaml
 
   run_helm_tests:
     needs:
       - sanity-checks
-      - build_docker_for_test
+      - build_docker_emqx
+      - build_docker_emqx_enterprise
     uses: ./.github/workflows/run_helm_tests.yaml

+ 38 - 9
.github/workflows/_push-entrypoint.yaml

@@ -32,8 +32,6 @@ jobs:
       OTP_VSN: ${{ steps.env.outputs.OTP_VSN }}
       ELIXIR_VSN: ${{ steps.env.outputs.ELIXIR_VSN }}
       BUILDER: ${{ steps.env.outputs.BUILDER }}
-      BUILD_FROM: ${{ steps.env.outputs.BUILD_FROM }}
-      RUN_FROM: ${{ steps.env.outputs.BUILD_FROM }}
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
         with:
@@ -46,8 +44,6 @@ jobs:
           echo "OTP_VSN=$OTP_VSN" >> "$GITHUB_OUTPUT"
           echo "ELIXIR_VSN=$ELIXIR_VSN" >> "$GITHUB_OUTPUT"
           echo "BUILDER=$EMQX_BUILDER" >> "$GITHUB_OUTPUT"
-          echo "BUILD_FROM=$EMQX_DOCKER_BUILD_FROM" >> "$GITHUB_OUTPUT"
-          echo "RUN_FROM=$EMQX_DOCKER_RUN_FROM" >> "$GITHUB_OUTPUT"
 
   prepare:
     runs-on: ubuntu-22.04
@@ -119,8 +115,6 @@ jobs:
       profile: ${{ needs.prepare.outputs.profile }}
       publish: true
       latest: ${{ needs.prepare.outputs.latest }}
-      build_from: ${{ needs.init.outputs.BUILD_FROM }}
-      run_from: ${{ needs.init.outputs.RUN_FROM }}
     secrets: inherit
 
   build_slim_packages:
@@ -160,14 +154,49 @@ jobs:
           ENABLE_COVER_COMPILE: 1
         run: |
           make $PROFILE
-          echo "PROFILE=${PROFILE}" | tee -a .env
-          echo "PKG_VSN=$(./pkg-vsn.sh ${PROFILE})" | tee -a .env
+          echo "export PROFILE=${PROFILE}" | tee -a env.sh
+          echo "export PKG_VSN=$(./pkg-vsn.sh ${PROFILE})" | tee -a env.sh
           zip -ryq -x@.github/workflows/.zipignore $PROFILE.zip .
+          make ${PROFILE}-rel
       - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4.3.5
         with:
           name: ${{ matrix.profile }}
           path: ${{ matrix.profile }}.zip
-          retention-days: 1
+          retention-days: 7
+      - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4.3.5
+        with:
+          name: "${{ matrix.profile }}-schema-dump"
+          path: |
+            env.sh
+            _build/docgen/${{ matrix.profile }}/*.json
+            _build/docgen/${{ matrix.profile }}/*.hocon
+          retention-days: 7
+
+  update_emqx_i18n:
+    if: needs.prepare.outputs.release == 'true'
+    needs:
+      - prepare
+      - compile
+    runs-on: ubuntu-22.04'
+    steps:
+      - name: Create PR in emqx/emqx-i18n
+        env:
+          GH_TOKEN: ${{ secrets.CI_GITHUB_TOKEN_DOCS_I18N_RW }}
+        run: |
+          gh --repo emqx/emqx-i18n workflow run sync-en-doc.yaml -f version=${GITHUB_REF_NAME##[v|e]} -f repository=${GITHUB_REPOSITORY} -f run_id=${GITHUB_RUN_ID}
+
+  update_emqx_docs:
+    if: needs.prepare.outputs.release == 'true'
+    needs:
+      - prepare
+      - compile
+    runs-on: ubuntu-22.04
+    steps:
+      - name: Create PR in emqx/emqx-docs
+        env:
+          GH_TOKEN: ${{ secrets.CI_GITHUB_TOKEN_DOCS_I18N_RW }}
+        run: |
+          gh --repo emqx/emqx-docs workflow run update-api-and-cfg-manual.yaml -f version=${GITHUB_REF_NAME##[v|e]} -f repository=${GITHUB_REPOSITORY} -f run_id=${GITHUB_RUN_ID}
 
   run_emqx_app_tests:
     needs:

+ 38 - 37
.github/workflows/build_and_push_docker_images.yaml

@@ -1,7 +1,7 @@
 name: Build and push docker images
 
 concurrency:
-  group: docker-build-${{ github.event_name }}-${{ github.ref }}
+  group: docker-build-${{ github.event_name }}-${{ inputs.profile }}-${{ github.ref }}
   cancel-in-progress: true
 
 on:
@@ -11,17 +11,13 @@ on:
         required: true
         type: string
       latest:
-        required: true
+        required: false
         type: string
+        default: false
       publish:
-        required: true
+        required: false
         type: boolean
-      build_from:
-        required: true
-        type: string
-      run_from:
-        required: true
-        type: string
+        default: false
     secrets:
       DOCKER_HUB_USER:
         required: true
@@ -47,12 +43,6 @@ on:
         required: false
         type: boolean
         default: false
-      build_from:
-        required: false
-        type: string
-        default: ghcr.io/emqx/emqx-builder/5.3-9:1.15.7-26.2.5-3-debian12
-      run_from:
-        default: public.ecr.aws/debian/debian:stable-20240612-slim
 
 permissions:
   contents: read
@@ -60,7 +50,6 @@ permissions:
 jobs:
   build:
     runs-on: ${{ github.repository_owner == 'emqx' && fromJSON(format('["self-hosted","ephemeral","linux","{0}"]', matrix.arch)) || 'ubuntu-22.04' }}
-    container: ${{ inputs.build_from }}
     outputs:
       PKG_VSN: ${{ steps.build.outputs.PKG_VSN }}
 
@@ -78,14 +67,18 @@ jobs:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
         with:
           ref: ${{ github.event.inputs.ref }}
-      - run: git config --global --add safe.directory "$PWD"
       - name: build release tarball
         id: build
+        env:
+          BUILDER_SYSTEM: force_docker
         run: |
-          make ${{ matrix.profile }}-tgz
+          source ./env.sh
+          ./scripts/buildx.sh --profile ${{ matrix.profile }} --pkgtype tgz --builder "$EMQX_DOCKER_BUILD_FROM"
+          PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_DOCKER_BUILD_FROM" ./pkg-vsn.sh "${{ matrix.profile }}")
+          echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_OUTPUT"
       - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4.3.5
         with:
-          name: "${{ matrix.profile }}-${{ matrix.arch }}.tar.gz"
+          name: "${{ matrix.profile }}-${{ matrix.arch == 'x64' && 'amd64' || 'arm64' }}.tar.gz"
           path: "_packages/emqx*/emqx-*.tar.gz"
           retention-days: 7
           overwrite: true
@@ -106,6 +99,14 @@ jobs:
           - ["${{ inputs.profile }}", "${{ inputs.profile == 'emqx' && 'docker.io,public.ecr.aws' || 'docker.io' }}"]
           - ["${{ inputs.profile }}-elixir", "${{ inputs.profile == 'emqx' && 'docker.io,public.ecr.aws' || 'docker.io' }}"]
 
+    env:
+      PROFILE: ${{ matrix.profile[0] }}
+      DOCKER_REGISTRY: ${{ matrix.profile[1] }}
+      DOCKER_ORG: ${{ github.repository_owner }}
+      DOCKER_LATEST: ${{ inputs.latest }}
+      PKG_VSN: ${{ needs.build.outputs.PKG_VSN }}
+      EMQX_SOURCE_TYPE: tgz
+
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
         with:
@@ -148,18 +149,10 @@ jobs:
           password: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
           ecr: true
 
-      - name: Build docker image for smoke test
+      - name: Build docker image
         env:
-          PROFILE: ${{ matrix.profile[0] }}
-          DOCKER_REGISTRY: ${{ matrix.profile[1] }}
-          DOCKER_ORG: ${{ github.repository_owner }}
-          DOCKER_LATEST: ${{ inputs.latest }}
           DOCKER_PUSH: false
           DOCKER_BUILD_NOCACHE: true
-          BUILD_FROM: ${{ inputs.build_from }}
-          RUN_FROM: ${{ inputs.run_from }}
-          PKG_VSN: ${{ needs.build.outputs.PKG_VSN }}
-          EMQX_SOURCE_TYPE: tgz
         run: |
           ./build ${PROFILE} docker
           echo "Built tags:"
@@ -168,6 +161,10 @@ jobs:
           echo "==========="
           echo "_EMQX_DOCKER_IMAGE_TAG=$(head -n 1 .emqx_docker_image_tags)" >> $GITHUB_ENV
 
+      - name: Verify that size of docker image is less than 300 MB
+        run: |
+          docker image inspect $_EMQX_DOCKER_IMAGE_TAG --format='{{.Size}}' | xargs -I {} test {} -lt 300000000
+
       - name: smoke test
         timeout-minutes: 1
         run: |
@@ -177,6 +174,7 @@ jobs:
             ./scripts/test/emqx-smoke-test.sh localhost $HTTP_PORT
             docker rm -f $CID
           done
+
       - name: dashboard tests
         working-directory: ./scripts/ui-tests
         timeout-minutes: 5
@@ -184,6 +182,7 @@ jobs:
           set -eu
           docker compose up --abort-on-container-exit --exit-code-from selenium
           docker compose rm -fsv
+
       - name: test node_dump
         run: |
           CID=$(docker run -d -P $_EMQX_DOCKER_IMAGE_TAG)
@@ -191,20 +190,22 @@ jobs:
           docker exec -t -u root $CID node_dump
           docker rm -f $CID
 
-      - name: Build and push docker image
+      - name: export docker image
+        run: |
+          docker save $_EMQX_DOCKER_IMAGE_TAG | gzip > $PROFILE-docker-$PKG_VSN.tar.gz
+
+      - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4.3.5
+        with:
+          name: "${{ env.PROFILE }}-docker"
+          path: "${{ env.PROFILE }}-docker-${{ env.PKG_VSN }}.tar.gz"
+          retention-days: 7
+
+      - name: Publish docker image
         if: inputs.publish || github.repository_owner != 'emqx'
         env:
-          PROFILE: ${{ matrix.profile[0] }}
-          DOCKER_REGISTRY: ${{ matrix.profile[1] }}
-          DOCKER_ORG: ${{ github.repository_owner }}
-          DOCKER_LATEST: ${{ inputs.latest }}
           DOCKER_PUSH: true
           DOCKER_BUILD_NOCACHE: false
           DOCKER_PLATFORMS: linux/amd64,linux/arm64
           DOCKER_LOAD: false
-          BUILD_FROM: ${{ inputs.build_from }}
-          RUN_FROM: ${{ inputs.run_from }}
-          PKG_VSN: ${{ needs.build.outputs.PKG_VSN }}
-          EMQX_SOURCE_TYPE: tgz
         run: |
           ./build ${PROFILE} docker

+ 0 - 58
.github/workflows/build_docker_for_test.yaml

@@ -1,58 +0,0 @@
-name: Build docker image for test
-
-concurrency:
-  group: docker-test-build-${{ github.event_name }}-${{ github.ref }}
-  cancel-in-progress: true
-
-on:
-  workflow_call:
-
-permissions:
-  contents: read
-
-jobs:
-  docker:
-    runs-on: ${{ endsWith(github.repository, '/emqx') && 'ubuntu-22.04' || fromJSON('["self-hosted","ephemeral","linux","x64"]') }}
-    env:
-      EMQX_NAME: ${{ matrix.profile }}
-
-    strategy:
-      fail-fast: false
-      matrix:
-        profile:
-          - emqx
-          - emqx-enterprise
-          - emqx-elixir
-          - emqx-enterprise-elixir
-
-    steps:
-      - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-      - name: Set up environment
-        id: env
-        run: |
-          source env.sh
-          PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh "$EMQX_NAME")
-          echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_ENV"
-      - name: build and export to Docker
-        id: build
-        run: |
-          make ${EMQX_NAME}-docker
-          echo "_EMQX_DOCKER_IMAGE_TAG=$(head -n 1 .emqx_docker_image_tags)" >> $GITHUB_ENV
-      - name: smoke test
-        run: |
-          CID=$(docker run -d --rm -P $_EMQX_DOCKER_IMAGE_TAG)
-          HTTP_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "18083/tcp") 0).HostPort}}' $CID)
-          ./scripts/test/emqx-smoke-test.sh localhost $HTTP_PORT || {
-            docker logs $CID
-            exit 1
-          }
-          docker stop $CID
-      - name: export docker image
-        if: always()
-        run: |
-          docker save $_EMQX_DOCKER_IMAGE_TAG | gzip > $EMQX_NAME-docker-$PKG_VSN.tar.gz
-      - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4.3.5
-        with:
-          name: "${{ env.EMQX_NAME }}-docker"
-          path: "${{ env.EMQX_NAME }}-docker-${{ env.PKG_VSN }}.tar.gz"
-          retention-days: 3

+ 0 - 7
.github/workflows/build_slim_packages.yaml

@@ -47,13 +47,6 @@ jobs:
         path: _packages/${{ matrix.profile[0] }}/*
         retention-days: 7
         compression-level: 0
-    - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4.3.5
-      with:
-        name: "${{ matrix.profile[0] }}-schema-dump-${{ matrix.profile[1] }}-${{ matrix.profile[2] }}"
-        path: |
-          scripts/spellcheck
-          _build/docgen/${{ matrix.profile[0] }}/schema-en.json
-        retention-days: 7
 
   mac:
     strategy:

+ 0 - 1
.github/workflows/run_conf_tests.yaml

@@ -32,7 +32,6 @@ jobs:
         run: |
           unzip -o -q ${{ matrix.profile }}.zip
           git config --global --add safe.directory "$GITHUB_WORKSPACE"
-      - run: cat .env | tee -a $GITHUB_ENV
       - run: make ${{ matrix.profile }}
       - run: ./scripts/test/check-example-configs.sh
       - run: ./scripts/conf-test/run.sh

+ 5 - 23
.github/workflows/run_docker_tests.yaml

@@ -29,20 +29,13 @@ jobs:
 
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-      - name: Set up environment
-        id: env
-        run: |
-          source env.sh
-          PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh "$EMQX_NAME")
-          echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_ENV"
       - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
         with:
           name: ${{ env.EMQX_NAME }}-docker
-          path: /tmp
       - name: load docker image
         run: |
-          _EMQX_DOCKER_IMAGE_TAG=$(docker load < /tmp/${EMQX_NAME}-docker-${PKG_VSN}.tar.gz 2>/dev/null | sed 's/Loaded image: //g')
-          echo "_EMQX_DOCKER_IMAGE_TAG=$_EMQX_DOCKER_IMAGE_TAG" >> $GITHUB_ENV
+          EMQX_TAG=$(docker load < ${EMQX_NAME}-docker-*.tar.gz 2>/dev/null | sed 's/Loaded image: //g')
+          echo "_EMQX_DOCKER_IMAGE_TAG=$EMQX_TAG" >> $GITHUB_ENV
       - name: dashboard tests
         working-directory: ./scripts/ui-tests
         run: |
@@ -69,6 +62,7 @@ jobs:
         shell: bash
     env:
       EMQX_NAME: ${{ matrix.profile }}
+      _EMQX_TEST_DB_BACKEND: ${{ matrix.profile == 'emqx-enterprise' && 'rlog' || 'mnesia' }}
 
     strategy:
       fail-fast: false
@@ -79,25 +73,13 @@ jobs:
           - emqx-elixir
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-      - name: Set up environment
-        id: env
-        run: |
-          source env.sh
-          if [ "$EMQX_NAME" = "emqx-enterprise" ]; then
-            _EMQX_TEST_DB_BACKEND='rlog'
-          else
-            _EMQX_TEST_DB_BACKEND='mnesia'
-          fi
-          PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh "$EMQX_NAME")
-          echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_ENV"
       - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
         with:
           name: ${{ env.EMQX_NAME }}-docker
-          path: /tmp
       - name: load docker image
         run: |
-          EMQX_IMAGE_TAG=$(docker load < /tmp/${EMQX_NAME}-docker-${PKG_VSN}.tar.gz 2>/dev/null | sed 's/Loaded image: //g')
-          echo "_EMQX_DOCKER_IMAGE_TAG=$EMQX_IMAGE_TAG" >> $GITHUB_ENV
+          EMQX_TAG=$(docker load < ${EMQX_NAME}-docker-*.tar.gz 2>/dev/null | sed 's/Loaded image: //g')
+          echo "_EMQX_DOCKER_IMAGE_TAG=$EMQX_TAG" >> $GITHUB_ENV
       - name: run emqx
         timeout-minutes: 5
         run: |

+ 3 - 9
.github/workflows/run_helm_tests.yaml

@@ -37,21 +37,15 @@ jobs:
     - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
       with:
         path: source
-    - name: Set up environment
-      id: env
-      run: |
-        cd source
-        source env.sh
-        PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh "$EMQX_NAME")
-        echo "EMQX_TAG=$PKG_VSN" >> "$GITHUB_ENV"
     - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
       with:
         name: "${{ env.EMQX_NAME }}-docker"
         path: /tmp
     - run: minikube start
     - run: |
-        img="/tmp/${EMQX_NAME}-docker-${EMQX_TAG}.tar.gz"
-        if stderr=$(minikube image load "${img}" 2>&1 >/dev/null) && test -n "$stderr"; then
+        EMQX_IMAGE=$(docker load < /tmp/${EMQX_NAME}-docker-*.tar.gz | sed 's/Loaded image: //g')
+        echo "EMQX_TAG=${EMQX_IMAGE##*:}" >> $GITHUB_ENV
+        if stderr=$(minikube image load "${EMQX_IMAGE}" 2>&1 >/dev/null) && test -n "$stderr"; then
           echo "${stderr}";
           exit 1;
         fi

+ 5 - 40
.github/workflows/run_jmeter_tests.yaml

@@ -52,20 +52,13 @@ jobs:
     needs: jmeter_artifact
     steps:
     - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-    - name: Set up environment
-      id: env
-      run: |
-        source env.sh
-        PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh emqx)
-        echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_ENV"
     - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
       with:
         name: emqx-docker
-        path: /tmp
     - name: load docker image
       shell: bash
       run: |
-        EMQX_DOCKER_IMAGE_TAG=$(docker load < /tmp/emqx-docker-${PKG_VSN}.tar.gz | sed 's/Loaded image: //g')
+        EMQX_DOCKER_IMAGE_TAG=$(docker load < emqx-docker-*.tar.gz | sed 's/Loaded image: //g')
         echo "_EMQX_DOCKER_IMAGE_TAG=$EMQX_DOCKER_IMAGE_TAG" >> $GITHUB_ENV
     - uses: ./.github/actions/prepare-jmeter
     - name: docker compose up
@@ -121,20 +114,13 @@ jobs:
     needs: jmeter_artifact
     steps:
     - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-    - name: Set up environment
-      id: env
-      run: |
-        source env.sh
-        PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh emqx)
-        echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_ENV"
     - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
       with:
         name: emqx-docker
-        path: /tmp
     - name: load docker image
       shell: bash
       run: |
-        EMQX_DOCKER_IMAGE_TAG=$(docker load < /tmp/emqx-docker-${PKG_VSN}.tar.gz | sed 's/Loaded image: //g')
+        EMQX_DOCKER_IMAGE_TAG=$(docker load < emqx-docker-*.tar.gz | sed 's/Loaded image: //g')
         echo "_EMQX_DOCKER_IMAGE_TAG=$EMQX_DOCKER_IMAGE_TAG" >> $GITHUB_ENV
     - uses: ./.github/actions/prepare-jmeter
     - name: docker compose up
@@ -198,20 +184,13 @@ jobs:
     needs: jmeter_artifact
     steps:
     - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-    - name: Set up environment
-      id: env
-      run: |
-        source env.sh
-        PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh emqx)
-        echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_ENV"
     - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
       with:
         name: emqx-docker
-        path: /tmp
     - name: load docker image
       shell: bash
       run: |
-        EMQX_DOCKER_IMAGE_TAG=$(docker load < /tmp/emqx-docker-${PKG_VSN}.tar.gz | sed 's/Loaded image: //g')
+        EMQX_DOCKER_IMAGE_TAG=$(docker load < emqx-docker-*.tar.gz | sed 's/Loaded image: //g')
         echo "_EMQX_DOCKER_IMAGE_TAG=$EMQX_DOCKER_IMAGE_TAG" >> $GITHUB_ENV
     - uses: ./.github/actions/prepare-jmeter
     - name: docker compose up
@@ -267,20 +246,13 @@ jobs:
     needs: jmeter_artifact
     steps:
     - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-    - name: Set up environment
-      id: env
-      run: |
-        source env.sh
-        PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh emqx)
-        echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_ENV"
     - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
       with:
         name: emqx-docker
-        path: /tmp
     - name: load docker image
       shell: bash
       run: |
-        EMQX_DOCKER_IMAGE_TAG=$(docker load < /tmp/emqx-docker-${PKG_VSN}.tar.gz | sed 's/Loaded image: //g')
+        EMQX_DOCKER_IMAGE_TAG=$(docker load < emqx-docker-*.tar.gz | sed 's/Loaded image: //g')
         echo "_EMQX_DOCKER_IMAGE_TAG=$EMQX_DOCKER_IMAGE_TAG" >> $GITHUB_ENV
     - uses: ./.github/actions/prepare-jmeter
     - name: docker compose up
@@ -333,20 +305,13 @@ jobs:
     needs: jmeter_artifact
     steps:
     - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
-    - name: Set up environment
-      id: env
-      run: |
-        source env.sh
-        PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh emqx)
-        echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_ENV"
     - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
       with:
         name: emqx-docker
-        path: /tmp
     - name: load docker image
       shell: bash
       run: |
-        EMQX_DOCKER_IMAGE_TAG=$(docker load < /tmp/emqx-docker-${PKG_VSN}.tar.gz | sed 's/Loaded image: //g')
+        EMQX_DOCKER_IMAGE_TAG=$(docker load < emqx-docker-*.tar.gz | sed 's/Loaded image: //g')
         echo "_EMQX_DOCKER_IMAGE_TAG=$EMQX_DOCKER_IMAGE_TAG" >> $GITHUB_ENV
     - uses: ./.github/actions/prepare-jmeter
     - name: docker compose up

+ 1 - 2
.github/workflows/spellcheck.yaml

@@ -21,8 +21,7 @@ jobs:
     steps:
       - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
         with:
-          pattern: "${{ matrix.profile }}-schema-dump-*-x64"
-          merge-multiple: true
+          name: "${{ matrix.profile }}-schema-dump"
       - name: Run spellcheck
         run: |
           bash scripts/spellcheck/spellcheck.sh _build/docgen/${{ matrix.profile }}/schema-en.json

+ 0 - 1
.github/workflows/static_checks.yaml

@@ -43,6 +43,5 @@ jobs:
           key: rebar3-dialyzer-plt-${{ matrix.profile }}-${{ hashFiles('rebar.*', 'apps/*/rebar.*') }}
           restore-keys: |
             rebar3-dialyzer-plt-${{ matrix.profile }}-
-      - run: cat .env | tee -a $GITHUB_ENV
       - name: run static checks
         run: make static_checks

+ 1 - 1
env.sh

@@ -4,5 +4,5 @@ export OTP_VSN=26.2.5-3
 export ELIXIR_VSN=1.15.7
 export EMQX_BUILDER=ghcr.io/emqx/emqx-builder/${EMQX_BUILDER_VSN}:${ELIXIR_VSN}-${OTP_VSN}-ubuntu22.04
 export EMQX_DOCKER_BUILD_FROM=ghcr.io/emqx/emqx-builder/${EMQX_BUILDER_VSN}:${ELIXIR_VSN}-${OTP_VSN}-debian12
-export EMQX_DOCKER_RUN_FROM=public.ecr.aws/debian/debian:stable-20240612-slim
+export EMQX_DOCKER_RUN_FROM=debian:12-slim
 export QUICER_DOWNLOAD_FROM_RELEASE=1

+ 6 - 1
scripts/conf-test/run.sh

@@ -2,6 +2,10 @@
 
 set -euo pipefail
 
+cd -P -- "$(dirname -- "$0")/../.."
+# shellcheck disable=SC1091
+source ./env.sh
+
 PROFILE="${PROFILE:-emqx}"
 EMQX_ROOT="${EMQX_ROOT:-_build/$PROFILE/rel/emqx}"
 EMQX_WAIT_FOR_START="${EMQX_WAIT_FOR_START:-30}"
@@ -27,7 +31,8 @@ start_emqx_with_conf() {
     "$EMQX_ROOT"/bin/emqx stop
 }
 
-MAJOR_VSN=$(./pkg-vsn.sh "$PROFILE" | cut -d. -f1)
+PKG_VSN=${PKG_VSN:-$(./pkg-vsn.sh "$PROFILE")}
+MAJOR_VSN=$(echo "$PKG_VSN" | cut -d- -f1 | cut -d. -f1)
 
 if [ "$PROFILE" = "emqx" ]; then
   PREFIX="v"

+ 2 - 0
scripts/test/check-example-configs.sh

@@ -3,6 +3,8 @@
 set -euo pipefail
 
 cd -P -- "$(dirname -- "$0")/../.."
+# shellcheck disable=SC1091
+source ./env.sh
 
 PROFILE="${PROFILE:-emqx}"
 DIR_NAME='examples'