From f541fc3e3def337633b0e84e2cb318b46cd17a51 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Thu, 13 Jul 2023 08:53:14 +0200 Subject: [PATCH 1/7] feat: build debian12 packages --- .github/workflows/build_and_push_docker_images.yaml | 2 +- .github/workflows/build_packages.yaml | 7 ++++--- .github/workflows/build_packages_cron.yaml | 2 +- .github/workflows/build_slim_packages.yaml | 2 +- .github/workflows/release.yaml | 2 ++ .github/workflows/run_emqx_app_tests.yaml | 2 +- .github/workflows/run_fvt_tests.yaml | 4 ++-- .github/workflows/run_test_cases.yaml | 4 ++-- 8 files changed, 14 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build_and_push_docker_images.yaml b/.github/workflows/build_and_push_docker_images.yaml index cd3117b3d..e8066b8bc 100644 --- a/.github/workflows/build_and_push_docker_images.yaml +++ b/.github/workflows/build_and_push_docker_images.yaml @@ -120,7 +120,7 @@ jobs: # NOTE: 'otp' and 'elixir' are to configure emqx-builder image # only support latest otp and elixir, not a matrix builder: - - 5.1-1 # update to latest + - 5.1-3 # update to latest otp: - 25.3.2-1 elixir: diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 982c28ed3..7985818da 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -181,6 +181,7 @@ jobs: - ubuntu22.04 - ubuntu20.04 - ubuntu18.04 + - debian12 - debian11 - debian10 - el9 @@ -192,7 +193,7 @@ jobs: - aws-arm64 - ubuntu-22.04 builder: - - 5.1-1 + - 5.1-3 elixir: - 1.14.5 with_elixir: @@ -208,7 +209,7 @@ jobs: arch: amd64 os: ubuntu22.04 build_machine: ubuntu-22.04 - builder: 5.1-1 + builder: 5.1-3 elixir: 1.14.5 with_elixir: 'yes' - profile: emqx @@ -216,7 +217,7 @@ jobs: arch: amd64 os: amzn2 build_machine: ubuntu-22.04 - builder: 5.1-1 + builder: 5.1-3 elixir: 1.14.5 with_elixir: 'yes' diff --git a/.github/workflows/build_packages_cron.yaml b/.github/workflows/build_packages_cron.yaml index 3f8e728e0..09f68c256 100644 --- a/.github/workflows/build_packages_cron.yaml +++ b/.github/workflows/build_packages_cron.yaml @@ -32,7 +32,7 @@ jobs: - debian10 - amzn2023 builder: - - 5.1-1 + - 5.1-3 elixir: - 1.14.5 diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index 50bb83451..a955b4a9b 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -35,7 +35,7 @@ jobs: - ["emqx-enterprise", "25.3.2-1", "amzn2023", "erlang"] - ["emqx-enterprise", "25.3.2-1", "ubuntu20.04", "erlang"] builder: - - 5.1-1 + - 5.1-3 elixir: - '1.14.5' diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index fd097c546..1945caab0 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -87,6 +87,8 @@ jobs: push "debian/buster" "packages/$PROFILE-$VERSION-debian10-arm64.deb" push "debian/bullseye" "packages/$PROFILE-$VERSION-debian11-amd64.deb" push "debian/bullseye" "packages/$PROFILE-$VERSION-debian11-arm64.deb" + push "debian/bookworm" "packages/$PROFILE-$VERSION-debian12-amd64.deb" + push "debian/bookworm" "packages/$PROFILE-$VERSION-debian12-arm64.deb" push "ubuntu/bionic" "packages/$PROFILE-$VERSION-ubuntu18.04-amd64.deb" push "ubuntu/bionic" "packages/$PROFILE-$VERSION-ubuntu18.04-arm64.deb" push "ubuntu/focal" "packages/$PROFILE-$VERSION-ubuntu20.04-amd64.deb" diff --git a/.github/workflows/run_emqx_app_tests.yaml b/.github/workflows/run_emqx_app_tests.yaml index ddb29122f..40a630e76 100644 --- a/.github/workflows/run_emqx_app_tests.yaml +++ b/.github/workflows/run_emqx_app_tests.yaml @@ -12,7 +12,7 @@ jobs: strategy: matrix: builder: - - 5.1-1 + - 5.1-3 otp: - 25.3.2-1 # no need to use more than 1 version of Elixir, since tests diff --git a/.github/workflows/run_fvt_tests.yaml b/.github/workflows/run_fvt_tests.yaml index 2f5b6f5ac..0bcdee93a 100644 --- a/.github/workflows/run_fvt_tests.yaml +++ b/.github/workflows/run_fvt_tests.yaml @@ -50,7 +50,7 @@ jobs: os: - ["debian11", "debian:11-slim"] builder: - - 5.1-1 + - 5.1-3 otp: - 25.3.2-1 elixir: @@ -123,7 +123,7 @@ jobs: os: - ["debian11", "debian:11-slim"] builder: - - 5.1-1 + - 5.1-3 otp: - 25.3.2-1 elixir: diff --git a/.github/workflows/run_test_cases.yaml b/.github/workflows/run_test_cases.yaml index 1fcbc5d35..d43079d61 100644 --- a/.github/workflows/run_test_cases.yaml +++ b/.github/workflows/run_test_cases.yaml @@ -34,12 +34,12 @@ jobs: MATRIX="$(echo "${APPS}" | jq -c ' [ (.[] | select(.profile == "emqx") | . + { - builder: "5.1-1", + builder: "5.1-3", otp: "25.3.2-1", elixir: "1.14.5" }), (.[] | select(.profile == "emqx-enterprise") | . + { - builder: "5.1-1", + builder: "5.1-3", otp: ["25.3.2-1"][], elixir: "1.14.5" }) From cfcdc094b55bdd0f9d95248fc9bdf97a1fa01468 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Fri, 14 Jul 2023 14:00:54 +0200 Subject: [PATCH 2/7] ci: always upload artefacts on build_packages --- .github/workflows/build_packages.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 7985818da..1a76f7ad7 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -263,7 +263,6 @@ jobs: --builder "force_host" done - uses: actions/upload-artifact@v3 - if: success() with: name: ${{ matrix.profile }} path: _packages/${{ matrix.profile }}/ From 2b5bd9f1830993dda3fd6ea5129dd5fb9c5401fe Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Mon, 17 Jul 2023 12:23:54 +0200 Subject: [PATCH 3/7] ci: separate steps to build and test packages --- .github/workflows/build_packages.yaml | 42 ++++++++++++++++----------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 1a76f7ad7..14b3e75ff 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -234,11 +234,7 @@ jobs: ref: ${{ github.event.inputs.branch_or_tag }} fetch-depth: 0 - - name: build emqx packages - env: - ELIXIR: ${{ matrix.elixir }} - PROFILE: ${{ matrix.profile }} - ARCH: ${{ matrix.arch }} + - name: fix workdir run: | set -eu git config --global --add safe.directory "$GITHUB_WORKSPACE" @@ -248,20 +244,32 @@ jobs: cd /emqx fi echo "pwd is $PWD" - PKGTYPES="tgz pkg" - IS_ELIXIR=${{ matrix.with_elixir }} + + - name: build emqx packages + env: + PROFILE: ${{ matrix.profile }} + IS_ELIXIR: ${{ matrix.with_elixir }} + ACLOCAL_PATH: "/usr/share/aclocal:/usr/local/share/aclocal" + run: | + set -eu if [ "${IS_ELIXIR:-}" == 'yes' ]; then - PKGTYPES="tgz" + make "${PROFILE}-elixir-tgz" + else + make "${PROFILE}-tgz" + make "${PROFILE}-pkg" + fi + - name: test emqx packages + env: + PROFILE: ${{ matrix.profile }} + IS_ELIXIR: ${{ matrix.with_elixir }} + run: | + set -eu + if [ "${IS_ELIXIR:-}" == 'yes' ]; then + ./scripts/pkg-tests.sh "${PROFILE}-elixir-tgz" + else + ./scripts/pkg-tests.sh "${PROFILE}-tgz" + ./scripts/pkg-tests.sh "${PROFILE}-pkg" fi - for PKGTYPE in ${PKGTYPES}; - do - ./scripts/buildx.sh \ - --profile "${PROFILE}" \ - --pkgtype "${PKGTYPE}" \ - --arch "${ARCH}" \ - --elixir "${IS_ELIXIR}" \ - --builder "force_host" - done - uses: actions/upload-artifact@v3 with: name: ${{ matrix.profile }} From 2594998fd035987189366169ee6245386d93a734 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Mon, 17 Jul 2023 13:58:49 +0200 Subject: [PATCH 4/7] ci: self-hosted runners for build-packages --- .github/workflows/build_packages.yaml | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 14b3e75ff..bb6b46612 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -191,7 +191,7 @@ jobs: - amzn2023 build_machine: - aws-arm64 - - ubuntu-22.04 + - aws-amd64 builder: - 5.1-3 elixir: @@ -200,7 +200,7 @@ jobs: - 'no' exclude: - arch: arm64 - build_machine: ubuntu-22.04 + build_machine: aws-amd64 - arch: amd64 build_machine: aws-arm64 include: @@ -208,15 +208,7 @@ jobs: otp: 25.3.2-1 arch: amd64 os: ubuntu22.04 - build_machine: ubuntu-22.04 - builder: 5.1-3 - elixir: 1.14.5 - with_elixir: 'yes' - - profile: emqx - otp: 25.3.2-1 - arch: amd64 - os: amzn2 - build_machine: ubuntu-22.04 + build_machine: aws-amd64 builder: 5.1-3 elixir: 1.14.5 with_elixir: 'yes' @@ -227,7 +219,6 @@ jobs: steps: - uses: AutoModality/action-clean@v1 - if: matrix.build_machine == 'aws-arm64' - uses: actions/checkout@v3 with: From 42627a3d426bd1dc6b57484773631afba7e0913a Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Tue, 18 Jul 2023 11:51:39 +0200 Subject: [PATCH 5/7] fix: ps -ef to detect defunct pid --- bin/emqx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/emqx b/bin/emqx index 802e4b1dd..6c4ed376f 100755 --- a/bin/emqx +++ b/bin/emqx @@ -811,8 +811,8 @@ is_down() { PID="$1" if ps -p "$PID" >/dev/null; then # still around - # shellcheck disable=SC2009 # this grep pattern is not a part of the progra names - if ps -p "$PID" | $GREP -q 'defunct'; then + # shellcheck disable=SC2009 # this grep pattern is not a part of the program names + if ps -efp "$PID" | $GREP -q 'defunct'; then # zombie state, print parent pid parent="$(ps -o ppid= -p "$PID" | tr -d ' ')" logwarn "$PID is marked , parent: $(ps -p "$parent")" From 8293fce7f278cad6f696a44b98f8136358f5a9f4 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Thu, 13 Jul 2023 14:20:24 +0200 Subject: [PATCH 6/7] chore: fix pkg-tests.sh --- scripts/pkg-tests.sh | 79 +++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/scripts/pkg-tests.sh b/scripts/pkg-tests.sh index c17c47ad2..e6ab05d11 100755 --- a/scripts/pkg-tests.sh +++ b/scripts/pkg-tests.sh @@ -46,6 +46,7 @@ export SCRIPTS="${CODE_PATH}/scripts" export EMQX_NAME export PACKAGE_PATH="${CODE_PATH}/_packages/${EMQX_NAME}" export RELUP_PACKAGE_PATH="${CODE_PATH}/_upgrade_base" +export PAHO_MQTT_TESTING_PATH="${PAHO_MQTT_TESTING_PATH:-/paho-mqtt-testing}" SYSTEM="$("$SCRIPTS"/get-distro.sh)" @@ -64,7 +65,7 @@ fi PACKAGE_VERSION="$("$CODE_PATH"/pkg-vsn.sh "${EMQX_NAME}")" PACKAGE_VERSION_LONG="$("$CODE_PATH"/pkg-vsn.sh "${EMQX_NAME}" --long --elixir "${IS_ELIXIR}")" PACKAGE_NAME="${EMQX_NAME}-${PACKAGE_VERSION_LONG}" -PACKAGE_FILE_NAME="${PACKAGE_NAME}.${PKG_SUFFIX}" +PACKAGE_FILE_NAME="${PACKAGE_FILE_NAME:-${PACKAGE_NAME}.${PKG_SUFFIX}}" PACKAGE_FILE="${PACKAGE_PATH}/${PACKAGE_FILE_NAME}" if ! [ -f "$PACKAGE_FILE" ]; then @@ -75,9 +76,21 @@ fi emqx_prepare(){ mkdir -p "${PACKAGE_PATH}" - if [ ! -d "/paho-mqtt-testing" ]; then - git clone -b develop-4.0 https://github.com/emqx/paho.mqtt.testing.git /paho-mqtt-testing + if [ ! -d "${PAHO_MQTT_TESTING_PATH}" ]; then + git clone -b develop-4.0 https://github.com/emqx/paho.mqtt.testing.git "${PAHO_MQTT_TESTING_PATH}" fi + # Debian 12 complains if we don't use venv + case "${SYSTEM:-}" in + debian12) + apt-get update -y && apt-get install -y virtualenv + virtualenv venv + # https://www.shellcheck.net/wiki/SC1091 + # shellcheck source=/dev/null + source ./venv/bin/activate + ;; + *) + ;; + esac pip3 install pytest } @@ -97,36 +110,22 @@ emqx_test(){ # fi # sed -i '/emqx_telemetry/d' "${PACKAGE_PATH}"/emqx/data/loaded_plugins - echo "running ${packagename} start" - if ! "${PACKAGE_PATH}"/emqx/bin/emqx start; then - cat "${PACKAGE_PATH}"/emqx/log/erlang.log.1 || true - cat "${PACKAGE_PATH}"/emqx/log/emqx.log.1 || true - exit 1 - fi - "$SCRIPTS/test/emqx-smoke-test.sh" 127.0.0.1 18083 - pytest -v /paho-mqtt-testing/interoperability/test_client/V5/test_connect.py::test_basic - if ! "${PACKAGE_PATH}"/emqx/bin/emqx stop; then - cat "${PACKAGE_PATH}"/emqx/log/erlang.log.1 || true - cat "${PACKAGE_PATH}"/emqx/log/emqx.log.1 || true - exit 1 - fi - echo "running ${packagename} stop" + run_test "${PACKAGE_PATH}/emqx/bin" "${PACKAGE_PATH}/emqx/log" "${PACKAGE_PATH}/emqx/releases/emqx_vars" + rm -rf "${PACKAGE_PATH}"/emqx ;; "deb") dpkg -i "${PACKAGE_PATH}/${packagename}" - if [ "$(dpkg -l |grep emqx |awk '{print $1}')" != "ii" ] + if [ "$(dpkg -l | grep ${EMQX_NAME} | awk '{print $1}')" != "ii" ] then echo "package install error" exit 1 fi - echo "running ${packagename} start" - run_test - echo "running ${packagename} stop" + run_test "/usr/bin" "/var/log/emqx" "$(dpkg -L ${EMQX_NAME} | grep emqx_vars)" dpkg -r "${EMQX_NAME}" - if [ "$(dpkg -l |grep emqx |awk '{print $1}')" != "rc" ] + if [ "$(dpkg -l | grep ${EMQX_NAME} | awk '{print $1}')" != "rc" ] then echo "package remove error" exit 1 @@ -146,6 +145,10 @@ emqx_test(){ # el8 is fine with python3 true ;; + "el9") + # el9 is fine with python3 + true + ;; *) alternatives --list | grep python && alternatives --set python /usr/bin/python2 ;; @@ -161,12 +164,10 @@ emqx_test(){ exit 1 fi - echo "running ${packagename} start" - run_test - echo "running ${packagename} stop" + run_test "/usr/bin" "/var/log/emqx" "$(rpm -ql ${EMQX_NAME} | grep emqx_vars)" rpm -e "${EMQX_NAME}" - if [ "$(rpm -q emqx)" != "package emqx is not installed" ];then + if [ "$(rpm -q ${EMQX_NAME})" != "package ${EMQX_NAME} is not installed" ];then echo "package uninstall error" exit 1 fi @@ -175,8 +176,10 @@ emqx_test(){ } run_test(){ + local bin_dir="$1" + local log_dir="$2" + local emqx_env_vars="$3" # sed -i '/emqx_telemetry/d' /var/lib/emqx/loaded_plugins - emqx_env_vars=$(dirname "$(readlink "$(command -v emqx)")")/../releases/emqx_vars if [ -f "$emqx_env_vars" ]; then @@ -194,21 +197,21 @@ EOF echo "Error: cannot locate emqx_vars" exit 1 fi - if ! emqx 'start'; then - cat /var/log/emqx/erlang.log.1 || true - cat /var/log/emqx/emqx.log.1 || true + echo "running ${packagename} start" + if ! "${bin_dir}/emqx" 'start'; then + echo "ERROR: failed_to_start_emqx" + cat "${log_dir}/erlang.log.1" || true + cat "${log_dir}/emqx.log.1" || true exit 1 fi "$SCRIPTS/test/emqx-smoke-test.sh" 127.0.0.1 18083 - pytest -v /paho-mqtt-testing/interoperability/test_client/V5/test_connect.py::test_basic - # shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions - ps -ef | grep -E '\-progname\s.+emqx\s' - if ! emqx 'stop'; then - # shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions - ps -ef | grep -E '\-progname\s.+emqx\s' + pytest -v "${PAHO_MQTT_TESTING_PATH}"/interoperability/test_client/V5/test_connect.py::test_basic + "${bin_dir}/emqx" ping + echo "running ${packagename} stop" + if ! "${bin_dir}/emqx" 'stop'; then echo "ERROR: failed_to_stop_emqx_with_the_stop_command" - cat /var/log/emqx/erlang.log.1 || true - cat /var/log/emqx/emqx.log.1 || true + cat "${log_dir}/erlang.log.1" || true + cat "${log_dir}/emqx.log.1" || true exit 1 fi } From 73c4bcbc360d23bfbab6dc1be08ea02a564b0331 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Tue, 18 Jul 2023 12:23:59 +0200 Subject: [PATCH 7/7] chore: add changelog --- changes/ce/feat-11289.en.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/ce/feat-11289.en.md diff --git a/changes/ce/feat-11289.en.md b/changes/ce/feat-11289.en.md new file mode 100644 index 000000000..4514b153d --- /dev/null +++ b/changes/ce/feat-11289.en.md @@ -0,0 +1 @@ +Release packages for Debian 12.