ci: refactor package build & test jobs

This commit is contained in:
Zaiming (Stone) Shi 2021-12-31 15:45:38 +01:00
parent 320506957c
commit 77652b9858
3 changed files with 64 additions and 28 deletions

View File

@ -1,11 +1,47 @@
#!/bin/bash #!/usr/bin/env bash
set -x -e -u
set -euo pipefail
set -x
if [ -z "${1:-}" ]; then
echo "Usage $0 <PACKAGE_NAME> zip|pkg"
exit 1
fi
if [ "${2:-}" != 'zip' ] && [ "${2:-}" != 'pkg' ]; then
echo "Usage $0 <PACKAGE_NAME> zip|pkg"
exit 1
fi
PACKAGE_NAME="${1}"
PACKAGE_TYPE="${2}"
export DEBUG=1 export DEBUG=1
export CODE_PATH=${CODE_PATH:-"/emqx"} export CODE_PATH=${CODE_PATH:-"/emqx"}
export EMQX_NAME=${EMQX_NAME:-"emqx"} export EMQX_NAME=${EMQX_NAME:-"emqx"}
export PACKAGE_PATH="${CODE_PATH}/_packages/${EMQX_NAME}" export PACKAGE_PATH="${CODE_PATH}/_packages/${EMQX_NAME}"
export RELUP_PACKAGE_PATH="${CODE_PATH}/_upgrade_base" export RELUP_PACKAGE_PATH="${CODE_PATH}/_upgrade_base"
if [ "$PACKAGE_TYPE" = 'zip' ]; then
PKG_SUFFIX="zip"
else
SYSTEM="$("$CODE_PATH"/scripts/get-distro.sh)"
case "${SYSTEM:-}" in
ubuntu*|debian*|raspbian*)
PKG_SUFFIX='deb'
;;
*)
PKG_SUFFIX='rpm'
;;
esac
fi
PACKAGE_FILE_NAME="${PACKAGE_NAME}.${PKG_SUFFIX}"
PACKAGE_FILE="${PACKAGE_PATH}/${PACKAGE_FILE_NAME}.${PKG_SUFFIX}"
if ! [ -f "$PACKAGE_FILE" ]; then
echo "$PACKAGE_FILE is not a file"
fi
case "$(uname -m)" in case "$(uname -m)" in
x86_64) x86_64)
ARCH='amd64' ARCH='amd64'
@ -30,11 +66,9 @@ emqx_prepare(){
emqx_test(){ emqx_test(){
cd "${PACKAGE_PATH}" cd "${PACKAGE_PATH}"
local packagename="${PACKAGE_FILE_NAME}"
for var in "$PACKAGE_PATH"/"${EMQX_NAME}"-*;do case "$PKG_SUFFIX" in
case ${var##*.} in
"zip") "zip")
packagename=$(basename "${PACKAGE_PATH}/${EMQX_NAME}"-*.zip)
unzip -q "${PACKAGE_PATH}/${packagename}" unzip -q "${PACKAGE_PATH}/${packagename}"
export EMQX_ZONES__DEFAULT__MQTT__SERVER_KEEPALIVE=60 export EMQX_ZONES__DEFAULT__MQTT__SERVER_KEEPALIVE=60
export EMQX_MQTT__MAX_TOPIC_ALIAS=10 export EMQX_MQTT__MAX_TOPIC_ALIAS=10
@ -42,7 +76,6 @@ emqx_test(){
export EMQX_LOG__FILE_HANDLERS__DEFAULT__LEVEL=debug export EMQX_LOG__FILE_HANDLERS__DEFAULT__LEVEL=debug
if [[ $(arch) == *arm* || $(arch) == aarch64 ]]; then if [[ $(arch) == *arm* || $(arch) == aarch64 ]]; then
export EMQX_LISTENERS__QUIC__DEFAULT__ENABLED=false export EMQX_LISTENERS__QUIC__DEFAULT__ENABLED=false
export WAIT_FOR_ERLANG_STOP=120
fi fi
# sed -i '/emqx_telemetry/d' "${PACKAGE_PATH}"/emqx/data/loaded_plugins # sed -i '/emqx_telemetry/d' "${PACKAGE_PATH}"/emqx/data/loaded_plugins
@ -72,7 +105,6 @@ emqx_test(){
rm -rf "${PACKAGE_PATH}"/emqx rm -rf "${PACKAGE_PATH}"/emqx
;; ;;
"deb") "deb")
packagename=$(basename "${PACKAGE_PATH}/${EMQX_NAME}"-*.deb)
dpkg -i "${PACKAGE_PATH}/${packagename}" dpkg -i "${PACKAGE_PATH}/${packagename}"
if [ "$(dpkg -l |grep emqx |awk '{print $1}')" != "ii" ] if [ "$(dpkg -l |grep emqx |awk '{print $1}')" != "ii" ]
then then
@ -99,8 +131,6 @@ emqx_test(){
fi fi
;; ;;
"rpm") "rpm")
packagename=$(basename "${PACKAGE_PATH}/${EMQX_NAME}"-*.rpm)
if [[ "${ARCH}" == "amd64" && $(rpm -E '%{rhel}') == 7 ]] ; if [[ "${ARCH}" == "amd64" && $(rpm -E '%{rhel}') == 7 ]] ;
then then
# EMQX OTP requires openssl11 to have TLS1.3 support # EMQX OTP requires openssl11 to have TLS1.3 support
@ -124,7 +154,6 @@ emqx_test(){
;; ;;
esac esac
done
} }
run_test(){ run_test(){
@ -142,7 +171,6 @@ EOF
## for ARM, due to CI env issue, skip start of quic listener for the moment ## for ARM, due to CI env issue, skip start of quic listener for the moment
[[ $(arch) == *arm* || $(arch) == aarch64 ]] && tee -a "$emqx_env_vars" <<EOF [[ $(arch) == *arm* || $(arch) == aarch64 ]] && tee -a "$emqx_env_vars" <<EOF
export EMQX_LISTENERS__QUIC__DEFAULT__ENABLED=false export EMQX_LISTENERS__QUIC__DEFAULT__ENABLED=false
export WAIT_FOR_ERLANG_STOP=120
EOF EOF
else else
echo "Error: cannot locate emqx_vars" echo "Error: cannot locate emqx_vars"

View File

@ -297,14 +297,18 @@ jobs:
SYSTEM: ${{ matrix.os }} SYSTEM: ${{ matrix.os }}
working-directory: source working-directory: source
run: | run: |
docker run -i --rm \ ./scripts/buildx.sh \
-v $(pwd):/emqx \ --profile "${PROFILE}" \
--workdir /emqx \ --pkgtype "zip" \
--platform linux/$ARCH \ --arch "${ARCH}" \
ghcr.io/emqx/emqx-builder/5.0-3:$OTP-$SYSTEM \ --builder "ghcr.io/emqx/emqx-builder/5.0-3:${OTP}-${SYSTEM}"
bash -euc "make $PROFILE-zip || cat rebar3.crashdump; \ ## the pkg build is incremental on the zip build
make $PROFILE-pkg || cat rebar3.crashdump; \ ./scripts/buildx.sh \
EMQX_NAME=$PROFILE && .ci/build_packages/tests.sh" --profile "${PROFILE}" \
--pkgtype "pkg" \
--arch "${ARCH}" \
--builder "ghcr.io/emqx/emqx-builder/5.0-3:${OTP}-${SYSTEM}"
- name: create sha256 - name: create sha256
env: env:
PROFILE: ${{ matrix.profile}} PROFILE: ${{ matrix.profile}}

View File

@ -43,19 +43,23 @@ jobs:
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: build zip package - name: prepare
run: make ${{ matrix.profile }}-zip
- name: build deb/rpm packages
run: make ${{ matrix.profile }}-pkg
- name: packages test
run: | run: |
export CODE_PATH=$GITHUB_WORKSPACE echo "EMQX_NAME=${{ matrix.profile }}" >> $GITHUB_ENV
EMQX_NAME=${{ matrix.profile }} .ci/build_packages/tests.sh echo "CODE_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
echo "EMQX_PKG_NAME=${{ matrix.profile }}-$(./pkg-vsn.sh)-otp${{ matrix.otp }}-${{ matrix.os }}-amd64" >> $GITHUB_ENV
- name: build and test zip package
run: |
make ${EMQX_NAME}-zip
.ci/build_packages/tests.sh "$EMQX_PKG_NAME" zip
- name: build and test deb/rpm packages
run: |
make ${EMQX_NAME}-pkg
.ci/build_packages/tests.sh "$EMQX_PKG_NAME" pkg
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v2
with: with:
name: ${{ matrix.profile}}-${{ matrix.otp }}-${{ matrix.os }} name: ${{ matrix.profile}}-${{ matrix.otp }}-${{ matrix.os }}
path: _packages/**/*.zip path: _packages/**/*.zip
mac: mac:
if: contains(github.event.pull_request.labels.*.name, 'Mac') if: contains(github.event.pull_request.labels.*.name, 'Mac')
strategy: strategy: