diff --git a/.github/workflows/rtp.io.yml b/.github/workflows/rtp.io.yml index b8a6db465a..1674887469 100644 --- a/.github/workflows/rtp.io.yml +++ b/.github/workflows/rtp.io.yml @@ -11,6 +11,9 @@ on: # Allows you to run this workflow manually from the Actions tab workflow_dispatch: +env: + COMPILER: clang-18 + # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: build_test_rtp_io: @@ -21,9 +24,8 @@ jobs: image: sippylabs/rtpproxy:latest options: --privileged --sysctl net.ipv6.conf.all.disable_ipv6=0 env: - COMPILER: clang-18 - BUILD_OS: ubuntu-latest PYTHON_VERSION: 3.12 + BUILD_OS: ubuntu-latest steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it @@ -101,11 +103,13 @@ jobs: build_test_rtp_io_dock: runs-on: ubuntu-latest + permissions: + packages: write env: BASE_IMAGE: ghcr.io/sippy/rtpproxy:latest - COMPILER: clang-18 - BUILD_OS: ubuntu-latest - PYTHON_VERSION: 3.12 + GHCR_REPO: ghcr.io/${{ github.repository_owner }}/opensips + outputs: + matrix: ${{ steps.set-env.outputs.test_matrix }} steps: - uses: actions/checkout@v4 @@ -131,19 +135,39 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set dynamic environment + id: set-env run: | PLATFORMS="`docker manifest inspect ${{ env.BASE_IMAGE }} | \ jq -r '.manifests[] | "\(.platform.os)/\(.platform.architecture)\(if .platform.variant != null then "/\(.platform.variant)" else "" end)"' | \ sort -u | grep -v unknown | paste -sd ','`" echo "Platforms: ${PLATFORMS}" + GIT_BRANCH="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" echo "PLATFORMS=${PLATFORMS}" >> $GITHUB_ENV + echo "GIT_BRANCH=${GIT_BRANCH}" >> $GITHUB_ENV + echo "BUILD_IMAGE=${{ env.GHCR_REPO }}:rtp.io-${GIT_BRANCH}" >> $GITHUB_ENV + TEST_MATRIX="`echo ${PLATFORMS} | tr ',' '\n' | jq -R . | jq -s . | tr '\n' ' '`" + echo "test_matrix=${TEST_MATRIX}" >> $GITHUB_OUTPUT - name: Build Docker image uses: docker/build-push-action@v6 + env: + CACHE_SPEC: "type=registry,ref=${{ env.BUILD_IMAGE }}-buildcache" with: context: . file: ./docker/Dockerfile.rtp.io build-args: | BASE_IMAGE=${{ env.BASE_IMAGE }} +# platforms: linux/arm/v7 platforms: ${{ env.PLATFORMS }} + cache-from: ${{ env.CACHE_SPEC }} + cache-to: ${{ env.CACHE_SPEC }},mode=max + tags: ${{ env.BUILD_IMAGE }} + push: true diff --git a/docker/Dockerfile.rtp.io b/docker/Dockerfile.rtp.io index d40016cb25..e57db4fffb 100644 --- a/docker/Dockerfile.rtp.io +++ b/docker/Dockerfile.rtp.io @@ -9,17 +9,18 @@ USER root # Set Environment Variables ENV DEBIAN_FRONTEND=noninteractive -WORKDIR /tmp +WORKDIR /src ARG COMPILER=clang-18 ARG BUILD_OS=ubuntu-latest RUN --mount=type=bind,source=scripts/build,target=scripts/build \ sh -x scripts/build/install_depends.sh +RUN apt-get install -y gpp python-is-python3 python3-pip +RUN --mount=type=bind,source=dist/voiptests/requirements.txt,target=. \ + python -m pip install --break-system-packages -U -r requirements.txt -COPY --exclude=.git --exclude=.github . . - -RUN pwd -RUN ls -l +COPY --exclude=.git --exclude=.github --exclude=docker --exclude=dist \ + . . ARG KEEP_MODULES="dialog sipmsgops sl tm rr maxfwd rtp.io rtpproxy textops" ARG SKIP_MODULES="usrloc event_routing clusterer rtp_relay" @@ -27,3 +28,21 @@ RUN mkdir tmp && cd modules && mv ${KEEP_MODULES} ${SKIP_MODULES} ../tmp && \ rm -rf * && cd ../tmp && mv ${KEEP_MODULES} ${SKIP_MODULES} ../modules && \ cd .. && rmdir tmp RUN EXCLUDE_MODULES_ADD="${SKIP_MODULES}" sh -x scripts/build/do_build.sh +RUN apt-get install -y libsrtp2-dev lld-18 +RUN env ONE_MODULE=rtp.io LDFLAGS="-flto -fuse-ld=lld" CFLAGS=-flto \ + sh -x scripts/build/do_build.sh +ARG CC=${COMPILER} +COPY --exclude=.git --exclude=.github dist/rtpproxy dist/rtpproxy +RUN cd dist/rtpproxy && ./configure + +COPY --exclude=.git --exclude=.github dist/voiptests dist/voiptests + +ENV MM_TYPE=opensips +ENV MM_BRANCH=master +ENV MM_ROOT=../.. +ENV RTPP_BRANCH=DOCKER +ENV RTPPC_TYPE=rtp.io +ENV RTPPROXY_DIST=../../dist/rtpproxy +ENV ALICE_ARGS="-4" +WORKDIR dist/voiptests +ENTRYPOINT [ "sh", "-x", "./test_run.sh" ]