From 59f0d5f537c84df4e6e0095c28344710715ef68c Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 12 Jan 2022 10:27:06 -0300 Subject: [PATCH] chore(mix): use flag instead of elixirpkg to denote package type Also, add Makefile target to build zip files with Elixir. --- .ci/build_packages/tests.sh | 6 +-- .github/workflows/build_slim_packages.yaml | 10 +++-- Makefile | 8 ++++ build | 49 +++++++++++++++------- scripts/buildx.sh | 18 ++++++-- 5 files changed, 66 insertions(+), 25 deletions(-) diff --git a/.ci/build_packages/tests.sh b/.ci/build_packages/tests.sh index 51429bd69..a09444e11 100755 --- a/.ci/build_packages/tests.sh +++ b/.ci/build_packages/tests.sh @@ -4,16 +4,16 @@ set -euo pipefail set -x if [ -z "${1:-}" ]; then - echo "Usage $0 tgz|pkg|elixirpkg" + echo "Usage $0 tgz|pkg" exit 1 fi case "${2:-}" in - tgz|pkg|elixirpkg) + tgz|pkg) true ;; *) - echo "Usage $0 zip|pkg|elixirpkg" + echo "Usage $0 zip|pkg" exit 1 ;; esac diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index 6d01479df..8c8728b7b 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -62,14 +62,14 @@ jobs: with: path: | _build/default/lib/rocksdb/ - deps/rocksdb/priv/ + deps/rocksdb/ key: ${{ matrix.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-amd64-${{ steps.deps-refs.outputs.DEP_ROCKSDB_REF }} - name: load quicer cache uses: actions/cache@v2 with: path: | _build/default/lib/quicer/ - deps/quicer/priv/ + deps/quicer/ key: ${{ matrix.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-amd64-${{ steps.deps-refs.outputs.DEP_QUICER_REF }} - name: build and test tgz package run: | @@ -83,10 +83,14 @@ jobs: run: | make ${EMQX_NAME}-pkg .ci/build_packages/tests.sh "$EMQX_PKG_NAME" pkg amd64 + - name: build and test zip package (Elixir) + run: | + make ${EMQX_NAME}-elixir-zip + .ci/build_packages/tests.sh "$EMQX_PKG_NAME" zip amd64 - name: build and test deb/rpm packages (Elixir) run: | make ${EMQX_NAME}-elixirpkg - .ci/build_packages/tests.sh "$EMQX_ELIXIRPKG_NAME" elixirpkg amd64 + .ci/build_packages/tests.sh "$EMQX_ELIXIRPKG_NAME" pkg amd64 - uses: actions/upload-artifact@v2 with: name: ${{ matrix.profile}}-${{ matrix.otp }}-${{ matrix.os }} diff --git a/Makefile b/Makefile index 163ac4b3a..902af3be1 100644 --- a/Makefile +++ b/Makefile @@ -235,3 +235,11 @@ $1-elixirpkg: $1-pkg-elixir $(BUILD) $1 pkg endef $(foreach pt,$(REL_PROFILES),$(eval $(call gen-elixirpkg-target,$(pt)))) + +.PHONY: $(REL_PROFILES:%=%-elixir-zip) +define gen-elixir-zip-target +$1-elixir-zip: $(ELIXIR_COMMON_DEPS) mix-deps-get + @env IS_ELIXIR=yes $(BUILD) $1 zip +endef +ALL_ELIXIR_ZIPS = $(REL_PROFILES) +$(foreach zt,$(ALL_ELIXIR_ZIPS),$(eval $(call gen-elixir-zip-target,$(zt)))) diff --git a/build b/build index bd2994fef..9c84c3a5a 100755 --- a/build +++ b/build @@ -84,6 +84,11 @@ make_rel() { fi } +make_elixir_rel() { + export_release_vars "$PROFILE" + env MIX_ENV=prod mix release --overwrite +} + ## extract previous version .tar.gz files to _build/$PROFILE/rel/emqx before making relup make_relup() { local rel_dir="_build/$PROFILE/rel/emqx" @@ -124,21 +129,36 @@ cp_dyn_libs() { ## Re-pack the relx assembled .tar.gz to EMQ X's package naming scheme ## It assumes the .tar.gz has been built -- relies on Makefile dependency make_tgz() { - # build the tarball again to ensure relup is included - make_rel + local pkgpath="_packages/${PROFILE}" + local tarball + local target + + if [ "${IS_ELIXIR:-no}" = "yes" ] + then + # ensure tarball exists + ELIXIR_MAKE_TAR=yes make_elixir_rel + + local relpath="_build/prod" + tarball="${relpath}/${PROFILE}-${PKG_VSN}-elixir${ELIXIR_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}.tar.gz" + target="${pkgpath}/${PROFILE}-${PKG_VSN}-elixir${ELIXIR_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}.tar.gz" + else + # build the tarball again to ensure relup is included + # elixir does not have relup yet. + make_rel + + local relpath="_build/${PROFILE}/rel/emqx" + tarball="${relpath}/${PROFILE}-${PKG_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}.tar.gz" + target="${pkgpath}/${PROFILE}-${PKG_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}.tar.gz" + fi tard="/tmp/emqx_untar_${PKG_VSN}" rm -rf "${tard}" mkdir -p "${tard}/emqx" - local relpath="_build/${PROFILE}/rel/emqx" - local pkgpath="_packages/${PROFILE}" + mkdir -p "${pkgpath}" - local tarball="${relpath}/emqx-${PKG_VSN}.tar.gz" if [ ! -f "$tarball" ]; then log "ERROR: $tarball is not found" fi - local target - target="${pkgpath}/${PROFILE}-${PKG_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}.tar.gz" tar zxf "${tarball}" -C "${tard}/emqx" ## try to be portable for tar.gz packages. ## for DEB and RPM packages the dependencies are resoved by yum and apt @@ -212,37 +232,37 @@ export_release_vars() { export EMQX_RLEASE_TYPE=cloud \ EMQX_PACKAGE_TYPE=bin \ EMQX_EDITION_TYPE=community \ - ELIXIR_MAKE_TAR=no + ELIXIR_MAKE_TAR=${ELIXIR_MAKE_TAR:-no} ;; emqx-edge) export EMQX_RLEASE_TYPE=edge \ EMQX_PACKAGE_TYPE=bin \ EMQX_EDITION_TYPE=community \ - ELIXIR_MAKE_TAR=no + ELIXIR_MAKE_TAR=${ELIXIR_MAKE_TAR:-no} ;; emqx-enterprise) export EMQX_RLEASE_TYPE=cloud \ EMQX_PACKAGE_TYPE=bin \ EMQX_EDITION_TYPE=enterprise \ - ELIXIR_MAKE_TAR=no + ELIXIR_MAKE_TAR=${ELIXIR_MAKE_TAR:-no} ;; emqx-pkg) export EMQX_RLEASE_TYPE=cloud \ EMQX_PACKAGE_TYPE=pkg \ EMQX_EDITION_TYPE=community \ - ELIXIR_MAKE_TAR=yes + ELIXIR_MAKE_TAR=${ELIXIR_MAKE_TAR:-yes} ;; emqx-edge-pkg) export EMQX_RLEASE_TYPE=edge \ EMQX_PACKAGE_TYPE=pkg \ EMQX_EDITION_TYPE=community \ - ELIXIR_MAKE_TAR=yes + ELIXIR_MAKE_TAR=${ELIXIR_MAKE_TAR:-yes} ;; emqx-enterprise-pkg) export EMQX_RLEASE_TYPE=cloud \ EMQX_PACKAGE_TYPE=pkg \ EMQX_EDITION_TYPE=enterprise \ - ELIXIR_MAKE_TAR=yes + ELIXIR_MAKE_TAR=${ELIXIR_MAKE_TAR:-yes} ;; *) echo Invalid profile "$profile" @@ -283,8 +303,7 @@ case "$ARTIFACT" in make_docker_testing ;; elixir) - export_release_vars "$PROFILE" - env MIX_ENV=prod mix release --overwrite + make_elixir_rel ;; *) log "Unknown artifact $ARTIFACT" diff --git a/scripts/buildx.sh b/scripts/buildx.sh index 482e5e25c..242c5f3d0 100755 --- a/scripts/buildx.sh +++ b/scripts/buildx.sh @@ -17,8 +17,10 @@ help() { echo echo "-h|--help: To display this usage information" echo "--profile : EMQ X profile to build, e.g. emqx, emqx-edge" - echo "--pkgtype tgz|pkg|elixirpkg: Specify which package to build, tgz for .tar.gz," - echo " pkg and elixirpkg for .rpm or .deb" + echo "--pkgtype tgz|pkg: Specify which package to build, tgz for .tar.gz," + echo " pkg for .rpm or .deb" + echo "--with-elixir: Specify if the release should be built with Elixir, " + echo " defaults to false." echo "--arch amd64|arm64: Target arch to build the EMQ X package for" echo "--src_dir : EMQ X source ode in this dir, default to PWD" echo "--builder : Builder image to pull" @@ -62,6 +64,10 @@ while [ "$#" -gt 0 ]; do ELIXIR_VSN="$2" shift 2 ;; + --with-elixir) + WITH_ELIXIR=yes + shift 1 + ;; --system) SYSTEM="$2" shift 2 @@ -85,8 +91,12 @@ if [ -z "${PROFILE:-}" ] || exit 1 fi +if [ -z "${WITH_ELIXIR:-}" ]; then + WITH_ELIXIR=no +fi + case "$PKGTYPE" in - tgz|pkg|elixirpkg) + tgz|pkg) true ;; *) @@ -99,7 +109,7 @@ cd "${SRC_DIR:-.}" PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh "$PROFILE")}" -if [ "$PKGTYPE" = "elixirpkg" ] +if [ "$WITH_ELIXIR" = "yes" ] then PKG_NAME="${PROFILE}-${PKG_VSN}-elixir${ELIXIR_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}" else