Use status to check SRS, not exit value. #1458
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 for commits | |
on: | |
push: | |
branches: [main] | |
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 | |
test: | |
name: Run UTest | |
runs-on: ubuntu-20.04 | |
needs: | |
- envs | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- 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: | | |
sudo apt-get install -y ffmpeg | |
ffmpeg -version | |
- name: Test by jest and Go | |
run: | | |
make -j && make test -j | |
build-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 | |
install-script: | |
name: Test install by script | |
runs-on: ubuntu-20.04 | |
needs: | |
- envs | |
- build-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: Install tools | |
run: | | |
sudo apt-get install -y ffmpeg | |
ffmpeg -version | |
- 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-cloud:$SRS_TAG | |
docker tag platform:latest registry.cn-hangzhou.aliyuncs.com/ossrs/srs-cloud:$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_cloud/scripts/setup-ubuntu/install.sh --verbose | |
echo "" && echo "/usr/local/srs-cloud/" && du -sh /usr/local/srs-cloud/* | |
echo "" && ls -lha /data /data/config | |
- name: Check service | |
run: | | |
echo "Wait for service ready." | |
make -j -C test | |
./test/srs-cloud.test -test.v -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=true \ | |
-check-api-secret=false -test.run TestApi_Empty | |
echo "Show service status." | |
systemctl status srs-cloud | |
docker ps -a | |
echo "Record log of services." | |
journalctl -u srs-cloud > journalctl.log | |
journalctl -u srs-cloud -f >>journalctl.log 2>&1 & pid_journalctl=$! | |
docker logs srs-cloud >docker.log | |
docker logs -f srs-cloud >>docker.log 2>&1 & pid_docker=$! | |
- name: Test service | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
# Setup SRS_PLATFORM_SECRET and MGMT_PASSWORD. | |
eval $(bash scripts/tools/secret.sh) && rm -f test/.env && | |
./test/srs-cloud.test -test.v -wait-ready -endpoint http://localhost:2022 \ | |
-srs-log=true -wait-ready=true -init-password=false \ | |
-check-api-secret=true -api-secret=$SRS_PLATFORM_SECRET -system-password=$MGMT_PASSWORD \ | |
-test.parallel 3 | |
ret=$?; echo "Test with ${SRS_PLATFORM_SECRET} result: $ret" | |
echo "Stop service" | |
sudo systemctl stop srs-cloud | |
kill $pid_journalctl 2>/dev/null | |
kill $pid_docker 2>/dev/null | |
echo "Log of journalctl.log" && cat journalctl.log | |
echo "Log of docker.log" && cat docker.log | |
exit $ret | |
install-bt: | |
name: Test install by BT | |
runs-on: ubuntu-20.04 | |
needs: | |
- envs | |
- build-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: Install tools | |
run: | | |
sudo apt-get install -y ffmpeg | |
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.cloud.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 7800:7800 \ | |
-v $(pwd)/build/srs_cloud:/www/server/panel/plugin/srs_cloud \ | |
-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.cloud.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-cloud:$SRS_TAG | |
docker exec bt docker tag platform:latest registry.cn-hangzhou.aliyuncs.com/ossrs/srs-cloud:$SRS_TAG | |
echo "Tag platform image to BT ok." | |
docker exec bt docker images | |
- name: Install SRS Cloud plugin | |
run: | | |
docker exec bt bash /www/server/panel/plugin/srs_cloud/install.sh install | |
echo "Install SRS Cloud plugin ok." | |
docker exec bt python3 /www/server/panel/plugin/srs_cloud/bt-api-create-site.py | |
docker exec bt python3 /www/server/panel/plugin/srs_cloud/bt-api-setup-site.py | |
echo "Create SRS site ok." | |
docker exec bt bash /www/server/panel/plugin/srs_cloud/setup.sh \ | |
--r0 /tmp/srs_cloud_install.r0 --nginx /www/server/nginx/logs/nginx.pid \ | |
--www /www/wwwroot --site srs.cloud.local | |
echo "Setup SRS Cloud plugin ok." | |
set +e | |
docker exec bt systemctl status srs-cloud | |
docker exec bt journalctl -u srs-cloud | |
docker exec bt docker logs srs-cloud | |
- name: Check service | |
run: | | |
echo "Wait for service ready." | |
make -j -C test | |
./test/srs-cloud.test -test.v -endpoint http://srs.cloud.local:80 \ | |
-srs-log=true -wait-ready=true -init-password=true \ | |
-check-api-secret=false -test.run TestApi_Empty | |
echo "Show service status." | |
docker exec bt systemctl status srs-cloud | |
docker exec bt docker ps -a | |
echo "Record log of services." | |
docker exec bt journalctl -u srs-cloud > journalctl.log | |
docker exec bt journalctl -u srs-cloud -f >>journalctl.log 2>&1 & | |
docker exec bt docker logs srs-cloud >docker.log | |
docker exec bt docker logs -f srs-cloud >>docker.log 2>&1 & | |
- name: Test service | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
# Setup SRS_PLATFORM_SECRET and MGMT_PASSWORD. | |
eval $(bash scripts/tools/secret.sh) && rm -f test/.env && | |
./test/srs-cloud.test -test.v -wait-ready -endpoint http://srs.cloud.local:80 \ | |
-srs-log=true -wait-ready=true -init-password=false \ | |
-check-api-secret=true -api-secret=$SRS_PLATFORM_SECRET -system-password=$MGMT_PASSWORD \ | |
-test.parallel 3 | |
ret=$?; echo "Test with ${SRS_PLATFORM_SECRET} result: $ret" | |
echo "Stop service" | |
docker exec bt systemctl stop srs-cloud | |
docker stop bt | |
echo "Log of journalctl.log" && cat journalctl.log | |
echo "Log of docker.log" && cat docker.log | |
exit $ret | |
install-aapanel: | |
name: Test install by aaPanel | |
runs-on: ubuntu-20.04 | |
needs: | |
- envs | |
- build-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: Install tools | |
run: | | |
sudo apt-get install -y ffmpeg | |
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.cloud.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 7800:7800 \ | |
-v $(pwd)/build/srs_cloud:/www/server/panel/plugin/srs_cloud \ | |
-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.cloud.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-cloud:$SRS_TAG | |
docker exec aapanel docker tag platform:latest registry.cn-hangzhou.aliyuncs.com/ossrs/srs-cloud:$SRS_TAG | |
echo "Tag platform image to aaPanel ok." | |
docker exec aapanel docker images | |
- name: Install SRS Cloud plugin | |
run: | | |
docker exec aapanel bash /www/server/panel/plugin/srs_cloud/install.sh install | |
echo "Install SRS Cloud plugin ok." | |
docker exec aapanel python3 /www/server/panel/plugin/srs_cloud/bt-api-create-site.py | |
docker exec aapanel python3 /www/server/panel/plugin/srs_cloud/bt-api-setup-site.py | |
echo "Create SRS site ok." | |
docker exec aapanel bash /www/server/panel/plugin/srs_cloud/setup.sh \ | |
--r0 /tmp/srs_cloud_install.r0 --nginx /www/server/nginx/logs/nginx.pid \ | |
--www /www/wwwroot --site srs.cloud.local | |
echo "Setup SRS Cloud plugin ok." | |
set +e | |
docker exec aapanel systemctl status srs-cloud | |
docker exec aapanel journalctl -u srs-cloud | |
docker exec aapanel docker logs srs-cloud | |
- name: Check service | |
run: | | |
echo "Wait for service ready." | |
make -j -C test | |
./test/srs-cloud.test -test.v -endpoint http://srs.cloud.local:80 \ | |
-srs-log=true -wait-ready=true -init-password=true \ | |
-check-api-secret=false -test.run TestApi_Empty | |
echo "Show service status." | |
docker exec aapanel systemctl status srs-cloud | |
docker exec aapanel docker ps -a | |
echo "Record log of services." | |
docker exec aapanel journalctl -u srs-cloud > journalctl.log | |
docker exec aapanel journalctl -u srs-cloud -f >>journalctl.log 2>&1 & | |
docker exec aapanel docker logs srs-cloud >docker.log | |
docker exec aapanel docker logs -f srs-cloud >>docker.log 2>&1 & | |
- name: Test service | |
run: | | |
# We will handle the error by ourselves. | |
set +e | |
# Setup SRS_PLATFORM_SECRET and MGMT_PASSWORD. | |
eval $(bash scripts/tools/secret.sh) && rm -f test/.env && | |
./test/srs-cloud.test -test.v -wait-ready -endpoint http://srs.cloud.local:80 \ | |
-srs-log=true -wait-ready=true -init-password=false \ | |
-check-api-secret=true -api-secret=$SRS_PLATFORM_SECRET -system-password=$MGMT_PASSWORD \ | |
-test.parallel 3 | |
ret=$?; echo "Test with ${SRS_PLATFORM_SECRET} result: $ret" | |
echo "Stop service" | |
docker exec aapanel systemctl stop srs-cloud | |
docker stop aapanel | |
echo "Log of journalctl.log" && cat journalctl.log | |
echo "Log of docker.log" && cat docker.log | |
exit $ret | |
final: | |
name: Final | |
runs-on: ubuntu-20.04 | |
needs: | |
- test | |
- install-script | |
- install-bt | |
- install-aapanel | |
steps: | |
- uses: geekyeggo/delete-artifact@v2 | |
with: | |
name: platform-cache | |
- run: echo OK |