| // Copyright 2020 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:async'; |
| |
| import 'package:github/github.dart'; |
| import 'package:meta/meta.dart'; |
| |
| import '../../cocoon_service.dart'; |
| import '../request_handling/api_request_handler.dart'; |
| import '../request_handling/exceptions.dart'; |
| |
| /// Runs all the applicable tasks for a given PR and commit hash. This will be |
| /// used to unblock rollers when creating a new commit is not possible. |
| @immutable |
| class ResetTryTask extends ApiRequestHandler<Body> { |
| const ResetTryTask({ |
| required super.config, |
| required super.authenticationProvider, |
| required this.scheduler, |
| }); |
| |
| final Scheduler scheduler; |
| |
| static const String kOwnerParam = 'owner'; |
| static const String kRepoParam = 'repo'; |
| static const String kPullRequestNumberParam = 'pr'; |
| static const String kBuilderParam = 'builders'; |
| |
| @override |
| Future<Body> get() async { |
| checkRequiredQueryParameters(<String>[kRepoParam, kPullRequestNumberParam]); |
| final String owner = request!.uri.queryParameters[kOwnerParam] ?? 'flutter'; |
| final String repo = request!.uri.queryParameters[kRepoParam]!; |
| final String pr = request!.uri.queryParameters[kPullRequestNumberParam]!; |
| final String builders = request!.uri.queryParameters[kBuilderParam] ?? ''; |
| final List<String> builderList = getBuilderList(builders); |
| |
| final int? prNumber = int.tryParse(pr); |
| if (prNumber == null) { |
| throw const BadRequestException('$kPullRequestNumberParam must be a number'); |
| } |
| final RepositorySlug slug = RepositorySlug(owner, repo); |
| final GitHub github = await config.createGitHubClient(slug: slug); |
| final PullRequest pullRequest = await github.pullRequests.get(slug, prNumber); |
| await scheduler.triggerPresubmitTargets(pullRequest: pullRequest, builderTriggerList: builderList); |
| return Body.empty; |
| } |
| |
| /// Parses [builders] to a String list. |
| /// |
| /// The [builders] parameter is expecting comma joined string, e.g. 'builder1, builder2'. |
| /// Returns an empty list if no [builders] is specified. |
| List<String> getBuilderList(String builders) { |
| if (builders.isEmpty) { |
| return <String>[]; |
| } |
| return builders.split(',').map((String builder) => builder.trim()).toList(); |
| } |
| } |