mirror of
https://github.com/danog/dart-sass.git
synced 2024-11-30 04:39:03 +01:00
8090b992de
In a future commit, I'll update these jobs to only run just before release, since they're expected to be substantially less likely to fail and we don't want to waste cycles. For now, I have them runnning always to verify that they run successfully at least once.
72 lines
2.4 KiB
Dart
72 lines
2.4 KiB
Dart
// Copyright 2021 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:convert';
|
|
|
|
import 'package:grinder/grinder.dart';
|
|
import 'package:http/http.dart' as http;
|
|
|
|
import 'utils.dart';
|
|
|
|
@Task('Download Bootstrap 5.x for testing purposes.')
|
|
Future<void> fetchBootstrap5() => _getLatestRelease('twbs/bootstrap');
|
|
|
|
@Task('Download Bootstrap 4.x for testing purposes.')
|
|
Future<void> fetchBootstrap4() =>
|
|
_getLatestRelease('twbs/bootstrap', pattern: RegExp(r'^v4\.'));
|
|
|
|
@Task('Download Bourbon for testing purposes.')
|
|
Future<void> fetchBourbon() => _getLatestRelease('thoughtbot/bourbon');
|
|
|
|
@Task('Download Foundation for testing purposes.')
|
|
Future<void> fetchFoundation() =>
|
|
_getLatestRelease('foundation/foundation-sites');
|
|
|
|
@Task('Download Bulma for testing purposes.')
|
|
Future<void> fetchBulma() => _getLatestRelease('jgthms/bulma');
|
|
|
|
/// Clones the latest release of the given GitHub repository [slug].
|
|
///
|
|
/// If [pattern] is passed, this will clone the latest release that matches that
|
|
/// pattern.
|
|
Future<void> _getLatestRelease(String slug, {Pattern? pattern}) async {
|
|
await cloneOrCheckout('git://github.com/$slug',
|
|
await _findLatestRelease(slug, pattern: pattern));
|
|
}
|
|
|
|
/// Returns the tag name of the latest release for the given GitHub repository
|
|
/// [slug].
|
|
///
|
|
/// If [pattern] is passed, this will find the latest release that matches that
|
|
/// pattern.
|
|
Future<String> _findLatestRelease(String slug, {Pattern? pattern}) async {
|
|
var releases = await _fetchReleases(slug);
|
|
if (pattern == null) return releases[0]['tag_name'] as String;
|
|
|
|
var page = 1;
|
|
while (releases.isNotEmpty) {
|
|
for (var release in releases) {
|
|
var tagName = release['tag_name'] as String;
|
|
if (pattern.allMatches(tagName).isNotEmpty) return tagName;
|
|
}
|
|
|
|
page++;
|
|
releases = await _fetchReleases(slug, page: page);
|
|
}
|
|
|
|
fail("Couldn't find a release of $slug matching $pattern.");
|
|
}
|
|
|
|
/// Fetches the GitHub releases page for the repo at [slug].
|
|
Future<List<Map<String, dynamic>>> _fetchReleases(String slug,
|
|
{int page = 1}) async {
|
|
var result = json.decode(await http.read(
|
|
Uri.parse("https://api.github.com/repos/$slug/releases?page=$page"),
|
|
headers: {
|
|
"accept": "application/vnd.github.v3+json",
|
|
"authorization": githubAuthorization
|
|
})) as List<dynamic>;
|
|
return result.cast<Map<String, dynamic>>();
|
|
}
|