/very_good_workflows

Reusable GitHub Workflows used at Very Good Ventures 🦄

MIT LicenseMIT

Very Good Workflows

Very Good Ventures Very Good Ventures

Developed with 💙 by Very Good Ventures 🦄

ci License: MIT


Reusable GitHub Workflows used at Very Good Ventures 🦄

Quick Start

To get started add very good workflows to an existing GitHub workflow:

# A reusable workflow for Dart packages
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_package.yml@v1

# A reusable workflow for Flutter packages
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1

# A reusable workflow for ensuring commits are semantic
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1

# A reusable workflow for verifying package scores on pub.dev
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/pana.yml@v1

# A reusable workflow for running a spell check
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/spell_check.yml@v1

# A reusable workflow for publishing flutter packages
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_pub_publish.yml@v1

# A reusable workflow for publishing dart packages
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_pub_publish.yml@v1

For a more detailed guide, including tips and tricks, check out our blog.

Dart Package Workflow

Steps

The Dart package workflow consists of the following steps:

  1. Install Dependencies
  2. Format
  3. Analyze
  4. Run tests
  5. Check Code Coverage

Inputs

concurrency

Optional The number of concurrent test suites run.

Default 4

coverage_excludes

Optional List of paths to exclude from the coverage report, separated by an empty space. Supports globs to describe file patterns.

Default ""

dart_sdk

Optional Which Dart SDK version to use. It can be a version (e.g. 2.12.0) or a channel (e.g. stable):

Default "stable"

min_coverage

Optional The minimum coverage percentage allowed.

Default 100

working_directory

Optional The path to the root of the Dart package.

Default "."

analyze_directories

Optional A space separated list of folders that should be analyzed.

Default "lib test"

check_ignore

Optional Allows ignoring lines from coverage.

Default false

report_on

Optional A comma separated list of folders that should be checked in code coverage.

Default "lib"

runs_on

Optional An optional operating system on which to run the workflow.

Default "ubuntu-latest"

setup

Optional An optional command that should be executed immediately after dependencies are installed.

Default ""

platform

Optional An optional, comma-separated list of platform(s) on which to run the tests. [vm (default), chrome, firefox, safari, node]

Default "vm"

Example Usage

name: My Dart Workflow

on: pull_request

jobs:
  build:
    uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_package.yml@v1
    with:
      coverage_excludes: "*.g.dart"
      dart_sdk: "stable"
      platform: "chrome,vm"
      working_directory: "examples/my_dart_package"

Flutter Package Workflow

Steps

The Flutter package workflow consists of the following steps:

  1. Install Dependencies
  2. Format
  3. Analyze
  4. Run tests
  5. Check Code Coverage

Inputs

analyze_directories

Optional A space separated list of folders that should be analyzed.

Default "lib test"

concurrency

Optional The number of concurrent test suites run.

Default 4

coverage_excludes

Optional List of paths to exclude from the coverage report, separated by an empty space. Supports globs to describe file patterns.

Default ""

flutter_channel

Optional The Flutter release channel to use (e.g. stable).

Default "stable"

flutter_version

Optional The Flutter SDK version to use (e.g. 2.8.1).

Default ""

min_coverage

Optional The minimum coverage percentage allowed.

Default 100

setup

Optional An optional command that should be executed immediately after dependencies are installed.

Default ""

working_directory

Optional The path to the root of the Flutter package.

Default "."

test_optimization

Optional Enable the test optimization.

Default true

Note: Since the optimization process groups tests into a single file, golden tests will not work properly. Consider disabling optimizations if you are using golden tests.

test_recursion

Optional Whether to recursively run tests in nested directories.

Default false

runs_on

Optional An optional operating system on which to run the workflow.

Default "ubuntu-latest"

package_get_excludes

Optional List of paths to exclude from packages get. Supports globs to describe file patterns.

Default "!*"

Example Usage

name: My Flutter Workflow

on: pull_request

jobs:
  build:
    uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1
    with:
      coverage_excludes: "*.g.dart"
      flutter_channel: "stable"
      flutter_version: "2.8.1"
      working_directory: "examples/my_flutter_package"
      test_recursion: true

Semantic Pull Request Workflow

Inputs

types

Optional Configure which types are allowed (e.g. "feat, fix, docs").

Note: If not set then the action uses the list of Conventional Commits type of the commitizen.

scopes

Optional Configure which scopes are allowed (e.g. "dart_package, flutter_package").

Steps

The semantic pull request package workflow consists of the following steps:

  1. Ensure Commit is Semantic

Example Usage

name: My Workflow

on: pull_request

jobs:
  build:
    uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1

Pana Workflow

Steps

The pana workflow consists of the following steps:

  1. Install Pana
  2. Verify Pana Score

Inputs

pana_version

Optional Which version of package:pana to use (e.g. 0.21.15).

min_score

Optional The minimum score allowed.

Default 120

working_directory

Optional The path to the root of the Dart package.

Default "."

runs_on

Optional An optional operating system on which to run the workflow.

Default "ubuntu-latest"

Example Usage

name: My Workflow

on: pull_request

