Skip to content

Commit 5450c1c

Browse files
authored
Use cli_pkg to build and release executables (#924)
1 parent 33cb6aa commit 5450c1c

36 files changed

+281
-1177
lines changed

.travis.yml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ jobs:
5757
# Pure Dart unit tests, defined in test/.
5858
- &dart-tests
5959
name: Dart tests | Dart stable
60-
install: pub run grinder app-snapshot
60+
install: pub run grinder pkg-standalone-dev
6161
script: tool/travis/task/dart_tests.sh
6262
- <<: *dart-tests
6363
name: Dart tests | Dart dev
@@ -119,15 +119,15 @@ jobs:
119119
if: *deploy-if
120120
env: &github-env
121121
- GITHUB_USER=sassbot
122-
# GITHUB_AUTH="..."
122+
# GITHUB_TOKEN="..."
123123
#
124124
# Note that this overrides the read-only auth token that's set for all
125125
# builds.
126-
- secure: "AAP74aT+8SQmwGeHrCsZ7GgppvCCkDAZXszivocMy3Fi9gfMCLABBCh67pGINJX4VlLW7ftPF3xivlvgGu+e4ncXz9m9jIPZ9Iza3cW5jCnCgyRGZD98gwabIDFWiv4X9V2xnJA2p1ZuYBf8Sh3TTipUFBKMjlnxVxYkIOTud4rUss/htFhxVA/oFTo0ThTZwXuxJ+GRGTM4PcuHPJvPf18iRPs2AHFV6ZP51xgc3AsXC6Zyom5EJeX0yGj9zWQ0XCjnuFdGsI6G9jmkrmqgAXuUipgqAn0tjxPYp9R/1HqnBLD3Zbrvyi5pCiSFclU6CS6kTDbefzPOc5+zrnlkaolVeF8tQ+EhZiZqtLnpLYUz9bgknoFUapUN4N0R36sKBStdRv54+sMeoOzpQ8ep3PeZW5nWbak12wcrDx38ToWs6hQ4ycb0SQDZZatHsASpSu2nX8HwzZSDAZmsAdB+epPmgA0CBjWVG1ycmVnT6l3OopUmbaY3pXBNzFUXq5Fcd7Q39/MfrmHpyxSc3QVf8xNtUx9ggYtK0Kwx6dgykhNMVzFGZRVyQgwpaiyDqgMGEU2GQzzcJhgKo9+y1fDtdfj/cctmvJ2Fo1fkk+DMkEPUHGOVo6uKFnartky9iLm1WiHDMruJ6SIOJzAnb+TMBWQTSwI+F4wyEiRVR8Zv4uA="
126+
- secure: "jTN3v1KndVb29vWAIk4fnw9gcCIJ/6RWhUhk739GHdmsqWI85c8Ibjl3mwT4XYaOZv0KnfvcORFOpYCUkd4FcR7ihp5Dq44oE503IqBi55xvBct1lkan/5jE+KA/RkfvLcnkuHeV+gGJAYIde9lPPW8iTBfGbTmQPCsV3ZTcguXnt8gNc0P0KA6823Ubmim6bSSevUgK8uzospBqqKTqpedFZQBAW9DzsoMtNRhiR8da96L/AN3qixuqlJcraXVoqygNd70WW9LJuFXRFsJwDsyLmzRd4mbHcEqfu4z7Vvh0tqc4eQxvfJqal3wGe3/y15FlNNzGtn7jBa8XW7/hEBWDRWch8OsFSEwHP2cT5G9vOW6PswPTB6lJJViKAoxQLgjRfvnMcyqR+fgzGWKN5nC2cLgdV8R1zTrc8mReXuZclXZceP0Qkq1COf8zj52ip/P0FVuFLd99Wfy5BWmlgVu6xaX8j4/EblE0sT0KiH8Si8+ftUtQwiZE5oZnJ6vHzJwKO7C0uUEInStOr00ZzFQ2Jej3PB+yTdl5POCz9cHHSJpyUNvB55E8qsOZp7wKG9Md8we5IFs3WTSLrdhSJZ6xTawnWO0x08SYGr6Wym98wI7J/FyOD23X5AT1UwSIlflvpJLVBBKnKLQRdWrXofnv4NkmzlpBr2stBfBfpeA="
127127
script: skip # Don't run tests
128128
deploy:
129129
provider: script
130-
script: pub run grinder github-release github-linux
130+
script: pub run grinder pkg-github-release pkg-github-linux
131131
skip_cleanup: true # Don't clean up the Dart SDK.
132132

133133
# This causes the deploy to only be build when a tag is pushed. This
@@ -146,14 +146,14 @@ jobs:
146146
- name: npm
147147
if: *deploy-if
148148
env:
149-
# NPM_RC="..."
150-
- secure: "Iv6UKB6mH0GLkRQtaLeZnoW0QMmXbzGVX/QO+vvT26yWvqlW/ik+YeHB+4VLZFz/4xezukkztVENdxNDCnrQA/NX7fVhjqj4Px2JQau0V0ljYN64H+o0oxlBeMQqnsVOJcsU7DuPFPErYixkE3yuN6DqIYE+DYe3fVQg/1RBCs2z1nejg4udbZG7D0yfrxZSCckhsyBH1Ej72FhMGMaFq7k7IMC7f/sGYZZYsOe2WKmsYF35hyL/twIXKBNxjPat1HmsVT/3VOUIF+doO26BxthEc68Tmp3SHucEXHWPEjk9N87DxLClGkHvvZ2PUK9nYB9/KqxvJqf/AcDO34vS0lAU809Eov7dK/19WE1GtgA/gL0B/nh2QYbWpbO/HPzxFqOYwfzLtAXvwUr45eMNxmh1yupbAtxRvst7ZO/UTC+awW55AXnVd4jiTzZ/jqV52aGbClN+escPZCYXgYosvJLK3G4xLYCY4TTC99riBQZ0MDLfCt35+RivjNLVf8vecGT8WTmVQySzq0Cthy/9SCp1OzWT5roY2rzkwvR4R0+42f48qyDU/buUgPBsw9zwCabWVoB0p4hflalEhc9EwbRn5oDI0NHwXE0r83movx+JHHPBau1zwX53DJSpSFXnDPi6KaNpg52wyuIIzO90zA7FZTRR9My38AzYgVaKkdE="
149+
# NPM_TOKEN="..."
150+
- secure: "pwOMlV/hUTYYKrdULkhM0pHKCjXR1uWAuBbfxMxWCPH/AGkW3CP/WED8p5/Q6B8Itzca6eYg85PnkzeLl4hK9ANnYrQsHutfszGyzcqqAeWWPXm3Bq6Rqt5XpA4JCSdZBPKOLZ7yGzMCPVRMAet4fvORRU6nFCTJcm/B1JZNIAWY5TnjgcjwLa77Eo4Bflv58CTA5FyngN7hAMIo2JaassmReRHxtyVBh631IYFBvmo8vmC0gruPY0axj9a/4+F1Nx2ChOAjji0SRMJP1FSp7zOXCG+VrcqXMW3KCfBu/70szcdDVXOYYyJpCeiP6vVtRgi+9zqin9wOATIklRPMTy/zVbT4r9kfA7+GFSfsfAQ7K79VbvJQHbxon3E5JnWANjZr3q+iicX+sElL6IngoSw8pXRUHVJD979WcPTcKX+dd2KKqDR0S+rG8d7ZgyjIggCSGsyxvuX0vd/VaPmZA/4+tVfSHYxCq3P3sncVX9raP41UNFW9KyEQzKfxTs6I4U5IffFcLZRRoP1uMSdiru9cIvVCX64UTk6+TTiPXRj4o84dG/NQkYoc3EhHsRL4E7SAq827Ya1gA8GLSCJidtvGPG16VimvgT372pHPZ+l9Pb5XkMnZ+dji3o37xYTSbRESOk+pnMwq3f4lQz6YFuI+EjbO5RYCs5IxHjgW8Ak="
151151
script: skip
152152
language: node_js
153153
node_js: lts/*
154154
deploy:
155155
provider: script
156-
script: tool/travis/deploy/npm.sh
156+
script: pub run grinder pkg-npm-deploy
157157
skip_cleanup: true
158158
on: {tags: true}
159159

@@ -166,7 +166,7 @@ jobs:
166166
script: skip
167167
deploy:
168168
provider: script
169-
script: tool/travis/deploy/pub.sh
169+
script: pub run grinder pkg-pub-deploy
170170
skip_cleanup: true
171171
on: {tags: true}
172172

@@ -177,20 +177,20 @@ jobs:
177177
script: skip
178178
deploy:
179179
provider: script
180-
script: pub run grinder update-homebrew
180+
script: pub run grinder pkg-homebrew-update
181181
skip_cleanup: true
182182
on: {tags: true}
183183

184184
# Deploy to Chocolatey.
185185
- name: Chocolatey
186186
if: *deploy-if
187187
env:
188-
# CHOCO_TOKEN="..."
189-
- secure: "cW11kQYBBEElfVsc1pJfVEHOMYwt0ZK+9STZHwSPbAISlplIRnsimMN7TqCY2aLnkWXyUMU7DphIl9uQ86M4BT1bJopsHbapj27bFSlKWHlBSDB/xylFHywV41Yk5lMlr8DLMbsSzVahasyR34xS6HYIRlDpZ9TFiQuDQNJxQmqTZJg/FC+3nqCI7tyMKGkWc48ikTcmqDMHsG9CudG2u+Q3S9sLNXArh9T4tSnAyWkTvSrS05mvFx5tC83PcG9/VkioTId+VRSJchwTmCxDFDROrTikTXZMtYn8wMAQ2wQ34TQXNZMZ9uiHA6W0IuJV2EnYerJbqV2lrJq9xqZywKu6HW6i4GhrCvizALNFZx/N7s/10xuf3UcuWizYml/e0MYT+6t4ojTYBMKv+Cx+H2Y2Jdpvdn2ZAIl6LaU3pLw4OIPJ7aXjDwZd63MPxtwGwVLHbH7Zu+oUv1erIq5LtatuocGWipD8WdiMBQvyCuDRMowpLPoAbj+mevOf+xlY2Eym4tOXpxM7iY3lXFHROo5dQbhsARfVF9J1gl5PuYXvCjxqTfK/ef9t3ZoDbi57+yAJUWlZfWa5r1zKE8OS0pA8GfQRLom/Lt0wKVw4Xiofgolzd9pEHi4JpsYIQb8O+u1ACQU6nBCS87CGrQ+ylnzKfGUs0aW2K3gvbkg0LUg="
188+
# CHOCOLATEY_TOKEN="..."
189+
- secure: "EnII3YAGESEl9g9rQDcrL1Sw9eww80VJP0qZHz8Da07GB0hUrDQBJ372Zs2A4qaH/GOm7cknszEPOnkE4w3IBwe5idj31Q+WJbcvqqAB1gex3bLYyStdHeohculqmPgpuEPD3yVT59viJIn6L9+GEKNtnCygDpgxMilXzDIXi6vtLqovJc6q09i7XCSnf2IVjzKv0VBSUV0lU9QOZui5/zLN0sCSzE8QKYj0QSoQ8Th3ZTuWn3/CtRYhIaw4/12oepHyXRvieMeNGnhv8O4d1lAOiXKn28COJWA+xvCOZSxIrBCc0k8VzanYftTcp1Zf0Lxkm0ObmFXWaoHATFWjkvW6G34kQrzRpUlWUMmxIxBukHc2ZFuGnVi6pL9ANI8BVh6m8M1ojRqtKCFvBbgDDdxD7qqBQSfdtssEL+m6O0U9A5/xnQxHPbuyL/Y9ww9p/ohEFaaF3MK/qjiWKQJR+TXspmNDBhFC+w2vQ6zetEx787V6POS8ma5MX1+WWOecDtaDuEMv4bzjkTuYk9tuBC4GR/KrdUNbFtcNXCk5To4Du4FBdOW/+yoVg+ZHtgOzSDehgMJMeFM2fTYNt55iwmjwDyS4XcqsWoHHCDMEhIcuXL5XV5VBENFgs98EGofja70Lp05oLH2W7100OuyG0H18lpECx15OXSFnHQh+91g="
190190
script: skip
191191
deploy:
192192
provider: script
193-
script: pub run grinder update-chocolatey
193+
script: pub run grinder pkg-chocolatey-deploy
194194
skip_cleanup: true
195195
on: {tags: true}
196196

@@ -231,7 +231,7 @@ jobs:
231231
os: osx
232232
deploy:
233233
provider: script
234-
script: pub run grinder github-mac-os
234+
script: pub run grinder pkg-github-macos
235235
skip_cleanup: true
236236
on: {tags: true}
237237

@@ -241,6 +241,6 @@ jobs:
241241
script: skip
242242
deploy:
243243
provider: script
244-
script: pub run grinder github-windows
244+
script: pub run grinder pkg-github-windows
245245
skip_cleanup: true
246246
on: {tags: true}

appveyor.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ install:
1313
- refreshenv
1414
- pub get
1515
- ps: Install-Product node ''
16-
- pub run grinder npm-package
16+
- pub run grinder pkg-npm-dev
1717
- npm install
1818

1919
# Only run Node tests on Windows because they won't work on Travis. See

bin/sass.dart

Lines changed: 130 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,133 @@
22
// MIT-style license that can be found in the LICENSE file or at
33
// https://opensource.org/licenses/MIT.
44

5-
export 'package:sass/src/executable.dart'
6-
if (dart.library.js) 'package:sass/src/node.dart';
5+
import 'dart:async';
6+
import 'dart:isolate';
7+
8+
import 'package:path/path.dart' as p;
9+
import 'package:stack_trace/stack_trace.dart';
10+
import 'package:term_glyph/term_glyph.dart' as term_glyph;
11+
12+
import 'package:sass/src/exception.dart';
13+
import 'package:sass/src/executable/compile_stylesheet.dart';
14+
import 'package:sass/src/executable/options.dart';
15+
import 'package:sass/src/executable/repl.dart';
16+
import 'package:sass/src/executable/watch.dart';
17+
import 'package:sass/src/import_cache.dart';
18+
import 'package:sass/src/io.dart';
19+
import 'package:sass/src/stylesheet_graph.dart';
20+
21+
Future<void> main(List<String> args) async {
22+
var printedError = false;
23+
24+
// Prints [error] to stderr, along with a preceding newline if anything else
25+
// has been printed to stderr.
26+
//
27+
// If [trace] is passed, its terse representation is printed after the error.
28+
void printError(String error, StackTrace stackTrace) {
29+
if (printedError) stderr.writeln();
30+
printedError = true;
31+
stderr.writeln(error);
32+
33+
if (stackTrace != null) {
34+
stderr.writeln();
35+
stderr.writeln(Trace.from(stackTrace).terse.toString().trimRight());
36+
}
37+
}
38+
39+
ExecutableOptions options;
40+
try {
41+
options = ExecutableOptions.parse(args);
42+
term_glyph.ascii = !options.unicode;
43+
44+
if (options.version) {
45+
print(await _loadVersion());
46+
exitCode = 0;
47+
return;
48+
}
49+
50+
if (options.interactive) {
51+
await repl(options);
52+
return;
53+
}
54+
55+
var graph = StylesheetGraph(
56+
ImportCache([], loadPaths: options.loadPaths, logger: options.logger));
57+
if (options.watch) {
58+
await watch(options, graph);
59+
return;
60+
}
61+
62+
for (var source in options.sourcesToDestinations.keys) {
63+
var destination = options.sourcesToDestinations[source];
64+
try {
65+
await compileStylesheet(options, graph, source, destination,
66+
ifModified: options.update);
67+
} on SassException catch (error, stackTrace) {
68+
// This is an immediately-invoked function expression to work around
69+
// dart-lang/sdk#33400.
70+
() {
71+
try {
72+
if (destination != null && !options.emitErrorCss) {
73+
deleteFile(destination);
74+
}
75+
} on FileSystemException {
76+
// If the file doesn't exist, that's fine.
77+
}
78+
}();
79+
80+
printError(error.toString(color: options.color),
81+
options.trace ? stackTrace : null);
82+
83+
// Exit code 65 indicates invalid data per
84+
// http://www.freebsd.org/cgi/man.cgi?query=sysexits.
85+
//
86+
// We let exitCode 66 take precedence for deterministic behavior.
87+
if (exitCode != 66) exitCode = 65;
88+
if (options.stopOnError) return;
89+
} on FileSystemException catch (error, stackTrace) {
90+
printError("Error reading ${p.relative(error.path)}: ${error.message}.",
91+
options.trace ? stackTrace : null);
92+
93+
// Error 66 indicates no input.
94+
exitCode = 66;
95+
if (options.stopOnError) return;
96+
}
97+
}
98+
} on UsageException catch (error) {
99+
print("${error.message}\n");
100+
print("Usage: sass <input.scss> [output.css]\n"
101+
" sass <input.scss>:<output.css> <input/>:<output/> <dir/>\n");
102+
print(ExecutableOptions.usage);
103+
exitCode = 64;
104+
} catch (error, stackTrace) {
105+
var buffer = StringBuffer();
106+
if (options != null && options.color) buffer.write('\u001b[31m\u001b[1m');
107+
buffer.write('Unexpected exception:');
108+
if (options != null && options.color) buffer.write('\u001b[0m');
109+
buffer.writeln();
110+
buffer.writeln(error);
111+
112+
printError(buffer.toString(), stackTrace);
113+
exitCode = 255;
114+
}
115+
}
116+
117+
/// Loads and returns the current version of Sass.
118+
Future<String> _loadVersion() async {
119+
var version = const String.fromEnvironment('version');
120+
if (const bool.fromEnvironment('node')) {
121+
version += " compiled with dart2js "
122+
"${const String.fromEnvironment('dart-version')}";
123+
}
124+
if (version != null) return version;
125+
126+
var libDir =
127+
p.fromUri(await Isolate.resolvePackageUri(Uri.parse('package:sass/')));
128+
var pubspec = readFile(p.join(libDir, '..', 'pubspec.yaml'));
129+
return pubspec
130+
.split("\n")
131+
.firstWhere((line) => line.startsWith('version: '))
132+
.split(" ")
133+
.last;
134+
}

lib/src/executable.dart

Lines changed: 0 additions & 134 deletions
This file was deleted.

0 commit comments

Comments
 (0)