Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 100 additions & 0 deletions .github/workflows/dart_packages_test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Analyzes, formats and tests the pure Dart packages under dart/.
#
# The Flutter workflow builds its matrix from samples/, so the packages that
# ship to pub.dev were not covered by any job. This workflow holds them to the
# same bar the samples are held to: formatting, analysis with --fatal-infos,
# and the package's own tests.
name: Dart CI

on:
workflow_dispatch:
push:
branches:
- main
pull_request:
branches:
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref_name || github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.generate_matrix.outputs.matrix }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false

- name: Generate testing matrix
id: generate_matrix
run: |
DIRS_TO_TEST=$(find dart -name pubspec.yaml -not -path "*/.dart_tool/*" -exec dirname {} \;)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will skip dart files in other parts of the tree. There currently aren't any, but that doesn't mean there couldn't be (imagine a tool implemented in Dart, for instance), and it is a monorepo, so the top level directory is also excluded by this. I'd search the whole tree.


JSON_MATRIX="["
FIRST=true
for dir in $DIRS_TO_TEST; do
if [ "$FIRST" = false ]; then
JSON_MATRIX="$JSON_MATRIX,"
fi
FIRST=false
package_name=$(echo "$dir" | tr '/' '_')
JSON_MATRIX="$JSON_MATRIX{\"name\":\"$package_name\",\"path\":\"$dir\"}"
done
JSON_MATRIX="$JSON_MATRIX]"

echo "matrix=$JSON_MATRIX" >> $GITHUB_OUTPUT

analyze_and_test:
needs: matrix
name: ${{ matrix.package.name }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
package: ${{ fromJson(needs.matrix.outputs.matrix) }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false

# The packages resolve through the monorepo workspace, whose root pubspec
# declares a Flutter SDK constraint, so a Dart-only SDK cannot resolve
# them. See https://github.com/a2ui-project/a2ui/issues/2463.
- uses: ./.github/actions/setup-dart

- name: Install dependencies
working-directory: ${{ matrix.package.path }}
run: dart pub get

- name: Check formatting
working-directory: ${{ matrix.package.path }}
run: dart format --output=none --set-exit-if-changed .

- name: Analyze code
working-directory: ${{ matrix.package.path }}
run: dart analyze --fatal-infos

- name: Run tests
working-directory: ${{ matrix.package.path }}
run: dart test
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,11 @@ void _checkComponents(
List<Map<String, Object?>> expected,
String reason,
) {
expect(surface.componentsModel.all.map((c) => c.id).toSet(), {
for (final Map<String, Object?> entry in expected) entry['id'],
}, reason: '$reason: component ids');
expect(
surface.componentsModel.all.map((c) => c.id).toSet(),
{for (final Map<String, Object?> entry in expected) entry['id']},
reason: '$reason: component ids',
);

for (final entry in expected) {
final id = entry['id']! as String;
Expand Down
8 changes: 5 additions & 3 deletions dart/a2ui_core/test/validator_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -509,9 +509,11 @@ void main() {
},
});

expect(extractComponentRefFields(inlined)['Card']!.single, {
'child',
}, reason: 'id must not be read as a child reference');
expect(
extractComponentRefFields(inlined)['Card']!.single,
{'child'},
reason: 'id must not be read as a child reference',
);

final A2uiValidator<ComponentApi, FunctionApi> validator = A2uiValidator(
catalogs: [inlined],
Expand Down
Loading