Dart CI #1403
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |