| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- name: Push Entrypoint
- concurrency:
- group: push-entrypoint-${{ github.event_name }}-${{ github.ref }}
- cancel-in-progress: true
- on:
- push:
- tags:
- - 'v*'
- - 'e*'
- branches:
- - 'master'
- - 'release-5[0-9]'
- - 'ci/**'
- env:
- IS_CI: 'yes'
- jobs:
- prepare:
- runs-on: ubuntu-22.04
- container: 'ghcr.io/emqx/emqx-builder/5.2-9:1.15.7-26.1.2-3-ubuntu22.04'
- outputs:
- profile: ${{ steps.parse-git-ref.outputs.profile }}
- release: ${{ steps.parse-git-ref.outputs.release }}
- latest: ${{ steps.parse-git-ref.outputs.latest }}
- version: ${{ steps.parse-git-ref.outputs.version }}
- ct-matrix: ${{ steps.matrix.outputs.ct-matrix }}
- ct-host: ${{ steps.matrix.outputs.ct-host }}
- ct-docker: ${{ steps.matrix.outputs.ct-docker }}
- builder: 'ghcr.io/emqx/emqx-builder/5.2-9:1.15.7-26.1.2-3-ubuntu22.04'
- builder_vsn: '5.2-9'
- otp_vsn: '26.1.2-3'
- elixir_vsn: '1.15.7'
- steps:
- - uses: actions/checkout@v3
- with:
- ref: ${{ github.event.inputs.ref }}
- fetch-depth: 0
- - name: Work around https://github.com/actions/checkout/issues/766
- shell: bash
- run: |
- git config --global --add safe.directory "$GITHUB_WORKSPACE"
- - name: Detect emqx profile and version
- id: parse-git-ref
- run: |
- JSON="$(./scripts/parse-git-ref.sh $GITHUB_REF)"
- PROFILE=$(echo "$JSON" | jq -cr '.profile')
- RELEASE=$(echo "$JSON" | jq -cr '.release')
- LATEST=$(echo "$JSON" | jq -cr '.latest')
- VERSION="$(./pkg-vsn.sh "$PROFILE")"
- echo "profile=$PROFILE" | tee -a $GITHUB_OUTPUT
- echo "release=$RELEASE" | tee -a $GITHUB_OUTPUT
- echo "latest=$LATEST" | tee -a $GITHUB_OUTPUT
- echo "version=$VERSION" | tee -a $GITHUB_OUTPUT
- - name: Build matrix
- id: matrix
- run: |
- APPS="$(./scripts/find-apps.sh --ci)"
- MATRIX="$(echo "${APPS}" | jq -c '
- [
- (.[] | select(.profile == "emqx") | . + {
- builder: "5.2-9",
- otp: "26.1.2-3",
- elixir: "1.15.7"
- }),
- (.[] | select(.profile == "emqx-enterprise") | . + {
- builder: "5.2-9",
- otp: ["26.1.2-3"][],
- elixir: "1.15.7"
- })
- ]
- ')"
- echo "${MATRIX}" | jq
- CT_MATRIX="$(echo "${MATRIX}" | jq -c 'map({profile, builder, otp, elixir}) | unique')"
- CT_HOST="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "host"))')"
- CT_DOCKER="$(echo "${MATRIX}" | jq -c 'map(select(.runner == "docker"))')"
- echo "ct-matrix=${CT_MATRIX}" | tee -a $GITHUB_OUTPUT
- echo "ct-host=${CT_HOST}" | tee -a $GITHUB_OUTPUT
- echo "ct-docker=${CT_DOCKER}" | tee -a $GITHUB_OUTPUT
- build_packages:
- if: needs.prepare.outputs.release == 'true'
- needs:
- - prepare
- uses: ./.github/workflows/build_packages.yaml
- with:
- profile: ${{ needs.prepare.outputs.profile }}
- publish: ${{ needs.prepare.outputs.release }}
- otp_vsn: ${{ needs.prepare.outputs.otp_vsn }}
- elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
- builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
- secrets: inherit
- build_and_push_docker_images:
- if: needs.prepare.outputs.release == 'true'
- needs:
- - prepare
- uses: ./.github/workflows/build_and_push_docker_images.yaml
- with:
- profile: ${{ needs.prepare.outputs.profile }}
- version: ${{ needs.prepare.outputs.version }}
- publish: ${{ needs.prepare.outputs.release }}
- latest: ${{ needs.prepare.outputs.latest }}
- otp_vsn: ${{ needs.prepare.outputs.otp_vsn }}
- elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
- builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
- secrets: inherit
- build_slim_packages:
- if: needs.prepare.outputs.release != 'true'
- needs:
- - prepare
- uses: ./.github/workflows/build_slim_packages.yaml
- with:
- builder: ${{ needs.prepare.outputs.builder }}
- builder_vsn: ${{ needs.prepare.outputs.builder_vsn }}
- otp_vsn: ${{ needs.prepare.outputs.otp_vsn }}
- elixir_vsn: ${{ needs.prepare.outputs.elixir_vsn }}
- compile:
- if: needs.prepare.outputs.release != 'true'
- runs-on: ${{ endsWith(github.repository, '/emqx') && 'ubuntu-22.04' || fromJSON('["self-hosted","ephemeral","linux","x64"]') }}
- container: ${{ needs.prepare.outputs.builder }}
- needs:
- - prepare
- strategy:
- matrix:
- profile:
- - emqx
- - emqx-enterprise
- steps:
- - uses: actions/checkout@v3
- with:
- ref: ${{ github.event.inputs.ref }}
- fetch-depth: 0
- - name: Work around https://github.com/actions/checkout/issues/766
- run: |
- git config --global --add safe.directory "$GITHUB_WORKSPACE"
- - id: compile
- env:
- PROFILE: ${{ matrix.profile }}
- ENABLE_COVER_COMPILE: 1
- run: |
- make $PROFILE
- echo "PROFILE=${PROFILE}" | tee -a .env
- echo "PKG_VSN=$(./pkg-vsn.sh ${PROFILE})" | tee -a .env
- zip -ryq -x@.github/workflows/.zipignore $PROFILE.zip .
- - uses: actions/upload-artifact@v3
- with:
- name: ${{ matrix.profile }}
- path: ${{ matrix.profile }}.zip
- retention-days: 1
- run_emqx_app_tests:
- needs:
- - prepare
- - compile
- uses: ./.github/workflows/run_emqx_app_tests.yaml
- with:
- builder: ${{ needs.prepare.outputs.builder }}
- before_ref: ${{ github.event.before }}
- after_ref: ${{ github.sha }}
- run_test_cases:
- if: needs.prepare.outputs.release != 'true'
- needs:
- - prepare
- - compile
- uses: ./.github/workflows/run_test_cases.yaml
- with:
- builder: ${{ needs.prepare.outputs.builder }}
- ct-matrix: ${{ needs.prepare.outputs.ct-matrix }}
- ct-host: ${{ needs.prepare.outputs.ct-host }}
- ct-docker: ${{ needs.prepare.outputs.ct-docker }}
- run_conf_tests:
- if: needs.prepare.outputs.release != 'true'
- needs:
- - prepare
- - compile
- uses: ./.github/workflows/run_conf_tests.yaml
- with:
- builder: ${{ needs.prepare.outputs.builder }}
- static_checks:
- if: needs.prepare.outputs.release != 'true'
- needs:
- - prepare
- - compile
- uses: ./.github/workflows/static_checks.yaml
- with:
- builder: ${{ needs.prepare.outputs.builder }}
- ct-matrix: ${{ needs.prepare.outputs.ct-matrix }}
|