6799809b6b
For now, we will not rebuild livekit, but rather use the precompiled project binaries. As per BBB convention, this package provides an immutable default configuration file which gets merged with a user-modifiable file in /etc/bigbluebutton.
387 lines
16 KiB
YAML
387 lines
16 KiB
YAML
name: "Automated tests"
|
|
on:
|
|
push:
|
|
branches:
|
|
- "develop"
|
|
- "v2.[5-9].x-release"
|
|
- "v[3-9].*.x-release"
|
|
paths-ignore:
|
|
- "docs/**"
|
|
- "**/*.md"
|
|
pull_request:
|
|
types: [opened, synchronize, reopened]
|
|
paths-ignore:
|
|
- "docs/**"
|
|
- "**/*.md"
|
|
- "bigbluebutton-html5/public/locales/*.json"
|
|
permissions:
|
|
contents: read
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
jobs:
|
|
build-package:
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
package:
|
|
[
|
|
bbb-apps-akka,
|
|
bbb-config,
|
|
bbb-export-annotations,
|
|
bbb-learning-dashboard,
|
|
bbb-playback-record,
|
|
bbb-graphql-server,
|
|
bbb-etherpad,
|
|
bbb-web,
|
|
bbb-fsesl-akka,
|
|
bbb-html5,
|
|
bbb-freeswitch,
|
|
bbb-webrtc,
|
|
others,
|
|
]
|
|
include:
|
|
- package: bbb-apps-akka
|
|
cache-files-list: akka-bbb-apps bbb-common-message
|
|
- package: bbb-config
|
|
cache-files-list: bigbluebutton-config
|
|
- package: bbb-export-annotations
|
|
cache-files-list: bbb-export-annotations
|
|
- package: bbb-learning-dashboard
|
|
cache-files-list: bbb-learning-dashboard
|
|
- package: bbb-playback-record
|
|
build-list: bbb-playback bbb-playback-notes bbb-playback-podcast bbb-playback-presentation bbb-playback-screenshare bbb-playback-video bbb-record-core
|
|
- package: bbb-graphql-server
|
|
build-name: bbb-graphql-server
|
|
build-list: bbb-graphql-server bbb-graphql-middleware bbb-graphql-actions-adapter-server
|
|
- package: bbb-etherpad
|
|
cache-files-list: bbb-etherpad.placeholder.sh
|
|
cache-urls-list: https://api.github.com/repos/mconf/ep_pad_ttl/commits https://api.github.com/repos/alangecker/bbb-etherpad-plugin/commits https://api.github.com/repos/mconf/ep_redis_publisher/commits https://api.github.com/repos/alangecker/bbb-etherpad-skin/commits
|
|
- package: bbb-web
|
|
cache-files-list: bigbluebutton-web bbb-common-message bbb-common-web
|
|
- package: bbb-fsesl-akka
|
|
cache-files-list: akka-bbb-fsesl bbb-common-message
|
|
- package: bbb-html5
|
|
build-list: bbb-html5-nodejs bbb-html5
|
|
cache-files-list: bigbluebutton-html5
|
|
- package: bbb-freeswitch
|
|
build-list: bbb-freeswitch-core bbb-freeswitch-sounds
|
|
cache-files-list: freeswitch.placeholder.sh
|
|
cache-urls-list: http://bigbluebutton.org/downloads/sounds.tar.gz
|
|
- package: bbb-webrtc
|
|
build-list: bbb-webrtc-sfu bbb-webrtc-recorder
|
|
cache-files-list: bbb-webrtc-sfu.placeholder.sh bbb-webrtc-recorder.placeholder.sh
|
|
- package: others
|
|
build-list: bbb-mkclean bbb-pads bbb-libreoffice-docker bbb-transcription-controller bigbluebutton bbb-livekit
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Merge branches
|
|
uses: ./.github/actions/merge-branches
|
|
- name: Set cache-key vars
|
|
run: |
|
|
BUILD_DIRS="$(echo '${{ matrix.build-list || matrix.package }}' | sed 's/[^ ]\+/build\/packages-template\/&/g')"
|
|
echo "Including build dirs: $BUILD_DIRS"
|
|
echo "CACHE_KEY_FILES=$(echo '${{ matrix.cache-files-list }} '$BUILD_DIRS' .gitlab-ci.yml build/deb-helper.sh' | xargs -n1 git log -1 --format=%h -- | tr '\n' '-' | sed 's/-$//')" >> $GITHUB_ENV
|
|
echo "CACHE_KEY_URLS=$(echo '${{ matrix.cache-urls-list }}' | xargs -r -n 1 curl -Is | grep -i 'Last-Modified' | md5sum | cut -c1-10)" >> $GITHUB_ENV
|
|
cat bigbluebutton-config/bigbluebutton-release >> $GITHUB_ENV
|
|
echo "FORCE_GIT_REV=0" >> $GITHUB_ENV #used by setup.sh
|
|
echo "FORCE_COMMIT_DATE=0" >> $GITHUB_ENV #used by setup.sh
|
|
- name: Handle cache
|
|
if: matrix.cache-files-list != ''
|
|
id: cache-action
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: artifacts.tar
|
|
key: ${{ runner.os }}-${{ matrix.package }}-${{ env.BIGBLUEBUTTON_RELEASE }}-commits-${{ env.CACHE_KEY_FILES }}-urls-${{ env.CACHE_KEY_URLS }}
|
|
- if: ${{ steps.cache-action.outputs.cache-hit != 'true' }}
|
|
name: Generate artifacts
|
|
shell: bash
|
|
run: |
|
|
./build/get_external_dependencies.sh
|
|
echo "${{ matrix.build-list || matrix.package }}" | xargs -n 1 ./build/setup.sh
|
|
tar cvf artifacts.tar artifacts/
|
|
- name: Archive packages
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: artifacts_${{ matrix.package }}.tar
|
|
path: artifacts.tar
|
|
install-and-run-tests:
|
|
needs: build-package
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
shard: [1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8, 8/8]
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Merge branches
|
|
uses: ./.github/actions/merge-branches
|
|
- run: ./build/get_external_dependencies.sh
|
|
- name: Download artifacts_bbb-apps-akka
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-apps-akka.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-config
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-config.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-export-annotations
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-export-annotations.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-learning-dashboard
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-learning-dashboard.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-playback-record
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-playback-record.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-graphql-server
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-graphql-server.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-etherpad
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-etherpad.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-freeswitch
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-freeswitch.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-webrtc
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-webrtc.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-web
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-web.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-fsesl-akka
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-fsesl-akka.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts_bbb-html5
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_bbb-html5.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: artifacts_others.tar
|
|
- run: tar xf artifacts.tar
|
|
- name: Extracting files .tar
|
|
run: |
|
|
set -e
|
|
pwd
|
|
echo "----ls artifacts/----"
|
|
ls artifacts/
|
|
echo "Done"
|
|
- name: Generate CA
|
|
run: |
|
|
sudo -i <<EOF
|
|
set -e
|
|
mkdir /root/bbb-ci-ssl/
|
|
cd /root/bbb-ci-ssl/
|
|
openssl rand -base64 48 > /root/bbb-ci-ssl/bbb-dev-ca.pass ;
|
|
chmod 600 /root/bbb-ci-ssl/bbb-dev-ca.pass ;
|
|
openssl genrsa -des3 -out bbb-dev-ca.key -passout file:/root/bbb-ci-ssl/bbb-dev-ca.pass 2048 ;
|
|
openssl req -x509 -new -nodes -key bbb-dev-ca.key -sha256 -days 1460 -passin file:/root/bbb-ci-ssl/bbb-dev-ca.pass -out bbb-dev-ca.crt -subj "/C=CA/ST=BBB/L=BBB/O=BBB/OU=BBB/CN=BBB-DEV" ;
|
|
EOF
|
|
- name: Trust CA
|
|
run: |
|
|
sudo -i <<EOF
|
|
set -e
|
|
sudo mkdir /usr/local/share/ca-certificates/bbb-dev/
|
|
sudo cp /root/bbb-ci-ssl/bbb-dev-ca.crt /usr/local/share/ca-certificates/bbb-dev/
|
|
sudo chmod 644 /usr/local/share/ca-certificates/bbb-dev/bbb-dev-ca.crt
|
|
sudo update-ca-certificates
|
|
EOF
|
|
- name: Generate certificate
|
|
run: |
|
|
sudo sh -c '
|
|
cd /root/bbb-ci-ssl/
|
|
echo "$(hostname -I | cut -d" " -f1) bbb-ci.test" >> /etc/hosts
|
|
openssl genrsa -out bbb-ci.test.key 2048
|
|
rm -f bbb-ci.test.csr bbb-ci.test.crt bbb-ci.test.key
|
|
cat > bbb-ci.test.ext << EOF
|
|
authorityKeyIdentifier=keyid,issuer
|
|
basicConstraints=CA:FALSE
|
|
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
|
|
subjectAltName = @alt_names
|
|
[alt_names]
|
|
DNS.1 = bbb-ci.test
|
|
EOF
|
|
openssl req -nodes -newkey rsa:2048 -keyout bbb-ci.test.key -out bbb-ci.test.csr -subj "/C=CA/ST=BBB/L=BBB/O=BBB/OU=BBB/CN=bbb-ci.test" -addext "subjectAltName = DNS:bbb-ci.test"
|
|
openssl x509 -req -in bbb-ci.test.csr -CA bbb-dev-ca.crt -CAkey bbb-dev-ca.key -CAcreateserial -out bbb-ci.test.crt -days 825 -sha256 -passin file:/root/bbb-ci-ssl/bbb-dev-ca.pass -extfile bbb-ci.test.ext
|
|
cd
|
|
|
|
mkdir -p /local/certs/
|
|
cp /root/bbb-ci-ssl/bbb-dev-ca.crt /local/certs/
|
|
cat /root/bbb-ci-ssl/bbb-ci.test.crt > /local/certs/fullchain.pem
|
|
cat /root/bbb-ci-ssl/bbb-dev-ca.crt >> /local/certs/fullchain.pem
|
|
cat /root/bbb-ci-ssl/bbb-ci.test.key > /local/certs/privkey.pem
|
|
'
|
|
- name: Setup local repository
|
|
shell: bash
|
|
run: |
|
|
sudo -i <<EOF
|
|
set -e
|
|
apt install -yq dpkg-dev
|
|
cd /root && wget -nv http://ci.bbb.imdt.dev/cache-3rd-part-packages.tar
|
|
cp -r /home/runner/work/bigbluebutton/bigbluebutton/artifacts/ /artifacts/
|
|
cd /artifacts && tar xf /root/cache-3rd-part-packages.tar
|
|
cd /artifacts && dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
|
|
echo "deb [trusted=yes] file:/artifacts/ ./" >> /etc/apt/sources.list
|
|
EOF
|
|
- name: Prepare for install
|
|
run: |
|
|
sudo sh -c '
|
|
apt --purge -y remove apache2-bin
|
|
'
|
|
- name: Install BBB
|
|
timeout-minutes: 25
|
|
run: |
|
|
sudo -i <<EOF
|
|
set -e
|
|
cd /root/ && wget -nv https://raw.githubusercontent.com/bigbluebutton/bbb-install/v3.0.x-release/bbb-install.sh -O bbb-install.sh
|
|
cat bbb-install.sh | sed "s|> /etc/apt/sources.list.d/bigbluebutton.list||g" | bash -s -- -v jammy-30-dev -s bbb-ci.test -j -d /certs/
|
|
bbb-conf --salt bbbci
|
|
echo "NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/bbb-dev/bbb-dev-ca.crt" >> /usr/share/meteor/bundle/bbb-html5-with-roles.conf
|
|
sed -i "s/\"minify\": true,/\"minify\": false,/" /usr/share/etherpad-lite/settings.json
|
|
bbb-conf --restart
|
|
EOF
|
|
- name: List systemctl services
|
|
timeout-minutes: 1
|
|
run: |
|
|
sudo -i <<EOF
|
|
systemctl --type=service --state=running,exited,failed --all --no-pager --no-legend
|
|
EOF
|
|
- name: Install test dependencies
|
|
working-directory: ./bigbluebutton-tests/playwright
|
|
run: |
|
|
sh -c '
|
|
npm ci
|
|
npx playwright install-deps
|
|
npx playwright install
|
|
'
|
|
- name: Run tests
|
|
working-directory: ./bigbluebutton-tests/playwright
|
|
env:
|
|
NODE_EXTRA_CA_CERTS: /usr/local/share/ca-certificates/bbb-dev/bbb-dev-ca.crt
|
|
ACTIONS_RUNNER_DEBUG: true
|
|
BBB_URL: https://bbb-ci.test/bigbluebutton/api
|
|
BBB_SECRET: bbbci
|
|
run: npm run test-chromium-ci -- --shard ${{ matrix.shard }}
|
|
- name: Run Firefox tests
|
|
working-directory: ./bigbluebutton-tests/playwright
|
|
if: |
|
|
contains(github.event.pull_request.labels.*.name, 'test Firefox') ||
|
|
contains(github.event.pull_request.labels.*.name, 'Test Firefox')
|
|
env:
|
|
NODE_EXTRA_CA_CERTS: /usr/local/share/ca-certificates/bbb-dev/bbb-dev-ca.crt
|
|
ACTIONS_RUNNER_DEBUG: true
|
|
BBB_URL: https://bbb-ci.test/bigbluebutton/api
|
|
BBB_SECRET: bbbci
|
|
# patch playwright's firefox so that it uses the system's root certificate authority
|
|
run: |
|
|
sh -c '
|
|
find $HOME/.cache/ms-playwright -name libnssckbi.so -exec rm {} \; -exec ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so {} \;
|
|
npm run test-firefox-ci -- --shard ${{ matrix.shard }}
|
|
'
|
|
- if: always() && github.event_name == 'pull_request'
|
|
name: Upload blob report to GitHub Actions Artifacts
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: all-blob-reports
|
|
path: bigbluebutton-tests/playwright/blob-report
|
|
- if: failure()
|
|
name: Prepare artifacts (configs and logs)
|
|
run: |
|
|
sudo -i <<EOF
|
|
mkdir configs
|
|
cp /etc/haproxy/haproxy.cfg configs/haproxy.cfg
|
|
touch /etc/bigbluebutton/turn-stun-servers.xml
|
|
cp /etc/bigbluebutton/turn-stun-servers.xml configs/turn-stun-servers.xml
|
|
cp /opt/freeswitch/etc/freeswitch/vars.xml configs/freeswitch_vars.xml
|
|
cp /opt/freeswitch/etc/freeswitch/sip_profiles/external.xml configs/freeswitch_sip_profiles_external.xml
|
|
cp /etc/bigbluebutton/bbb-apps-akka.conf configs/bbb-apps-akka.conf
|
|
cp /etc/bigbluebutton/bbb-fsesl-akka.conf configs/bbb-fsesl-akka.conf
|
|
cp /etc/bigbluebutton/bbb-html5.yml configs/bbb-html5.yml
|
|
cp /etc/bigbluebutton/bbb-web.properties configs/bbb-web.properties
|
|
cp /etc/bigbluebutton/bigbluebutton-release configs/bigbluebutton-release
|
|
cp /etc/bigbluebutton/turn-stun-servers.xml configs/turn-stun-servers.xml
|
|
cp /usr/local/bigbluebutton/bbb-webrtc-sfu/config/default.yml configs/bbb-webrtc-sfu-default.yml
|
|
cp /etc/bbb-webrtc-recorder/bbb-webrtc-recorder.yml configs/bbb-webrtc-recorder-default.yml
|
|
cp /usr/share/bigbluebutton/nginx/sip.nginx configs/nginx_sip.nginx
|
|
cp /etc/hosts /configs/hosts
|
|
mv configs /home/runner/work/bigbluebutton/bigbluebutton/configs
|
|
chmod a+r -R /home/runner/work/bigbluebutton/bigbluebutton/configs
|
|
bbb-conf --zip
|
|
ls -t /root/*.tar.gz | head -1 | xargs -I '{}' cp '{}' /home/runner/work/bigbluebutton/bigbluebutton/bbb-logs.tar.gz
|
|
echo "MATRIX_SHARD=$(echo ${{ matrix.shard }} | tr '/' '_')" >> $GITHUB_ENV
|
|
EOF
|
|
- if: failure()
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: bbb-configs-${{ env.MATRIX_SHARD }}
|
|
path: configs
|
|
- if: failure()
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: bbb-logs-${{ env.MATRIX_SHARD }}
|
|
path: ./bbb-logs.tar.gz
|
|
upload-report:
|
|
if: always()
|
|
needs: install-and-run-tests
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 18
|
|
- name: Install dependencies
|
|
working-directory: ./bigbluebutton-tests/playwright
|
|
run: npm ci
|
|
- name: Download all blob reports from GitHub Actions Artifacts
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: all-blob-reports
|
|
path: bigbluebutton-tests/playwright/all-blob-reports
|
|
- name: Merge into HTML Report
|
|
working-directory: ./bigbluebutton-tests/playwright
|
|
run: npx playwright merge-reports --reporter html ./all-blob-reports
|
|
- name: Upload HTML tests report
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: tests-report
|
|
path: |
|
|
bigbluebutton-tests/playwright/playwright-report
|
|
bigbluebutton-tests/playwright/test-results
|
|
- name: Write PR data for auto-comment
|
|
if: github.event_name == 'pull_request'
|
|
working-directory: ./
|
|
run: |
|
|
mkdir -p ./pr-comment-data
|
|
echo ${{ github.event.number }} > ./pr-comment-data/pr_number
|
|
echo ${{ github.run_id }} > ./pr-comment-data/workflow_id
|
|
- name: Upload PR data for auto-comment
|
|
if: github.event_name == 'pull_request'
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: pr-comment-data
|
|
path: pr-comment-data
|