blob: 5218f6feb7e68283087894ceb4e35196341093f5 [file] [log] [blame]
// Copyright 2024 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:convert';
import 'package:buildbucket/buildbucket_pb.dart' as bbv2;
import 'package:cocoon_service/src/model/luci/pubsub_message.dart';
import 'package:cocoon_service/src/model/luci/user_data.dart';
import 'package:fixnum/fixnum.dart';
PushMessage createPushMessage(
Int64 id, {
String? project = 'flutter',
String? bucket = 'try',
String? builder = 'Windows Engine Drone',
int? number = 259942,
bbv2.Status? status = bbv2.Status.SCHEDULED,
Map<String, dynamic>? userData = const {},
bool? addBuildSet = true,
}) {
final bbv2.PubSubCallBack pubSubCallBack = createPubSubCallBack(
id,
project: project,
bucket: bucket,
builder: builder,
number: number,
status: status,
userData: userData,
addBuildSet: addBuildSet,
);
final Map<String, dynamic> pubSubCallBackMap = pubSubCallBack.toProto3Json() as Map<String, dynamic>;
final String pubSubCallBackString = jsonEncode(pubSubCallBackMap);
return PushMessage(data: pubSubCallBackString);
}
bbv2.PubSubCallBack createPubSubCallBack(
Int64 id, {
String? project = 'flutter',
String? bucket = 'try',
String? builder = 'Windows Engine Drone',
int? number = 259942,
bbv2.Status? status = bbv2.Status.SCHEDULED,
Map<String, dynamic>? userData = const {},
bool? addBuildSet = true,
}) {
// this contains BuildsV2PubSub and UserData (List<int>).
final bbv2.BuildsV2PubSub buildsPubSub = createBuild(
id,
project: project,
bucket: bucket,
builder: builder,
number: number,
status: status,
addBuildSet: addBuildSet,
);
final List<int>? userDataBytes = UserData.encodeUserDataToBytes(userData!);
return bbv2.PubSubCallBack(buildPubsub: buildsPubSub, userData: userDataBytes);
}
bbv2.BuildsV2PubSub createBuild(
Int64 id, {
String? project = 'flutter',
String? bucket = 'try',
String? builder = 'Windows Engine Drone',
int? number = 259942,
bbv2.Status? status = bbv2.Status.SCHEDULED,
bool? addBuildSet = true,
}) {
final bbv2.BuildsV2PubSub build = bbv2.BuildsV2PubSub().createEmptyInstance();
build.mergeFromProto3Json(
jsonDecode(
createBuildString(
id,
project: project,
bucket: bucket,
builder: builder,
number: number,
status: status,
addBuildSet: addBuildSet,
),
) as Map<String, dynamic>,
);
return build;
}
String createBuildString(
Int64 id, {
String? project = 'flutter',
String? bucket = 'try',
String? builder = 'Windows Engine Drone',
int? number = 259942,
bbv2.Status? status = bbv2.Status.SCHEDULED,
bool? addBuildSet = true,
}) {
return '''
{
"build": {
"id": "8746138145094216865",
"builder": {
"project": "flutter",
"bucket": "try",
"builder": "Linux web_long_running_tests_1_5"
},
"number": 63405,
"createdBy": "user:flutter-dashboard@appspot.gserviceaccount.com",
"createTime": "2024-06-03T15:48:25.490485466Z",
"startTime": "2024-06-03T15:48:35.560843535Z",
"endTime": "2024-06-03T16:05:18.072809938Z",
"updateTime": "2024-06-03T16:05:18.072809938Z",
"status": "SUCCESS",
"input": {
"experiments": [
"luci.buildbucket.agent.cipd_installation",
"luci.buildbucket.agent.start_build",
"luci.buildbucket.backend_alt",
"luci.buildbucket.backend_go",
"luci.buildbucket.bbagent_getbuild",
"luci.buildbucket.bq_exporter_go",
"luci.buildbucket.parent_tracking",
"luci.buildbucket.use_bbagent",
"luci.recipes.use_python3"
]
},
"output": {
"logs": [
{
"name": "stdout",
"viewUrl": "https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8746138145094216865/+/u/stdout",
"url": "logdog://logs.chromium.org/flutter/buildbucket/cr-buildbucket/8746138145094216865/+/u/stdout"
},
{
"name": "stderr",
"viewUrl": "https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8746138145094216865/+/u/stderr",
"url": "logdog://logs.chromium.org/flutter/buildbucket/cr-buildbucket/8746138145094216865/+/u/stderr"
}
],
"status": "SUCCESS"
},
"infra": {
"buildbucket": {
"requestedProperties": {
"bringup": false,
"cores": 8,
"dependencies": [
{
"dependency": "curl",
"version": "version:7.64.0"
},
{
"dependency": "android_sdk",
"version": "version:34v3"
},
{
"dependency": "chrome_and_driver",
"version": "version:119.0.6045.9"
},
{
"dependency": "goldctl",
"version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"
}
],
"device_type": "none",
"exe_cipd_version": "refs/heads/main",
"git_branch": "master",
"git_ref": "refs/pull/149147/head",
"git_url": "https://github.com/flutter/flutter",
"os": "Ubuntu",
"presubmit_max_attempts": 2,
"recipe": "flutter/flutter_drone",
"shard": "web_long_running_tests",
"subshard": "1_5",
"tags": [
"framework",
"hostonly",
"shard",
"linux"
]
},
"requestedDimensions": [
{
"key": "os",
"value": "Ubuntu"
},
{
"key": "device_type",
"value": "none"
},
{
"key": "cores",
"value": "8"
}
],
"hostname": "cr-buildbucket.appspot.com",
"experimentReasons": {
"luci.best_effort_platform": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.buildbucket.agent.cipd_installation": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.buildbucket.agent.start_build": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.buildbucket.backend_alt": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.buildbucket.backend_go": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.buildbucket.bbagent_getbuild": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.buildbucket.bq_exporter_go": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.buildbucket.canary_software": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.buildbucket.parent_tracking": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.buildbucket.use_bbagent": "EXPERIMENT_REASON_BUILDER_CONFIG",
"luci.buildbucket.use_bbagent_race": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.non_production": "EXPERIMENT_REASON_GLOBAL_DEFAULT",
"luci.recipes.use_python3": "EXPERIMENT_REASON_BUILDER_CONFIG"
},
"agent": {
"input": {
"data": {
"bbagent_utility_packages": {
"cipd": {
"server": "chrome-infra-packages.appspot.com",
"specs": [
{
"package": "infra/tools/luci/cas/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577"
}
]
},
"onPath": [
"bbagent_utility_packages",
"bbagent_utility_packages/bin"
]
},
"cipd_bin_packages": {
"cipd": {
"server": "chrome-infra-packages.appspot.com",
"specs": [
{
"package": "infra/3pp/tools/git/\${platform}",
"version": "version:2@2.42.0.chromium.11"
},
{
"package": "infra/tools/git/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577"
},
{
"package": "infra/tools/luci/git-credential-luci/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577"
},
{
"package": "infra/tools/luci/docker-credential-luci/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577"
},
{
"package": "infra/tools/luci/vpython3/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577"
},
{
"package": "infra/tools/luci/lucicfg/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577"
},
{
"package": "infra/tools/luci-auth/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577"
},
{
"package": "infra/tools/bb/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577"
},
{
"package": "infra/tools/cloudtail/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577"
},
{
"package": "infra/tools/prpc/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577"
},
{
"package": "infra/tools/rdb/\${platform}",
"version": "git_revision:069157ce739832ec1a0a3fe11b2e37e632de50e9"
},
{
"package": "infra/tools/luci/led/\${platform}",
"version": "git_revision:037d7079cf3faced3842e597c9dfcc7475b2ddca"
}
]
},
"onPath": [
"cipd_bin_packages",
"cipd_bin_packages/bin"
]
},
"cipd_bin_packages/cpython3": {
"cipd": {
"server": "chrome-infra-packages.appspot.com",
"specs": [
{
"package": "infra/3pp/tools/cpython3/\${platform}",
"version": "version:2@3.8.10.chromium.34"
}
]
},
"onPath": [
"cipd_bin_packages/cpython3",
"cipd_bin_packages/cpython3/bin"
]
},
"kitchen-checkout": {
"cipd": {
"server": "chrome-infra-packages.appspot.com",
"specs": [
{
"package": "flutter/recipe_bundles/flutter.googlesource.com/recipes",
"version": "refs/heads/main"
}
]
}
}
},
"cipdSource": {
"cipd": {
"cipd": {
"server": "chrome-infra-packages.appspot.com",
"specs": [
{
"package": "infra/tools/cipd/\${platform}",
"version": "git_revision:215bc891d3d06dd49b11109abc9319a38aa66f0a"
}
]
},
"onPath": [
"cipd",
"cipd/bin"
]
}
}
},
"output": {
"resolvedData": {
"": {
"cipd": {
"specs": [
{
"package": "infra/tools/luci/bbagent/linux-amd64",
"version": "6tIw2DHVEcYg5xt0ETPIUzriHt6IfBcQp8ji-SvXcH8C"
}
]
}
},
"bbagent_utility_packages": {
"cipd": {
"specs": [
{
"package": "infra/tools/luci/cas/linux-amd64",
"version": "pGapntrQBvOpG_fzREhX19L2a7rLGwyZEB4VqXDfBzgC"
}
]
}
},
"cipd_bin_packages": {
"cipd": {
"specs": [
{
"package": "infra/3pp/tools/git/linux-amd64",
"version": "L93GSopVoB8RNkV6raxVg1eXHQmZdcYTrXgZoSTLWFEC"
},
{
"package": "infra/tools/git/linux-amd64",
"version": "Xqu_HXC1MH-P79yv4Su2jDHjdlBlV_so9HF3ax8_YSsC"
},
{
"package": "infra/tools/luci/git-credential-luci/linux-amd64",
"version": "f6M4HQ7vio2mfNQBCsVxBBugrsqd3p46Wvgb77mPakwC"
},
{
"package": "infra/tools/luci/docker-credential-luci/linux-amd64",
"version": "kAqKupATGDUHCyutoNNS4eO4BQoAW9flmdKLzAs5gX4C"
},
{
"package": "infra/tools/luci/vpython3/linux-amd64",
"version": "oe3aQL5rg2k6c6SGSFhCImGfhnl2zDPAFhdaCpruw_AC"
},
{
"package": "infra/tools/luci/lucicfg/linux-amd64",
"version": "fLMtVWN-baUP3k_0YQt9dvY1_nBaHbju4g605ds38NEC"
},
{
"package": "infra/tools/luci-auth/linux-amd64",
"version": "n4LZf93sXiBgdmdasB5L90v-usbwR4bRfrTU1TRNWzUC"
},
{
"package": "infra/tools/bb/linux-amd64",
"version": "z6fapR2_VkZiA0KVeKLa1IhNpE49LLMR0Wj8-GbKMNQC"
},
{
"package": "infra/tools/cloudtail/linux-amd64",
"version": "nhss9Uy2MR1OjQpgxCPE-p7kSOObNvgRnm9sBCIciQMC"
},
{
"package": "infra/tools/prpc/linux-amd64",
"version": "vo1eow0ro1pQ5h-LjJ17Ra2EwTnt3C3U7rsSDwTrDAcC"
},
{
"package": "infra/tools/rdb/linux-amd64",
"version": "zujGNFHlaTKRZBiMD_ypyXTeX8ypJfRDTkI3Rhx2AtEC"
},
{
"package": "infra/tools/luci/led/linux-amd64",
"version": "9MscsPmNzDEXsue8XFb0B8fENKbCp9tkjo4EGsSV0IEC"
}
]
}
},
"cipd_bin_packages/cpython3": {
"cipd": {
"specs": [
{
"package": "infra/3pp/tools/cpython3/linux-amd64",
"version": "3p-c2NpZEJWyv4KiHJopTR1ScaHxDKBRMfXlzpre-IwC"
}
]
}
},
"kitchen-checkout": {
"cipd": {
"specs": [
{
"package": "flutter/recipe_bundles/flutter.googlesource.com/recipes",
"version": "PUKnbYmIYQbnhME2pu4sISywm3vPYbxQjRL3CnRv0HMC"
}
]
}
}
},
"status": "SUCCESS",
"agentPlatform": "linux-amd64",
"totalDuration": "4s"
},
"source": {
"cipd": {
"package": "infra/tools/luci/bbagent/\${platform}",
"version": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577",
"server": "chrome-infra-packages.appspot.com"
}
},
"purposes": {
"bbagent_utility_packages": "PURPOSE_BBAGENT_UTILITY",
"kitchen-checkout": "PURPOSE_EXE_PAYLOAD"
},
"cipdClientCache": {
"name": "cipd_client_f970720a374db65e431d9836bdd8bc091f12dd8c12a454b5a67f5b163006301e",
"path": "cipd_client"
},
"cipdPackagesCache": {
"name": "cipd_cache_9237a0836331b01a61cb7a5ed59c6f7b1fa85bf7f14cc136be4a6237cbd59011",
"path": "cipd_cache"
}
},
"knownPublicGerritHosts": [
"android.googlesource.com",
"aomedia.googlesource.com",
"boringssl.googlesource.com",
"chromium.googlesource.com",
"dart.googlesource.com",
"dawn.googlesource.com",
"fuchsia.googlesource.com",
"gn.googlesource.com",
"go.googlesource.com",
"llvm.googlesource.com",
"pdfium.googlesource.com",
"quiche.googlesource.com",
"skia.googlesource.com",
"swiftshader.googlesource.com",
"webrtc.googlesource.com"
],
"buildNumber": true
},
"logdog": {
"hostname": "logs.chromium.org",
"project": "flutter",
"prefix": "buildbucket/cr-buildbucket/8746138145094216865"
},
"resultdb": {
"hostname": "results.api.cr.dev"
},
"bbagent": {
"payloadPath": "kitchen-checkout",
"cacheDir": "cache"
},
"backend": {
"config": {
"agent_binary_cipd_filename": "bbagent\${EXECUTABLE_SUFFIX}",
"agent_binary_cipd_pkg": "infra/tools/luci/bbagent/\${platform}",
"agent_binary_cipd_server": "chrome-infra-packages.appspot.com",
"agent_binary_cipd_vers": "git_revision:2aba496613f92a5b06d577f82b5d028225d3d577",
"priority": 30,
"service_account": "flutter-try-builder@chops-service-accounts.iam.gserviceaccount.com"
},
"task": {
"id": {
"target": "swarming://chromium-swarm",
"id": "69f79b2ca0f23910"
},
"link": "https://chromium-swarm.appspot.com/task?id=69f79b2ca0f23910&o=true&w=true",
"status": "SUCCESS",
"details": {
"bot_dimensions": {
"bot_config": [
"bot_config.py"
],
"caches": [
"cipd_cache_9237a0836331b01a61cb7a5ed59c6f7b1fa85bf7f14cc136be4a6237cbd59011",
"cipd_client_f970720a374db65e431d9836bdd8bc091f12dd8c12a454b5a67f5b163006301e",
"engine_main_builder",
"engine_main_git",
"flutter_main_android_sdk_version_34v3_legacy",
"flutter_main_chrome_and_driver_version_119_0_6045_9_legacy",
"flutter_main_open_jdk_version_17_legacy",
"gradle",
"packages_main_android_sdk_version_33v6_legacy",
"packages_main_chrome_and_driver_version_114_0_legacy",
"packages_main_open_jdk_version_11_legacy"
],
"cipd_platform": [
"linux-amd64"
],
"cores": [
"8"
],
"cpu": [
"x86",
"x86-64",
"x86-64-Broadwell_GCE",
"x86-64-avx2"
],
"device_os": [
"none"
],
"device_type": [
"none"
],
"display_attached": [
"0"
],
"gce": [
"1"
],
"gcp": [
"flutter-machines-prod"
],
"gpu": [
"none"
],
"id": [
"flutter-try-flutterprj-ubuntu-us-central1-b-2-s2lu"
],
"image": [
"dart-focal-24052600-54a1aca43d9"
],
"inside_docker": [
"0"
],
"kernel": [
"5.15.0-1060-gcp"
],
"kvm": [
"1"
],
"locale": [
"en_US.UTF-8"
],
"machine_type": [
"n1-standard-8"
],
"os": [
"Linux",
"Ubuntu",
"Ubuntu-20",
"Ubuntu-20.04",
"Ubuntu-20.04.6"
],
"pool": [
"luci.flutter.try"
],
"puppet_env": [
"production"
],
"python": [
"3",
"3.8",
"3.8.10+chromium.23"
],
"server_version": [
"7672-d26f562"
],
"ssd": [
"1"
],
"zone": [
"us",
"us-central",
"us-central1",
"us-central1-b"
]
}
},
"updateId": "1717430716453135104"
},
"caches": [
{
"name": "pub_cache",
"path": ".pub-cache"
},
{
"name": "flutter_main_android_sdk_version_34v3_legacy",
"path": "android"
},
{
"name": "flutter_main_android_sdk_version_34v3",
"path": "android_sdk"
},
{
"name": "flutter_main_builder",
"path": "builder"
},
{
"name": "flutter_main_chrome_and_driver_version_119_0_6045_9_legacy",
"path": "chrome"
},
{
"name": "flutter_main_chrome_and_driver_version_119_0_6045_9",
"path": "chrome_and_driver"
},
{
"name": "flutter_main_curl_version_7_64_0",
"path": "curl"
},
{
"name": "flutter_main_git",
"path": "git"
},
{
"name": "flutter_main_goldctl_git_revision_720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd",
"path": "goldctl"
},
{
"name": "gradle",
"path": "gradle"
},
{
"name": "vpython",
"path": "vpython",
"envVar": "VPYTHON_VIRTUALENV_ROOT"
}
],
"taskDimensions": [
{
"key": "cores",
"value": "8"
},
{
"key": "device_type",
"value": "none"
},
{
"key": "os",
"value": "Ubuntu"
},
{
"key": "pool",
"value": "luci.flutter.try"
}
],
"hostname": "chromium-swarm.appspot.com"
}
},
"tags": [
{
"key": "buildset",
"value": "pr/git/149147"
},
{
"key": "buildset",
"value": "sha/git/5bbe0ce383e7ed77c68911a20358bbdc2f4c69dd"
},
{
"key": "cipd_version",
"value": "refs/heads/main"
},
{
"key": "github_checkrun",
"value": "25743375958"
},
{
"key": "github_link",
"value": "https://github.com/flutter/flutter/pull/149147"
},
{
"key": "user_agent",
"value": "flutter-cocoon"
}
],
"exe": {
"cipdPackage": "flutter/recipe_bundles/flutter.googlesource.com/recipes",
"cipdVersion": "refs/heads/main",
"cmd": [
"luciexe"
]
},
"schedulingTimeout": "21600s",
"executionTimeout": "3600s",
"gracePeriod": "30s"
},
"buildLargeFields": "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"
}
''';
}