jobs:
  build:
    uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/pana.yml@v1
    with:
      min_score: 95
      working_directory: "examples/my_flutter_package"

Spell Check Workflow

Steps

The spell check workflow consists of the following steps:

  1. Git Checkout
  2. Run Spell Check

Inputs

config

Optional The location of the cspell.json.

Default ".github/cspell.json"

includes

Optional The glob patterns to filter the files to be checked. Use a new line between patterns to define multiple patterns.

Default ""

working_directory

Optional The path to the root of the Dart package.

Default "."

runs_on

Optional An optional operating system on which to run the workflow.

Default "ubuntu-latest"

verbose

Optional An optional boolean which determines whether to log verbose output.

Default false

modified_files_only

Optional An optional boolean which determines whether spell check is run on modified files.

Default true

Example Usage

name: My Workflow

on: pull_request

jobs:
  build:
    uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/spell_check.yml@v1
    with:
      includes: |
        **/*.{dart,md,yaml}
        !.dart_tool/**/*.{dart,yaml}
        .*/**/*.yml
      runs_on: macos-latest
      modified_files_only: false
      working_directory: examples/my_project

Flutter Pub Publish Workflow

Steps

The Flutter Pub Publish workflow consists of the following steps:

  1. Install dependencies
  2. Setup pub credentials
  3. Dry run
  4. Publish

Inputs

flutter_channel

Optional The Flutter release channel to use (e.g. stable).

Default "stable"

flutter_version

Optional The Flutter SDK version to use (e.g. 2.8.1).

Default ""

working_directory

Optional The path to the root of the Flutter package.

Default "."

runs_on

Optional An optional operating system on which to run the workflow.

Default "ubuntu-latest"

pub_credentials

Required The pub credentials needed for publishing. This can be retrieved by reading out your pub-credentials.json on your system after you ran a flutter pub login. The location of the file is different per operating system:

OS Path
Linux $XDG_CONFIG_HOME/dart/pub-credentials.json or $HOME/.config/dart/pub-credentials.json
macOS ~/Library/Application\ Support/dart/pub-credentials.json
Windows %APPDATA%/dart/pub-credentials.json

Example Usage

We recommend using GitHub Secrets for safely storing and reading the credentials.

name: My Flutter Pub Publish Workflow

on:
  push:
    tags:
      - 'my_flutter_package-v*.*.*'

jobs:
  build:
    uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_pub_publish.yml@v1
    with:
      flutter_channel: "stable"
      flutter_version: "2.8.1"
      working_directory: "packages/my_flutter_package"
      pub_credentials: ${{ secrets.PUB_CREDENTIALS }}

Dart Pub Publish Workflow

Steps

The Dart Pub Publish workflow consists of the following steps:

  1. Install dependencies
  2. Setup pub credentials
  3. Dry run
  4. Publish

Inputs

dart_sdk

Optional Which Dart SDK version to use. It can be a version (e.g. 2.12.0) or a channel (e.g. stable):

Default "stable"

working_directory

Optional The path to the root of the Dart package.

Default "."

runs_on

Optional An optional operating system on which to run the workflow.

Default "ubuntu-latest"

pub_credentials

Required The pub credentials needed for publishing. This can be retrieved by reading out your pub-credentials.json on your system after you ran a dart pub login, the location of the file is different per operating system:

OS Path
Linux $XDG_CONFIG_HOME/dart/pub-credentials.json or $HOME/.config/dart/pub-credentials.json
macOS ~/Library/Application\ Support/dart/pub-credentials.json
Windows %APPDATA%/dart/pub-credentials.json

Example Usage

We recommend using GitHub Secrets for safely storing and reading the credentials.

name: My Dart Pub Publish Workflow

on: pull_request

jobs:
  build:
    uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/dart_pub_publish.yml@v1
    with:
      dart_sdk: "stable"
      working_directory: "packages/my_dart_package"
      pub_credentials: ${{ secrets.PUB_CREDENTIALS }}

Mason Publish Workflow

Steps

The Mason Publish workflow consists of the following steps:

  1. Install Mason
  2. Setup Mason credentials
  3. Dry run
  4. Publish

Inputs

mason_version

Optional Which Mason version to use (e.g. 0.1.0-dev.50).

Default ""

working_directory

Optional The path to the root of the Mason brick.

Default "."

runs_on

Optional An optional operating system on which to run the workflow.

Default "ubuntu-latest"

mason_credentials

Required The mason credentials needed for publishing. This can be retrieved by reading out your mason-credentials.json on your system after you ran a mason login, the location of the file is different per operating system:

OS Path
Linux $XDG_CONFIG_HOME/mason/mason-credentials.json or $HOME/.config/mason/mason-credentials.json
macOS ~/Library/Application\ Support/mason/mason-credentials.json
Windows %APPDATA%/mason/mason-credentials.json

Example Usage

We recommend using GitHub Secrets for safely storing and reading the credentials.

name: My Mason Brick Publish Workflow

on: pull_request

jobs:
  build:
    uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/mason_publish.yml@v1
    with:
      mason_version: "0.1.0-dev.50"
      working_directory: "packages/my_mason_brick"
      mason_credentials: ${{ secrets.MASON_CREDENTIALS }}