name: "Test" # @see https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestbranchestags on: [push, pull_request] jobs: build-centos7: name: build-centos7 runs-on: ubuntu-20.04 needs: - utest steps: - name: Checkout repository uses: actions/checkout@v2 # Build for CentOS 7 - name: Build on CentOS7, baseline run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos7-baseline . - name: Build on CentOS7, with all features run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos7-all . - name: Build on CentOS7, without WebRTC run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos7-no-webrtc . - name: Build on CentOS7, without ASM run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos7-no-asm . - name: Build on CentOS7, C++98, no FFmpeg run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos7-ansi-no-ffmpeg . build-centos6: name: build-centos6 runs-on: ubuntu-20.04 needs: - utest steps: - name: Checkout repository uses: actions/checkout@v2 # Build for CentOS 6 - name: Build on CentOS6, baseline run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos6-baseline . - name: Build on CentOS6, with all features run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target centos6-all . build-ubuntu16: name: build-ubuntu16 runs-on: ubuntu-20.04 needs: - utest steps: - name: Checkout repository uses: actions/checkout@v2 # Build for Ubuntu16 - name: Build on Ubuntu16, baseline run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu16-baseline . - name: Build on Ubuntu16, with all features run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu16-all . build-ubuntu18: name: build-ubuntu18 runs-on: ubuntu-20.04 needs: - utest steps: - name: Checkout repository uses: actions/checkout@v2 # Build for Ubuntu18 - name: Build on Ubuntu18, baseline run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu18-baseline . - name: Build on Ubuntu18, with all features run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu18-all . build-ubuntu20: name: build-ubuntu20 runs-on: ubuntu-20.04 needs: - utest steps: - name: Checkout repository uses: actions/checkout@v2 # Build for Ubuntu20 - name: Build on Ubuntu20, baseline run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu20-baseline . - name: Build on Ubuntu20, with all features run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu20-all . build-cross-arm: name: build-cross-arm runs-on: ubuntu-20.04 needs: - utest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Cross Build for ARMv7 on Ubuntu16 run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu16-cross-armv7 . - name: Cross Build for ARMv7 on Ubuntu20 run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu20-cross-armv7 . build-cross-aarch64: name: build-cross-aarch64 runs-on: ubuntu-20.04 needs: - utest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Cross Build for AARCH64 on Ubuntu16 run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu16-cross-aarch64 . - name: Cross Build for AARCH64 on Ubuntu20 run: DOCKER_BUILDKIT=1 docker build -f trunk/Dockerfile.builds --target ubuntu20-cross-aarch64 . build: name: build needs: - build-centos7 - build-centos6 - build-ubuntu16 - build-ubuntu18 - build-ubuntu20 - build-cross-arm - build-cross-aarch64 runs-on: ubuntu-20.04 steps: - run: echo 'Build done' utest: name: utest runs-on: ubuntu-20.04 steps: - name: Checkout repository uses: actions/checkout@v2 # Tests - name: Build test image run: docker build --tag srs:test -f trunk/Dockerfile.test . # For utest - name: Run SRS utest run: docker run --rm srs:test bash -c 'make utest && ./objs/srs_utest' # For regression-test - name: Run SRS regression-test run: docker run --rm srs:test bash -c 'make && (./objs/srs -c conf/regression-test.conf; ./etc/init.d/srs status) && cd 3rdparty/srs-bench && make && ./objs/srs_test -test.v' coverage: name: coverage runs-on: ubuntu-20.04 steps: - name: Checkout repository uses: actions/checkout@v2 # Tests - name: Build coverage image run: docker build --tag srs:cov -f trunk/Dockerfile.cov . # For coverage - name: Run SRS covergae if: ${{ startsWith(github.ref, 'refs/heads/') || startsWith(github.ref, 'refs/pull/') }} env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} run: | # The hash of commit. SRS_SHA=${{ github.sha }} # Note that the root of SRS, must contains .git, for report fixing. SRS_PROJECT=/srs # The github.ref is, for example, refs/heads/develop SRS_BRANCH=$(echo ${{ github.ref }}| awk -F 'refs/heads/' '{print $2}'| awk -F '/' '{print $1}') # The github.ref is, for example, refs/pull/2536/merge SRS_PR=$(echo ${{ github.ref }}| awk -F 'refs/pull/' '{print $2}'| awk -F '/' '{print $1}') # echo "For github.ref=${{ github.ref }}, github.sha=${{ github.sha }}" echo "SRS_BRANCH=$SRS_BRANCH, SRS_PR=$SRS_PR, SRS_SHA=$SRS_SHA, SRS_PROJECT=$SRS_PROJECT" docker run --rm --env CODECOV_TOKEN=$CODECOV_TOKEN \ --env SRS_BRANCH=$SRS_BRANCH --env SRS_PR=$SRS_PR --env SRS_SHA=$SRS_SHA --env SRS_PROJECT=$SRS_PROJECT \ srs:cov bash -c 'make utest && ./objs/srs_utest && bash auto/codecov.sh' # multile-arch-armv7: name: multile-arch-armv7 runs-on: ubuntu-20.04 steps: - name: Checkout repository uses: actions/checkout@v2 # See https://github.com/crazy-max/ghaction-docker-buildx#moved-to-docker-organization # https://github.com/docker/setup-qemu-action - name: Set up QEMU uses: docker/setup-qemu-action@v1 # https://github.com/docker/setup-buildx-action - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Build multiple archs image run: | docker buildx build --platform linux/arm/v7 \ --output "type=image,push=false" \ --build-arg IMAGE=ossrs/srs:ubuntu20-cache \ -f trunk/Dockerfile . multile-arch-aarch64: name: multile-arch-aarch64 runs-on: ubuntu-20.04 steps: - name: Checkout repository uses: actions/checkout@v2 # See https://github.com/crazy-max/ghaction-docker-buildx#moved-to-docker-organization # https://github.com/docker/setup-qemu-action - name: Set up QEMU uses: docker/setup-qemu-action@v1 # https://github.com/docker/setup-buildx-action - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Build multiple archs image run: | docker buildx build --platform linux/arm64/v8 \ --output "type=image,push=false" \ --build-arg IMAGE=ossrs/srs:ubuntu20-cache \ -f trunk/Dockerfile . multile-arch-amd64: name: multile-arch-amd64 runs-on: ubuntu-20.04 steps: - name: Checkout repository uses: actions/checkout@v2 # See https://github.com/crazy-max/ghaction-docker-buildx#moved-to-docker-organization # https://github.com/docker/setup-qemu-action - name: Set up QEMU uses: docker/setup-qemu-action@v1 # https://github.com/docker/setup-buildx-action - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Build multiple archs image run: | docker buildx build --platform linux/amd64 \ --output "type=image,push=false" \ --build-arg IMAGE=ossrs/srs:ubuntu20-cache \ -f trunk/Dockerfile . done: name: done needs: - build - coverage - multile-arch-armv7 - multile-arch-aarch64 - multile-arch-amd64 runs-on: ubuntu-20.04 steps: - run: echo 'All done'