| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:io' as io; |
| |
| import 'package:path/path.dart' as path; |
| |
| import 'utils.dart'; |
| |
| // Determine if a `package` tagged with version:`versionTag` already exists in CIPD. |
| Future<bool> cipdKnowsPackageVersion({ |
| required String package, |
| required String versionTag, |
| bool isVerbose = false, |
| }) async { |
| // $ cipd search $package -tag version:$versionTag |
| // Instances: |
| // $package:CIPD_PACKAGE_ID |
| // or: |
| // No matching instances. |
| final String logLevel = isVerbose ? 'debug' : 'warning'; |
| final String stdout = await evalProcess('cipd', <String>[ |
| 'search', |
| package, |
| '--tag', |
| 'version:$versionTag', |
| '--log-level', |
| logLevel, |
| ]); |
| |
| return stdout.contains('Instances:') && stdout.contains(package); |
| } |
| |
| // Runs a CIPD command to upload a package defined by its `config` file. |
| Future<int> uploadDirectoryToCipd({ |
| required io.Directory directory, |
| required String packageName, |
| required String configFileName, |
| required String description, |
| required String root, |
| required String version, |
| bool isDryRun = false, |
| bool isVerbose = false, |
| }) async { |
| final String cipdConfig = ''' |
| package: $packageName |
| description: $description |
| preserve_writable: true |
| root: $root |
| data: |
| - dir: . |
| '''; |
| |
| // Create the config manifest to upload to CIPD |
| final io.File configFile = io.File(path.join(directory.path, configFileName)); |
| await configFile.writeAsString(cipdConfig); |
| |
| final String cipdCommand = isDryRun ? 'pkg-build' : 'create'; |
| // CIPD won't fully shut up even in 'error' mode |
| final String logLevel = isVerbose ? 'debug' : 'warning'; |
| return runProcess('cipd', <String>[ |
| cipdCommand, |
| '--pkg-def', |
| path.basename(configFile.path), |
| '--json-output', |
| '${path.basenameWithoutExtension(configFile.path)}.json', |
| '--log-level', |
| logLevel, |
| if (!isDryRun) ...<String>[ |
| '--tag', |
| 'version:$version', |
| '--ref', |
| version, |
| ], |
| if (isDryRun) ...<String>[ |
| '--out', |
| '${path.basenameWithoutExtension(configFile.path)}.zip', |
| ], |
| ], workingDirectory: directory.path); |
| } |