blob: cf3b8759b6ce8c9191a867a98fa7a58954ece1d1 [file] [log] [blame] [edit]
#! /usr/bin/env dart
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:args/args.dart';
import 'package:file/file.dart';
import 'package:file/local.dart';
import 'package:scripts/src/dockerfile.dart';
import 'package:scripts/src/http.dart' as http;
import 'package:scripts/src/versions.dart';
/// Downloads the latest versions on the Dart stable and beta channels and the
/// relevant SHA256 checksums. For all versions that haven't changed, the script
/// verifies that the checksums are still matching.
void main(List<String> args) async {
final results = (ArgParser()..addFlag('force', abbr: 'f')).parse(args);
final force = results['force'];
await update(const LocalFileSystem(), http.read, force);
}
Future<void> update(
FileSystem fileSystem,
http.HttpRead read,
bool force,
) async {
final versions = versionsFromFile(fileSystem, read);
final updated = <DartSdkVersion>{};
await for (final version in Stream.fromIterable(versions.values)) {
if (await version.update() || force) {
updated.add(version);
}
}
if (force || updated.isNotEmpty) {
final template = fileSystem
.file('Dockerfile-debian.template')
.readAsStringSync();
writeVersionsFile(fileSystem, [versions['stable']!, versions['beta']!]);
for (final version in updated) {
final dockerfileContent = buildDockerfile(version, template);
final dockerfile =
(await fileSystem
.directory('${version.channel}/trixie')
.create(recursive: true))
.childFile('Dockerfile');
await dockerfile.writeAsString(dockerfileContent);
}
}
}