Clone this repo:
  1. 6a61e53 Update README.md before archiving (#108) by Moritz · 4 weeks ago master
  2. c36b394 Bump actions/checkout from 4.1.7 to 4.2.0 in the github-actions group (#107) by dependabot[bot] · 9 weeks ago
  3. 6a0bb92 update lints (#106) by Kevin Moore · 5 months ago
  4. 6419270 Bump the github-actions group with 2 updates (#105) by dependabot[bot] · 5 months ago
  5. c37d5e1 Bump actions/checkout from 4.1.4 to 4.1.6 in the github-actions group (#104) by dependabot[bot] · 6 months ago

[!IMPORTANT]
This repo has moved to https://github.com/dart-lang/tools/tree/main/pkgs/cli_util

Dart CI Pub package publisher

A package to help in building Dart command-line apps.

What's this?

package:cli_util provides:

  • utilities to find the Dart SDK directory (sdkPath)
  • utilities to find the settings directory for a tool (applicationConfigHome())
  • utilities to aid in showing rich CLI output and progress information (cli_logging.dart)

Locating the Dart SDK

import 'dart:io';

import 'package:cli_util/cli_util.dart';
import 'package:path/path.dart' as path;

main(args) {
  // Get SDK directory from cli_util.
  var sdkDir = sdkPath;
  
  // Do stuff... For example, print version string
  var versionFile = File(path.join(sdkDir, 'version'));
  print(versionFile.readAsStringSync());
}

Displaying output and progress

package:cli_util can also be used to help CLI tools display output and progress. It has a logging mechanism which can help differentiate between regular tool output and error messages, and can facilitate having a more verbose (-v) mode for output.

In addition, it can display an indeterminate progress spinner for longer running tasks, and optionally display the elapsed time when finished:

import 'package:cli_util/cli_logging.dart';

void main(List<String> args) async {
  var verbose = args.contains('-v');
  var logger = verbose ? Logger.verbose() : Logger.standard();

  logger.stdout('Hello world!');
  logger.trace('message 1');
  await Future.delayed(Duration(milliseconds: 200));
  logger.trace('message 2');
  logger.trace('message 3');

  var progress = logger.progress('doing some work');
  await Future.delayed(Duration(seconds: 2));
  progress.finish(showTiming: true);

  logger.stdout('All ${logger.ansi.emphasized('done')}.');
  logger.flush();
}

Features and bugs

Please file feature requests and bugs at the issue tracker.