name: Pipeline Segment - Electron Test on: workflow_call: inputs: target-platform: type: string description: 'Platform to run on, can be macos or linux' required: true target-arch: type: string description: 'Arch to build for, can be x64, arm64 or arm' required: true test-runs-on: type: string description: 'What host to run the tests on' required: true test-container: type: string description: 'JSON container information for aks runs-on' required: false default: '{"image":null}' concurrency: group: electron-test-${{ inputs.target-platform }}-${{ inputs.target-arch }}-${{ github.ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' && !endsWith(github.ref, '-x-y') }} env: ELECTRON_OUT_DIR: Default ELECTRON_RBE_JWT: ${{ secrets.ELECTRON_RBE_JWT }} jobs: test: runs-on: ${{ inputs.test-runs-on }} container: ${{ fromJSON(inputs.test-container) }} strategy: fail-fast: false matrix: build-type: ${{ inputs.target-platform == 'macos' && fromJSON('["darwin","mas"]') || fromJSON('["linux"]') }} shard: ${{ inputs.target-platform == 'macos' && fromJSON('[1]') || fromJSON('[1, 2, 3]') }} env: BUILD_TYPE: ${{ matrix.build-type }} TARGET_ARCH: ${{ inputs.target-arch }} steps: - name: Fix node20 on arm32 runners if: ${{ inputs.target-arch == 'arm' }} run: | cp $(which node) /mnt/runner-externals/node20/bin/ - name: Checkout Electron uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 with: path: src/electron fetch-depth: 0 - name: Install Dependencies run: | cd src/electron node script/yarn install - name: Get Depot Tools timeout-minutes: 5 run: | git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git if [ "`uname`" = "Darwin" ]; then # remove ninjalog_uploader_wrapper.py from autoninja since we don't use it and it causes problems sed -i '' '/ninjalog_uploader_wrapper.py/d' ./depot_tools/autoninja else sed -i '/ninjalog_uploader_wrapper.py/d' ./depot_tools/autoninja # Remove swift-format dep from cipd on macOS until we send a patch upstream. cd depot_tools git apply --3way ../src/electron/.github/workflows/config/gclient.diff fi # Ensure depot_tools does not update. test -d depot_tools && cd depot_tools touch .disable_auto_update - name: Add Depot Tools to PATH run: echo "$(pwd)/depot_tools" >> $GITHUB_PATH - name: Download Generated Artifacts uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e with: name: generated_artifacts_${{ matrix.build-type }}_${{ inputs.target-arch }} path: ./generated_artifacts_${{ matrix.build-type }}_${{ inputs.target-arch }} - name: Download Src Artifacts uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e with: name: src_artifacts_${{ matrix.build-type }}_${{ env.TARGET_ARCH }} path: ./src_artifacts_${{ matrix.build-type }}_${{ env.TARGET_ARCH }} - name: Restore Generated Artifacts run: ./src/electron/script/actions/restore-artifacts.sh - name: Unzip Dist, Mksnapshot & Chromedriver run: | cd src/out/Default unzip -:o dist.zip unzip -:o chromedriver.zip unzip -:o mksnapshot.zip # - name: Import & Trust Self-Signed Codesigning Cert on MacOS # if: ${{ inputs.target-platform == 'macos' }} # run: | # sudo security authorizationdb write com.apple.trust-settings.admin allow # cd src/electron # ./script/codesign/generate-identity.sh - name: Run Electron Tests env: MOCHA_REPORTER: mocha-multi-reporters ELECTRON_TEST_RESULTS_DIR: junit MOCHA_MULTI_REPORTERS: mocha-junit-reporter, tap ELECTRON_DISABLE_SECURITY_WARNINGS: 1 ELECTRON_SKIP_NATIVE_MODULE_TESTS: true DISPLAY: ':99.0' run: | cd src/electron # Get which tests are on this shard tests_files=$(node script/split-tests ${{ matrix.shard }} ${{ inputs.target-platform == 'macos' && 1 || 3 }}) # Run tests if [ "`uname`" = "Darwin" ]; then node script/yarn test --runners=main --trace-uncaught --enable-logging else chown :builduser .. && chmod g+w .. chown -R :builduser . && chmod -R g+w . chmod 4755 ../out/Default/chrome-sandbox runuser -u builduser -- git config --global --add safe.directory $(pwd) runuser -u builduser -- xvfb-run script/actions/run-tests.sh script/yarn test --runners=main --trace-uncaught --enable-logging --files $tests_files fi - name: Wait for active SSH sessions if: always() && !cancelled() run: | while [ -f /var/.ssh-lock ] do sleep 60 done