dart-sass/tool/grind/homebrew.dart

65 lines
2.1 KiB
Dart
Raw Normal View History

// Copyright 2018 Google Inc. Use of this source code is governed by an
// MIT-style license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.
import 'dart:io';
import 'package:crypto/crypto.dart';
import 'package:dart2_constant/convert.dart' as convert;
import 'package:grinder/grinder.dart';
import 'package:path/path.dart' as p;
import 'utils.dart';
/// A regular expression for locating the URL and SHA256 hash of the Sass
/// archive in the `homebrew-sass` formula.
final _homebrewRegExp = new RegExp(r'\n( *)url "[^"]+"'
r'\n *sha256 "[^"]+"');
@Task('Update the Homebrew formula for the current version.')
update_homebrew() async {
ensureBuild();
var process = await Process.start("git",
["archive", "--prefix=dart-sass-$version/", "--format=tar.gz", version]);
var digest = await sha256.bind(process.stdout).first;
var stderr = await convert.utf8.decodeStream(process.stderr);
if ((await process.exitCode) != 0) {
fail('git archive "$version" failed:\n$stderr');
}
var repo = await cloneOrPull("https://github.com/sass/homebrew-sass.git");
var formula = new File(p.join(repo, "sass.rb"));
log("updating ${formula.path}");
formula.writeAsStringSync(formula.readAsStringSync().replaceFirstMapped(
_homebrewRegExp,
(match) =>
'\n${match[1]}url "https://github.com/sass/dart-sass/archive/$version.tar.gz"'
'\n${match[1]}sha256 "$digest"'));
run("git",
arguments: [
"commit",
"--all",
"--message",
"Update Dart Sass to $version"
],
workingDirectory: repo,
runOptions: new RunOptions(environment: {
"GIT_AUTHOR_NAME": "Sass Bot",
"GIT_AUTHOR_EMAIL": "sass.bot.beep.boop@gmail.com",
"GIT_COMMITTER_NAME": "Sass Bot",
"GIT_COMMITTER_EMAIL": "sass.bot.beep.boop@gmail.com"
}));
var username = environment('GITHUB_USER');
var password = environment('GITHUB_AUTH');
await runAsync("git",
arguments: [
"push",
"https://$username:$password@github.com/sass/homebrew-sass.git"
],
workingDirectory: repo);
}