Skip to content

Dart CI

Dart CI #1399

Workflow file for this run

# This is the main workflow that performs checks on the source code of the
# package itself.
name: Dart CI
# Trigger the workflow whenever commits are pushed to any branch and modify
# source files, tests or configuration files. There is a separate workflow that
# checks the example source code. The workflow also runs when it is modified
# itself.
#
# Additionally, the workflow runs once every day at 6am on the `main` branch.
on:
push:
paths:
- ".github/workflows/main.yaml"
- "bin/**"
- "lib/**"
- "test/**"
- "*.yaml"
schedule:
- cron: "0 6 * * *"
jobs:
# Analyzes the Dart code of the package (i.e., all `.dart` files in the `lib`,
# `bin` and `test` directories) in the with `dart analyze`. The `example`s are
# not analyzed by this job.
analyze:
name: Analyze Code
runs-on: ubuntu-latest
container:
image: dart:stable
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
- name: Print Dart SDK Version
run: dart --version
- name: Install Dependencies
run: dart pub get
- name: Analyze Code
run: dart analyze --fatal-infos
# Tests whether all Dart source files of the package (i.e., all `.dart` files
# in the `lib`, `bin` and `test` directories) are formatted correctly with
# `dart format`. The `example`s are not analyzed by this job.
format:
name: Check Code Formatting
runs-on: ubuntu-latest
container:
image: dart:stable
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
- name: Print Dart SDK Version
run: dart --version
- name: Install Dependencies
run: dart pub get
- name: Check Code Formatting
run: "dart format --show all
--output none
--set-exit-if-changed
bin lib test"
# Runs the unit tests of the package with `dart test` in the Dart VM.
#
# While most other checks run with the latest version of the Dart SDK only,
# the unit tests are executed with all supported versions (according to the
# lower SDK constraint specified in `pubspec.yaml`) in addition to the latest
# version.
vm-test:
name: Run Unit Tests in Dart VM
runs-on: ubuntu-latest
container:
image: dart:${{ matrix.dart-version }}
strategy:
matrix:
dart-version: ["3.2", "3.3", latest]
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
- name: Print Dart SDK Version
run: dart --version
- name: Install Dependencies
run: dart pub get
- name: Run Unit Tests
run: "dart -DSILENT_OBSERVATORY=true test
test --reporter expanded
--coverage=./coverage/vm/$dart_version"
env:
dart_version: ${{ matrix.dart-version }}
- name: Upload Test Coverage
uses: actions/upload-artifact@v4
with:
name: coverage-vm-test-${{ matrix.dart-version }}
path: coverage/
# Runs the unit tests of the package with `dart test` in Node.js.
js-test:
name: Run Unit Tests in Node.js
runs-on: ubuntu-latest
container:
image: dart:stable
strategy:
matrix:
node-version: [16]
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Print node.js Version
run: node --version
- name: Print Dart SDK Version
run: dart --version
- name: Install Dependencies
run: dart pub get
- name: Run Unit Tests
run: "dart test --reporter expanded
--platform node
--coverage=./coverage/node/$node_version"
env:
node_version: ${{ matrix.node-version }}
- name: Upload Test Coverage
uses: actions/upload-artifact@v4
with:
name: coverage-js-test-${{ matrix.node-version }}
path: coverage/
# Runs the unit tests of the package with `dart test` in Chrome.
chrome-test:
name: Run Unit Tests in Chrome
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
- name: Use Dart SDK
uses: dart-lang/setup-dart@v1.4
- name: Print Dart SDK Version
run: dart --version
- name: Install Dependencies
run: dart pub get
- name: Run Headless Unit Tests
run: "dart test --reporter expanded
--platform chrome
--coverage=./coverage/chrome"
- name: Upload Test Coverage
uses: actions/upload-artifact@v4
with:
name: coverage-chrome-test
path: coverage/
# Combines the test coverage information of all other jobs into a `lcov.info`
# file and uploads it to coveralls.io.
coverage:
name: Collect Test Coverage
runs-on: ubuntu-latest
needs:
- vm-test
- js-test
- chrome-test
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
- name: Download Coverage
uses: actions/download-artifact@v4
with:
pattern: coverage-*
path: coverage/
merge-multiple: true
- name: Use Dart SDK
uses: dart-lang/setup-dart@v1.4
- name: Print Dart SDK Version
run: dart --version
- name: Add Executables Installed by Pub to PATH
run: echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH
- name: Install Dependencies
run: dart pub get
- name: Install coverage Package
run: dart pub global activate coverage
- name: Format Coverage
run: "format_coverage --packages=.dart_tool/package_config.json
--in coverage
--report-on lib
--lcov
--out coverage/lcov.info"
- name: Upload Coverage to coveralls.io
uses: coverallsapp/github-action@v2.3.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
file: coverage/lcov.info
# Generates the API documentation from doc comments.
build-docs:
name: Build Documentation
runs-on: ubuntu-latest
container:
image: dart:stable
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
- name: Print Dart SDK Version
run: dart --version
- name: Install Dependencies
run: dart pub get
- name: Build Documentation
run: dart doc
- name: Upload Documentation
uses: actions/upload-artifact@v4
with:
name: api-documentation
path: doc/api
# Compiles the test decoder script for the `toml-test` test suite.
compile-toml-test:
name: Compile `toml-test` Scripts
runs-on: ubuntu-latest
container:
image: dart:stable
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
- name: Print Dart SDK Version
run: dart --version
- name: Install Dependencies
run: dart pub get
- name: Compile Decoder and Encoder Scripts
run: |
mkdir -p build/bin
dart compile exe -o build/bin/decoder bin/decoder.dart
dart compile exe -o build/bin/encoder bin/encoder.dart
- name: Upload Decoder Executable
uses: actions/upload-artifact@v4
with:
name: toml-test
path: |
build/bin/decoder
build/bin/encoder
# Runs the `toml-test` test suite against the executable built by the
# `compile-toml-test` job.
toml-test:
name: Run `toml-test` Test Suite
runs-on: ubuntu-latest
container:
image: golang:1.18
needs: compile-toml-test
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
- name: Install `toml-test`
run: go install github.com/toml-lang/toml-test/cmd/toml-test@master
- name: Download Decoder Executable
uses: actions/download-artifact@v4
with:
name: toml-test
path: build/bin
- name: Set Executable Permissions
run: |
chmod +x build/bin/decoder
chmod +x build/bin/encoder
- name: Run `toml-test` Against Decoder
run: $GOPATH/bin/toml-test build/bin/decoder
- name: Run `toml-test` Against Encoder
run: $GOPATH/bin/toml-test build/bin/encoder -encoder