From 77f6255b248942812d2a1210139cecdd9d144a71 Mon Sep 17 00:00:00 2001 From: juancarmore Date: Thu, 25 Sep 2025 11:11:12 +0200 Subject: [PATCH] ci: add prejob to build OpenVidu Angular components once and remove Azure from test matrix (except recording tests) --- .../workflows/backend-integration-test.yaml | 1108 ++++++++--------- 1 file changed, 503 insertions(+), 605 deletions(-) diff --git a/.github/workflows/backend-integration-test.yaml b/.github/workflows/backend-integration-test.yaml index 42afecf..383039e 100644 --- a/.github/workflows/backend-integration-test.yaml +++ b/.github/workflows/backend-integration-test.yaml @@ -1,620 +1,518 @@ name: Backend Integration Tests on: - push: - paths: - - 'backend/src/**' - - 'backend/package.json' - - 'backend/package-lock.json' - - 'backend/tests/**' - - '.github/workflows/backend-integration-test.yaml' - pull_request: - paths: - - 'backend/src/**' - workflow_dispatch: - inputs: - use-aws: - description: 'Run recording tests in AWS EC2 runner' - default: 'true' - aws-instance-type: - description: 'AWS EC2 instance type' - default: 'c5.2xlarge' + push: + paths: + - 'backend/src/**' + - 'backend/package.json' + - 'backend/package-lock.json' + - 'backend/tests/**' + - '.github/workflows/backend-integration-test.yaml' + pull_request: + paths: + - 'backend/src/**' + workflow_dispatch: + inputs: + use-aws: + description: 'Run recording tests in AWS EC2 runner' + default: 'true' + aws-instance-type: + description: 'AWS EC2 instance type' + default: 'c5.2xlarge' jobs: - start-aws-runner: - name: Prepare AWS runner - runs-on: ov-actions-runner - if: ${{ inputs.use-aws != 'false' }} - outputs: - label: ${{ steps.start-ec2-runner.outputs.label }} - ec2-instance-id: ${{ steps.start-ec2-runner.outputs.ec2-instance-id }} - steps: - - name: Start AWS EC2 Runner - id: start-ec2-runner - uses: OpenVidu/actions/start-aws-runner@main - with: - aws-instance-type: ${{ inputs.aws-instance-type || 'c5.2xlarge' }} - aws-access-key-id: ${{ vars.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: ${{ vars.AWS_REGION }} - github-token: ${{ secrets.OPENVIDU_GITHUB_TOKEN }} - ec2-image-id: ${{ vars.AWS_GITHUB_ACTIONS_AMI }} - subnet-id: ${{ vars.AWS_SUBNET_ID }} - security-group-id: ${{ vars.AWS_SECURITY_GROUP_ID }} - workflow-name: ${{ github.workflow }} - repository-name: ${{ github.repository }} - # test-rooms: - # name: Rooms API Tests - # runs-on: ov-actions-runner - # strategy: - # fail-fast: false - # matrix: - # storage-provider: [s3, abs] - # steps: - # - name: Setup Node.js - # uses: actions/setup-node@v4 - # with: - # node-version: '22.13' - # - name: Install LK CLI - # run: curl -sSL https://get.livekit.io/cli | bash - # - name: Setup OpenVidu Local Deployment - # uses: OpenVidu/actions/start-openvidu-local-deployment@main - # with: - # ref-openvidu-local-deployment: development - # pre_startup_commands: | - # cat <<'BASH' > pre_startup_commands.sh - # #!/bin/bash - # if [[ "${{ matrix['storage-provider'] }}" == "abs" ]]; then - # echo "Using Azure storage provider" - # yq e -i ' - # del(.storage.s3) | - # .storage.azure = { - # "account_name": "${{ vars.MEET_AZURE_ACCOUNT_NAME }}", - # "account_key": "${{ secrets.MEET_AZURE_ACCOUNT_KEY }}", - # "container_name": "openvidu-appdata-rooms" - # } - # ' egress.yaml - # fi + build-components: + name: Build OpenVidu Components Angular + runs-on: ov-actions-runner + steps: + - name: Build Components + id: build + uses: OpenVidu/actions/build-openvidu-components-angular@main + outputs: + artifact_name: ${{ steps.build.outputs.artifact_name }} - # echo "Commenting out openvidu-meet container in docker-compose.yaml" - # if [ -f docker-compose.yaml ]; then - # yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml - # fi + test-rooms: + name: Rooms API Tests + needs: build-components + runs-on: ov-actions-runner + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.13' + - name: Install LK CLI + run: curl -sSL https://get.livekit.io/cli | bash + - name: Setup OpenVidu Local Deployment + uses: OpenVidu/actions/start-openvidu-local-deployment@main + with: + ref-openvidu-local-deployment: development + pre_startup_commands: | + cat <<'BASH' > pre_startup_commands.sh + #!/bin/bash + echo "Commenting out openvidu-meet container in docker-compose.yaml" + if [ -f docker-compose.yaml ]; then + yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml + fi + BASH + chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh + - name: Setup OpenVidu Meet + uses: OpenVidu/actions/start-openvidu-meet@main + with: + build_components_angular: 'true' + components_artifact_name: ${{ needs.build-components.outputs.artifact_name }} + - name: Run tests + run: | + cd backend + npm run test:integration-rooms + env: + JEST_JUNIT_OUTPUT_DIR: './reports/' + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: always() + with: + report_paths: '**/reports/junit.xml' + fail_on_failure: true + require_tests: true + - name: Clean up + if: always() + uses: OpenVidu/actions/cleanup@main - # BASH - # chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh - # - name: Setup OpenVidu Meet - # uses: OpenVidu/actions/start-openvidu-meet@main - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-rooms' - # - name: Run tests - # run: | - # cd backend - # npm run test:integration-rooms - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-rooms' - # JEST_JUNIT_OUTPUT_DIR: './reports/' - # - name: Publish Test Report - # uses: mikepenz/action-junit-report@v4 - # if: always() - # with: - # report_paths: '**/reports/junit.xml' - # fail_on_failure: true - # require_tests: true - # - name: Clean up - # if: always() - # uses: OpenVidu/actions/cleanup@main + test-webhooks: + name: Webhook Tests + needs: build-components + runs-on: ov-actions-runner + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.13' + - name: Install LK CLI + run: curl -sSL https://get.livekit.io/cli | bash + - name: Setup OpenVidu Local Deployment + uses: OpenVidu/actions/start-openvidu-local-deployment@main + with: + ref-openvidu-local-deployment: development + pre_startup_commands: | + cat <<'BASH' > pre_startup_commands.sh + #!/bin/bash + echo "Commenting out openvidu-meet container in docker-compose.yaml" + if [ -f docker-compose.yaml ]; then + yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml + fi + BASH + chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh + - name: Setup OpenVidu Meet + uses: OpenVidu/actions/start-openvidu-meet@main + with: + build_components_angular: 'true' + components_artifact_name: ${{ needs.build-components.outputs.artifact_name }} + - name: Run tests + run: | + cd backend + npm run test:integration-webhooks + env: + JEST_JUNIT_OUTPUT_DIR: './reports/' + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: always() + with: + report_paths: '**/reports/junit.xml' + fail_on_failure: true + require_tests: true + - name: Clean up + if: always() + uses: OpenVidu/actions/cleanup@main - test-recordings: - name: Recordings API Tests - needs: start-aws-runner - if: ${{ always() && (needs.start-aws-runner.result == 'success' || needs.start-aws-runner.result == 'skipped') }} - runs-on: ${{ needs.start-aws-runner.outputs.label || 'ov-actions-runner' }} - strategy: - fail-fast: false - matrix: - #storage-provider: [s3, abs, gcs] - storage-provider: [gcs] - timeout-minutes: 30 - steps: - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '22.13' - - name: Install LK CLI - run: curl -sSL https://get.livekit.io/cli | bash - - name: Save GCP credentials - if: matrix.storage-provider == 'gcs' - run: | - echo '${{ secrets.GCP_CREDENTIALS_JSON }}' > /credentials.json - - name: Setup OpenVidu Local Deployment - uses: OpenVidu/actions/start-openvidu-local-deployment@main - with: - ref-openvidu-local-deployment: development - pre_startup_commands: | - cat <<'BASH' > pre_startup_commands.sh - #!/bin/bash - if [[ "${{ matrix['storage-provider'] }}" == "abs" ]]; then - echo "Using Azure storage provider" - yq e -i ' - del(.storage.s3) | - .storage.azure = { - "account_name": "${{ vars.MEET_AZURE_ACCOUNT_NAME }}", - "account_key": "${{ secrets.MEET_AZURE_ACCOUNT_KEY }}", - "container_name": "openvidu-appdata-recordings" - } - ' egress.yaml - elif [[ "${{ matrix['storage-provider'] }}" == "gcs" ]]; then - echo "Using GCS storage provider" - yq eval --inplace '.storage.gcp.credentials_json = (load("/credentials.json") | tostring) | .storage.gcp.credentials_json style="single"' egress.yaml - - yq e -i ' - del(.storage.s3) | - .storage.gcp.bucket = "openvidu-appdata" - ' egress.yaml - fi + test-security: + name: Security API Tests + needs: build-components + runs-on: ov-actions-runner + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.13' + - name: Install LK CLI + run: curl -sSL https://get.livekit.io/cli | bash + - name: Setup OpenVidu Local Deployment + uses: OpenVidu/actions/start-openvidu-local-deployment@main + with: + ref-openvidu-local-deployment: development + pre_startup_commands: | + cat <<'BASH' > pre_startup_commands.sh + #!/bin/bash + echo "Commenting out openvidu-meet container in docker-compose.yaml" + if [ -f docker-compose.yaml ]; then + yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml + fi + BASH + chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh + - name: Setup OpenVidu Meet + uses: OpenVidu/actions/start-openvidu-meet@main + with: + build_components_angular: 'true' + components_artifact_name: ${{ needs.build-components.outputs.artifact_name }} + env: + MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-security' + - name: Run tests + run: | + cd backend + npm run test:integration-security + env: + JEST_JUNIT_OUTPUT_DIR: './reports/' + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: always() + with: + report_paths: '**/reports/junit.xml' + fail_on_failure: true + require_tests: true + - name: Clean up + if: always() + uses: OpenVidu/actions/cleanup@main - echo "Commenting out openvidu-meet container in docker-compose.yaml" - if [ -f docker-compose.yaml ]; then - yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml - fi - BASH - chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh - - name: Setup OpenVidu Meet - uses: OpenVidu/actions/start-openvidu-meet@main - env: - MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-recordings' - GOOGLE_APPLICATION_CREDENTIALS: /credentials.json - MEET_S3_BUCKET: 'openvidu-appdata' - - name: Run tests - run: | - cd backend - npm run test:integration-recordings - env: - MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-recordings' - GOOGLE_APPLICATION_CREDENTIALS: /credentials.json - MEET_S3_BUCKET: 'openvidu-appdata' - JEST_JUNIT_OUTPUT_DIR: './reports/' - - name: Publish Test Report - uses: mikepenz/action-junit-report@v4 - if: always() - with: - report_paths: '**/reports/junit.xml' - fail_on_failure: true - require_tests: true - - name: Upload OpenVidu Meet logs on failure - if: failure() - uses: actions/upload-artifact@v4 - with: - name: recordings-test-openvidu-meet-logs - path: backend/meet_backend.log - retention-days: 2 - - name: Clean up - if: always() - uses: OpenVidu/actions/cleanup@main + test-global-config: + name: Global Config API Tests + needs: build-components + runs-on: ov-actions-runner + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.13' + - name: Install LK CLI + run: curl -sSL https://get.livekit.io/cli | bash + - name: Setup OpenVidu Local Deployment + uses: OpenVidu/actions/start-openvidu-local-deployment@main + with: + ref-openvidu-local-deployment: development + pre_startup_commands: | + cat <<'BASH' > pre_startup_commands.sh + #!/bin/bash + echo "Commenting out openvidu-meet container in docker-compose.yaml" + if [ -f docker-compose.yaml ]; then + yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml + fi + BASH + chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh + - name: Setup OpenVidu Meet + uses: OpenVidu/actions/start-openvidu-meet@main + with: + build_components_angular: 'true' + components_artifact_name: ${{ needs.build-components.outputs.artifact_name }} + - name: Run tests + run: | + cd backend + npm run test:integration-global-config + env: + JEST_JUNIT_OUTPUT_DIR: './reports/' + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: always() + with: + report_paths: '**/reports/junit.xml' + fail_on_failure: true + require_tests: true + - name: Clean up + if: always() + uses: OpenVidu/actions/cleanup@main - # test-webhooks: - # name: Webhook Tests - # runs-on: ov-actions-runner - # strategy: - # fail-fast: false - # matrix: - # storage-provider: [s3, abs] - # steps: - # - name: Setup Node.js - # uses: actions/setup-node@v4 - # with: - # node-version: '22.13' - # - name: Install LK CLI - # run: curl -sSL https://get.livekit.io/cli | bash - # - name: Setup OpenVidu Local Deployment - # uses: OpenVidu/actions/start-openvidu-local-deployment@main - # with: - # ref-openvidu-local-deployment: development - # pre_startup_commands: | - # cat <<'BASH' > pre_startup_commands.sh - # #!/bin/bash - # if [[ "${{ matrix['storage-provider'] }}" == "abs" ]]; then - # echo "Using Azure storage provider" - # yq e -i ' - # del(.storage.s3) | - # .storage.azure = { - # "account_name": "${{ vars.MEET_AZURE_ACCOUNT_NAME }}", - # "account_key": "${{ secrets.MEET_AZURE_ACCOUNT_KEY }}", - # "container_name": "openvidu-appdata-webhooks" - # } - # ' egress.yaml - # fi - # echo "Commenting out openvidu-meet container in docker-compose.yaml" - # if [ -f docker-compose.yaml ]; then - # yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml - # fi - # BASH - # chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh - # - name: Setup OpenVidu Meet - # uses: OpenVidu/actions/start-openvidu-meet@main - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-webhooks' - # - name: Run tests - # run: | - # cd backend - # npm run test:integration-webhooks - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-webhooks' - # JEST_JUNIT_OUTPUT_DIR: './reports/' - # - name: Publish Test Report - # uses: mikepenz/action-junit-report@v4 - # if: always() - # with: - # report_paths: '**/reports/junit.xml' - # fail_on_failure: true - # require_tests: true - # - name: Clean up - # if: always() - # uses: OpenVidu/actions/cleanup@main + test-participants: + name: Participants API Tests + needs: build-components + runs-on: ov-actions-runner + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.13' + - name: Install LK CLI + run: curl -sSL https://get.livekit.io/cli | bash + - name: Setup OpenVidu Local Deployment + uses: OpenVidu/actions/start-openvidu-local-deployment@main + with: + ref-openvidu-local-deployment: development + pre_startup_commands: | + cat <<'BASH' > pre_startup_commands.sh + #!/bin/bash + echo "Commenting out openvidu-meet container in docker-compose.yaml" + if [ -f docker-compose.yaml ]; then + yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml + fi + BASH + chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh + - name: Setup OpenVidu Meet + uses: OpenVidu/actions/start-openvidu-meet@main + with: + build_components_angular: 'true' + components_artifact_name: ${{ needs.build-components.outputs.artifact_name }} + - name: Run tests + run: | + cd backend + npm run test:integration-participants + env: + JEST_JUNIT_OUTPUT_DIR: './reports/' + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: always() + with: + report_paths: '**/reports/junit.xml' + fail_on_failure: true + require_tests: true + - name: Clean up + if: always() + uses: OpenVidu/actions/cleanup@main - # test-security: - # name: Security API Tests - # runs-on: ov-actions-runner - # strategy: - # fail-fast: false - # matrix: - # storage-provider: [s3, abs] - # steps: - # - name: Setup Node.js - # uses: actions/setup-node@v4 - # with: - # node-version: '22.13' - # - name: Install LK CLI - # run: curl -sSL https://get.livekit.io/cli | bash - # - name: Setup OpenVidu Local Deployment - # uses: OpenVidu/actions/start-openvidu-local-deployment@main - # with: - # ref-openvidu-local-deployment: development - # pre_startup_commands: | - # cat <<'BASH' > pre_startup_commands.sh - # #!/bin/bash - # if [[ "${{ matrix['storage-provider'] }}" == "abs" ]]; then - # echo "Using Azure storage provider" - # yq e -i ' - # del(.storage.s3) | - # .storage.azure = { - # "account_name": "${{ vars.MEET_AZURE_ACCOUNT_NAME }}", - # "account_key": "${{ secrets.MEET_AZURE_ACCOUNT_KEY }}", - # "container_name": "openvidu-appdata-security" - # } - # ' egress.yaml - # fi - # echo "Commenting out openvidu-meet container in docker-compose.yaml" - # if [ -f docker-compose.yaml ]; then - # yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml - # fi - # BASH - # chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh - # - name: Setup OpenVidu Meet - # uses: OpenVidu/actions/start-openvidu-meet@main - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-security' - # - name: Run tests - # run: | - # cd backend - # npm run test:integration-security - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-security' - # JEST_JUNIT_OUTPUT_DIR: './reports/' - # - name: Publish Test Report - # uses: mikepenz/action-junit-report@v4 - # if: always() - # with: - # report_paths: '**/reports/junit.xml' - # fail_on_failure: true - # require_tests: true - # - name: Clean up - # if: always() - # uses: OpenVidu/actions/cleanup@main + test-meetings: + name: Meetings API Tests + needs: build-components + runs-on: ov-actions-runner + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.13' + - name: Install LK CLI + run: curl -sSL https://get.livekit.io/cli | bash + - name: Setup OpenVidu Local Deployment + uses: OpenVidu/actions/start-openvidu-local-deployment@main + with: + ref-openvidu-local-deployment: development + pre_startup_commands: | + cat <<'BASH' > pre_startup_commands.sh + #!/bin/bash + echo "Commenting out openvidu-meet container in docker-compose.yaml" + if [ -f docker-compose.yaml ]; then + yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml + fi + BASH + chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh + - name: Setup OpenVidu Meet + uses: OpenVidu/actions/start-openvidu-meet@main + with: + build_components_angular: 'true' + components_artifact_name: ${{ needs.build-components.outputs.artifact_name }} + - name: Run tests + run: | + cd backend + npm run test:integration-meetings + env: + JEST_JUNIT_OUTPUT_DIR: './reports/' + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: always() + with: + report_paths: '**/reports/junit.xml' + fail_on_failure: true + require_tests: true + - name: Clean up + if: always() + uses: OpenVidu/actions/cleanup@main - # test-global-config: - # name: Global Config API Tests - # runs-on: ov-actions-runner - # strategy: - # fail-fast: false - # matrix: - # storage-provider: [s3, abs] - # steps: - # - name: Setup Node.js - # uses: actions/setup-node@v4 - # with: - # node-version: '22.13' - # - name: Install LK CLI - # run: curl -sSL https://get.livekit.io/cli | bash - # - name: Setup OpenVidu Local Deployment - # uses: OpenVidu/actions/start-openvidu-local-deployment@main - # with: - # ref-openvidu-local-deployment: development - # pre_startup_commands: | - # cat <<'BASH' > pre_startup_commands.sh - # #!/bin/bash - # if [[ "${{ matrix['storage-provider'] }}" == "abs" ]]; then - # echo "Using Azure storage provider" - # yq e -i ' - # del(.storage.s3) | - # .storage.azure = { - # "account_name": "${{ vars.MEET_AZURE_ACCOUNT_NAME }}", - # "account_key": "${{ secrets.MEET_AZURE_ACCOUNT_KEY }}", - # "container_name": "openvidu-appdata-global-preferences" - # } - # ' egress.yaml - # fi - # echo "Commenting out openvidu-meet container in docker-compose.yaml" - # if [ -f docker-compose.yaml ]; then - # yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml - # fi - # BASH - # chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh - # - name: Setup OpenVidu Meet - # uses: OpenVidu/actions/start-openvidu-meet@main - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-global-preferences' - # - name: Run tests - # run: | - # cd backend - # npm run test:integration-global-config - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-global-preferences' - # JEST_JUNIT_OUTPUT_DIR: './reports/' - # - name: Publish Test Report - # uses: mikepenz/action-junit-report@v4 - # if: always() - # with: - # report_paths: '**/reports/junit.xml' - # fail_on_failure: true - # require_tests: true - # - name: Clean up - # if: always() - # uses: OpenVidu/actions/cleanup@main + test-users: + name: Users API Tests + needs: build-components + runs-on: ov-actions-runner + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.13' + - name: Install LK CLI + run: curl -sSL https://get.livekit.io/cli | bash + - name: Setup OpenVidu Local Deployment + uses: OpenVidu/actions/start-openvidu-local-deployment@main + with: + ref-openvidu-local-deployment: development + pre_startup_commands: | + cat <<'BASH' > pre_startup_commands.sh + #!/bin/bash + echo "Commenting out openvidu-meet container in docker-compose.yaml" + if [ -f docker-compose.yaml ]; then + yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml + fi + BASH + chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh + - name: Setup OpenVidu Meet + uses: OpenVidu/actions/start-openvidu-meet@main + with: + build_components_angular: 'true' + components_artifact_name: ${{ needs.build-components.outputs.artifact_name }} + - name: Run tests + run: | + cd backend + npm run test:integration-users + env: + JEST_JUNIT_OUTPUT_DIR: './reports/' + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: always() + with: + report_paths: '**/reports/junit.xml' + fail_on_failure: true + require_tests: true + - name: Clean up + if: always() + uses: OpenVidu/actions/cleanup@main - # test-participants: - # name: Participants API Tests - # runs-on: ov-actions-runner - # strategy: - # fail-fast: false - # matrix: - # storage-provider: [s3, abs] - # steps: - # - name: Setup Node.js - # uses: actions/setup-node@v4 - # with: - # node-version: '22.13' - # - name: Install LK CLI - # run: curl -sSL https://get.livekit.io/cli | bash - # - name: Setup OpenVidu Local Deployment - # uses: OpenVidu/actions/start-openvidu-local-deployment@main - # with: - # ref-openvidu-local-deployment: development - # pre_startup_commands: | - # cat <<'BASH' > pre_startup_commands.sh - # #!/bin/bash - # if [[ "${{ matrix['storage-provider'] }}" == "abs" ]]; then - # echo "Using Azure storage provider" - # yq e -i ' - # del(.storage.s3) | - # .storage.azure = { - # "account_name": "${{ vars.MEET_AZURE_ACCOUNT_NAME }}", - # "account_key": "${{ secrets.MEET_AZURE_ACCOUNT_KEY }}", - # "container_name": "openvidu-appdata-participants" - # } - # ' egress.yaml - # fi - # echo "Commenting out openvidu-meet container in docker-compose.yaml" - # if [ -f docker-compose.yaml ]; then - # yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml - # fi - # BASH - # chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh - # - name: Setup OpenVidu Meet - # uses: OpenVidu/actions/start-openvidu-meet@main - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-participants' - # - name: Run tests - # run: | - # cd backend - # npm run test:integration-participants - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-participants' - # JEST_JUNIT_OUTPUT_DIR: './reports/' - # - name: Publish Test Report - # uses: mikepenz/action-junit-report@v4 - # if: always() - # with: - # report_paths: '**/reports/junit.xml' - # fail_on_failure: true - # require_tests: true - # - name: Clean up - # if: always() - # uses: OpenVidu/actions/cleanup@main + remove-components-artifact: + name: Remove OpenVidu Components Angular Artifact + needs: + - build-components + - test-rooms + - test-webhooks + - test-security + - test-global-config + - test-participants + - test-meetings + - test-users + runs-on: ov-actions-runner + if: ${{ always() }} + steps: + - name: Remove Artifact + uses: geekyeggo/delete-artifact@v5 + with: + name: ${{ needs.build-components.outputs.artifact_name }} - # test-meetings: - # name: Meetings API Tests - # runs-on: ov-actions-runner - # strategy: - # fail-fast: false - # matrix: - # storage-provider: [s3, abs] - # steps: - # - name: Setup Node.js - # uses: actions/setup-node@v4 - # with: - # node-version: '22.13' - # - name: Install LK CLI - # run: curl -sSL https://get.livekit.io/cli | bash - # - name: Setup OpenVidu Local Deployment - # uses: OpenVidu/actions/start-openvidu-local-deployment@main - # with: - # ref-openvidu-local-deployment: development - # pre_startup_commands: | - # cat <<'BASH' > pre_startup_commands.sh - # #!/bin/bash - # if [[ "${{ matrix['storage-provider'] }}" == "abs" ]]; then - # echo "Using Azure storage provider" - # yq e -i ' - # del(.storage.s3) | - # .storage.azure = { - # "account_name": "${{ vars.MEET_AZURE_ACCOUNT_NAME }}", - # "account_key": "${{ secrets.MEET_AZURE_ACCOUNT_KEY }}", - # "container_name": "openvidu-appdata-meetings" - # } - # ' egress.yaml - # fi - # echo "Commenting out openvidu-meet container in docker-compose.yaml" - # if [ -f docker-compose.yaml ]; then - # yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml - # fi - # BASH - # chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh - # - name: Setup OpenVidu Meet - # uses: OpenVidu/actions/start-openvidu-meet@main - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-meetings' - # - name: Run tests - # run: | - # cd backend - # npm run test:integration-meetings - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-meetings' - # JEST_JUNIT_OUTPUT_DIR: './reports/' - # - name: Publish Test Report - # uses: mikepenz/action-junit-report@v4 - # if: always() - # with: - # report_paths: '**/reports/junit.xml' - # fail_on_failure: true - # require_tests: true - # - name: Clean up - # if: always() - # uses: OpenVidu/actions/cleanup@main + start-aws-runner: + name: Prepare AWS runner + runs-on: ov-actions-runner + if: ${{ inputs.use-aws == 'true' }} + outputs: + label: ${{ steps.start-ec2-runner.outputs.label }} + ec2-instance-id: ${{ steps.start-ec2-runner.outputs.ec2-instance-id }} + steps: + - name: Start AWS EC2 Runner + id: start-ec2-runner + uses: OpenVidu/actions/start-aws-runner@main + with: + aws-instance-type: ${{ inputs.aws-instance-type || 'c5.2xlarge' }} + aws-access-key-id: ${{ vars.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ vars.AWS_REGION }} + github-token: ${{ secrets.OPENVIDU_GITHUB_TOKEN }} + ec2-image-id: ${{ vars.AWS_GITHUB_ACTIONS_AMI }} + subnet-id: ${{ vars.AWS_SUBNET_ID }} + security-group-id: ${{ vars.AWS_SECURITY_GROUP_ID }} + workflow-name: ${{ github.workflow }} + repository-name: ${{ github.repository }} - # test-users: - # name: Users API Tests - # runs-on: ov-actions-runner - # strategy: - # fail-fast: false - # matrix: - # storage-provider: [s3, abs] - # steps: - # - name: Setup Node.js - # uses: actions/setup-node@v4 - # with: - # node-version: '22.13' - # - name: Install LK CLI - # run: curl -sSL https://get.livekit.io/cli | bash - # - name: Setup OpenVidu Local Deployment - # uses: OpenVidu/actions/start-openvidu-local-deployment@main - # with: - # ref-openvidu-local-deployment: development - # pre_startup_commands: | - # cat <<'BASH' > pre_startup_commands.sh - # #!/bin/bash - # if [[ "${{ matrix['storage-provider'] }}" == "abs" ]]; then - # echo "Using Azure storage provider" - # yq e -i ' - # del(.storage.s3) | - # .storage.azure = { - # "account_name": "${{ vars.MEET_AZURE_ACCOUNT_NAME }}", - # "account_key": "${{ secrets.MEET_AZURE_ACCOUNT_KEY }}", - # "container_name": "openvidu-appdata-users" - # } - # ' egress.yaml - # fi - # echo "Commenting out openvidu-meet container in docker-compose.yaml" - # if [ -f docker-compose.yaml ]; then - # yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml - # fi - # BASH - # chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh - # - name: Setup OpenVidu Meet - # uses: OpenVidu/actions/start-openvidu-meet@main - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-users' - # - name: Run tests - # run: | - # cd backend - # npm run test:integration-users - # env: - # MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} - # MEET_AZURE_ACCOUNT_NAME: ${{ vars.MEET_AZURE_ACCOUNT_NAME }} - # MEET_AZURE_ACCOUNT_KEY: ${{ secrets.MEET_AZURE_ACCOUNT_KEY }} - # MEET_AZURE_CONTAINER_NAME: 'openvidu-appdata-users' - # JEST_JUNIT_OUTPUT_DIR: './reports/' - # - name: Publish Test Report - # uses: mikepenz/action-junit-report@v4 - # if: always() - # with: - # report_paths: '**/reports/junit.xml' - # fail_on_failure: true - # require_tests: true - # - name: Clean up - # if: always() - # uses: OpenVidu/actions/cleanup@main + test-recordings: + name: Recordings API Tests + needs: + - start-aws-runner + - build-components + if: ${{ always() && (needs.start-aws-runner.result == 'success' || needs.start-aws-runner.result == 'skipped') }} + runs-on: ${{ needs.start-aws-runner.outputs.label || 'ov-actions-runner' }} + strategy: + fail-fast: false + matrix: + storage-provider: [s3, abs, gcs] + timeout-minutes: 30 + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.13' + - name: Install LK CLI + run: curl -sSL https://get.livekit.io/cli | bash + - name: Save GCP credentials + if: matrix.storage-provider == 'gcs' + run: | + echo '${{ secrets.GCP_CREDENTIALS_JSON }}' > /credentials.json + - name: Setup OpenVidu Local Deployment + uses: OpenVidu/actions/start-openvidu-local-deployment@main + with: + ref-openvidu-local-deployment: development + pre_startup_commands: | + cat <<'BASH' > pre_startup_commands.sh + #!/bin/bash + if [[ "${{ matrix['storage-provider'] }}" == "abs" ]]; then + echo "Using Azure Blob Storage provider" + yq e -i ' + del(.storage.s3) | + .storage.azure = { + "account_name": "${{ vars.MEET_AZURE_ACCOUNT_NAME }}", + "account_key": "${{ secrets.MEET_AZURE_ACCOUNT_KEY }}", + "container_name": "openvidu-appdata-recordings" + } + ' egress.yaml + elif [[ "${{ matrix['storage-provider'] }}" == "gcs" ]]; then + echo "Using Google Cloud Storage provider" + yq eval --inplace '.storage.gcp.credentials_json = (load("/credentials.json") | tostring) | .storage.gcp.credentials_json style="single"' egress.yaml + + yq e -i ' + del(.storage.s3) | + .storage.gcp.bucket = "openvidu-appdata" + ' egress.yaml + fi - stop-runner: - name: Stop EC2 runner - needs: - - start-aws-runner - - test-recordings - runs-on: ov-actions-runner - if: ${{ always() && needs.start-aws-runner.outputs.label != '' }} - steps: - - name: Stop AWS EC2 Runner - id: stop-ec2-runner - uses: OpenVidu/actions/stop-aws-runner@main - with: - aws-access-key-id: ${{ vars.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: ${{ vars.AWS_REGION }} - github-token: ${{ secrets.OPENVIDU_GITHUB_TOKEN }} - label: ${{ needs.start-aws-runner.outputs.label }} - ec2-instance-id: ${{ needs.start-aws-runner.outputs.ec2-instance-id }} + echo "Commenting out openvidu-meet container in docker-compose.yaml" + if [ -f docker-compose.yaml ]; then + yq e 'del(.services.openvidu-meet)' -i docker-compose.yaml + fi + BASH + chmod +x pre_startup_commands.sh && ./pre_startup_commands.sh + - name: Setup OpenVidu Meet + uses: OpenVidu/actions/start-openvidu-meet@main + with: + build_components_angular: 'true' + components_artifact_name: ${{ needs.build-components.outputs.artifact_name }} + env: + MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} + # ABS variables + MEET_AZURE_ACCOUNT_NAME: ${{ matrix.storage-provider == 'abs' && vars.MEET_AZURE_ACCOUNT_NAME || '' }} + MEET_AZURE_ACCOUNT_KEY: ${{ matrix.storage-provider == 'abs' && secrets.MEET_AZURE_ACCOUNT_KEY || '' }} + MEET_AZURE_CONTAINER_NAME: ${{ matrix.storage-provider == 'abs' && 'openvidu-appdata-recordings' || '' }} + # GCS variables + GOOGLE_APPLICATION_CREDENTIALS: ${{ matrix.storage-provider == 'gcs' && '/credentials.json' || '' }} + MEET_S3_BUCKET: ${{ matrix.storage-provider == 'gcs' && 'openvidu-appdata' || '' }} + - name: Run tests + run: | + cd backend + npm run test:integration-recordings + env: + JEST_JUNIT_OUTPUT_DIR: './reports/' + MEET_BLOB_STORAGE_MODE: ${{ matrix.storage-provider }} + # ABS variables + MEET_AZURE_ACCOUNT_NAME: ${{ matrix.storage-provider == 'abs' && vars.MEET_AZURE_ACCOUNT_NAME || '' }} + MEET_AZURE_ACCOUNT_KEY: ${{ matrix.storage-provider == 'abs' && secrets.MEET_AZURE_ACCOUNT_KEY || '' }} + MEET_AZURE_CONTAINER_NAME: ${{ matrix.storage-provider == 'abs' && 'openvidu-appdata-recordings' || '' }} + # GCS variables + GOOGLE_APPLICATION_CREDENTIALS: ${{ matrix.storage-provider == 'gcs' && '/credentials.json' || '' }} + MEET_S3_BUCKET: ${{ matrix.storage-provider == 'gcs' && 'openvidu-appdata' || '' }} + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: always() + with: + report_paths: '**/reports/junit.xml' + fail_on_failure: true + require_tests: true + - name: Upload OpenVidu Meet logs on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: recordings-test-openvidu-meet-logs + path: backend/meet_backend.log + retention-days: 2 + - name: Clean up + if: always() + uses: OpenVidu/actions/cleanup@main + + stop-runner: + name: Stop EC2 runner + needs: + - start-aws-runner + - test-recordings + runs-on: ov-actions-runner + if: ${{ always() && needs.start-aws-runner.outputs.label != '' }} + steps: + - name: Stop AWS EC2 Runner + id: stop-ec2-runner + uses: OpenVidu/actions/stop-aws-runner@main + with: + aws-access-key-id: ${{ vars.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ vars.AWS_REGION }} + github-token: ${{ secrets.OPENVIDU_GITHUB_TOKEN }} + label: ${{ needs.start-aws-runner.outputs.label }} + ec2-instance-id: ${{ needs.start-aws-runner.outputs.ec2-instance-id }}