name: Cross build packages concurrency: group: build-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true on: schedule: - cron: '0 */6 * * *' push: branches: - 'ci/**' tags: - v* - e* workflow_dispatch: inputs: branch_or_tag: required: false profile: required: false jobs: prepare: runs-on: ubuntu-20.04 container: ghcr.io/emqx/emqx-builder/5.0-26:1.13.4-24.3.4.2-1-ubuntu20.04 outputs: BUILD_PROFILE: ${{ steps.get_profile.outputs.BUILD_PROFILE }} IS_EXACT_TAG: ${{ steps.get_profile.outputs.IS_EXACT_TAG }} VERSION: ${{ steps.get_profile.outputs.VERSION }} steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.inputs.branch_or_tag }} # when input is not given, the event tag is used path: source fetch-depth: 0 - name: Get profile to build id: get_profile run: | cd source git config --global --add safe.directory "$(pwd)" tag=${{ github.ref }} if git describe --tags --match "[v|e]*" --exact; then echo "WARN: This is an exact git tag, will publish release" is_exact_tag='true' else echo "WARN: This is NOT an exact git tag, will not publish release" is_exact_tag='false' fi echo "IS_EXACT_TAG=${is_exact_tag}" >> $GITHUB_OUTPUT case $tag in refs/tags/v*) PROFILE='emqx' ;; refs/tags/e*) PROFILE=emqx-enterprise ;; *) PROFILE=${{ github.event.inputs.profile }} case "$PROFILE" in emqx) true ;; emqx-enterprise) true ;; *) # maybe triggered from schedule echo "WARN: \"$PROFILE\" is not a valid profile." echo "building the default profile 'emqx' instead" PROFILE='emqx' ;; esac ;; esac echo "BUILD_PROFILE=$PROFILE" >> $GITHUB_OUTPUT echo "VERSION=$(./pkg-vsn.sh $PROFILE)" >> $GITHUB_OUTPUT - name: get_all_deps run: | make -C source deps-all zip -ryq source.zip source/* source/.[^.]* - uses: actions/upload-artifact@v3 with: name: source path: source.zip linux: needs: prepare runs-on: ${{ matrix.build_machine }} strategy: fail-fast: false matrix: profile: - ${{ needs.prepare.outputs.BUILD_PROFILE }} otp: - 24.3.4.2-1 arch: - amd64 - arm64 os: - ["ubuntu20.04", "ubuntu/focal", "deb"] - ["ubuntu18.04", "ubuntu/bionic", "deb"] - ["debian11", "debian/bullseye", "deb"] - ["debian10", "debian/buster", "deb"] - ["el8", "el/8", "rpm"] - ["el7", "el/7", "rpm"] - ["amzn2", "el/6", "rpm"] build_machine: - aws-arm64 - ubuntu-20.04 builder: - 5.0-26 elixir: - 1.13.4 exclude: - arch: arm64 build_machine: ubuntu-20.04 - arch: amd64 build_machine: aws-arm64 include: - profile: emqx otp: 25.1.2-2 arch: amd64 os: ["ubuntu20.04", "ubuntu/focal", "deb"] build_machine: ubuntu-20.04 builder: 5.0-26 elixir: 1.13.4 release_with: elixir - profile: emqx otp: 25.1.2-2 arch: amd64 os: ["amzn2", "el/6", "rpm"] build_machine: ubuntu-20.04 builder: 5.0-26 elixir: 1.13.4 release_with: elixir defaults: run: shell: bash steps: - uses: AutoModality/action-clean@v1 if: matrix.build_machine == 'aws-arm64' - uses: actions/download-artifact@v3 with: name: source path: . - name: unzip source code run: unzip -q source.zip - name: build emqx packages working-directory: source env: BUILDER: ${{ matrix.builder }} ELIXIR: ${{ matrix.elixir }} OTP: ${{ matrix.otp }} PROFILE: ${{ matrix.profile }} ARCH: ${{ matrix.arch }} SYSTEM: ${{ matrix.os[0] }} run: | set -eu PKGTYPES="tgz pkg" IS_ELIXIR="no" if [ ${{ matrix.release_with }} == 'elixir' ]; then PKGTYPES="tgz" # set Elixir build flag IS_ELIXIR="yes" fi for PKGTYPE in ${PKGTYPES}; do ./scripts/buildx.sh \ --profile "${PROFILE}" \ --pkgtype "${PKGTYPE}" \ --arch "${ARCH}" \ --elixir "${IS_ELIXIR}" \ --builder "ghcr.io/emqx/emqx-builder/${BUILDER}:${ELIXIR}-${OTP}-${SYSTEM}" done - name: Push to packagecloud.io if: success() working-directory: source env: PROFILE: ${{ matrix.profile }} ARCH: ${{ matrix.arch }} OS: ${{ matrix.os[0] }} OS_CODENAME: ${{ matrix.os[1] }} PKG_EXT: ${{ matrix.os[2] }} VERSION: ${{ needs.prepare.outputs.VERSION }} PACKAGECLOUD_TOKEN: ${{ secrets.PACKAGECLOUD_TOKEN }} run: | set -eu REPO=$PROFILE if [ $PROFILE = 'emqx-enterprise' ]; then REPO='emqx-enterprise5' fi docker run -t --rm -e PACKAGECLOUD_TOKEN=$PACKAGECLOUD_TOKEN -v $(pwd)/_packages/$PROFILE/:/w -w /w / ghcr.io/emqx/package_cloud push id/$REPO/$OS_CODENAME $PROFILE-$VERSION-$OS-$ARCH.$PKG_EXT