diff --git a/.docker/android-sdk.dockerfile b/.docker/android-sdk.dockerfile index 6d752d868e..72699d2ec2 100644 --- a/.docker/android-sdk.dockerfile +++ b/.docker/android-sdk.dockerfile @@ -41,7 +41,7 @@ RUN set -o xtrace \ ruby-full ruby-bundler libstdc++6 libpulse0 libglu1-mesa locales lcov libsqlite3-dev --no-install-recommends \ # For Linux build xz-utils acl \ - clang cmake git lld \ + binutils clang cmake git lld llvm \ ninja-build pkg-config \ libgtk-3-dev liblzma-dev \ libstdc++-12-dev libsecret-1-dev \ diff --git a/.github/actions/releases/setup-ios/action.yml b/.github/actions/releases/setup-ios/action.yml index 87434cdb78..982d4f4559 100644 --- a/.github/actions/releases/setup-ios/action.yml +++ b/.github/actions/releases/setup-ios/action.yml @@ -50,6 +50,12 @@ runs: xcodebuild -downloadPlatform iOS flutter pub get --enforce-lockfile + export GITHUB_API_PUBLIC_READONLY_TOKEN="${{ github.token }}" + # The first bundle run may update transformer-managed inputs and exit + # non-zero. Re-running picks up those updates, matching CI asset builds. + flutter build bundle --release --no-pub >/dev/null 2>&1 || true + flutter build bundle --release --no-pub + cd ios pod install diff --git a/.github/actions/releases/setup-macos/action.yml b/.github/actions/releases/setup-macos/action.yml index 157d6e73e8..0cc54f2a64 100644 --- a/.github/actions/releases/setup-macos/action.yml +++ b/.github/actions/releases/setup-macos/action.yml @@ -53,6 +53,12 @@ runs: run: | flutter pub get --enforce-lockfile + export GITHUB_API_PUBLIC_READONLY_TOKEN="${{ github.token }}" + # The first bundle run may update transformer-managed inputs and exit + # non-zero. Re-running picks up those updates, matching CI asset builds. + flutter build bundle --release --no-pub >/dev/null 2>&1 || true + flutter build bundle --release --no-pub + cd macos pod install diff --git a/.github/workflows/desktop-builds.yml b/.github/workflows/desktop-builds.yml index b13506949c..ac6ec48c46 100644 --- a/.github/workflows/desktop-builds.yml +++ b/.github/workflows/desktop-builds.yml @@ -80,10 +80,13 @@ jobs: id: build env: GITHUB_API_PUBLIC_READONLY_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # Disable code signing for macOS PR builds - CODE_SIGNING_ALLOWED: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && 'NO' || '' }} - CODE_SIGNING_REQUIRED: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && 'NO' || '' }} - EXPANDED_CODE_SIGN_IDENTITY: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && '-' || '' }} + # Flutter only forwards Xcode overrides with the FLUTTER_XCODE_ prefix. + FLUTTER_XCODE_CODE_SIGNING_ALLOWED: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && 'NO' || '' }} + FLUTTER_XCODE_CODE_SIGNING_REQUIRED: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && 'NO' || '' }} + FLUTTER_XCODE_CODE_SIGN_IDENTITY: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && '' || '' }} + FLUTTER_XCODE_CODE_SIGN_STYLE: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && 'Manual' || '' }} + FLUTTER_XCODE_DEVELOPMENT_TEAM: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && '' || '' }} + FLUTTER_XCODE_PROVISIONING_PROFILE_SPECIFIER: ${{ matrix.platform == 'macos' && github.event_name == 'pull_request' && '' || '' }} uses: ./.github/actions/generate-assets with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ui-tests-on-pr.yml b/.github/workflows/ui-tests-on-pr.yml index 1196638222..854539ef9b 100644 --- a/.github/workflows/ui-tests-on-pr.yml +++ b/.github/workflows/ui-tests-on-pr.yml @@ -50,12 +50,21 @@ jobs: - name: Install Chrome and chromedriver id: setup_chrome if: ${{ matrix.browser == 'chrome' }} - uses: browser-actions/setup-chrome@v1 + uses: browser-actions/setup-chrome@v2 with: - chrome-version: 116.0.5845.96 + chrome-version: stable install-chromedriver: true install-dependencies: true + - name: Print Chrome setup + id: print_chrome_setup + if: ${{ matrix.browser == 'chrome' }} + run: | + echo "Chrome path: ${{ steps.setup_chrome.outputs.chrome-path }}" + "${{ steps.setup_chrome.outputs.chrome-path }}" --version + echo "ChromeDriver path: ${{ steps.setup_chrome.outputs.chromedriver-path }}" + "${{ steps.setup_chrome.outputs.chromedriver-path }}" --version + - name: Enable safaridriver (sudo) (MacOS) id: enable_safari if: ${{ matrix.browser == 'safari' }} @@ -85,6 +94,7 @@ jobs: continue-on-error: true env: GITHUB_API_PUBLIC_READONLY_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CHROME_EXECUTABLE: ${{ matrix.browser == 'chrome' && steps.setup_chrome.outputs.chrome-path || '' }} run: | dart run_integration_tests.dart \ -d ${{ matrix.display }} \ diff --git a/.github/workflows/validate-code-guidelines.yml b/.github/workflows/validate-code-guidelines.yml index c4c3c90e4c..185cca64f6 100644 --- a/.github/workflows/validate-code-guidelines.yml +++ b/.github/workflows/validate-code-guidelines.yml @@ -29,9 +29,18 @@ jobs: with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Resolve SDK workspace dependencies + id: sdk_pub_get + run: | + if [ -f sdk/pubspec.lock ]; then + dart pub get --enforce-lockfile -C sdk + else + dart pub get -C sdk + fi + - name: Validate dart code id: validate_dart run: | - flutter analyze + flutter analyze --no-fatal-warnings --no-fatal-infos # Currently skipped due to many changes. Will be enabled in the future after doing full sweep of the codebase # dart format --set-exit-if-changed . diff --git a/automated_testing/gleec-qa-architecture.md b/automated_testing/gleec-qa-architecture.md index b9dfa7da2a..d03366944e 100644 --- a/automated_testing/gleec-qa-architecture.md +++ b/automated_testing/gleec-qa-architecture.md @@ -292,7 +292,7 @@ komodo-qa-automation/ # requirements.txt skyvern>=1.0.0 pyyaml>=6.0 -pydantic>=2.0 +pydantic>=2.4.0 httpx>=0.27.0 ``` diff --git a/automated_testing/requirements.txt b/automated_testing/requirements.txt index c0d43fd352..b0ef6fe54e 100644 --- a/automated_testing/requirements.txt +++ b/automated_testing/requirements.txt @@ -1,8 +1,8 @@ skyvern>=1.0.0 pyyaml>=6.0 -pydantic>=2.0 +pydantic>=2.4.0 httpx>=0.27.0 -jinja2>=3.1 +jinja2>=3.1.6 rich>=13.0 playwright>=1.40.0 axe-playwright-python>=0.1.0 diff --git a/test_integration/runners/integration_test_runner.dart b/test_integration/runners/integration_test_runner.dart index 3447d57e9a..4248f6baad 100644 --- a/test_integration/runners/integration_test_runner.dart +++ b/test_integration/runners/integration_test_runner.dart @@ -8,6 +8,8 @@ import 'app_data.dart'; /// Runs integration tests for web or native apps using the `flutter drive` /// command. class IntegrationTestRunner { + static const _chromeExecutableEnvironmentKey = 'CHROME_EXECUTABLE'; + /// Runs integration tests for web or native apps using the `flutter drive` /// command. /// @@ -25,6 +27,19 @@ class IntegrationTestRunner { final String testsDirectory; bool get isWeb => _args.device == 'web-server'; + String get _browserDimension => _args.browserDimension.replaceAll(',', 'x'); + String? get _chromeBinaryPath { + if (_args.browserName != 'chrome') { + return null; + } + + final chromeBinary = Platform.environment[_chromeExecutableEnvironmentKey]; + if (chromeBinary == null || chromeBinary.isEmpty) { + return null; + } + + return chromeBinary; + } Future runTest(String test) async { ProcessResult result; @@ -106,14 +121,13 @@ class IntegrationTestRunner { '-d', _args.device, '--browser-dimension', - _args.browserDimension, + _browserDimension, '--${_args.displayMode}', '--${_args.runMode}', if (_args.runMode == 'profile') '--profile-memory=memory_profile.json', '--browser-name', _args.browserName, - '--web-renderer', - 'canvaskit', + if (_chromeBinaryPath != null) '--chrome-binary=$_chromeBinaryPath', '--${_args.pub ? '' : 'no-'}pub', '--${_args.keepRunning ? '' : 'no-'}keep-app-running', '--driver-port=${_args.driverPort}',