name: "Automated tests" on: push: branches: - "develop" - "v2.[5-9].x-release" - "v[3-9].*.x-release" paths-ignore: - "docs/**" - "**/*.md" - "bigbluebutton-html5/public/locales/*.json" 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 - 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 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@v4 - 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@v4 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@v4 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, 2, 3, 4, 5, 6, 7, 8] env: shard: ${{ matrix.shard }}/8 MATRIX_SHARD_UNDERSCORED: ${{ matrix.shard }}_8 steps: - uses: actions/checkout@v4 - name: Merge branches uses: ./.github/actions/merge-branches - run: ./build/get_external_dependencies.sh - name: Download artifacts_bbb-apps-akka uses: actions/download-artifact@v4 with: name: artifacts_bbb-apps-akka.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-config uses: actions/download-artifact@v4 with: name: artifacts_bbb-config.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-export-annotations uses: actions/download-artifact@v4 with: name: artifacts_bbb-export-annotations.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-learning-dashboard uses: actions/download-artifact@v4 with: name: artifacts_bbb-learning-dashboard.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-playback-record uses: actions/download-artifact@v4 with: name: artifacts_bbb-playback-record.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-graphql-server uses: actions/download-artifact@v4 with: name: artifacts_bbb-graphql-server.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-etherpad uses: actions/download-artifact@v4 with: name: artifacts_bbb-etherpad.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-freeswitch uses: actions/download-artifact@v4 with: name: artifacts_bbb-freeswitch.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-webrtc uses: actions/download-artifact@v4 with: name: artifacts_bbb-webrtc.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-web uses: actions/download-artifact@v4 with: name: artifacts_bbb-web.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-fsesl-akka uses: actions/download-artifact@v4 with: name: artifacts_bbb-fsesl-akka.tar - run: tar xf artifacts.tar - name: Download artifacts_bbb-html5 uses: actions/download-artifact@v4 with: name: artifacts_bbb-html5.tar - run: tar xf artifacts.tar - name: Download artifacts uses: actions/download-artifact@v4 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 < /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 <> /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 < 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 env: NODE_EXTRA_CA_CERTS: /usr/local/share/ca-certificates/bbb-dev/bbb-dev-ca.crt ACTIONS_RUNNER_DEBUG: true run: | sudo -i <<'EOF' set -e cd /root/ wget -nv https://raw.githubusercontent.com/bigbluebutton/bbb-install/v3.0.x-release--no-mongo/bbb-install.sh -O bbb-install.sh sed -i "s|> /etc/apt/sources.list.d/bigbluebutton.list||g" bbb-install.sh chmod +x bbb-install.sh COMMAND="./bbb-install.sh -v jammy-30-dev -s bbb-ci.test -j -d /certs/" TIMEOUT=1500 # 25 minutes MAX_RETRIES=3 RETRY_INTERVAL=60 RETRY_COUNT=0 SUCCESS=0 while [[ $RETRY_COUNT -lt $MAX_RETRIES ]]; do echo "Attempt $((RETRY_COUNT + 1)) of $MAX_RETRIES to install BBB..." # Run the command with timeout and handle its exit code # Capture both stdout and stderr COMMAND_EXIT_CODE=0 timeout $TIMEOUT $COMMAND || COMMAND_EXIT_CODE=$? if [[ $COMMAND_EXIT_CODE -eq 0 ]]; then SUCCESS=1 break elif [[ $COMMAND_EXIT_CODE -eq 124 ]]; then echo "Installation timed out after ${TIMEOUT} seconds. Retrying..." else echo "Installation failed with exit code $COMMAND_EXIT_CODE" echo "Retrying installation within $RETRY_INTERVAL seconds..." sleep $RETRY_INTERVAL # Remove lock in case the timeout was during an apt install rm -f /var/lib/dpkg/lock fi RETRY_COUNT=$((RETRY_COUNT + 1)) done if [[ $SUCCESS -eq 0 ]]; then echo "All attempts to install BBB failed." exit 1 fi bbb-conf --salt bbbci sed -i "s/\"minify\": true,/\"minify\": false,/" /usr/share/etherpad-lite/settings.json sudo yq e -i '.log_level = "TRACE"' /usr/share/bbb-graphql-middleware/config.yml bbb-conf --restart EOF - name: List systemctl services timeout-minutes: 1 run: | sudo -i < ./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@v4 with: name: pr-comment-data path: pr-comment-data