@@ -9,6 +9,7 @@ import 'dart:io';
99import 'package:archive/archive.dart' ;
1010import 'package:charcode/charcode.dart' ;
1111import 'package:collection/collection.dart' ;
12+ import 'package:crypto/crypto.dart' ;
1213import 'package:grinder/grinder.dart' ;
1314import 'package:http/http.dart' as http;
1415import 'package:node_preamble/preamble.dart' as preamble;
@@ -400,3 +401,61 @@ ArchiveFile _fileFromString(String path, String contents,
400401ArchiveFile _file (String target, String source, {bool executable: false }) =>
401402 _fileFromBytes (target, new File (source).readAsBytesSync (),
402403 executable: executable);
404+
405+ /// A regular expression for locating the URL and SHA256 hash of the Sass
406+ /// archive in the `homebrew-sass` formula.
407+ final _homebrewRegExp = new RegExp (r'\n( *)url "[^"]+"'
408+ r'\n *sha256 "[^"]+"' );
409+
410+ @Task ('Update the Homebrew formula for the current version.' )
411+ update_homebrew () async {
412+ _ensureBuild ();
413+
414+ var process = await Process .start ("git" , [
415+ "archive" ,
416+ "--prefix=dart-sass-$_version /" ,
417+ "--format=tar.gz" ,
418+ _version
419+ ]);
420+ var digest = await sha256.bind (process.stdout).first;
421+ var stderr = await UTF8 .decodeStream (process.stderr);
422+ if ((await process.exitCode) != 0 ) {
423+ fail ('git archive "$_version " failed:\n $stderr ' );
424+ }
425+
426+ if (new Directory ("build/homebrew-sass/.git" ).existsSync ()) {
427+ await runAsync ("git" ,
428+ arguments: ["fetch" , "origin" ],
429+ workingDirectory: "build/homebrew-sass" );
430+ await runAsync ("git" ,
431+ arguments: ["reset" , "--hard" , "origin/master" ],
432+ workingDirectory: "build/homebrew-sass" );
433+ } else {
434+ delete (new Directory ("build/homebrew-sass" ));
435+ await runAsync ("git" , arguments: [
436+ "clone" ,
437+ "git@github.com:sass/homebrew-sass.git" ,
438+ "build/homebrew-sass"
439+ ]);
440+ }
441+
442+ var formula = new File ("build/homebrew-sass/sass.rb" );
443+ log ("updating ${formula .path }" );
444+ formula.writeAsStringSync (formula.readAsStringSync ().replaceFirstMapped (
445+ _homebrewRegExp,
446+ (match) =>
447+ '\n ${match [1 ]}url "https://github.com/sass/dart-sass/archive/$_version .tar.gz"'
448+ '\n ${match [1 ]}sha256 "$digest "' ));
449+
450+ run ("git" ,
451+ arguments: [
452+ "commit" ,
453+ "--all" ,
454+ "--message" ,
455+ "Update Dart Sass to $_version "
456+ ],
457+ workingDirectory: "build/homebrew-sass" );
458+
459+ await runAsync ("git" ,
460+ arguments: ["push" ], workingDirectory: "build/homebrew-sass" );
461+ }
0 commit comments