Skip to content

Commit 060df8a

Browse files
authored
Add Homebrew support (#230)
Technically Homebrew support was added by sass/homebrew-sass@83b7db9, but this makes it official by documenting it and adding a semi-automated update process.
1 parent 6d641db commit 060df8a

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ A [Dart][dart] implementation of [Sass][sass]. **Sass makes CSS fun again**.
2323

2424
* [Using Dart Sass](#using-dart-sass)
2525
* [From Chocolatey (Windows)](#from-chocolatey-windows)
26+
* [From Homebrew (OS X)](#from-homebrew-os-x)
2627
* [Standalone](#standalone)
2728
* [From npm](#from-npm)
2829
* [From Pub](#from-pub)
@@ -48,6 +49,18 @@ choco install sass -prerelease
4849
That'll give you a `sass` executable on your command line that will run Dart
4950
Sass.
5051

52+
### From Homebrew (OS X)
53+
54+
If you use [the Homebrew package manager](https://brew.sh/) for Mac OS X, you
55+
can install Dart Sass by running
56+
57+
```sh
58+
brew install --devel sass/sass/sass
59+
```
60+
61+
That'll give you a `sass` executable on your command line that will run Dart
62+
Sass.
63+
5164
### Standalone
5265

5366
You can download the standalone Dart Sass archive for your operating

tool/grind.dart

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'dart:io';
99
import 'package:archive/archive.dart';
1010
import 'package:charcode/charcode.dart';
1111
import 'package:collection/collection.dart';
12+
import 'package:crypto/crypto.dart';
1213
import 'package:grinder/grinder.dart';
1314
import 'package:http/http.dart' as http;
1415
import 'package:node_preamble/preamble.dart' as preamble;
@@ -400,3 +401,61 @@ ArchiveFile _fileFromString(String path, String contents,
400401
ArchiveFile _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

Comments
 (0)