From 6dd11665bbf2d04edb4ae4b1fc2aa3b3b8f3d4c2 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 4 Jan 2022 17:56:40 -0300 Subject: [PATCH 01/23] ci(mix): build emqx packages with elixir --- .ci/build_packages/tests.sh | 13 ++++-- .github/workflows/build_packages.yaml | 37 +++++++++++++--- Makefile | 35 ++++++++++++++- build | 61 ++++++++++++++++++++++++++- deploy/packages/deb/Makefile | 13 ++++-- deploy/packages/rpm/Makefile | 14 ++++-- mix.exs | 28 +++++++++++- scripts/buildx.sh | 60 ++++++++++++++++++++------ scripts/get-elixir-vsn.sh | 5 +++ 9 files changed, 232 insertions(+), 34 deletions(-) create mode 100755 scripts/get-elixir-vsn.sh diff --git a/.ci/build_packages/tests.sh b/.ci/build_packages/tests.sh index 75a973990..2909e6909 100755 --- a/.ci/build_packages/tests.sh +++ b/.ci/build_packages/tests.sh @@ -4,14 +4,19 @@ set -euo pipefail set -x if [ -z "${1:-}" ]; then - echo "Usage $0 tgz|pkg" + echo "Usage $0 tgz|pkg|elixirpkg" exit 1 fi -if [ "${2:-}" != 'tgz' ] && [ "${2:-}" != 'pkg' ]; then - echo "Usage $0 tgz|pkg" +case "${2:-}" in + tgz|pkg|elixirpkg) + true + ;; + *) + echo "Usage $0 zip|pkg|elixirpkg" exit 1 -fi + ;; +esac PACKAGE_NAME="${1}" PACKAGE_TYPE="${2}" diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 2a7d43958..aa7a521ff 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -19,7 +19,8 @@ jobs: prepare: runs-on: ubuntu-20.04 # prepare source with any OTP version, no need for a matrix - container: "ghcr.io/emqx/emqx-builder/5.0-3:24.1.5-3-ubuntu20.04" + # FIXME: use tagged version once merged + container: "ghcr.io/emqx/emqx-builder/elixir:24.1.5-3-1.13.1-ubuntu20.04" outputs: ce_old_vsns: ${{ steps.find_old_versons.outputs.ce_old_vsns }} @@ -237,6 +238,8 @@ jobs: - emqx-enterprise otp: - 24.1.5-3 # we test with OTP 23, but only build package on OTP 24 versions + elixir: + - 1.13.1 arch: - amd64 - arm64 @@ -334,22 +337,39 @@ jobs: - name: build emqx packages env: OTP: ${{ matrix.otp }} + ELIXIR: ${{ matrix.elixir }} PROFILE: ${{ matrix.profile }} ARCH: ${{ matrix.arch }} SYSTEM: ${{ matrix.os }} working-directory: source + # FIXME: use tagged version once merged run: | ./scripts/buildx.sh \ --profile "${PROFILE}" \ --pkgtype "tgz" \ --arch "${ARCH}" \ - --builder "ghcr.io/emqx/emqx-builder/5.0-3:${OTP}-${SYSTEM}" + --otp "${OTP}" \ + --elixir "${ELIXIR}" \ + --system "${SYSTEM}" \ + --builder "ghcr.io/emqx/emqx-builder/elixir:${OTP}-${ELIXIR}-${SYSTEM}" ## the pkg build is incremental on the tgz build ./scripts/buildx.sh \ --profile "${PROFILE}" \ --pkgtype "pkg" \ --arch "${ARCH}" \ - --builder "ghcr.io/emqx/emqx-builder/5.0-3:${OTP}-${SYSTEM}" + --otp "${OTP}" \ + --elixir "${ELIXIR}" \ + --system "${SYSTEM}" \ + --builder "ghcr.io/emqx/emqx-builder/elixir:${OTP}-${ELIXIR}-${SYSTEM}" + + ./scripts/buildx.sh \ + --profile "${PROFILE}" \ + --pkgtype "elixirpkg" \ + --arch "${ARCH}" \ + --otp "${OTP}" \ + --elixir "${ELIXIR}" \ + --system "${SYSTEM}" \ + --builder "ghcr.io/emqx/emqx-builder/elixir:${OTP}-${ELIXIR}-${SYSTEM}" - name: create sha256 env: @@ -380,9 +400,15 @@ jobs: - emqx-edge - emqx - emqx-enterprise - # NOTE: for docker, only support latest otp version, not a matrix + # NOTE: for docker, only support latest otp and elixir + # version, not a matrix otp: - 24.1.5-3 # update to latest + elixir: + - 1.13.1 # update to latest + arch: + - amd64 + - arm64 steps: - uses: actions/download-artifact@v2 @@ -423,7 +449,8 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} build-args: | - BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-3:${{ matrix.otp }}-alpine3.14 + # FIXME: use tagged version once merged + BUILD_FROM=ghcr.io/emqx/emqx-builder/elixir:${{ matrix.otp }}-${{ matrix.elixir }}-alpine3.14 RUN_FROM=alpine:3.14 EMQX_NAME=${{ matrix.profile }} file: source/deploy/docker/Dockerfile diff --git a/Makefile b/Makefile index 07a9ff419..1b34ee07d 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,7 @@ SCRIPTS = $(CURDIR)/scripts export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/4.4-2:23.3.4.9-3-alpine3.14 export EMQX_DEFAULT_RUNNER = alpine:3.14 export OTP_VSN ?= $(shell $(CURDIR)/scripts/get-otp-vsn.sh) +export ELIXIR_VSN ?= $(shell $(CURDIR)/scripts/get-elixir-vsn.sh) export EMQX_DASHBOARD_VERSION ?= v0.18.0 export DOCKERFILE := deploy/docker/Dockerfile export DOCKERFILE_TESTING := deploy/docker/Dockerfile.testing @@ -36,6 +37,22 @@ ensure-rebar3: @$(SCRIPTS)/fail-on-old-otp-version.escript @$(SCRIPTS)/ensure-rebar3.sh $(REBAR_VERSION) +.PHONY: ensure-hex +ensure-hex: + @mix local.hex --if-missing --force + +.PHONY: ensure-mix-rebar3 +ensure-mix-rebar3: $(REBAR) + @mix local.rebar rebar3 $(CURDIR)/rebar3 --if-missing --force + +.PHONY: ensure-mix-rebar +ensure-mix-rebar: $(REBAR) + @mix local.rebar --if-missing --force + +.PHONY: mix-deps-get +mix-deps-get: $(ELIXIR_COMMON_DEPS) + @mix deps.get + $(REBAR): ensure-rebar3 .PHONY: get-dashboard @@ -95,7 +112,7 @@ coveralls: $(REBAR) @ENABLE_COVER_COMPILE=1 $(REBAR) as test coveralls send .PHONY: $(REL_PROFILES) -$(REL_PROFILES:%=%): $(REBAR) get-dashboard conf-segs +$(REL_PROFILES:%=%): $(COMMON_DEPS) @$(REBAR) as $(@) do release ## Not calling rebar3 clean because @@ -139,6 +156,7 @@ dialyzer: $(REBAR) @$(REBAR) as check dialyzer COMMON_DEPS := $(REBAR) get-dashboard conf-segs +ELIXIR_COMMON_DEPS := ensure-hex ensure-mix-rebar3 ensure-mix-rebar ## rel target is to create release package without relup .PHONY: $(REL_PROFILES:%=%-rel) $(PKG_PROFILES:%=%-rel) @@ -201,3 +219,18 @@ $(foreach zt,$(ALL_TGZS),$(eval $(call gen-docker-target-testing,$(zt)))) conf-segs: @scripts/merge-config.escript + +## elixir target is to create release packages using Elixir's Mix +.PHONY: $(REL_PROFILES:%=%-elixir) $(PKG_PROFILES:%=%-elixir) +$(REL_PROFILES:%=%-elixir) $(PKG_PROFILES:%=%-elixir): $(COMMON_DEPS) $(ELIXIR_COMMON_DEPS) mix-deps-get + @$(BUILD) $(subst -elixir,,$(@)) elixir + +.PHONY: $(REL_PROFILES:%=%-elixirpkg) +define gen-elixirpkg-target +# the Elixir places the tar in a different path than Rebar3 +$1-elixirpkg: $1-pkg-elixir + @env TAR_PKG_DIR=_build/prod \ + IS_ELIXIR=yes \ + $(BUILD) $1 pkg +endef +$(foreach pt,$(REL_PROFILES),$(eval $(call gen-elixirpkg-target,$(pt)))) diff --git a/build b/build index 6790522ca..26da3984d 100755 --- a/build +++ b/build @@ -6,6 +6,11 @@ set -euo pipefail +DEBUG="${DEBUG:-0}" +if [ "$DEBUG" -eq 1 ]; then + set -x +fi + PROFILE="$1" ARTIFACT="$2" @@ -198,6 +203,53 @@ make_docker_testing() { -f "${DOCKERFILE_TESTING}" . } +# used to control the Elixir Mix Release output +# see docstring in `mix.exs` +export_release_vars() { + local profile="$1" + case "$profile" in + emqx) + export EMQX_RLEASE_TYPE=cloud \ + EMQX_PACKAGE_TYPE=bin \ + EMQX_EDITION_TYPE=community \ + ELIXIR_MAKE_TAR=no + ;; + emqx-edge) + export EMQX_RLEASE_TYPE=edge \ + EMQX_PACKAGE_TYPE=bin \ + EMQX_EDITION_TYPE=community \ + ELIXIR_MAKE_TAR=no + ;; + emqx-enterprise) + export EMQX_RLEASE_TYPE=cloud \ + EMQX_PACKAGE_TYPE=bin \ + EMQX_EDITION_TYPE=enterprise \ + ELIXIR_MAKE_TAR=no + ;; + emqx-pkg) + export EMQX_RLEASE_TYPE=cloud \ + EMQX_PACKAGE_TYPE=pkg \ + EMQX_EDITION_TYPE=community \ + ELIXIR_MAKE_TAR=yes + ;; + emqx-edge-pkg) + export EMQX_RLEASE_TYPE=edge \ + EMQX_PACKAGE_TYPE=pkg \ + EMQX_EDITION_TYPE=community \ + ELIXIR_MAKE_TAR=yes + ;; + emqx-enterprise-pkg) + export EMQX_RLEASE_TYPE=cloud \ + EMQX_PACKAGE_TYPE=pkg \ + EMQX_EDITION_TYPE=enterprise \ + ELIXIR_MAKE_TAR=yes + ;; + *) + echo Invalid profile "$profile" + exit 1 + esac +} + log "building artifact=$ARTIFACT for profile=$PROFILE" case "$ARTIFACT" in @@ -219,7 +271,10 @@ case "$ARTIFACT" in exit 0 fi make -C "deploy/packages/${PKGERDIR}" clean - EMQX_REL="$(pwd)" EMQX_BUILD="${PROFILE}" SYSTEM="${SYSTEM}" make -C "deploy/packages/${PKGERDIR}" + env EMQX_REL="$(pwd)" \ + EMQX_BUILD="${PROFILE}" \ + SYSTEM="${SYSTEM}" \ + make -C "deploy/packages/${PKGERDIR}" ;; docker) make_docker @@ -227,6 +282,10 @@ case "$ARTIFACT" in docker-testing) make_docker_testing ;; + elixir) + export_release_vars "$PROFILE" + env MIX_ENV=prod mix release --overwrite + ;; *) log "Unknown artifact $ARTIFACT" exit 1 diff --git a/deploy/packages/deb/Makefile b/deploy/packages/deb/Makefile index 2cb3679ee..3b51a1442 100644 --- a/deploy/packages/deb/Makefile +++ b/deploy/packages/deb/Makefile @@ -6,9 +6,16 @@ BUILT := $(SRCDIR)/BUILT EMQX_NAME=$(subst -pkg,,$(EMQX_BUILD)) -TAR_PKG := $(EMQX_REL)/_build/$(EMQX_BUILD)/rel/emqx/emqx-$(PKG_VSN).tar.gz -SOURCE_PKG := $(EMQX_NAME)_$(PKG_VSN)_$(shell dpkg --print-architecture) -TARGET_PKG := $(EMQX_NAME)-$(PKG_VSN)-otp$(OTP_VSN)-$(SYSTEM)-$(ARCH) +ifeq ($(IS_ELIXIR), yes) + ELIXIR_PKG_VSN := -elixir$(ELIXIR_VSN) +else + ELIXIR_PKG_VSN := +endif + +TAR_PKG_DIR ?= _build/$(EMQX_BUILD)/rel/emqx +TAR_PKG := $(EMQX_REL)/$(TAR_PKG_DIR)/emqx-$(PKG_VSN).tar.gz +SOURCE_PKG := $(EMQX_NAME)_$(PKG_VSN)_$(shell dpkg --print-architecture) +TARGET_PKG := $(EMQX_NAME)-$(PKG_VSN)-otp$(OTP_VSN)$(ELIXIR_PKG_VSN)-$(SYSTEM)-$(ARCH) .PHONY: all all: | $(BUILT) diff --git a/deploy/packages/rpm/Makefile b/deploy/packages/rpm/Makefile index acee8b51c..fbb5f899b 100644 --- a/deploy/packages/rpm/Makefile +++ b/deploy/packages/rpm/Makefile @@ -16,9 +16,16 @@ endif EMQX_NAME=$(subst -pkg,,$(EMQX_BUILD)) -TAR_PKG := $(EMQX_REL)/_build/$(EMQX_BUILD)/rel/emqx/emqx-$(PKG_VSN).tar.gz -TARGET_PKG := $(EMQX_NAME)-$(PKG_VSN)-otp$(OTP_VSN)-$(SYSTEM)-$(ARCH) -SOURCE_PKG := emqx-$(RPM_VSN)-$(RPM_REL).$(shell uname -m) +ifeq ($(IS_ELIXIR), yes) + ELIXIR_PKG_VSN := -elixir$(ELIXIR_VSN) +else + ELIXIR_PKG_VSN := +endif + +TAR_PKG_DIR ?= _build/$(EMQX_BUILD)/rel/emqx +TAR_PKG := $(EMQX_REL)/$(TAR_PKG_DIR)/emqx-$(PKG_VSN).tar.gz +SOURCE_PKG := emqx-$(RPM_VSN)-$(RPM_REL).$(shell uname -m) +TARGET_PKG := $(EMQX_NAME)-$(PKG_VSN)-otp$(OTP_VSN)$(ELIXIR_PKG_VSN)-$(SYSTEM)-$(ARCH) SYSTEMD := $(shell if command -v systemctl >/dev/null 2>&1; then echo yes; fi) # Not $(PWD) as it does not work for make -C @@ -55,4 +62,3 @@ $(BUILT): clean: rm -rf $(SRCDIR) - diff --git a/mix.exs b/mix.exs index 88a243e58..1c6a8d98c 100644 --- a/mix.exs +++ b/mix.exs @@ -124,7 +124,7 @@ defmodule EMQXUmbrella.MixProject do steps = if System.get_env("ELIXIR_MAKE_TAR") == "yes" do - base_steps ++ [:tar] + base_steps ++ [&prepare_tar_overlays/1, :tar] else base_steps end @@ -234,6 +234,10 @@ defmodule EMQXUmbrella.MixProject do } end + ############################################################################# + # Custom Steps + ############################################################################# + defp copy_files(release, release_type, package_type, edition_type) do overwrite? = Keyword.get(release.options, :overwrite, false) @@ -409,6 +413,26 @@ defmodule EMQXUmbrella.MixProject do release end + # The `:tar` built-in step in Mix Release does not currently add the + # `etc` directory into the resulting tarball. The workaround is to + # add those to the `:overlays` key before running `:tar`. + # See: https://hexdocs.pm/mix/1.13.1/Mix.Release.html#__struct__/0 + defp prepare_tar_overlays(release) do + Enum.each( + ["mnesia", "configs", "patches", "scripts"], + fn dir -> + path = Path.join([release.path, "data", dir]) + File.mkdir_p!(path) + end + ) + + Map.update!(release, :overlays, &["etc", "data" | &1]) + end + + ############################################################################# + # Helper functions + ############################################################################# + defp template_vars(release, release_type, :bin = _package_type, edition_type) do [ platform_bin_dir: "bin", @@ -454,7 +478,7 @@ defmodule EMQXUmbrella.MixProject do # FIXME: this is empty in `make emqx` ??? erl_opts: "", emqx_description: emqx_description(release_type, edition_type), - built_on: built_on(), + built_on_arch: built_on(), is_elixir: "yes" ] end diff --git a/scripts/buildx.sh b/scripts/buildx.sh index 2ec943149..74b5e8267 100755 --- a/scripts/buildx.sh +++ b/scripts/buildx.sh @@ -11,17 +11,21 @@ ## ./scripts/buildx.sh --profile emqx --pkgtype tgz --arch arm64 --builder ghcr.io/emqx/emqx-builder/4.4-4:24.1.5-3-debian10 set -euo pipefail +set -x 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: Specify which package to build, tgz for .tar.gz" - echo " and pkg for .rpm or .deb" - 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" - echo " E.g. ghcr.io/emqx/emqx-builder/4.4-4:24.1.5-3-debian10" + 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 "--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" + echo " E.g. ghcr.io/emqx/emqx-builder/4.4-4:24.1.5-3-debian10" + echo "--otp : OTP version being used in the builder" + echo "--elixir : Elixir version being used in the builder" + echo "--system : OS used in the builder image" } while [ "$#" -gt 0 ]; do @@ -50,6 +54,18 @@ while [ "$#" -gt 0 ]; do ARCH="$2" shift 2 ;; + --otp) + OTP_VSN="$2" + shift 2 + ;; + --elixir) + ELIXIR_VSN="$2" + shift 2 + ;; + --system) + SYSTEM="$2" + shift 2 + ;; *) echo "WARN: Unknown arg (ignored): $1" shift @@ -58,21 +74,37 @@ while [ "$#" -gt 0 ]; do esac done -if [ -z "${PROFILE:-}" ] || [ -z "${PKGTYPE:-}" ] || [ -z "${BUILDER:-}" ] || [ -z "${ARCH:-}" ]; then +if [ -z "${PROFILE:-}" ] || + [ -z "${PKGTYPE:-}" ] || + [ -z "${BUILDER:-}" ] || + [ -z "${ARCH:-}" ] || + [ -z "${OTP_VSN:-}" ] || + [ -z "${ELIXIR_VSN:-}" ] || + [ -z "${SYSTEM:-}" ]; then help exit 1 fi -if [ "$PKGTYPE" != 'tgz' ] && [ "$PKGTYPE" != 'pkg' ]; then - echo "Bad --pkgtype option, should be tgz or pkg" +case "$PKGTYPE" in + tgz|pkg|elixirpkg) + true + ;; + *) + echo "Bad --pkgtype option, should be zip or pkg" exit 1 -fi + ;; +esac cd "${SRC_DIR:-.}" PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh "$PROFILE")}" -OTP_VSN_SYSTEM=$(echo "$BUILDER" | cut -d ':' -f2) -PKG_NAME="${PROFILE}-${PKG_VSN}-otp${OTP_VSN_SYSTEM}-${ARCH}" + +if [ "$PKGTYPE" = "elixirpkg" ] +then + PKG_NAME="${PROFILE}-${PKG_VSN}-otp${OTP_VSN}-elixir${ELIXIR_VSN}-${SYSTEM}-${ARCH}" +else + PKG_NAME="${PROFILE}-${PKG_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}" +fi docker info docker run --rm --privileged tonistiigi/binfmt:latest --install "${ARCH}" diff --git a/scripts/get-elixir-vsn.sh b/scripts/get-elixir-vsn.sh new file mode 100755 index 000000000..c74af4bf6 --- /dev/null +++ b/scripts/get-elixir-vsn.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -euo pipefail + +elixir -e "System.version() |> IO.puts()" From f24b3f416e068cd1c39e36481ee453933e036420 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Thu, 6 Jan 2022 09:46:32 -0300 Subject: [PATCH 02/23] ci(mix): build slim packages with elixir --- .github/workflows/build_slim_packages.yaml | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index fc4a2d8f5..daa9c5b93 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -35,11 +35,14 @@ jobs: - emqx-enterprise otp: - 24.1.5-3 + elixir: + - 1.13.1 os: - ubuntu20.04 - centos7 - container: "ghcr.io/emqx/emqx-builder/5.0-3:${{ matrix.otp }}-${{ matrix.os }}" + # FIXME: use tagged version once merged + container: "ghcr.io/emqx/emqx-builder/elixir:${{ matrix.otp }}-${{ matrix.elixir }}-${{ matrix.os }}" steps: - uses: actions/checkout@v1 @@ -48,6 +51,7 @@ jobs: echo "EMQX_NAME=${{ matrix.profile }}" >> $GITHUB_ENV echo "CODE_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV echo "EMQX_PKG_NAME=${{ matrix.profile }}-$(./pkg-vsn.sh ${{ matrix.profile }})-otp${{ matrix.otp }}-${{ matrix.os }}-amd64" >> $GITHUB_ENV + echo "EMQX_ELIXIRPKG_NAME=${{ matrix.profile }}-$(./pkg-vsn.sh ${{ matrix.profile }})-otp${{ matrix.otp }}-elixir${{ matrix.elixir }}-${{ matrix.os }}-amd64" >> $GITHUB_ENV - name: Get deps git refs for cache id: deps-refs run: | @@ -56,13 +60,17 @@ jobs: - name: load rocksdb cache uses: actions/cache@v2 with: - path: _build/default/lib/rocksdb/ - key: ${{ matrix.os }}-${{ matrix.otp }}-amd64-${{ steps.deps-refs.outputs.DEP_ROCKSDB_REF }} + path: | + _build/default/lib/rocksdb/ + deps/rocksdb/priv/ + 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/ - key: ${{ matrix.os }}-${{ matrix.otp }}-amd64-${{ steps.deps-refs.outputs.DEP_QUICER_REF }} + path: | + _build/default/lib/quicer/ + deps/quicer/priv/ + key: ${{ matrix.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-amd64-${{ steps.deps-refs.outputs.DEP_QUICER_REF }} - name: build and test tgz package run: | make ${EMQX_NAME}-tgz @@ -75,6 +83,10 @@ jobs: run: | make ${EMQX_NAME}-pkg .ci/build_packages/tests.sh "$EMQX_PKG_NAME" pkg + - name: build and test deb/rpm packages (Elixir) + run: | + make ${EMQX_NAME}-elixirpkg + .ci/build_packages/tests.sh "$EMQX_ELIXIRPKG_NAME" elixirpkg - uses: actions/upload-artifact@v2 with: name: ${{ matrix.profile}}-${{ matrix.otp }}-${{ matrix.os }} From 03e0c5ef2a53ee90020155354a1949f44ca5cc82 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Thu, 6 Jan 2022 17:24:47 -0300 Subject: [PATCH 03/23] fix(eval): use running node for rpc eval, not a fresh one With the previous arguments, a fresh hidden node with the same name as the expected running one was being started and commands were being run there. This caused commands like `ekka_cluster:info()` to report seemingly weird results. --- bin/emqx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/emqx b/bin/emqx index 8bd3640fa..2e1803eff 100755 --- a/bin/emqx +++ b/bin/emqx @@ -864,10 +864,12 @@ case "${COMMAND}" in then "$REL_DIR/elixir" \ --hidden \ + --name "rand-$(relx_gen_id)-$NAME" \ --cookie "$COOKIE" \ --boot "$REL_DIR/start_clean" \ --boot-var RELEASE_LIB "$ERTS_LIB_DIR" \ - --vm-args "$(latest_vm_args 'EMQX_NODE__NAME')"\ + --vm-args "$REL_DIR/remote.vm.args" \ + --erl "-start_epmd false -epmd_module ekka_epmd" \ --rpc-eval "$NAME" "$@" else relx_nodetool "eval" "$@" From bc498a8041f434b3a916442a6b0e721505bd9580 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 5 Jan 2022 15:30:52 -0300 Subject: [PATCH 04/23] ci(mix): add fvt tests and docker images with elixir --- .ci/docker-compose-file/scripts/run-emqx.sh | 26 ++++++++++++++------- .github/workflows/run_fvt_tests.yaml | 14 ++++++++--- Makefile | 9 +++---- deploy/docker/Dockerfile | 23 +++++++++++------- mix.exs | 18 +++++++------- 5 files changed, 59 insertions(+), 31 deletions(-) diff --git a/.ci/docker-compose-file/scripts/run-emqx.sh b/.ci/docker-compose-file/scripts/run-emqx.sh index 35119a378..bf01f5a67 100755 --- a/.ci/docker-compose-file/scripts/run-emqx.sh +++ b/.ci/docker-compose-file/scripts/run-emqx.sh @@ -19,17 +19,27 @@ fi } >> .ci/docker-compose-file/conf.cluster.env is_node_up() { - local node - node="$1" - docker exec -i "$node" \ - bash -c "emqx eval \"['emqx@node1.emqx.io','emqx@node2.emqx.io'] = maps:get(running_nodes, ekka_cluster:info()).\"" > /dev/null 2>&1 + local node="$1" + if [ "${IS_ELIXIR:-no}" = "yes" ] + then + docker exec -i "$node" \ + bash -c "emqx eval \"[:\\\"emqx@node1.emqx.io\\\", :\\\"emqx@node2.emqx.io\\\"] = :ekka_cluster.info()[:running_nodes]\"" + else + docker exec -i "$node" \ + bash -c "emqx eval \"['emqx@node1.emqx.io','emqx@node2.emqx.io'] = maps:get(running_nodes, ekka_cluster:info()).\"" > /dev/null 2>&1 + fi } is_node_listening() { - local node - node="$1" - docker exec -i "$node" \ - emqx eval "ok = case gen_tcp:connect(\"localhost\", 1883, []) of {ok, P} -> gen_tcp:close(P), ok; _ -> exit(1) end." > /dev/null 2>&1 + local node="$1" + if [ "${IS_ELIXIR:-no}" = "yes" ] + then + docker exec -i "$node" \ + emqx eval ":ok = case :gen_tcp.connect('localhost', 1883, []), do: ({:ok, port} -> (:gen_tcp.close(port); :ok); _ -> :error)" > /dev/null 2>&1 + else + docker exec -i "$node" \ + emqx eval "ok = case gen_tcp:connect(\"localhost\", 1883, []) of {ok, P} -> gen_tcp:close(P), ok; _ -> exit(1) end." > /dev/null 2>&1 + fi } is_cluster_up() { diff --git a/.github/workflows/run_fvt_tests.yaml b/.github/workflows/run_fvt_tests.yaml index 882f4dd4b..a9eb20a87 100644 --- a/.github/workflows/run_fvt_tests.yaml +++ b/.github/workflows/run_fvt_tests.yaml @@ -14,7 +14,8 @@ jobs: prepare: runs-on: ubuntu-20.04 # prepare source with any OTP version, no need for a matrix - container: ghcr.io/emqx/emqx-builder/5.0-3:24.1.5-3-alpine3.14 + # FIXME: use tagged version once merged + container: ghcr.io/emqx/emqx-builder/elixir:24.1.5-3-1.13.1-alpine3.14 steps: - uses: actions/checkout@v2 @@ -41,6 +42,7 @@ jobs: - emqx - emqx-edge - emqx-enterprise + - emqx-elixir cluster_db_backend: - mnesia - rlog @@ -82,7 +84,8 @@ jobs: - name: make docker image working-directory: source env: - EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-3:${{ matrix.otp }}-${{ matrix.os }} + # FIXME: use tagged version once merged + EMQX_BUILDER: ghcr.io/emqx/emqx-builder/elixir:${{ matrix.otp }}-1.13.1-${{ matrix.os }} run: | make ${{ matrix.profile }}-docker - name: run emqx @@ -91,6 +94,10 @@ jobs: run: | set -x IMAGE=emqx/${{ matrix.profile }}:$(./pkg-vsn.sh ${{ matrix.profile }}) + if [[ "${{ matrix.profile }}" = *-elixir ]] + then + export IS_ELIXIR=yes + fi ./.ci/docker-compose-file/scripts/run-emqx.sh $IMAGE ${{ matrix.cluster_db_backend }} - name: make paho tests run: | @@ -152,7 +159,8 @@ jobs: - name: make docker image working-directory: source env: - EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-3:${{ matrix.otp }}-${{ matrix.os }} + # FIXME: use tagged version once merged + EMQX_BUILDER: ghcr.io/emqx/emqx-builder/elixir:${{ matrix.otp }}-1.13.1-${{ matrix.os }} run: | make ${{ matrix.profile }}-docker echo "TARGET=emqx/${{ matrix.profile }}" >> $GITHUB_ENV diff --git a/Makefile b/Makefile index 1b34ee07d..e2a8dd4c2 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,8 @@ REBAR_VERSION = 3.16.1-emqx-1 REBAR = $(CURDIR)/rebar3 BUILD = $(CURDIR)/build SCRIPTS = $(CURDIR)/scripts -export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/4.4-2:23.3.4.9-3-alpine3.14 +# FIXME: use tagged version once merged +export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/elixir:24.1.5-3-1.13.1-alpine3.14 export EMQX_DEFAULT_RUNNER = alpine:3.14 export OTP_VSN ?= $(shell $(CURDIR)/scripts/get-otp-vsn.sh) export ELIXIR_VSN ?= $(shell $(CURDIR)/scripts/get-elixir-vsn.sh) @@ -197,13 +198,13 @@ quickrun: ./_build/$(PROFILE)/rel/emqx/bin/emqx console ## docker target is to create docker instructions -.PHONY: $(REL_PROFILES:%=%-docker) +.PHONY: $(REL_PROFILES:%=%-docker) $(REL_PROFILES:%=%-elixir-docker) define gen-docker-target $1-docker: $(COMMON_DEPS) @$(BUILD) $1 docker endef -ALL_TGZS = $(REL_PROFILES) -$(foreach zt,$(ALL_TGZS),$(eval $(call gen-docker-target,$(zt)))) +ALL_DOCKERS = $(REL_PROFILES) $(REL_PROFILES:%=%-elixir) +$(foreach zt,$(ALL_DOCKERS),$(eval $(call gen-docker-target,$(zt)))) ## emqx-docker-testing ## emqx-enterprise-docker-testing diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index a075fcf5d..0ac6bfca4 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -1,4 +1,5 @@ -ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-3:24.1.5-3-alpine3.14 +# FIXME: use tagged version once merged +ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/elixir:24.1.5-3-1.13.1-alpine3.14 ARG RUN_FROM=alpine:3.14 FROM ${BUILD_FROM} AS builder @@ -22,17 +23,23 @@ COPY . /emqx ARG EMQX_NAME=emqx -RUN cd /emqx \ - && rm -rf _build/$EMQX_NAME/lib \ - && make $EMQX_NAME +RUN if [[ "$EMQX_NAME" = *-elixir ]]; then \ + export EMQX_LIB_PATH="_build/prod/lib"; \ + export EMQX_REL_PATH="/emqx/_build/prod/rel/emqx"; \ + else \ + export EMQX_LIB_PATH="_build/$EMQX_NAME/lib"; \ + export EMQX_REL_PATH="/emqx/_build/$EMQX_NAME/rel/emqx"; \ + fi \ + && cd /emqx \ + && rm -rf $EMQX_LIB_PATH \ + && make $EMQX_NAME \ + && mkdir -p /emqx-rel \ + && mv $EMQX_REL_PATH /emqx-rel FROM $RUN_FROM -## define ARG again after 'FROM $RUN_FROM' -ARG EMQX_NAME=emqx - COPY deploy/docker/docker-entrypoint.sh /usr/bin/ -COPY --from=builder /emqx/_build/$EMQX_NAME/rel/emqx /opt/emqx +COPY --from=builder /emqx-rel/emqx /opt/emqx RUN ln -s /opt/emqx/bin/* /usr/local/bin/ RUN apk add --no-cache curl ncurses-libs openssl sudo libstdc++ bash diff --git a/mix.exs b/mix.exs index 1c6a8d98c..4e10129cf 100644 --- a/mix.exs +++ b/mix.exs @@ -243,11 +243,21 @@ defmodule EMQXUmbrella.MixProject do bin = Path.join(release.path, "bin") etc = Path.join(release.path, "etc") + log = Path.join(release.path, "log") Mix.Generator.create_directory(bin) Mix.Generator.create_directory(etc) + Mix.Generator.create_directory(log) Mix.Generator.create_directory(Path.join(etc, "certs")) + Enum.each( + ["mnesia", "configs", "patches", "scripts"], + fn dir -> + path = Path.join([release.path, "data", dir]) + Mix.Generator.create_directory(path) + end + ) + Mix.Generator.copy_file( "apps/emqx_authz/etc/acl.conf", Path.join(etc, "acl.conf"), @@ -418,14 +428,6 @@ defmodule EMQXUmbrella.MixProject do # add those to the `:overlays` key before running `:tar`. # See: https://hexdocs.pm/mix/1.13.1/Mix.Release.html#__struct__/0 defp prepare_tar_overlays(release) do - Enum.each( - ["mnesia", "configs", "patches", "scripts"], - fn dir -> - path = Path.join([release.path, "data", dir]) - File.mkdir_p!(path) - end - ) - Map.update!(release, :overlays, &["etc", "data" | &1]) end From 01092982c1ed8e607e87438b431cdc08d5dbc0a8 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Fri, 7 Jan 2022 14:29:31 -0300 Subject: [PATCH 05/23] fix(elixir): do not start logger before config Despite Hocon generating the same config in both Elixir and Erlang releases, apparently starting Logger before other applications has the subtle effect of redirecting all logs to `log/erlang.log.N`, even those lines that should appear in `log/emqx.log.N`. Simply not adding it to the application list restores the Erlang release behavior. --- mix.exs | 1 - 1 file changed, 1 deletion(-) diff --git a/mix.exs b/mix.exs index 4e10129cf..9acdd2b92 100644 --- a/mix.exs +++ b/mix.exs @@ -154,7 +154,6 @@ defmodule EMQXUmbrella.MixProject do def applications(release_type) do [ - logger: :permanent, crypto: :permanent, public_key: :permanent, asn1: :permanent, From a91880780a6be2f3c61629fd16f34f5ed251aa99 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Fri, 7 Jan 2022 17:30:11 -0300 Subject: [PATCH 06/23] chore(elixir): change image/package versioning convention We now go from "most specific" to "most general" versions: Elixir -> OTP -> OS. --- .github/workflows/build_packages.yaml | 10 +++++----- .github/workflows/build_slim_packages.yaml | 4 ++-- .github/workflows/run_fvt_tests.yaml | 6 +++--- Makefile | 2 +- deploy/docker/Dockerfile | 2 +- deploy/packages/deb/Makefile | 2 +- deploy/packages/rpm/Makefile | 2 +- scripts/buildx.sh | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index aa7a521ff..74873506c 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-20.04 # prepare source with any OTP version, no need for a matrix # FIXME: use tagged version once merged - container: "ghcr.io/emqx/emqx-builder/elixir:24.1.5-3-1.13.1-ubuntu20.04" + container: "ghcr.io/emqx/emqx-builder/elixir:1.13.1-24.1.5-3-ubuntu20.04" outputs: ce_old_vsns: ${{ steps.find_old_versons.outputs.ce_old_vsns }} @@ -351,7 +351,7 @@ jobs: --otp "${OTP}" \ --elixir "${ELIXIR}" \ --system "${SYSTEM}" \ - --builder "ghcr.io/emqx/emqx-builder/elixir:${OTP}-${ELIXIR}-${SYSTEM}" + --builder "ghcr.io/emqx/emqx-builder/elixir:${ELIXIR}-${OTP}-${SYSTEM}" ## the pkg build is incremental on the tgz build ./scripts/buildx.sh \ --profile "${PROFILE}" \ @@ -360,7 +360,7 @@ jobs: --otp "${OTP}" \ --elixir "${ELIXIR}" \ --system "${SYSTEM}" \ - --builder "ghcr.io/emqx/emqx-builder/elixir:${OTP}-${ELIXIR}-${SYSTEM}" + --builder "ghcr.io/emqx/emqx-builder/elixir:${ELIXIR}-${OTP}-${SYSTEM}" ./scripts/buildx.sh \ --profile "${PROFILE}" \ @@ -369,7 +369,7 @@ jobs: --otp "${OTP}" \ --elixir "${ELIXIR}" \ --system "${SYSTEM}" \ - --builder "ghcr.io/emqx/emqx-builder/elixir:${OTP}-${ELIXIR}-${SYSTEM}" + --builder "ghcr.io/emqx/emqx-builder/elixir:${ELIXIR}-${OTP}-${SYSTEM}" - name: create sha256 env: @@ -450,7 +450,7 @@ jobs: labels: ${{ steps.meta.outputs.labels }} build-args: | # FIXME: use tagged version once merged - BUILD_FROM=ghcr.io/emqx/emqx-builder/elixir:${{ matrix.otp }}-${{ matrix.elixir }}-alpine3.14 + BUILD_FROM=ghcr.io/emqx/emqx-builder/elixir:${{ matrix.elixir }}-${{ matrix.otp }}-alpine3.14 RUN_FROM=alpine:3.14 EMQX_NAME=${{ matrix.profile }} file: source/deploy/docker/Dockerfile diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index daa9c5b93..313a9c7de 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -42,7 +42,7 @@ jobs: - centos7 # FIXME: use tagged version once merged - container: "ghcr.io/emqx/emqx-builder/elixir:${{ matrix.otp }}-${{ matrix.elixir }}-${{ matrix.os }}" + container: "ghcr.io/emqx/emqx-builder/elixir:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" steps: - uses: actions/checkout@v1 @@ -51,7 +51,7 @@ jobs: echo "EMQX_NAME=${{ matrix.profile }}" >> $GITHUB_ENV echo "CODE_PATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV echo "EMQX_PKG_NAME=${{ matrix.profile }}-$(./pkg-vsn.sh ${{ matrix.profile }})-otp${{ matrix.otp }}-${{ matrix.os }}-amd64" >> $GITHUB_ENV - echo "EMQX_ELIXIRPKG_NAME=${{ matrix.profile }}-$(./pkg-vsn.sh ${{ matrix.profile }})-otp${{ matrix.otp }}-elixir${{ matrix.elixir }}-${{ matrix.os }}-amd64" >> $GITHUB_ENV + echo "EMQX_ELIXIRPKG_NAME=${{ matrix.profile }}-$(./pkg-vsn.sh ${{ matrix.profile }})-elixir${{ matrix.elixir }}-otp${{ matrix.otp }}-${{ matrix.os }}-amd64" >> $GITHUB_ENV - name: Get deps git refs for cache id: deps-refs run: | diff --git a/.github/workflows/run_fvt_tests.yaml b/.github/workflows/run_fvt_tests.yaml index a9eb20a87..77a3653d9 100644 --- a/.github/workflows/run_fvt_tests.yaml +++ b/.github/workflows/run_fvt_tests.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-20.04 # prepare source with any OTP version, no need for a matrix # FIXME: use tagged version once merged - container: ghcr.io/emqx/emqx-builder/elixir:24.1.5-3-1.13.1-alpine3.14 + container: ghcr.io/emqx/emqx-builder/elixir:1.13.1-24.1.5-3-alpine3.14 steps: - uses: actions/checkout@v2 @@ -85,7 +85,7 @@ jobs: working-directory: source env: # FIXME: use tagged version once merged - EMQX_BUILDER: ghcr.io/emqx/emqx-builder/elixir:${{ matrix.otp }}-1.13.1-${{ matrix.os }} + EMQX_BUILDER: ghcr.io/emqx/emqx-builder/elixir:1.13.1-${{ matrix.otp }}-${{ matrix.os }} run: | make ${{ matrix.profile }}-docker - name: run emqx @@ -160,7 +160,7 @@ jobs: working-directory: source env: # FIXME: use tagged version once merged - EMQX_BUILDER: ghcr.io/emqx/emqx-builder/elixir:${{ matrix.otp }}-1.13.1-${{ matrix.os }} + EMQX_BUILDER: ghcr.io/emqx/emqx-builder/elixir:1.13.1-${{ matrix.otp }}-${{ matrix.os }} run: | make ${{ matrix.profile }}-docker echo "TARGET=emqx/${{ matrix.profile }}" >> $GITHUB_ENV diff --git a/Makefile b/Makefile index e2a8dd4c2..163ac4b3a 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ REBAR = $(CURDIR)/rebar3 BUILD = $(CURDIR)/build SCRIPTS = $(CURDIR)/scripts # FIXME: use tagged version once merged -export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/elixir:24.1.5-3-1.13.1-alpine3.14 +export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/elixir:1.13.1-24.1.5-3-alpine3.14 export EMQX_DEFAULT_RUNNER = alpine:3.14 export OTP_VSN ?= $(shell $(CURDIR)/scripts/get-otp-vsn.sh) export ELIXIR_VSN ?= $(shell $(CURDIR)/scripts/get-elixir-vsn.sh) diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index 0ac6bfca4..c83f8ce87 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -1,5 +1,5 @@ # FIXME: use tagged version once merged -ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/elixir:24.1.5-3-1.13.1-alpine3.14 +ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/elixir:1.13.1-24.1.5-3-alpine3.14 ARG RUN_FROM=alpine:3.14 FROM ${BUILD_FROM} AS builder diff --git a/deploy/packages/deb/Makefile b/deploy/packages/deb/Makefile index 3b51a1442..6ba61c314 100644 --- a/deploy/packages/deb/Makefile +++ b/deploy/packages/deb/Makefile @@ -15,7 +15,7 @@ endif TAR_PKG_DIR ?= _build/$(EMQX_BUILD)/rel/emqx TAR_PKG := $(EMQX_REL)/$(TAR_PKG_DIR)/emqx-$(PKG_VSN).tar.gz SOURCE_PKG := $(EMQX_NAME)_$(PKG_VSN)_$(shell dpkg --print-architecture) -TARGET_PKG := $(EMQX_NAME)-$(PKG_VSN)-otp$(OTP_VSN)$(ELIXIR_PKG_VSN)-$(SYSTEM)-$(ARCH) +TARGET_PKG := $(EMQX_NAME)-$(PKG_VSN)$(ELIXIR_PKG_VSN)-otp$(OTP_VSN)-$(SYSTEM)-$(ARCH) .PHONY: all all: | $(BUILT) diff --git a/deploy/packages/rpm/Makefile b/deploy/packages/rpm/Makefile index fbb5f899b..b9ba57267 100644 --- a/deploy/packages/rpm/Makefile +++ b/deploy/packages/rpm/Makefile @@ -25,7 +25,7 @@ endif TAR_PKG_DIR ?= _build/$(EMQX_BUILD)/rel/emqx TAR_PKG := $(EMQX_REL)/$(TAR_PKG_DIR)/emqx-$(PKG_VSN).tar.gz SOURCE_PKG := emqx-$(RPM_VSN)-$(RPM_REL).$(shell uname -m) -TARGET_PKG := $(EMQX_NAME)-$(PKG_VSN)-otp$(OTP_VSN)$(ELIXIR_PKG_VSN)-$(SYSTEM)-$(ARCH) +TARGET_PKG := $(EMQX_NAME)-$(PKG_VSN)$(ELIXIR_PKG_VSN)-otp$(OTP_VSN)-$(SYSTEM)-$(ARCH) SYSTEMD := $(shell if command -v systemctl >/dev/null 2>&1; then echo yes; fi) # Not $(PWD) as it does not work for make -C diff --git a/scripts/buildx.sh b/scripts/buildx.sh index 74b5e8267..e99ce0f05 100755 --- a/scripts/buildx.sh +++ b/scripts/buildx.sh @@ -101,7 +101,7 @@ PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh "$PROFILE")}" if [ "$PKGTYPE" = "elixirpkg" ] then - PKG_NAME="${PROFILE}-${PKG_VSN}-otp${OTP_VSN}-elixir${ELIXIR_VSN}-${SYSTEM}-${ARCH}" + PKG_NAME="${PROFILE}-${PKG_VSN}-elixir${ELIXIR_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}" else PKG_NAME="${PROFILE}-${PKG_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}" fi From e874ec2b363ea3e84449810c3fd3bae0797666ee Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Mon, 10 Jan 2022 09:42:58 -0300 Subject: [PATCH 07/23] chore(images): use new image in more CI workflows --- .ci/docker-compose-file/docker-compose.yaml | 6 ++++-- .github/workflows/check_deps_integrity.yaml | 3 ++- .github/workflows/elixir_release.yml | 18 +++++++----------- .github/workflows/run_api_tests.yaml | 6 +++++- .github/workflows/run_emqx_app_tests.yaml | 8 +++++++- .github/workflows/run_relup_tests.yaml | 8 +++++++- .github/workflows/run_test_cases.yaml | 4 +++- 7 files changed, 35 insertions(+), 18 deletions(-) diff --git a/.ci/docker-compose-file/docker-compose.yaml b/.ci/docker-compose-file/docker-compose.yaml index f1cce9364..664d2327a 100644 --- a/.ci/docker-compose-file/docker-compose.yaml +++ b/.ci/docker-compose-file/docker-compose.yaml @@ -3,7 +3,8 @@ version: '3.9' services: erlang23: container_name: erlang23 - image: ghcr.io/emqx/emqx-builder/5.0-3:23.3.4.9-3-ubuntu20.04 + # FIXME: use tagged version once merged + image: ghcr.io/emqx/emqx-builder/elixir:1.13.1-23.3.4.9-3-ubuntu20.04 env_file: - conf.env environment: @@ -23,7 +24,8 @@ services: erlang24: container_name: erlang24 - image: ghcr.io/emqx/emqx-builder/5.0-3:24.1.5-3-ubuntu20.04 + # FIXME: use tagged version once merged + image: ghcr.io/emqx/emqx-builder/elixir:1.13.1-24.1.5-3-ubuntu20.04 env_file: - conf.env environment: diff --git a/.github/workflows/check_deps_integrity.yaml b/.github/workflows/check_deps_integrity.yaml index 2318b9938..9fbacd84a 100644 --- a/.github/workflows/check_deps_integrity.yaml +++ b/.github/workflows/check_deps_integrity.yaml @@ -5,7 +5,8 @@ on: [pull_request] jobs: check_deps_integrity: runs-on: ubuntu-20.04 - container: "ghcr.io/emqx/emqx-builder/5.0-3:24.1.5-3-ubuntu20.04" + # FIXME: use tagged version once merged + container: ghcr.io/emqx/emqx-builder/elixir:1.13.1-23.3.4.9-3-ubuntu20.04 steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/elixir_release.yml b/.github/workflows/elixir_release.yml index 9a1d672a2..f46989f77 100644 --- a/.github/workflows/elixir_release.yml +++ b/.github/workflows/elixir_release.yml @@ -12,28 +12,24 @@ on: jobs: build: runs-on: ubuntu-latest - container: ghcr.io/emqx/emqx-builder/5.0-3:24.1.5-3-alpine3.14 + # FIXME: use tagged version once merged + container: ghcr.io/emqx/emqx-builder/elixir:1.13.1-23.3.4.9-3-ubuntu20.04 steps: - name: Checkout uses: actions/checkout@v2.4.0 - - name: setup mix - run: | - mix local.hex --force - mix local.rebar --force - mix deps.get - - name: produce emqx.conf.all template - run: make conf-segs + - name: install tools + run: apt update && apt install netcat-openbsd - name: elixir release - run: mix release --overwrite + run: make emqx-elixir - name: start release run: | - cd _build/dev/rel/emqx + cd _build/prod/rel/emqx bin/emqx start - name: check if started run: | sleep 10 nc -zv localhost 1883 - cd _build/dev/rel/emqx + cd _build/prod/rel/emqx bin/emqx ping bin/emqx ctl status diff --git a/.github/workflows/run_api_tests.yaml b/.github/workflows/run_api_tests.yaml index c5a8b94cb..2f62a93f3 100644 --- a/.github/workflows/run_api_tests.yaml +++ b/.github/workflows/run_api_tests.yaml @@ -17,12 +17,16 @@ jobs: matrix: otp: - 24.1.5-3 + elixir: + - 1.13.1 os: - ubuntu20.04 arch: - amd64 runs-on: ubuntu-latest - container: "ghcr.io/emqx/emqx-builder/5.0-3:${{ matrix.otp }}-${{ matrix.os }}" + # FIXME: use tagged version once merged + container: ghcr.io/emqx/emqx-builder/elixir:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} + steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/run_emqx_app_tests.yaml b/.github/workflows/run_emqx_app_tests.yaml index c204d718b..9a2f650e5 100644 --- a/.github/workflows/run_emqx_app_tests.yaml +++ b/.github/workflows/run_emqx_app_tests.yaml @@ -14,13 +14,19 @@ jobs: otp: - 23.3.4.9-3 - 24.1.5-3 + # no need to use more than 1 version of Elixir, since tests + # run using only Erlang code. This is needed just to specify + # the base image. + elixir: + - 1.13.1 os: - ubuntu20.04 arch: - amd64 runs-on: ubuntu-20.04 - container: "ghcr.io/emqx/emqx-builder/5.0-3:${{ matrix.otp }}-${{ matrix.os }}" + # FIXME: use tagged version once merged + container: "ghcr.io/emqx/emqx-builder/elixir:${{ matrix.elixir}}-${{ matrix.otp }}-${{ matrix.os }}" steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/run_relup_tests.yaml b/.github/workflows/run_relup_tests.yaml index 0af50f599..b3f881f4c 100644 --- a/.github/workflows/run_relup_tests.yaml +++ b/.github/workflows/run_relup_tests.yaml @@ -20,13 +20,19 @@ jobs: - emqx-enterprise otp: - 24.1.5-3 + # no need to use more than 1 version of Elixir, since tests + # run using only Erlang code. This is needed just to specify + # the base image. + elixir: + - 1.13.1 os: - ubuntu20.04 arch: - amd64 runs-on: ubuntu-20.04 - container: "ghcr.io/emqx/emqx-builder/5.0-3:${{ matrix.otp }}-${{ matrix.os }}" + # FIXME: use tagged version once merged + container: "ghcr.io/emqx/emqx-builder/elixir:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" defaults: run: diff --git a/.github/workflows/run_test_cases.yaml b/.github/workflows/run_test_cases.yaml index e50993ded..16ccf8497 100644 --- a/.github/workflows/run_test_cases.yaml +++ b/.github/workflows/run_test_cases.yaml @@ -17,13 +17,15 @@ jobs: matrix: otp: - 24.1.5-3 + elixir: + - 1.13.1 os: - ubuntu20.04 arch: - amd64 runs-on: ubuntu-20.04 - container: "ghcr.io/emqx/emqx-builder/5.0-3:${{ matrix.otp }}-${{ matrix.os }}" + container: "ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" steps: - uses: actions/checkout@v2 From ba6d4e4a1917fa246626042f0542da8587a904f6 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 11 Jan 2022 11:47:45 -0300 Subject: [PATCH 08/23] fix(ci): raspbian arch is arm, not arm64 --- .ci/build_packages/tests.sh | 20 ++++++++++++-------- .github/workflows/build_slim_packages.yaml | 6 +++--- build | 2 +- scripts/buildx.sh | 2 +- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/.ci/build_packages/tests.sh b/.ci/build_packages/tests.sh index 2909e6909..51429bd69 100755 --- a/.ci/build_packages/tests.sh +++ b/.ci/build_packages/tests.sh @@ -20,6 +20,7 @@ esac PACKAGE_NAME="${1}" PACKAGE_TYPE="${2}" +ARCH="${3}" export DEBUG=1 export CODE_PATH=${CODE_PATH:-"/emqx"} @@ -48,17 +49,20 @@ if ! [ -f "$PACKAGE_FILE" ]; then exit 1 fi -case "$(uname -m)" in +if [ -z "$ARCH" ] +then + case "$(uname -m)" in x86_64) - ARCH='amd64' - ;; + ARCH='amd64' + ;; aarch64) - ARCH='arm64' - ;; + ARCH='arm64' + ;; arm*) - ARCH=arm - ;; -esac + ARCH=arm + ;; + esac +fi export ARCH emqx_prepare(){ diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index 313a9c7de..6d01479df 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -74,7 +74,7 @@ jobs: - name: build and test tgz package run: | make ${EMQX_NAME}-tgz - .ci/build_packages/tests.sh "$EMQX_PKG_NAME" tgz + .ci/build_packages/tests.sh "$EMQX_PKG_NAME" tgz amd64 - name: run static checks if: contains(matrix.os, 'ubuntu') run: | @@ -82,11 +82,11 @@ jobs: - name: build and test deb/rpm packages run: | make ${EMQX_NAME}-pkg - .ci/build_packages/tests.sh "$EMQX_PKG_NAME" pkg + .ci/build_packages/tests.sh "$EMQX_PKG_NAME" pkg amd64 - name: build and test deb/rpm packages (Elixir) run: | make ${EMQX_NAME}-elixirpkg - .ci/build_packages/tests.sh "$EMQX_ELIXIRPKG_NAME" elixirpkg + .ci/build_packages/tests.sh "$EMQX_ELIXIRPKG_NAME" elixirpkg amd64 - uses: actions/upload-artifact@v2 with: name: ${{ matrix.profile}}-${{ matrix.otp }}-${{ matrix.os }} diff --git a/build b/build index 26da3984d..bd2994fef 100755 --- a/build +++ b/build @@ -31,7 +31,7 @@ case "$ARCH" in ARCH='arm64' ;; arm*) - ARCH=arm + ARCH='arm64' ;; esac export ARCH diff --git a/scripts/buildx.sh b/scripts/buildx.sh index e99ce0f05..482e5e25c 100755 --- a/scripts/buildx.sh +++ b/scripts/buildx.sh @@ -114,4 +114,4 @@ docker run -i --rm \ --platform="linux/$ARCH" \ -e EMQX_NAME="$PROFILE" \ "$BUILDER" \ - bash -euc "make ${PROFILE}-${PKGTYPE} && .ci/build_packages/tests.sh $PKG_NAME $PKGTYPE" + bash -euc "make ${PROFILE}-${PKGTYPE} && .ci/build_packages/tests.sh $PKG_NAME $PKGTYPE $ARCH" From fca0d2bfd821848c9bddc3361708ce31a1d19336 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 11 Jan 2022 15:58:54 -0300 Subject: [PATCH 09/23] fix(ci): split elixir package building into own step Since the job step may run out of execution time, by separating the Elixir build from the traditional one may prevent timeouts. --- .github/workflows/build_packages.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 74873506c..94ce8ac08 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -240,6 +240,12 @@ jobs: - 24.1.5-3 # we test with OTP 23, but only build package on OTP 24 versions elixir: - 1.13.1 + # used to split elixir packages into a separate job, since the + # entire job may take a lot of time, especially on arm64 + # emulation + build_elixir: + - with_elixir + - no_elixir arch: - amd64 - arm64 @@ -341,6 +347,7 @@ jobs: PROFILE: ${{ matrix.profile }} ARCH: ${{ matrix.arch }} SYSTEM: ${{ matrix.os }} + if: ${{ matrix.build_elixir == 'no_elixir' }} working-directory: source # FIXME: use tagged version once merged run: | @@ -362,6 +369,17 @@ jobs: --system "${SYSTEM}" \ --builder "ghcr.io/emqx/emqx-builder/elixir:${ELIXIR}-${OTP}-${SYSTEM}" + - name: build emqx packages (Elixir) + env: + OTP: ${{ matrix.otp }} + ELIXIR: ${{ matrix.elixir }} + PROFILE: ${{ matrix.profile }} + ARCH: ${{ matrix.arch }} + SYSTEM: ${{ matrix.os }} + working-directory: source + if: ${{ matrix.build_elixir == 'with_elixir' }} + # FIXME: use tagged version once merged + run: | ./scripts/buildx.sh \ --profile "${PROFILE}" \ --pkgtype "elixirpkg" \ From 5a7943f583138d4c718eb95d013e3733c01c6a07 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 12 Jan 2022 09:41:58 -0300 Subject: [PATCH 10/23] chore(ci): grep `emqx ctl listeners` to check if node is listening --- .ci/docker-compose-file/scripts/run-emqx.sh | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.ci/docker-compose-file/scripts/run-emqx.sh b/.ci/docker-compose-file/scripts/run-emqx.sh index bf01f5a67..51e467983 100755 --- a/.ci/docker-compose-file/scripts/run-emqx.sh +++ b/.ci/docker-compose-file/scripts/run-emqx.sh @@ -32,14 +32,10 @@ is_node_up() { is_node_listening() { local node="$1" - if [ "${IS_ELIXIR:-no}" = "yes" ] - then - docker exec -i "$node" \ - emqx eval ":ok = case :gen_tcp.connect('localhost', 1883, []), do: ({:ok, port} -> (:gen_tcp.close(port); :ok); _ -> :error)" > /dev/null 2>&1 - else - docker exec -i "$node" \ - emqx eval "ok = case gen_tcp:connect(\"localhost\", 1883, []) of {ok, P} -> gen_tcp:close(P), ok; _ -> exit(1) end." > /dev/null 2>&1 - fi + docker exec -i "$node" \ + emqx ctl listeners | \ + grep -A6 'tcp:default' | \ + grep -qE 'running *: true' } is_cluster_up() { From 59f0d5f537c84df4e6e0095c28344710715ef68c Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 12 Jan 2022 10:27:06 -0300 Subject: [PATCH 11/23] 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 From f66462ca6bb12390179edaad36b627c9d368f594 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 12 Jan 2022 11:29:02 -0300 Subject: [PATCH 12/23] chore(ci): cache rocksdb+quicer for elixir packages --- .github/workflows/build_packages.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 94ce8ac08..03d68d69a 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -298,12 +298,16 @@ jobs: - name: load rocksdb cache uses: actions/cache@v2 with: - path: source/_build/default/lib/rocksdb/ + path: | + source/_build/default/lib/rocksdb/ + source/deps/rocksdb/ key: ${{ matrix.os }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_ROCKSDB_REF }} - name: load quicer cache uses: actions/cache@v2 with: - path: source/_build/default/lib/quicer/ + path: | + source/_build/default/lib/quicer/ + source/deps/quicer/ key: ${{ matrix.os }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_QUICER_REF }} - name: download old emqx tgz packages env: From 3ec7d9ae24533fbdebcc0c7288899931a908f970 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 12 Jan 2022 20:09:49 -0300 Subject: [PATCH 13/23] chore(ci): use new tagged image with elixir --- .ci/docker-compose-file/docker-compose.yaml | 6 ++--- .github/workflows/build_packages.yaml | 27 +++++++++++++-------- .github/workflows/build_slim_packages.yaml | 3 +-- .github/workflows/check_deps_integrity.yaml | 3 +-- .github/workflows/elixir_release.yml | 3 +-- .github/workflows/run_api_tests.yaml | 3 +-- .github/workflows/run_emqx_app_tests.yaml | 3 +-- .github/workflows/run_fvt_tests.yaml | 13 +++++----- .github/workflows/run_relup_tests.yaml | 3 +-- Makefile | 3 +-- deploy/docker/Dockerfile | 3 +-- 11 files changed, 34 insertions(+), 36 deletions(-) diff --git a/.ci/docker-compose-file/docker-compose.yaml b/.ci/docker-compose-file/docker-compose.yaml index 664d2327a..ea2de3356 100644 --- a/.ci/docker-compose-file/docker-compose.yaml +++ b/.ci/docker-compose-file/docker-compose.yaml @@ -3,8 +3,7 @@ version: '3.9' services: erlang23: container_name: erlang23 - # FIXME: use tagged version once merged - image: ghcr.io/emqx/emqx-builder/elixir:1.13.1-23.3.4.9-3-ubuntu20.04 + image: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-23.3.4.9-3-ubuntu20.04 env_file: - conf.env environment: @@ -24,8 +23,7 @@ services: erlang24: container_name: erlang24 - # FIXME: use tagged version once merged - image: ghcr.io/emqx/emqx-builder/elixir:1.13.1-24.1.5-3-ubuntu20.04 + image: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-ubuntu20.04 env_file: - conf.env environment: diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 03d68d69a..668db3220 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -19,8 +19,7 @@ jobs: prepare: runs-on: ubuntu-20.04 # prepare source with any OTP version, no need for a matrix - # FIXME: use tagged version once merged - container: "ghcr.io/emqx/emqx-builder/elixir:1.13.1-24.1.5-3-ubuntu20.04" + container: "ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-ubuntu20.04" outputs: ce_old_vsns: ${{ steps.find_old_versons.outputs.ce_old_vsns }} @@ -353,7 +352,6 @@ jobs: SYSTEM: ${{ matrix.os }} if: ${{ matrix.build_elixir == 'no_elixir' }} working-directory: source - # FIXME: use tagged version once merged run: | ./scripts/buildx.sh \ --profile "${PROFILE}" \ @@ -362,7 +360,7 @@ jobs: --otp "${OTP}" \ --elixir "${ELIXIR}" \ --system "${SYSTEM}" \ - --builder "ghcr.io/emqx/emqx-builder/elixir:${ELIXIR}-${OTP}-${SYSTEM}" + --builder "ghcr.io/emqx/emqx-builder/5.0-4:${ELIXIR}-${OTP}-${SYSTEM}" ## the pkg build is incremental on the tgz build ./scripts/buildx.sh \ --profile "${PROFILE}" \ @@ -371,7 +369,7 @@ jobs: --otp "${OTP}" \ --elixir "${ELIXIR}" \ --system "${SYSTEM}" \ - --builder "ghcr.io/emqx/emqx-builder/elixir:${ELIXIR}-${OTP}-${SYSTEM}" + --builder "ghcr.io/emqx/emqx-builder/5.0-4:${ELIXIR}-${OTP}-${SYSTEM}" - name: build emqx packages (Elixir) env: @@ -382,16 +380,26 @@ jobs: SYSTEM: ${{ matrix.os }} working-directory: source if: ${{ matrix.build_elixir == 'with_elixir' }} - # FIXME: use tagged version once merged run: | ./scripts/buildx.sh \ --profile "${PROFILE}" \ - --pkgtype "elixirpkg" \ + --pkgtype "zip" \ --arch "${ARCH}" \ --otp "${OTP}" \ --elixir "${ELIXIR}" \ --system "${SYSTEM}" \ - --builder "ghcr.io/emqx/emqx-builder/elixir:${ELIXIR}-${OTP}-${SYSTEM}" + --with-elixir \ + --builder "ghcr.io/emqx/emqx-builder/5.0-4:${ELIXIR}-${OTP}-${SYSTEM}" + + ./scripts/buildx.sh \ + --profile "${PROFILE}" \ + --pkgtype "pkg" \ + --arch "${ARCH}" \ + --otp "${OTP}" \ + --elixir "${ELIXIR}" \ + --system "${SYSTEM}" \ + --with-elixir \ + --builder "ghcr.io/emqx/emqx-builder/5.0-4:${ELIXIR}-${OTP}-${SYSTEM}" - name: create sha256 env: @@ -471,8 +479,7 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} build-args: | - # FIXME: use tagged version once merged - BUILD_FROM=ghcr.io/emqx/emqx-builder/elixir:${{ matrix.elixir }}-${{ matrix.otp }}-alpine3.14 + BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-alpine3.14 RUN_FROM=alpine:3.14 EMQX_NAME=${{ matrix.profile }} file: source/deploy/docker/Dockerfile diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index 8c8728b7b..f083d9a1a 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -41,8 +41,7 @@ jobs: - ubuntu20.04 - centos7 - # FIXME: use tagged version once merged - container: "ghcr.io/emqx/emqx-builder/elixir:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" + container: "ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" steps: - uses: actions/checkout@v1 diff --git a/.github/workflows/check_deps_integrity.yaml b/.github/workflows/check_deps_integrity.yaml index 9fbacd84a..60bd4aac3 100644 --- a/.github/workflows/check_deps_integrity.yaml +++ b/.github/workflows/check_deps_integrity.yaml @@ -5,8 +5,7 @@ on: [pull_request] jobs: check_deps_integrity: runs-on: ubuntu-20.04 - # FIXME: use tagged version once merged - container: ghcr.io/emqx/emqx-builder/elixir:1.13.1-23.3.4.9-3-ubuntu20.04 + container: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-23.3.4.9-3-ubuntu20.04 steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/elixir_release.yml b/.github/workflows/elixir_release.yml index f46989f77..dc41f7417 100644 --- a/.github/workflows/elixir_release.yml +++ b/.github/workflows/elixir_release.yml @@ -12,8 +12,7 @@ on: jobs: build: runs-on: ubuntu-latest - # FIXME: use tagged version once merged - container: ghcr.io/emqx/emqx-builder/elixir:1.13.1-23.3.4.9-3-ubuntu20.04 + container: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-23.3.4.9-3-ubuntu20.04 steps: - name: Checkout diff --git a/.github/workflows/run_api_tests.yaml b/.github/workflows/run_api_tests.yaml index 2f62a93f3..31093b67b 100644 --- a/.github/workflows/run_api_tests.yaml +++ b/.github/workflows/run_api_tests.yaml @@ -24,8 +24,7 @@ jobs: arch: - amd64 runs-on: ubuntu-latest - # FIXME: use tagged version once merged - container: ghcr.io/emqx/emqx-builder/elixir:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} + container: ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/run_emqx_app_tests.yaml b/.github/workflows/run_emqx_app_tests.yaml index 9a2f650e5..77e753483 100644 --- a/.github/workflows/run_emqx_app_tests.yaml +++ b/.github/workflows/run_emqx_app_tests.yaml @@ -25,8 +25,7 @@ jobs: - amd64 runs-on: ubuntu-20.04 - # FIXME: use tagged version once merged - container: "ghcr.io/emqx/emqx-builder/elixir:${{ matrix.elixir}}-${{ matrix.otp }}-${{ matrix.os }}" + container: "ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir}}-${{ matrix.otp }}-${{ matrix.os }}" steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/run_fvt_tests.yaml b/.github/workflows/run_fvt_tests.yaml index 77a3653d9..acacd6eef 100644 --- a/.github/workflows/run_fvt_tests.yaml +++ b/.github/workflows/run_fvt_tests.yaml @@ -14,8 +14,7 @@ jobs: prepare: runs-on: ubuntu-20.04 # prepare source with any OTP version, no need for a matrix - # FIXME: use tagged version once merged - container: ghcr.io/emqx/emqx-builder/elixir:1.13.1-24.1.5-3-alpine3.14 + container: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-alpine3.14 steps: - uses: actions/checkout@v2 @@ -50,6 +49,8 @@ jobs: - alpine3.14 otp: - 24.1.5-3 + elixir: + - 1.13.1 arch: - amd64 exclude: @@ -84,8 +85,7 @@ jobs: - name: make docker image working-directory: source env: - # FIXME: use tagged version once merged - EMQX_BUILDER: ghcr.io/emqx/emqx-builder/elixir:1.13.1-${{ matrix.otp }}-${{ matrix.os }} + EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} run: | make ${{ matrix.profile }}-docker - name: run emqx @@ -126,6 +126,8 @@ jobs: - alpine3.14 otp: - 24.1.5-3 + elixir: + - 1.13.1 arch: - amd64 # - emqx-enterprise # TODO test enterprise @@ -159,8 +161,7 @@ jobs: - name: make docker image working-directory: source env: - # FIXME: use tagged version once merged - EMQX_BUILDER: ghcr.io/emqx/emqx-builder/elixir:1.13.1-${{ matrix.otp }}-${{ matrix.os }} + EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} run: | make ${{ matrix.profile }}-docker echo "TARGET=emqx/${{ matrix.profile }}" >> $GITHUB_ENV diff --git a/.github/workflows/run_relup_tests.yaml b/.github/workflows/run_relup_tests.yaml index b3f881f4c..7bace05de 100644 --- a/.github/workflows/run_relup_tests.yaml +++ b/.github/workflows/run_relup_tests.yaml @@ -31,8 +31,7 @@ jobs: - amd64 runs-on: ubuntu-20.04 - # FIXME: use tagged version once merged - container: "ghcr.io/emqx/emqx-builder/elixir:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" + container: "ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" defaults: run: diff --git a/Makefile b/Makefile index 902af3be1..e1a5e0566 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,7 @@ REBAR_VERSION = 3.16.1-emqx-1 REBAR = $(CURDIR)/rebar3 BUILD = $(CURDIR)/build SCRIPTS = $(CURDIR)/scripts -# FIXME: use tagged version once merged -export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/elixir:1.13.1-24.1.5-3-alpine3.14 +export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-alpine3.14 export EMQX_DEFAULT_RUNNER = alpine:3.14 export OTP_VSN ?= $(shell $(CURDIR)/scripts/get-otp-vsn.sh) export ELIXIR_VSN ?= $(shell $(CURDIR)/scripts/get-elixir-vsn.sh) diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index c83f8ce87..e4abad035 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -1,5 +1,4 @@ -# FIXME: use tagged version once merged -ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/elixir:1.13.1-24.1.5-3-alpine3.14 +ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-alpine3.14 ARG RUN_FROM=alpine:3.14 FROM ${BUILD_FROM} AS builder From 1240c4036476fc5b18d6cb3286883e2173c604d9 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Thu, 13 Jan 2022 12:00:33 -0300 Subject: [PATCH 14/23] chore(ci): build only a few zips with elixir, build docker image with elixir --- .github/workflows/build_packages.yaml | 74 ++++++++++++++++++++++----- scripts/buildx.sh | 1 + 2 files changed, 62 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 668db3220..cbfee4ebc 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -241,9 +241,12 @@ jobs: - 1.13.1 # used to split elixir packages into a separate job, since the # entire job may take a lot of time, especially on arm64 - # emulation + # emulation. + # we only want to build ubuntu and centos with elixir for the + # time being, so it's easier to just include those with + # `with_elixir` set. build_elixir: - - with_elixir + # - with_elixir - no_elixir arch: - amd64 @@ -272,6 +275,19 @@ jobs: profile: emqx-enterprise - os: raspbian10 profile: emqx-enterprise + include: + - profile: emqx + otp: 24.1.5-3 + elixir: 1.13.1 + arch: amd64 + build_elixir: with_elixir + os: ubuntu20.04 + - profile: emqx + otp: 24.1.5-3 + elixir: 1.13.1 + arch: amd64 + build_elixir: with_elixir + os: centos8 defaults: run: @@ -381,6 +397,7 @@ jobs: working-directory: source if: ${{ matrix.build_elixir == 'with_elixir' }} run: | + ## we currently only build zips for elixir ./scripts/buildx.sh \ --profile "${PROFILE}" \ --pkgtype "zip" \ @@ -391,16 +408,6 @@ jobs: --with-elixir \ --builder "ghcr.io/emqx/emqx-builder/5.0-4:${ELIXIR}-${OTP}-${SYSTEM}" - ./scripts/buildx.sh \ - --profile "${PROFILE}" \ - --pkgtype "pkg" \ - --arch "${ARCH}" \ - --otp "${OTP}" \ - --elixir "${ELIXIR}" \ - --system "${SYSTEM}" \ - --with-elixir \ - --builder "ghcr.io/emqx/emqx-builder/5.0-4:${ELIXIR}-${OTP}-${SYSTEM}" - - name: create sha256 env: PROFILE: ${{ matrix.profile}} @@ -431,7 +438,7 @@ jobs: - emqx - emqx-enterprise # NOTE: for docker, only support latest otp and elixir - # version, not a matrix + # versions, not a matrix otp: - 24.1.5-3 # update to latest elixir: @@ -465,6 +472,23 @@ jobs: type=semver,pattern={{version}} labels: org.opencontainers.image.otp.version=${{ matrix.otp }} + - name: docker metadata for elixir image + uses: docker/metadata-action@v3 + if: ${{ matrix.profile == 'emqx' }} + id: meta-elixir + with: + images: ${{ github.repository_owner }}/${{ matrix.profile }} + flavor: | + latest=${{ !github.event.release.prerelease }} + suffix=-elixir + tags: | + type=ref,event=branch + type=ref,event=pr + type=ref,event=tag + type=semver,pattern={{version}} + labels: + org.opencontainers.image.otp.version=${{ matrix.otp }} + org.opencontainers.image.elixir.version=${{ matrix.elixir }} - uses: docker/login-action@v1 if: github.event_name == 'release' with: @@ -484,6 +508,22 @@ jobs: EMQX_NAME=${{ matrix.profile }} file: source/deploy/docker/Dockerfile context: source + - name: build docker image with elixir + uses: docker/build-push-action@v2 + if: ${{ matrix.profile == 'emqx' }} + with: + push: ${{ github.event_name == 'release' && !github.event.release.prerelease }} + pull: true + no-cache: true + platforms: linux/amd64,linux/arm64 + tags: ${{ steps.meta-elixir.outputs.tags }} + labels: ${{ steps.meta-elixir.outputs.labels }} + build-args: | + BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-alpine3.14 + RUN_FROM=alpine:3.14 + EMQX_NAME=emqx-elixir + file: source/deploy/docker/Dockerfile + context: source - uses: aws-actions/configure-aws-credentials@v1 if: github.event_name == 'release' && !github.event.release.prerelease && matrix.profile == 'emqx' with: @@ -498,6 +538,14 @@ jobs: docker tag emqx/emqx:${version#v} public.ecr.aws/emqx/emqx:${version#v} aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws docker push public.ecr.aws/emqx/emqx:${version#v} + - name: Push image to aws ecr (elixir) + if: github.event_name == 'release' && !github.event.release.prerelease && matrix.profile == 'emqx' + run: | + version=${GITHUB_REF##*/}-elixir + docker pull emqx/emqx:${version#v} + docker tag emqx/emqx:${version#v} public.ecr.aws/emqx/emqx:${version#v} + aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws + docker push public.ecr.aws/emqx/emqx:${version#v} delete-artifact: runs-on: ubuntu-20.04 diff --git a/scripts/buildx.sh b/scripts/buildx.sh index 242c5f3d0..f3f47aa7c 100755 --- a/scripts/buildx.sh +++ b/scripts/buildx.sh @@ -112,6 +112,7 @@ PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh "$PROFILE")}" if [ "$WITH_ELIXIR" = "yes" ] then PKG_NAME="${PROFILE}-${PKG_VSN}-elixir${ELIXIR_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}" + PROFILE="${PROFILE}-elixir" else PKG_NAME="${PROFILE}-${PKG_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}" fi From 9c68f4bd11834f7d0f7c05e3d83d80820a5ff11e Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Fri, 14 Jan 2022 09:56:29 -0300 Subject: [PATCH 15/23] fix(tgz): replace zip with tgz after rebase --- .ci/build_packages/tests.sh | 2 +- .github/workflows/build_packages.yaml | 4 ++-- .github/workflows/build_slim_packages.yaml | 4 ++-- Makefile | 12 ++++++------ build | 3 +-- scripts/buildx.sh | 7 ++++--- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.ci/build_packages/tests.sh b/.ci/build_packages/tests.sh index a09444e11..bf2b3ed6b 100755 --- a/.ci/build_packages/tests.sh +++ b/.ci/build_packages/tests.sh @@ -13,7 +13,7 @@ case "${2:-}" in true ;; *) - echo "Usage $0 zip|pkg" + echo "Usage $0 tgz|pkg" exit 1 ;; esac diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index cbfee4ebc..5ea56b884 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -397,10 +397,10 @@ jobs: working-directory: source if: ${{ matrix.build_elixir == 'with_elixir' }} run: | - ## we currently only build zips for elixir + ## we currently only build tgzs for elixir ./scripts/buildx.sh \ --profile "${PROFILE}" \ - --pkgtype "zip" \ + --pkgtype "tgz" \ --arch "${ARCH}" \ --otp "${OTP}" \ --elixir "${ELIXIR}" \ diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index f083d9a1a..2006b955b 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -84,8 +84,8 @@ jobs: .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 + make ${EMQX_NAME}-elixir-tgz + .ci/build_packages/tests.sh "$EMQX_PKG_NAME" tgz amd64 - name: build and test deb/rpm packages (Elixir) run: | make ${EMQX_NAME}-elixirpkg diff --git a/Makefile b/Makefile index e1a5e0566..55f43483b 100644 --- a/Makefile +++ b/Makefile @@ -235,10 +235,10 @@ $1-elixirpkg: $1-pkg-elixir 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 +.PHONY: $(REL_PROFILES:%=%-elixir-tgz) +define gen-elixir-tgz-target +$1-elixir-tgz: $(COMMON_DEPS) $(ELIXIR_COMMON_DEPS) mix-deps-get + @env IS_ELIXIR=yes $(BUILD) $1 tgz endef -ALL_ELIXIR_ZIPS = $(REL_PROFILES) -$(foreach zt,$(ALL_ELIXIR_ZIPS),$(eval $(call gen-elixir-zip-target,$(zt)))) +ALL_ELIXIR_TGZS = $(REL_PROFILES) +$(foreach tt,$(ALL_ELIXIR_TGZS),$(eval $(call gen-elixir-tgz-target,$(tt)))) diff --git a/build b/build index 9c84c3a5a..d5aeeb64f 100755 --- a/build +++ b/build @@ -139,7 +139,6 @@ make_tgz() { 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 @@ -147,10 +146,10 @@ make_tgz() { 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 + tarball="${relpath}/emqx-${PKG_VSN}.tar.gz" tard="/tmp/emqx_untar_${PKG_VSN}" rm -rf "${tard}" mkdir -p "${tard}/emqx" diff --git a/scripts/buildx.sh b/scripts/buildx.sh index f3f47aa7c..fa8cfdce2 100755 --- a/scripts/buildx.sh +++ b/scripts/buildx.sh @@ -100,7 +100,7 @@ case "$PKGTYPE" in true ;; *) - echo "Bad --pkgtype option, should be zip or pkg" + echo "Bad --pkgtype option, should be tgz or pkg" exit 1 ;; esac @@ -112,9 +112,10 @@ PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh "$PROFILE")}" if [ "$WITH_ELIXIR" = "yes" ] then PKG_NAME="${PROFILE}-${PKG_VSN}-elixir${ELIXIR_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}" - PROFILE="${PROFILE}-elixir" + MAKE_TARGET="${PROFILE}-elixir-${PKGTYPE}" else PKG_NAME="${PROFILE}-${PKG_VSN}-otp${OTP_VSN}-${SYSTEM}-${ARCH}" + MAKE_TARGET="${PROFILE}-${PKGTYPE}" fi docker info @@ -125,4 +126,4 @@ docker run -i --rm \ --platform="linux/$ARCH" \ -e EMQX_NAME="$PROFILE" \ "$BUILDER" \ - bash -euc "make ${PROFILE}-${PKGTYPE} && .ci/build_packages/tests.sh $PKG_NAME $PKGTYPE $ARCH" + bash -euc "make ${MAKE_TARGET} && .ci/build_packages/tests.sh $PKG_NAME $PKGTYPE $ARCH" From a974221ffa080f639de34d214e9f854c3c54ba84 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Fri, 14 Jan 2022 18:07:51 -0300 Subject: [PATCH 16/23] chore(mix): split elixir docker image build into separate step --- .github/workflows/build_packages.yaml | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 5ea56b884..167f6d3e3 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -446,6 +446,14 @@ jobs: arch: - amd64 - arm64 + build_elixir: + - no_elixir + include: + - profile: emqx + otp: 24.1.5-3 + elixir: 1.13.1 + arch: amd64 + build_elixir: with_elixir steps: - uses: actions/download-artifact@v2 @@ -461,6 +469,7 @@ jobs: platforms: all - uses: docker/metadata-action@v3 id: meta + if: ${{ matrix.build_elixir == 'no_elixir' }} with: images: ${{ github.repository_owner }}/${{ matrix.profile }} flavor: | @@ -474,7 +483,7 @@ jobs: org.opencontainers.image.otp.version=${{ matrix.otp }} - name: docker metadata for elixir image uses: docker/metadata-action@v3 - if: ${{ matrix.profile == 'emqx' }} + if: ${{ matrix.build_elixir == 'with_elixir' }} id: meta-elixir with: images: ${{ github.repository_owner }}/${{ matrix.profile }} @@ -486,7 +495,7 @@ jobs: type=ref,event=pr type=ref,event=tag type=semver,pattern={{version}} - labels: + labels: | org.opencontainers.image.otp.version=${{ matrix.otp }} org.opencontainers.image.elixir.version=${{ matrix.elixir }} - uses: docker/login-action@v1 @@ -496,7 +505,7 @@ jobs: password: ${{ secrets.DOCKER_HUB_TOKEN }} - uses: docker/build-push-action@v2 with: - push: ${{ github.event_name == 'release' && !github.event.release.prerelease }} + push: ${{ github.event_name == 'release' && !github.event.release.prerelease && matrix.build_elixir == 'no_elixir' }} pull: true no-cache: true platforms: linux/amd64,linux/arm64 @@ -512,7 +521,7 @@ jobs: uses: docker/build-push-action@v2 if: ${{ matrix.profile == 'emqx' }} with: - push: ${{ github.event_name == 'release' && !github.event.release.prerelease }} + push: ${{ github.event_name == 'release' && !github.event.release.prerelease && matrix.build_elixir == 'with_elixir' }} pull: true no-cache: true platforms: linux/amd64,linux/arm64 @@ -531,7 +540,7 @@ jobs: aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_DEFAULT_REGION }} - name: Push image to aws ecr - if: github.event_name == 'release' && !github.event.release.prerelease && matrix.profile == 'emqx' + if: github.event_name == 'release' && !github.event.release.prerelease && matrix.profile == 'emqx' && matrix.build_elixir == 'no_elixir' run: | version=${GITHUB_REF##*/} docker pull emqx/emqx:${version#v} @@ -539,7 +548,7 @@ jobs: aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws docker push public.ecr.aws/emqx/emqx:${version#v} - name: Push image to aws ecr (elixir) - if: github.event_name == 'release' && !github.event.release.prerelease && matrix.profile == 'emqx' + if: github.event_name == 'release' && !github.event.release.prerelease && matrix.profile == 'emqx' && matrix.build_elixir == 'with_elixir' run: | version=${GITHUB_REF##*/}-elixir docker pull emqx/emqx:${version#v} From bba595a91f40e4c6c0da16ae904c22cda30b3b0f Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 18 Jan 2022 08:52:25 -0300 Subject: [PATCH 17/23] fix(elixir): guard against missing elixir installation --- scripts/get-elixir-vsn.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/get-elixir-vsn.sh b/scripts/get-elixir-vsn.sh index c74af4bf6..db60325e7 100755 --- a/scripts/get-elixir-vsn.sh +++ b/scripts/get-elixir-vsn.sh @@ -2,4 +2,7 @@ set -euo pipefail -elixir -e "System.version() |> IO.puts()" +if command -v elixir &>/dev/null +then + elixir -e "System.version() |> IO.puts()" +fi From aa1a1a7bb13046208569275274957a7b767b5bba Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 18 Jan 2022 09:10:40 -0300 Subject: [PATCH 18/23] chore(ci): update CI container images --- .github/workflows/elixir_deps_check.yaml | 4 +--- .github/workflows/elixir_release.yml | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/elixir_deps_check.yaml b/.github/workflows/elixir_deps_check.yaml index 12fc9643b..58721006a 100644 --- a/.github/workflows/elixir_deps_check.yaml +++ b/.github/workflows/elixir_deps_check.yaml @@ -7,11 +7,9 @@ on: [pull_request] jobs: elixir_deps_check: runs-on: ubuntu-20.04 - container: hexpm/elixir:1.13.1-erlang-24.2-alpine-3.15.0 + container: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-ubuntu20.04 steps: - - name: install - run: apk add make bash curl git - name: Checkout uses: actions/checkout@v2.4.0 - name: ensure rebar diff --git a/.github/workflows/elixir_release.yml b/.github/workflows/elixir_release.yml index dc41f7417..706013614 100644 --- a/.github/workflows/elixir_release.yml +++ b/.github/workflows/elixir_release.yml @@ -12,7 +12,7 @@ on: jobs: build: runs-on: ubuntu-latest - container: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-23.3.4.9-3-ubuntu20.04 + container: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-ubuntu20.04 steps: - name: Checkout From 06e31830fb2cd4847c8f8ab6758cd287c9887257 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 18 Jan 2022 10:09:42 -0300 Subject: [PATCH 19/23] fix(ci): use tgz and elixir package name --- .github/workflows/build_slim_packages.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index 2006b955b..b126d65a7 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -82,10 +82,10 @@ jobs: run: | make ${EMQX_NAME}-pkg .ci/build_packages/tests.sh "$EMQX_PKG_NAME" pkg amd64 - - name: build and test zip package (Elixir) + - name: build and test tgz package (Elixir) run: | make ${EMQX_NAME}-elixir-tgz - .ci/build_packages/tests.sh "$EMQX_PKG_NAME" tgz amd64 + .ci/build_packages/tests.sh "$EMQX_ELIXIRPKG_NAME" tgz amd64 - name: build and test deb/rpm packages (Elixir) run: | make ${EMQX_NAME}-elixirpkg From e157064e24faea1e1823ac502135f2cbaa8e1850 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 18 Jan 2022 16:52:26 -0300 Subject: [PATCH 20/23] fix(ci): use correct condition to build docker images --- .github/workflows/build_packages.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index 167f6d3e3..a05ecae46 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -504,8 +504,9 @@ jobs: username: ${{ secrets.DOCKER_HUB_USER }} password: ${{ secrets.DOCKER_HUB_TOKEN }} - uses: docker/build-push-action@v2 + if: ${{ matrix.build_elixir == 'no_elixir' }} with: - push: ${{ github.event_name == 'release' && !github.event.release.prerelease && matrix.build_elixir == 'no_elixir' }} + push: ${{ github.event_name == 'release' && !github.event.release.prerelease }} pull: true no-cache: true platforms: linux/amd64,linux/arm64 @@ -519,9 +520,9 @@ jobs: context: source - name: build docker image with elixir uses: docker/build-push-action@v2 - if: ${{ matrix.profile == 'emqx' }} + if: ${{ matrix.profile == 'emqx' && matrix.build_elixir == 'with_elixir' }} with: - push: ${{ github.event_name == 'release' && !github.event.release.prerelease && matrix.build_elixir == 'with_elixir' }} + push: ${{ github.event_name == 'release' && !github.event.release.prerelease }} pull: true no-cache: true platforms: linux/amd64,linux/arm64 From 506dad169a49a827a624678875617559399f9014 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Mon, 24 Jan 2022 14:34:55 -0300 Subject: [PATCH 21/23] chore(elixir_otp): bump emqx-builder images --- .ci/docker-compose-file/docker-compose.yaml | 4 +-- .github/workflows/build_packages.yaml | 36 ++++++++++----------- .github/workflows/build_slim_packages.yaml | 8 ++--- .github/workflows/check_deps_integrity.yaml | 2 +- .github/workflows/elixir_apps_check.yaml | 2 +- .github/workflows/elixir_deps_check.yaml | 2 +- .github/workflows/elixir_release.yml | 2 +- .github/workflows/run_api_tests.yaml | 6 ++-- .github/workflows/run_emqx_app_tests.yaml | 8 ++--- .github/workflows/run_fvt_tests.yaml | 14 ++++---- .github/workflows/run_relup_tests.yaml | 6 ++-- .github/workflows/run_test_cases.yaml | 6 ++-- .tool-versions | 4 +-- Makefile | 2 +- deploy/docker/Dockerfile | 2 +- mix.exs | 9 +----- 16 files changed, 53 insertions(+), 60 deletions(-) diff --git a/.ci/docker-compose-file/docker-compose.yaml b/.ci/docker-compose-file/docker-compose.yaml index ea2de3356..55d6fc145 100644 --- a/.ci/docker-compose-file/docker-compose.yaml +++ b/.ci/docker-compose-file/docker-compose.yaml @@ -3,7 +3,7 @@ version: '3.9' services: erlang23: container_name: erlang23 - image: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-23.3.4.9-3-ubuntu20.04 + image: ghcr.io/emqx/emqx-builder/5.0-5:1.13.2-23.3.4.9-4-ubuntu20.04 env_file: - conf.env environment: @@ -23,7 +23,7 @@ services: erlang24: container_name: erlang24 - image: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-ubuntu20.04 + image: ghcr.io/emqx/emqx-builder/5.0-5:1.13.2-24.1.5-4-ubuntu20.04 env_file: - conf.env environment: diff --git a/.github/workflows/build_packages.yaml b/.github/workflows/build_packages.yaml index a05ecae46..3809dd776 100644 --- a/.github/workflows/build_packages.yaml +++ b/.github/workflows/build_packages.yaml @@ -19,7 +19,7 @@ jobs: prepare: runs-on: ubuntu-20.04 # prepare source with any OTP version, no need for a matrix - container: "ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-ubuntu20.04" + container: "ghcr.io/emqx/emqx-builder/5.0-5:1.13.2-24.1.5-4-ubuntu20.04" outputs: ce_old_vsns: ${{ steps.find_old_versons.outputs.ce_old_vsns }} @@ -130,7 +130,7 @@ jobs: - emqx - emqx-enterprise otp: - - 24.1.5-3 + - 24.1.5-4 macos: - macos-11 - macos-10.15 @@ -236,9 +236,9 @@ jobs: - emqx - emqx-enterprise otp: - - 24.1.5-3 # we test with OTP 23, but only build package on OTP 24 versions + - 24.1.5-4 # we test with OTP 23, but only build package on OTP 24 versions elixir: - - 1.13.1 + - 1.13.2 # used to split elixir packages into a separate job, since the # entire job may take a lot of time, especially on arm64 # emulation. @@ -277,14 +277,14 @@ jobs: profile: emqx-enterprise include: - profile: emqx - otp: 24.1.5-3 - elixir: 1.13.1 + otp: 24.1.5-4 + elixir: 1.13.2 arch: amd64 build_elixir: with_elixir os: ubuntu20.04 - profile: emqx - otp: 24.1.5-3 - elixir: 1.13.1 + otp: 24.1.5-4 + elixir: 1.13.2 arch: amd64 build_elixir: with_elixir os: centos8 @@ -376,7 +376,7 @@ jobs: --otp "${OTP}" \ --elixir "${ELIXIR}" \ --system "${SYSTEM}" \ - --builder "ghcr.io/emqx/emqx-builder/5.0-4:${ELIXIR}-${OTP}-${SYSTEM}" + --builder "ghcr.io/emqx/emqx-builder/5.0-5:${ELIXIR}-${OTP}-${SYSTEM}" ## the pkg build is incremental on the tgz build ./scripts/buildx.sh \ --profile "${PROFILE}" \ @@ -385,7 +385,7 @@ jobs: --otp "${OTP}" \ --elixir "${ELIXIR}" \ --system "${SYSTEM}" \ - --builder "ghcr.io/emqx/emqx-builder/5.0-4:${ELIXIR}-${OTP}-${SYSTEM}" + --builder "ghcr.io/emqx/emqx-builder/5.0-5:${ELIXIR}-${OTP}-${SYSTEM}" - name: build emqx packages (Elixir) env: @@ -406,7 +406,7 @@ jobs: --elixir "${ELIXIR}" \ --system "${SYSTEM}" \ --with-elixir \ - --builder "ghcr.io/emqx/emqx-builder/5.0-4:${ELIXIR}-${OTP}-${SYSTEM}" + --builder "ghcr.io/emqx/emqx-builder/5.0-5:${ELIXIR}-${OTP}-${SYSTEM}" - name: create sha256 env: @@ -440,9 +440,9 @@ jobs: # NOTE: for docker, only support latest otp and elixir # versions, not a matrix otp: - - 24.1.5-3 # update to latest + - 24.1.5-4 # update to latest elixir: - - 1.13.1 # update to latest + - 1.13.2 # update to latest arch: - amd64 - arm64 @@ -450,8 +450,8 @@ jobs: - no_elixir include: - profile: emqx - otp: 24.1.5-3 - elixir: 1.13.1 + otp: 24.1.5-4 + elixir: 1.13.2 arch: amd64 build_elixir: with_elixir @@ -513,7 +513,7 @@ jobs: tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} build-args: | - BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-alpine3.14 + BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-5:${{ matrix.elixir }}-${{ matrix.otp }}-alpine3.14 RUN_FROM=alpine:3.14 EMQX_NAME=${{ matrix.profile }} file: source/deploy/docker/Dockerfile @@ -529,7 +529,7 @@ jobs: tags: ${{ steps.meta-elixir.outputs.tags }} labels: ${{ steps.meta-elixir.outputs.labels }} build-args: | - BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-alpine3.14 + BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-5:${{ matrix.elixir }}-${{ matrix.otp }}-alpine3.14 RUN_FROM=alpine:3.14 EMQX_NAME=emqx-elixir file: source/deploy/docker/Dockerfile @@ -579,7 +579,7 @@ jobs: - emqx - emqx-enterprise otp: - - 24.1.5-3 + - 24.1.5-4 steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index b126d65a7..a17940354 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -34,14 +34,14 @@ jobs: - emqx - emqx-enterprise otp: - - 24.1.5-3 + - 24.1.5-4 elixir: - - 1.13.1 + - 1.13.2 os: - ubuntu20.04 - centos7 - container: "ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" + container: "ghcr.io/emqx/emqx-builder/5.0-5:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" steps: - uses: actions/checkout@v1 @@ -102,7 +102,7 @@ jobs: - emqx - emqx-enterprise otp: - - 24.1.5-3 + - 24.1.5-4 macos: - macos-11 - macos-10.15 diff --git a/.github/workflows/check_deps_integrity.yaml b/.github/workflows/check_deps_integrity.yaml index 60bd4aac3..26143b807 100644 --- a/.github/workflows/check_deps_integrity.yaml +++ b/.github/workflows/check_deps_integrity.yaml @@ -5,7 +5,7 @@ on: [pull_request] jobs: check_deps_integrity: runs-on: ubuntu-20.04 - container: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-23.3.4.9-3-ubuntu20.04 + container: ghcr.io/emqx/emqx-builder/5.0-5:1.13.2-24.1.5-4-ubuntu20.04 steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/elixir_apps_check.yaml b/.github/workflows/elixir_apps_check.yaml index 04bc8c024..617733207 100644 --- a/.github/workflows/elixir_apps_check.yaml +++ b/.github/workflows/elixir_apps_check.yaml @@ -7,7 +7,7 @@ on: [pull_request] jobs: elixir_apps_check: runs-on: ubuntu-20.04 - container: hexpm/elixir:1.13.1-erlang-24.2-alpine-3.15.0 + container: hexpm/elixir:1.13.2-erlang-24.2-alpine-3.15.0 strategy: fail-fast: false diff --git a/.github/workflows/elixir_deps_check.yaml b/.github/workflows/elixir_deps_check.yaml index 58721006a..b44275635 100644 --- a/.github/workflows/elixir_deps_check.yaml +++ b/.github/workflows/elixir_deps_check.yaml @@ -7,7 +7,7 @@ on: [pull_request] jobs: elixir_deps_check: runs-on: ubuntu-20.04 - container: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-ubuntu20.04 + container: ghcr.io/emqx/emqx-builder/5.0-5:1.13.2-24.1.5-4-ubuntu20.04 steps: - name: Checkout diff --git a/.github/workflows/elixir_release.yml b/.github/workflows/elixir_release.yml index 706013614..0fa97884d 100644 --- a/.github/workflows/elixir_release.yml +++ b/.github/workflows/elixir_release.yml @@ -12,7 +12,7 @@ on: jobs: build: runs-on: ubuntu-latest - container: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-ubuntu20.04 + container: ghcr.io/emqx/emqx-builder/5.0-5:1.13.2-24.1.5-4-ubuntu20.04 steps: - name: Checkout diff --git a/.github/workflows/run_api_tests.yaml b/.github/workflows/run_api_tests.yaml index 31093b67b..ff42eda2b 100644 --- a/.github/workflows/run_api_tests.yaml +++ b/.github/workflows/run_api_tests.yaml @@ -16,15 +16,15 @@ jobs: strategy: matrix: otp: - - 24.1.5-3 + - 24.1.5-4 elixir: - - 1.13.1 + - 1.13.2 os: - ubuntu20.04 arch: - amd64 runs-on: ubuntu-latest - container: ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} + container: ghcr.io/emqx/emqx-builder/5.0-5:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/run_emqx_app_tests.yaml b/.github/workflows/run_emqx_app_tests.yaml index 77e753483..7dd19b2a7 100644 --- a/.github/workflows/run_emqx_app_tests.yaml +++ b/.github/workflows/run_emqx_app_tests.yaml @@ -12,20 +12,20 @@ jobs: strategy: matrix: otp: - - 23.3.4.9-3 - - 24.1.5-3 + - 23.3.4.9-4 + - 24.1.5-4 # no need to use more than 1 version of Elixir, since tests # run using only Erlang code. This is needed just to specify # the base image. elixir: - - 1.13.1 + - 1.13.2 os: - ubuntu20.04 arch: - amd64 runs-on: ubuntu-20.04 - container: "ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir}}-${{ matrix.otp }}-${{ matrix.os }}" + container: "ghcr.io/emqx/emqx-builder/5.0-5:${{ matrix.elixir}}-${{ matrix.otp }}-${{ matrix.os }}" steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/run_fvt_tests.yaml b/.github/workflows/run_fvt_tests.yaml index acacd6eef..17a77965f 100644 --- a/.github/workflows/run_fvt_tests.yaml +++ b/.github/workflows/run_fvt_tests.yaml @@ -14,7 +14,7 @@ jobs: prepare: runs-on: ubuntu-20.04 # prepare source with any OTP version, no need for a matrix - container: ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-alpine3.14 + container: ghcr.io/emqx/emqx-builder/5.0-5:1.13.2-24.1.5-4-alpine3.14 steps: - uses: actions/checkout@v2 @@ -48,9 +48,9 @@ jobs: os: - alpine3.14 otp: - - 24.1.5-3 + - 24.1.5-4 elixir: - - 1.13.1 + - 1.13.2 arch: - amd64 exclude: @@ -85,7 +85,7 @@ jobs: - name: make docker image working-directory: source env: - EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} + EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-5:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} run: | make ${{ matrix.profile }}-docker - name: run emqx @@ -125,9 +125,9 @@ jobs: os: - alpine3.14 otp: - - 24.1.5-3 + - 24.1.5-4 elixir: - - 1.13.1 + - 1.13.2 arch: - amd64 # - emqx-enterprise # TODO test enterprise @@ -161,7 +161,7 @@ jobs: - name: make docker image working-directory: source env: - EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} + EMQX_BUILDER: ghcr.io/emqx/emqx-builder/5.0-5:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }} run: | make ${{ matrix.profile }}-docker echo "TARGET=emqx/${{ matrix.profile }}" >> $GITHUB_ENV diff --git a/.github/workflows/run_relup_tests.yaml b/.github/workflows/run_relup_tests.yaml index 7bace05de..906a5e802 100644 --- a/.github/workflows/run_relup_tests.yaml +++ b/.github/workflows/run_relup_tests.yaml @@ -19,19 +19,19 @@ jobs: - emqx - emqx-enterprise otp: - - 24.1.5-3 + - 24.1.5-4 # no need to use more than 1 version of Elixir, since tests # run using only Erlang code. This is needed just to specify # the base image. elixir: - - 1.13.1 + - 1.13.2 os: - ubuntu20.04 arch: - amd64 runs-on: ubuntu-20.04 - container: "ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" + container: "ghcr.io/emqx/emqx-builder/5.0-5:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" defaults: run: diff --git a/.github/workflows/run_test_cases.yaml b/.github/workflows/run_test_cases.yaml index 16ccf8497..e7bc5dafa 100644 --- a/.github/workflows/run_test_cases.yaml +++ b/.github/workflows/run_test_cases.yaml @@ -16,16 +16,16 @@ jobs: strategy: matrix: otp: - - 24.1.5-3 + - 24.1.5-4 elixir: - - 1.13.1 + - 1.13.2 os: - ubuntu20.04 arch: - amd64 runs-on: ubuntu-20.04 - container: "ghcr.io/emqx/emqx-builder/5.0-4:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" + container: "ghcr.io/emqx/emqx-builder/5.0-5:${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.os }}" steps: - uses: actions/checkout@v2 diff --git a/.tool-versions b/.tool-versions index 1c687075b..54954aec2 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -erlang 24.1.5-3 -elixir 1.13.1-otp-24 +erlang 24.1.5-4 +elixir 1.13.2-otp-24 diff --git a/Makefile b/Makefile index 55f43483b..d26a09e1b 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ REBAR_VERSION = 3.16.1-emqx-1 REBAR = $(CURDIR)/rebar3 BUILD = $(CURDIR)/build SCRIPTS = $(CURDIR)/scripts -export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-alpine3.14 +export EMQX_DEFAULT_BUILDER = ghcr.io/emqx/emqx-builder/5.0-5:1.13.2-24.1.5-4-alpine3.14 export EMQX_DEFAULT_RUNNER = alpine:3.14 export OTP_VSN ?= $(shell $(CURDIR)/scripts/get-otp-vsn.sh) export ELIXIR_VSN ?= $(shell $(CURDIR)/scripts/get-elixir-vsn.sh) diff --git a/deploy/docker/Dockerfile b/deploy/docker/Dockerfile index e4abad035..68463fa5e 100644 --- a/deploy/docker/Dockerfile +++ b/deploy/docker/Dockerfile @@ -1,4 +1,4 @@ -ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-4:1.13.1-24.1.5-3-alpine3.14 +ARG BUILD_FROM=ghcr.io/emqx/emqx-builder/5.0-5:1.13.2-24.1.5-4-alpine3.14 ARG RUN_FROM=alpine:3.14 FROM ${BUILD_FROM} AS builder diff --git a/mix.exs b/mix.exs index 9acdd2b92..07751dac3 100644 --- a/mix.exs +++ b/mix.exs @@ -24,13 +24,6 @@ defmodule EMQXUmbrella.MixProject do Defaults to `community`. """ - # Temporary hack while 1.13.2 is not released - System.version() - |> Version.parse!() - |> Version.compare(Version.parse!("1.13.2")) - |> Kernel.==(:lt) - |> if(do: Code.require_file("lib/mix/release.exs")) - def project() do [ app: :emqx_mix, @@ -425,7 +418,7 @@ defmodule EMQXUmbrella.MixProject do # The `:tar` built-in step in Mix Release does not currently add the # `etc` directory into the resulting tarball. The workaround is to # add those to the `:overlays` key before running `:tar`. - # See: https://hexdocs.pm/mix/1.13.1/Mix.Release.html#__struct__/0 + # See: https://hexdocs.pm/mix/1.13.2/Mix.Release.html#__struct__/0 defp prepare_tar_overlays(release) do Map.update!(release, :overlays, &["etc", "data" | &1]) end From a88af8fcbcd283c45a96bf0f7668bd0421193b8d Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 25 Jan 2022 11:06:39 -0300 Subject: [PATCH 22/23] ci(cache): use cache for elixir in fvt workflow --- .github/workflows/run_fvt_tests.yaml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/run_fvt_tests.yaml b/.github/workflows/run_fvt_tests.yaml index 17a77965f..9570b68b3 100644 --- a/.github/workflows/run_fvt_tests.yaml +++ b/.github/workflows/run_fvt_tests.yaml @@ -74,13 +74,17 @@ jobs: - name: load rocksdb cache uses: actions/cache@v2 with: - path: source/_build/default/lib/rocksdb/ - key: ${{ matrix.os }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_ROCKSDB_REF }} + path: | + source/_build/default/lib/rocksdb/ + source/deps/rocksdb/ + key: ${{ matrix.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_ROCKSDB_REF }} - name: load quicer cache uses: actions/cache@v2 with: - path: source/_build/default/lib/quicer/ - key: ${{ matrix.os }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_QUICER_REF }} + path: | + source/_build/default/lib/quicer/ + source/deps/quicer/ + key: ${{ matrix.os }}-${{ matrix.elixir }}-${{ matrix.otp }}-${{ matrix.arch }}-${{ steps.deps-refs.outputs.DEP_QUICER_REF }} - name: make docker image working-directory: source From 12f17573281f8ee4813d43166ed0f17649fbd154 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 25 Jan 2022 11:45:10 -0300 Subject: [PATCH 23/23] chore(mix): fix include path for mix --- apps/emqx/src/proto/emqx_cm_proto_v1.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/emqx/src/proto/emqx_cm_proto_v1.erl b/apps/emqx/src/proto/emqx_cm_proto_v1.erl index e8f0115cb..3c673bce0 100644 --- a/apps/emqx/src/proto/emqx_cm_proto_v1.erl +++ b/apps/emqx/src/proto/emqx_cm_proto_v1.erl @@ -32,7 +32,7 @@ ]). -include("bpapi.hrl"). --include("emqx_cm.hrl"). +-include("src/emqx_cm.hrl"). introduced_in() -> "5.0.0".