Fix bug. v5.9.26 #1671
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test Dev Environment | |
on: | |
push: | |
branches: | |
- main | |
- release/* | |
jobs: | |
envs: | |
name: envs | |
steps: | |
################################################################################################################## | |
# Git checkout | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
# The github.ref is, for example, refs/tags/v5.0.145 or refs/tags/v5.0-r8 | |
# Generate variables like: | |
# SRS_TAG=v1.0.52 | |
# SRS_MAJOR=1 | |
# @see https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable | |
- name: Generate varaiables | |
run: | | |
SRS_TAG=$(bash scripts/version.sh) | |
echo "SRS_TAG=$SRS_TAG" >> $GITHUB_ENV | |
SRS_MAJOR=$(echo $SRS_TAG| awk -F '.' '{print $1}' |sed 's/v//g') | |
echo "SRS_MAJOR=$SRS_MAJOR" >> $GITHUB_ENV | |
echo "SRS_TAG:$SRS_TAG, SRS_MAJOR:$SRS_MAJOR" | |
# Map a step output to a job output, see https://docs.github.com/en/actions/using-jobs/defining-outputs-for-jobs | |
outputs: | |
SRS_TAG: ${{ env.SRS_TAG }} | |
SRS_MAJOR: ${{ env.SRS_MAJOR }} | |
runs-on: ubuntu-20.04 | |
run-test: | |
name: Run UTest | |
runs-on: ubuntu-20.04 | |
needs: | |
- envs | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Download test file | |
run: | | |
curl --location --output test/source.200kbps.768x320.flv \ | |
https://github.com/ossrs/srs/raw/develop/trunk/doc/source.200kbps.768x320.flv | |
- name: Setup the npm node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '18' | |
cache: 'npm' | |
cache-dependency-path: | | |
ui/package-lock.json | |
- name: Setup the Go | |
uses: actions/setup-go@v3 | |
with: | |
go-version: '>=1.16.0' | |
- name: Install tools | |
run: | | |
docker run --rm -v /usr/bin:/g ossrs/srs:tools \ | |
cp /usr/local/bin/ffmpeg /usr/local/bin/ffprobe /g/ | |
ffmpeg -version | |
- name: Test by jest and Go | |
run: | | |
make -j && make test -j | |
build-platform-image: | |
name: Build platform image | |
runs-on: ubuntu-20.04 | |
needs: | |
- envs | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Build image for platform | |
run: | | |
docker build -t platform:latest -f Dockerfile . | |
docker images | |
docker save -o platform.tar platform:latest | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: platform-cache | |
path: platform.tar | |
retention-days: 1 | |
test-zh-image: | |
name: Test ZH image | |
needs: | |
- envs | |
- build-platform-image | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Download test file | |
run: | | |
curl --location --output test/source.200kbps.768x320.flv \ | |
https://github.com/ossrs/srs/raw/develop/trunk/doc/source.200kbps.768x320.flv | |
- name: Install tools | |
run: | | |
docker run --rm -v /usr/bin:/g ossrs/srs:tools \ | |
cp /usr/local/bin/ffmpeg /usr/local/bin/ffprobe /g/ | |
ffmpeg -version | |
- uses: actions/download-artifact@v3 | |
with: | |
name: platform-cache | |
- name: Run test for platform image | |
run: | | |
docker load -i platform.tar | |
docker tag platform ossrs/srs-stack:5 | |
docker run --rm -d -p 2022:2022 -p 2443:2443 -p 1935:1935 \ | |
-p 8080:8080 -p 8000:8000/udp -p 10080:10080/udp --name srs-stack \ | |
-v /data:/data -e REACT_APP_LOCALE=zh ossrs/srs-stack:5 | |
- name: Check and Test service | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
# Record all logs. | |
docker logs -f srs-stack >docker.log 2>&1 & pid_docker=$! | |
echo "Wait for service ready." && | |
make -j -C test && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=true -init-self-signed-cert=true \ | |
-check-api-secret=true -test.run TestApi_Empty && | |
echo "Make upload writable." && | |
sudo chmod 777 /data/upload && | |
echo "Test HTTP service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Test HTTPS service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint https://localhost:2443 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Run media test with retry" && | |
bash scripts/tools/secret.sh --output test/.env && | |
./scripts/tools/failed-retry.sh 1 ./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -test.run TestApi_Publish* | |
ret=$?; echo "Test result: $ret" | |
echo "Stop service" | |
docker stop srs-stack | |
kill $pid_docker 2>/dev/null | |
echo "Log of docker.log" && cat docker.log | |
exit $ret | |
runs-on: ubuntu-20.04 | |
test-en-image: | |
name: Test EN image | |
needs: | |
- envs | |
- build-platform-image | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Download test file | |
run: | | |
curl --location --output test/source.200kbps.768x320.flv \ | |
https://github.com/ossrs/srs/raw/develop/trunk/doc/source.200kbps.768x320.flv | |
- name: Install tools | |
run: | | |
docker run --rm -v /usr/bin:/g ossrs/srs:tools \ | |
cp /usr/local/bin/ffmpeg /usr/local/bin/ffprobe /g/ | |
ffmpeg -version | |
- uses: actions/download-artifact@v3 | |
with: | |
name: platform-cache | |
- name: Run test for platform image | |
run: | | |
docker load -i platform.tar | |
docker tag platform ossrs/srs-stack:5 | |
docker run --rm -d -p 2022:2022 -p 2443:2443 -p 1935:1935 \ | |
-p 8080:8080 -p 8000:8000/udp -p 10080:10080/udp --name srs-stack \ | |
-v /data:/data -e REACT_APP_LOCALE=en ossrs/srs-stack:5 | |
- name: Check and Test service | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
# Record all logs. | |
docker logs -f srs-stack >docker.log 2>&1 & pid_docker=$! | |
echo "Wait for service ready." && | |
make -j -C test && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=true -init-self-signed-cert=true \ | |
-check-api-secret=true -test.run TestApi_Empty && | |
echo "Make upload writable." && | |
sudo chmod 777 /data/upload && | |
echo "Test HTTP service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Test HTTPS service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint https://localhost:2443 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Run media test with retry" && | |
bash scripts/tools/secret.sh --output test/.env && | |
./scripts/tools/failed-retry.sh 1 ./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -test.run TestApi_Publish* | |
ret=$?; echo "Test result: $ret" | |
echo "Stop service" | |
docker stop srs-stack | |
kill $pid_docker 2>/dev/null | |
echo "Log of docker.log" && cat docker.log | |
exit $ret | |
runs-on: ubuntu-20.04 | |
test-zh-installer: | |
name: Test ZH installer | |
runs-on: ubuntu-20.04 | |
needs: | |
- envs | |
- build-platform-image | |
steps: | |
- name: Covert output to env | |
run: | | |
echo "SRS_TAG=${{ needs.envs.outputs.SRS_TAG }}" >> $GITHUB_ENV | |
echo "SRS_MAJOR=${{ needs.envs.outputs.SRS_MAJOR }}" >> $GITHUB_ENV | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Download test file | |
run: | | |
curl --location --output test/source.200kbps.768x320.flv \ | |
https://github.com/ossrs/srs/raw/develop/trunk/doc/source.200kbps.768x320.flv | |
- name: Install tools | |
run: | | |
docker run --rm -v /usr/bin:/g ossrs/srs:tools \ | |
cp /usr/local/bin/ffmpeg /usr/local/bin/ffprobe /g/ | |
ffmpeg -version | |
- name: Start Nginx service | |
run: | | |
sudo systemctl start nginx | |
sudo systemctl status nginx | |
- uses: actions/download-artifact@v3 | |
with: | |
name: platform-cache | |
- name: Load platform image | |
run: | | |
docker load -i platform.tar | |
docker tag platform:latest ossrs/srs-stack:$SRS_TAG | |
docker tag platform:latest registry.cn-hangzhou.aliyuncs.com/ossrs/srs-stack:$SRS_TAG | |
docker images | |
- name: Build package | |
run: | | |
bash scripts/setup-ubuntu/build.sh --language zh --version $SRS_TAG \ | |
--output $(pwd)/build --extract | |
du -sh $(pwd)/build/* | |
- name: Install package | |
run: | | |
sudo bash build/srs_stack/scripts/setup-ubuntu/install.sh --verbose | |
echo "" && echo "/usr/local/srs-stack/" && du -sh /usr/local/srs-stack/* | |
echo "" && ls -lha /data /data/config | |
- name: Check and Test service | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
# Record all logs. | |
journalctl -u srs-stack -f >journalctl.log 2>&1 & pid_journalctl=$! | |
echo "Wait for service ready." && | |
make -j -C test && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=true -init-self-signed-cert=true \ | |
-check-api-secret=true -test.run TestApi_Empty && | |
echo "Make upload writable." && | |
sudo chmod 777 /data/upload && | |
echo "Test HTTP service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Test HTTPS service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint https://localhost:2443 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Run media test with retry" && | |
bash scripts/tools/secret.sh --output test/.env && | |
./scripts/tools/failed-retry.sh 1 ./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -test.run TestApi_Publish* | |
ret=$?; echo "Test result: $ret" | |
echo "Stop service" | |
sudo systemctl stop srs-stack | |
kill $pid_journalctl 2>/dev/null | |
echo "Log of journalctl.log" && cat journalctl.log | |
exit $ret | |
test-en-installer: | |
name: Test EN installer | |
runs-on: ubuntu-20.04 | |
needs: | |
- envs | |
- build-platform-image | |
steps: | |
- name: Covert output to env | |
run: | | |
echo "SRS_TAG=${{ needs.envs.outputs.SRS_TAG }}" >> $GITHUB_ENV | |
echo "SRS_MAJOR=${{ needs.envs.outputs.SRS_MAJOR }}" >> $GITHUB_ENV | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Download test file | |
run: | | |
curl --location --output test/source.200kbps.768x320.flv \ | |
https://github.com/ossrs/srs/raw/develop/trunk/doc/source.200kbps.768x320.flv | |
- name: Install tools | |
run: | | |
docker run --rm -v /usr/bin:/g ossrs/srs:tools \ | |
cp /usr/local/bin/ffmpeg /usr/local/bin/ffprobe /g/ | |
ffmpeg -version | |
- name: Start Nginx service | |
run: | | |
sudo systemctl start nginx | |
sudo systemctl status nginx | |
- uses: actions/download-artifact@v3 | |
with: | |
name: platform-cache | |
- name: Load platform image | |
run: | | |
docker load -i platform.tar | |
docker tag platform:latest ossrs/srs-stack:$SRS_TAG | |
docker tag platform:latest registry.cn-hangzhou.aliyuncs.com/ossrs/srs-stack:$SRS_TAG | |
docker images | |
- name: Build package | |
run: | | |
bash scripts/setup-ubuntu/build.sh --language en --version $SRS_TAG \ | |
--output $(pwd)/build --extract | |
du -sh $(pwd)/build/* | |
- name: Install package | |
run: | | |
sudo bash build/srs_stack/scripts/setup-ubuntu/install.sh --verbose | |
echo "" && echo "/usr/local/srs-stack/" && du -sh /usr/local/srs-stack/* | |
echo "" && ls -lha /data /data/config | |
- name: Check and Test service | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
# Record all logs. | |
journalctl -u srs-stack -f >journalctl.log 2>&1 & pid_journalctl=$! | |
echo "Wait for service ready." && | |
make -j -C test && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=true -init-self-signed-cert=true \ | |
-check-api-secret=true -test.run TestApi_Empty && | |
echo "Make upload writable." && | |
sudo chmod 777 /data/upload && | |
echo "Test HTTP service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Test HTTPS service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint https://localhost:2443 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Run media test with retry" && | |
bash scripts/tools/secret.sh --output test/.env && | |
./scripts/tools/failed-retry.sh 1 ./test/srs-stack.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -test.run TestApi_Publish* | |
ret=$?; echo "Test result: $ret" | |
echo "Stop service" | |
sudo systemctl stop srs-stack | |
kill $pid_journalctl 2>/dev/null | |
echo "Log of journalctl.log" && cat journalctl.log | |
exit $ret | |
test-bt-plugin: | |
name: Test BT plugin | |
runs-on: ubuntu-20.04 | |
needs: | |
- envs | |
- build-platform-image | |
steps: | |
- name: Remove unnecessary files | |
run: | | |
df -h | |
echo "" | |
echo "After removed some unused files." | |
echo "" | |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc \ | |
/usr/local/share/powershell /usr/share/swift /usr/lib/jvm | |
df -h | |
- name: Covert output to env | |
run: | | |
echo "SRS_TAG=${{ needs.envs.outputs.SRS_TAG }}" >> $GITHUB_ENV | |
echo "SRS_MAJOR=${{ needs.envs.outputs.SRS_MAJOR }}" >> $GITHUB_ENV | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Download test file | |
run: | | |
curl --location --output test/source.200kbps.768x320.flv \ | |
https://github.com/ossrs/srs/raw/develop/trunk/doc/source.200kbps.768x320.flv | |
- name: Install tools | |
run: | | |
docker run --rm -v /usr/bin:/g ossrs/srs:tools \ | |
cp /usr/local/bin/ffmpeg /usr/local/bin/ffprobe /g/ | |
ffmpeg -version | |
- uses: actions/download-artifact@v3 | |
with: | |
name: platform-cache | |
# See https://github.com/moby/moby/issues/13742#issuecomment-725197223 | |
- name: Force docker to use vfs. | |
run: | | |
sudo systemctl stop docker | |
echo '{"cgroup-parent":"/actions_job","storage-driver":"vfs"}' | sudo tee /etc/docker/daemon.json | |
sudo systemctl start docker | |
- name: Add hosts to /etc/hosts | |
run: | | |
sudo echo "127.0.0.1 srs.stack.local" | sudo tee -a /etc/hosts | |
- name: Build package | |
run: | | |
bash scripts/setup-bt/auto/zip.sh --version $SRS_TAG \ | |
--output build --extract | |
du -sh build/* | |
- name: Start BT develop container | |
env: | |
BT_API: ${{ secrets.BT_API }} | |
BT_USER: ${{ secrets.BT_USER }} | |
run: | | |
mkdir -p $HOME/.bt | |
echo -n "$BT_API" > $HOME/.bt/api.json | |
echo -n "$BT_USER" > $HOME/.bt/userInfo.json | |
BT_KEY=$(cat $HOME/.bt/api.json |awk -F token_crypt '{print $2}' |cut -d'"' -f3) | |
# Note that we must mount the /data to allow test to read the MGMT_PASSWORD in /data/config/.env | |
docker run -v /data:/data -p 80:80 -p 443:443 -p 7800:7800 \ | |
-p 2022:2022 -p 1935:1935 -p 8080:8080 -p 8000:8000/udp -p 10080:10080/udp \ | |
-v $(pwd)/build/srs_stack:/www/server/panel/plugin/srs_stack \ | |
-v $HOME/.bt/userInfo.json:/www/server/panel/data/userInfo.json \ | |
-v $HOME/.bt/api.json:/www/server/panel/config/api.json -e BT_KEY=$BT_KEY \ | |
--privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ | |
--add-host srs.stack.local:127.0.0.1 \ | |
-d --rm -v $(pwd):/g -w /g --name=bt ossrs/bt-plugin-dev:1 | |
echo "BT docker started." | |
- name: Wait for systemd service start | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
for ((i=0; i<10; i++)); do | |
if [[ $(docker exec bt systemctl status docker >/dev/null 2>/dev/null && echo yes) == yes ]]; then | |
echo "Docker service started." | |
break | |
else | |
echo "Wait for docker service start." | |
sleep 1 | |
fi | |
done | |
docker exec bt systemctl status docker | |
echo "Docker service started." | |
- name: Import platform image to BT | |
run: | | |
docker exec bt docker load -i platform.tar | |
echo "Import platform image to BT ok." | |
docker exec bt docker tag platform:latest ossrs/srs-stack:$SRS_TAG | |
docker exec bt docker tag platform:latest registry.cn-hangzhou.aliyuncs.com/ossrs/srs-stack:$SRS_TAG | |
echo "Tag platform image to BT ok." | |
docker exec bt docker images | |
- name: Install SRS Stack plugin | |
run: | | |
docker exec bt bash /www/server/panel/plugin/srs_stack/install.sh install | |
echo "Install SRS Stack plugin ok." | |
docker exec bt python3 /www/server/panel/plugin/srs_stack/bt_api_create_site.py | |
docker exec bt python3 /www/server/panel/plugin/srs_stack/bt_api_setup_site.py | |
echo "Create SRS site ok." | |
docker exec bt bash /www/server/panel/plugin/srs_stack/setup.sh \ | |
--r0 /tmp/srs_stack_install.r0 --nginx /www/server/nginx/logs/nginx.pid \ | |
--www /www/wwwroot --site srs.stack.local | |
echo "Setup SRS Stack plugin ok." | |
set +e | |
docker exec bt systemctl status srs-stack | |
docker exec bt journalctl -u srs-stack | |
docker exec bt docker logs srs-stack | |
- name: Check and Test service | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
# Record all logs. | |
docker exec bt journalctl -u srs-stack -f >journalctl.log 2>&1 & | |
echo "Wait for service ready." && | |
make -j -C test && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://srs.stack.local:80 \ | |
-srs-log=true -wait-ready=true -init-password=true -init-self-signed-cert=true \ | |
-check-api-secret=true -test.run TestApi_Empty && | |
echo "Make upload writable." && | |
sudo chmod 777 /data/upload && | |
echo "Test HTTP service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://srs.stack.local:80 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Test HTTPS service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint https://srs.stack.local:443 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Run media test with retry" && | |
bash scripts/tools/secret.sh --output test/.env && | |
./scripts/tools/failed-retry.sh 1 ./test/srs-stack.test -test.v -endpoint http://srs.stack.local:80 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -test.run TestApi_Publish* | |
ret=$?; echo "Test result: $ret" | |
echo "Stop service" | |
docker exec bt systemctl stop srs-stack | |
docker stop bt | |
echo "Log of journalctl.log" && cat journalctl.log | |
exit $ret | |
test-aapanel-plugin: | |
name: Test aaPanel plugin | |
runs-on: ubuntu-20.04 | |
needs: | |
- envs | |
- build-platform-image | |
steps: | |
- name: Remove unnecessary files | |
run: | | |
df -h | |
echo "" | |
echo "After removed some unused files." | |
echo "" | |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc \ | |
/usr/local/share/powershell /usr/share/swift /usr/lib/jvm | |
df -h | |
- name: Covert output to env | |
run: | | |
echo "SRS_TAG=${{ needs.envs.outputs.SRS_TAG }}" >> $GITHUB_ENV | |
echo "SRS_MAJOR=${{ needs.envs.outputs.SRS_MAJOR }}" >> $GITHUB_ENV | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Download test file | |
run: | | |
curl --location --output test/source.200kbps.768x320.flv \ | |
https://github.com/ossrs/srs/raw/develop/trunk/doc/source.200kbps.768x320.flv | |
- name: Install tools | |
run: | | |
docker run --rm -v /usr/bin:/g ossrs/srs:tools \ | |
cp /usr/local/bin/ffmpeg /usr/local/bin/ffprobe /g/ | |
ffmpeg -version | |
- uses: actions/download-artifact@v3 | |
with: | |
name: platform-cache | |
# See https://github.com/moby/moby/issues/13742#issuecomment-725197223 | |
- name: Force docker to use vfs. | |
run: | | |
sudo systemctl stop docker | |
echo '{"cgroup-parent":"/actions_job","storage-driver":"vfs"}' | sudo tee /etc/docker/daemon.json | |
sudo systemctl start docker | |
- name: Add hosts to /etc/hosts | |
run: | | |
sudo echo "127.0.0.1 srs.stack.local" | sudo tee -a /etc/hosts | |
- name: Build package | |
run: | | |
bash scripts/setup-aapanel/auto/zip.sh --version $SRS_TAG \ | |
--output build --extract | |
du -sh build/* | |
- name: Start aaPanel develop container | |
env: | |
AAPANEL_API: ${{ secrets.BT_API }} | |
run: | | |
mkdir -p $HOME/.aapanel | |
echo -n "$AAPANEL_API" > $HOME/.aapanel/api.json | |
AAPANEL_KEY=$(cat $HOME/.aapanel/api.json |awk -F token_crypt '{print $2}' |cut -d'"' -f3) | |
# Note that we must mount the /data to allow test to read the MGMT_PASSWORD in /data/config/.env | |
docker run -v /data:/data -p 80:80 -p 443:443 -p 7800:7800 \ | |
-p 2022:2022 -p 1935:1935 -p 8080:8080 -p 8000:8000/udp -p 10080:10080/udp \ | |
-v $(pwd)/build/srs_stack:/www/server/panel/plugin/srs_stack \ | |
-v $HOME/.aapanel/api.json:/www/server/panel/config/api.json -e BT_KEY=$AAPANEL_KEY \ | |
--privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ | |
--add-host srs.stack.local:127.0.0.1 \ | |
-d --rm -v $(pwd):/g -w /g --name=aapanel ossrs/aapanel-plugin-dev:1 | |
echo "aaPanel docker started." | |
- name: Wait for systemd service start | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
for ((i=0; i<10; i++)); do | |
if [[ $(docker exec aapanel systemctl status docker >/dev/null 2>/dev/null && echo yes) == yes ]]; then | |
echo "Docker service started." | |
break | |
else | |
echo "Wait for docker service start." | |
sleep 1 | |
fi | |
done | |
docker exec aapanel systemctl status docker | |
echo "Docker service started." | |
- name: Import platform image to aaPanel | |
run: | | |
docker exec aapanel docker load -i platform.tar | |
echo "Import platform image to aaPanel ok." | |
docker exec aapanel docker tag platform:latest ossrs/srs-stack:$SRS_TAG | |
docker exec aapanel docker tag platform:latest registry.cn-hangzhou.aliyuncs.com/ossrs/srs-stack:$SRS_TAG | |
echo "Tag platform image to aaPanel ok." | |
docker exec aapanel docker images | |
- name: Install SRS Stack plugin | |
run: | | |
docker exec aapanel bash /www/server/panel/plugin/srs_stack/install.sh install | |
echo "Install SRS Stack plugin ok." | |
docker exec aapanel python3 /www/server/panel/plugin/srs_stack/bt_api_create_site.py | |
docker exec aapanel python3 /www/server/panel/plugin/srs_stack/bt_api_setup_site.py | |
echo "Create SRS site ok." | |
docker exec aapanel bash /www/server/panel/plugin/srs_stack/setup.sh \ | |
--r0 /tmp/srs_stack_install.r0 --nginx /www/server/nginx/logs/nginx.pid \ | |
--www /www/wwwroot --site srs.stack.local | |
echo "Setup SRS Stack plugin ok." | |
set +e | |
docker exec aapanel systemctl status srs-stack | |
docker exec aapanel journalctl -u srs-stack | |
docker exec aapanel docker logs srs-stack | |
- name: Check and Test service | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
# Record all logs. | |
docker exec aapanel journalctl -u srs-stack -f >journalctl.log 2>&1 & | |
echo "Wait for service ready." && | |
make -j -C test && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://srs.stack.local:80 \ | |
-srs-log=true -wait-ready=true -init-password=true -init-self-signed-cert=true \ | |
-check-api-secret=true -test.run TestApi_Empty && | |
echo "Make upload writable." && | |
sudo chmod 777 /data/upload && | |
echo "Test HTTP service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint http://srs.stack.local:80 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Test HTTPS service." && | |
bash scripts/tools/secret.sh --output test/.env && | |
./test/srs-stack.test -test.v -endpoint https://srs.stack.local:443 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -no-media-test && | |
echo "Run media test with retry" && | |
bash scripts/tools/secret.sh --output test/.env && | |
./scripts/tools/failed-retry.sh 1 ./test/srs-stack.test -test.v -endpoint http://srs.stack.local:80 \ | |
-srs-log=true -wait-ready=true -init-password=false -init-self-signed-cert=false \ | |
-check-api-secret=true -test.run TestApi_Publish* | |
ret=$?; echo "Test result: $ret" | |
echo "Stop service" | |
docker exec aapanel systemctl stop srs-stack | |
docker stop aapanel | |
echo "Log of journalctl.log" && cat journalctl.log | |
exit $ret | |
test-final: | |
name: test-final | |
runs-on: ubuntu-20.04 | |
needs: | |
- run-test | |
- test-zh-image | |
- test-en-image | |
- test-zh-installer | |
- test-en-installer | |
- test-bt-plugin | |
- test-aapanel-plugin | |
steps: | |
- uses: geekyeggo/delete-artifact@v2 | |
with: | |
name: platform-cache | |
- run: echo OK |