chore(deps): upgrade to Dart 3.8.0 (#3106)
This commit is contained in:
@@ -114,10 +114,9 @@ String getFlutterArtifactLocation({
|
||||
required String artifactPath,
|
||||
String? engine,
|
||||
}) {
|
||||
final adjustedPath =
|
||||
engine != null
|
||||
? artifactPath.replaceAll(r'$engine', engine)
|
||||
: artifactPath;
|
||||
final adjustedPath = engine != null
|
||||
? artifactPath.replaceAll(r'$engine', engine)
|
||||
: artifactPath;
|
||||
|
||||
return 'https://storage.googleapis.com/$adjustedPath';
|
||||
}
|
||||
|
||||
@@ -5,39 +5,34 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: _fe_analyzer_shared
|
||||
sha256: "88399e291da5f7e889359681a8f64b18c5123e03576b01f32a6a276611e511c3"
|
||||
sha256: e55636ed79578b9abca5fecf9437947798f5ef7456308b5cb85720b793eac92f
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "78.0.0"
|
||||
_macros:
|
||||
dependency: transitive
|
||||
description: dart
|
||||
source: sdk
|
||||
version: "0.3.3"
|
||||
version: "82.0.0"
|
||||
analyzer:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: analyzer
|
||||
sha256: "62899ef43d0b962b056ed2ebac6b47ec76ffd003d5f7c4e4dc870afe63188e33"
|
||||
sha256: "904ae5bb474d32c38fb9482e2d925d5454cda04ddd0e55d2e6826bc72f6ba8c0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.1.0"
|
||||
version: "7.4.5"
|
||||
args:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: args
|
||||
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
|
||||
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.6.0"
|
||||
version: "2.7.0"
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: async
|
||||
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
|
||||
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.12.0"
|
||||
version: "2.13.0"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -66,10 +61,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_daemon
|
||||
sha256: "294a2edaf4814a378725bfe6358210196f5ea37af89ecd81bfa32960113d4948"
|
||||
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.3"
|
||||
version: "4.0.4"
|
||||
build_resolvers:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -106,10 +101,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: built_value
|
||||
sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2"
|
||||
sha256: ea90e81dc4a25a043d9bee692d20ed6d1c4a1662a28c03a96417446c093ed6b4
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.9.3"
|
||||
version: "8.9.5"
|
||||
checked_yaml:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -118,6 +113,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.3"
|
||||
cli_config:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cli_config
|
||||
sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
code_builder:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -146,10 +149,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: coverage
|
||||
sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43
|
||||
sha256: "802bd084fb82e55df091ec8ad1553a7331b61c08251eef19a508b6f3f3a9858d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.11.1"
|
||||
version: "1.13.1"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -162,10 +165,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
sha256: "64b717484993e85315d0c04081b6fca9ef8bac8c2cb794b2e15810250b335913"
|
||||
sha256: "5b236382b47ee411741447c1f1e111459c941ea1b3f2b540dde54c210a3662af"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.0"
|
||||
version: "3.1.0"
|
||||
file:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -194,10 +197,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: glob
|
||||
sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
|
||||
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
version: "2.1.3"
|
||||
graphs:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -210,10 +213,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: hotreloader
|
||||
sha256: ed56fdc1f3a8ac924e717257621d09e9ec20e308ab6352a73a50a1d7a4d9158e
|
||||
sha256: bc167a1163807b03bada490bfe2df25b0d744df359227880220a5cbd04e5734b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.2.0"
|
||||
version: "4.3.0"
|
||||
http:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -234,10 +237,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http_parser
|
||||
sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360"
|
||||
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.1"
|
||||
version: "4.1.2"
|
||||
io:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -250,10 +253,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
|
||||
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.1"
|
||||
version: "0.7.2"
|
||||
json_annotation:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -278,14 +281,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
macros:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: macros
|
||||
sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.3-main.0"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -298,10 +293,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
|
||||
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.16.0"
|
||||
version: "1.17.0"
|
||||
mime:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -330,10 +325,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: package_config
|
||||
sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67"
|
||||
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "2.2.0"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -354,18 +349,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pub_semver
|
||||
sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd"
|
||||
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.5"
|
||||
version: "2.2.0"
|
||||
pubspec_parse:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pubspec_parse
|
||||
sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
|
||||
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
version: "1.5.0"
|
||||
quiver:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -410,10 +405,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_web_socket
|
||||
sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
|
||||
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
version: "3.0.0"
|
||||
source_gen:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -458,18 +453,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
|
||||
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.12.0"
|
||||
version: "1.12.1"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
||||
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
version: "2.1.4"
|
||||
stream_transform:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -498,26 +493,26 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: test
|
||||
sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e"
|
||||
sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.25.15"
|
||||
version: "1.26.2"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
|
||||
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.4"
|
||||
version: "0.7.6"
|
||||
test_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_core
|
||||
sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa"
|
||||
sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.8"
|
||||
version: "0.6.11"
|
||||
timing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -546,10 +541,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
|
||||
sha256: "6f82e9ee8e7339f5d8b699317f6f3afc17c80a68ebef1bc0d6f52a678c14b1e6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "14.3.1"
|
||||
version: "15.0.1"
|
||||
watcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -562,26 +557,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web
|
||||
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
||||
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
version: "1.1.1"
|
||||
web_socket:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web_socket
|
||||
sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
|
||||
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.6"
|
||||
version: "1.0.1"
|
||||
web_socket_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web_socket_channel
|
||||
sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
|
||||
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
version: "3.0.3"
|
||||
webkit_inspection_protocol:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -594,9 +589,9 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: yaml
|
||||
sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
|
||||
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.2"
|
||||
version: "3.1.3"
|
||||
sdks:
|
||||
dart: ">=3.7.0 <4.0.0"
|
||||
dart: ">=3.8.0 <4.0.0"
|
||||
|
||||
@@ -5,7 +5,7 @@ repository: https://github.com/shorebirdtech/shorebird/
|
||||
publish_to: "none"
|
||||
|
||||
environment:
|
||||
sdk: ">=3.7.0 <4.0.0"
|
||||
sdk: ">=3.8.0 <4.0.0"
|
||||
|
||||
dependencies:
|
||||
checked_yaml: ^2.0.2
|
||||
|
||||
@@ -8,19 +8,17 @@ part of 'gcp_alert.dart';
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
GCPAlert _$GCPAlertFromJson(Map<String, dynamic> json) => $checkedCreate(
|
||||
'GCPAlert',
|
||||
json,
|
||||
($checkedConvert) {
|
||||
final val = GCPAlert(
|
||||
incident: $checkedConvert(
|
||||
'incident',
|
||||
(v) => v == null ? null : Incident.fromJson(v as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
},
|
||||
);
|
||||
GCPAlert _$GCPAlertFromJson(Map<String, dynamic> json) =>
|
||||
$checkedCreate('GCPAlert', json, ($checkedConvert) {
|
||||
final val = GCPAlert(
|
||||
incident: $checkedConvert(
|
||||
'incident',
|
||||
(v) =>
|
||||
v == null ? null : Incident.fromJson(v as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
});
|
||||
|
||||
Incident _$IncidentFromJson(Map<String, dynamic> json) => $checkedCreate(
|
||||
'Incident',
|
||||
|
||||
@@ -5,39 +5,34 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: _fe_analyzer_shared
|
||||
sha256: "88399e291da5f7e889359681a8f64b18c5123e03576b01f32a6a276611e511c3"
|
||||
sha256: e55636ed79578b9abca5fecf9437947798f5ef7456308b5cb85720b793eac92f
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "78.0.0"
|
||||
_macros:
|
||||
dependency: transitive
|
||||
description: dart
|
||||
source: sdk
|
||||
version: "0.3.3"
|
||||
version: "82.0.0"
|
||||
analyzer:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: analyzer
|
||||
sha256: "62899ef43d0b962b056ed2ebac6b47ec76ffd003d5f7c4e4dc870afe63188e33"
|
||||
sha256: "904ae5bb474d32c38fb9482e2d925d5454cda04ddd0e55d2e6826bc72f6ba8c0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.1.0"
|
||||
version: "7.4.5"
|
||||
args:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: args
|
||||
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
|
||||
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.6.0"
|
||||
version: "2.7.0"
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: async
|
||||
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
|
||||
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.12.0"
|
||||
version: "2.13.0"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -66,10 +61,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_daemon
|
||||
sha256: "294a2edaf4814a378725bfe6358210196f5ea37af89ecd81bfa32960113d4948"
|
||||
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.3"
|
||||
version: "4.0.4"
|
||||
build_resolvers:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -106,10 +101,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: built_value
|
||||
sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2"
|
||||
sha256: ea90e81dc4a25a043d9bee692d20ed6d1c4a1662a28c03a96417446c093ed6b4
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.9.3"
|
||||
version: "8.9.5"
|
||||
checked_yaml:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -118,6 +113,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.3"
|
||||
cli_config:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cli_config
|
||||
sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
code_builder:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -146,10 +149,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: coverage
|
||||
sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43
|
||||
sha256: "802bd084fb82e55df091ec8ad1553a7331b61c08251eef19a508b6f3f3a9858d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.11.1"
|
||||
version: "1.13.1"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -162,10 +165,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
sha256: "64b717484993e85315d0c04081b6fca9ef8bac8c2cb794b2e15810250b335913"
|
||||
sha256: "5b236382b47ee411741447c1f1e111459c941ea1b3f2b540dde54c210a3662af"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.0"
|
||||
version: "3.1.0"
|
||||
file:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -194,10 +197,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: glob
|
||||
sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
|
||||
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
version: "2.1.3"
|
||||
graphs:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -234,10 +237,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http_parser
|
||||
sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360"
|
||||
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.1"
|
||||
version: "4.1.2"
|
||||
io:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -250,10 +253,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
|
||||
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.1"
|
||||
version: "0.7.2"
|
||||
json_annotation:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -278,14 +281,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
macros:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: macros
|
||||
sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.3-main.0"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -298,10 +293,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
|
||||
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.16.0"
|
||||
version: "1.17.0"
|
||||
mime:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -330,10 +325,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: package_config
|
||||
sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67"
|
||||
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "2.2.0"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -354,18 +349,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pub_semver
|
||||
sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd"
|
||||
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.5"
|
||||
version: "2.2.0"
|
||||
pubspec_parse:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pubspec_parse
|
||||
sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
|
||||
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
version: "1.5.0"
|
||||
shelf:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -402,10 +397,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_web_socket
|
||||
sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
|
||||
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
version: "3.0.0"
|
||||
source_gen:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -450,18 +445,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
|
||||
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.12.0"
|
||||
version: "1.12.1"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
||||
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
version: "2.1.4"
|
||||
stream_transform:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -490,26 +485,26 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: test
|
||||
sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e"
|
||||
sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.25.15"
|
||||
version: "1.26.2"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
|
||||
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.4"
|
||||
version: "0.7.6"
|
||||
test_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_core
|
||||
sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa"
|
||||
sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.8"
|
||||
version: "0.6.11"
|
||||
timing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -538,10 +533,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
|
||||
sha256: "6f82e9ee8e7339f5d8b699317f6f3afc17c80a68ebef1bc0d6f52a678c14b1e6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "15.0.0"
|
||||
version: "15.0.1"
|
||||
watcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -554,26 +549,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web
|
||||
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
||||
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
version: "1.1.1"
|
||||
web_socket:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web_socket
|
||||
sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
|
||||
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.6"
|
||||
version: "1.0.1"
|
||||
web_socket_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web_socket_channel
|
||||
sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
|
||||
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
version: "3.0.3"
|
||||
webkit_inspection_protocol:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -586,9 +581,9 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: yaml
|
||||
sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
|
||||
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.2"
|
||||
version: "3.1.3"
|
||||
sdks:
|
||||
dart: ">=3.7.0 <4.0.0"
|
||||
dart: ">=3.8.0 <4.0.0"
|
||||
|
||||
@@ -4,7 +4,7 @@ version: 1.0.0
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
sdk: ">=3.7.0 <4.0.0"
|
||||
sdk: ">=3.8.0 <4.0.0"
|
||||
|
||||
dependencies:
|
||||
http: ^1.4.0
|
||||
|
||||
@@ -13,10 +13,9 @@ JwkKeyStore _$JwkKeyStoreFromJson(Map<String, dynamic> json) =>
|
||||
final val = JwkKeyStore(
|
||||
keys: $checkedConvert(
|
||||
'keys',
|
||||
(v) =>
|
||||
(v as List<dynamic>)
|
||||
.map((e) => Jwk.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
(v) => (v as List<dynamic>)
|
||||
.map((e) => Jwk.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
|
||||
@@ -4,7 +4,7 @@ version: 1.0.0+1
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
sdk: ">=3.7.0 <4.0.0"
|
||||
sdk: ">=3.8.0 <4.0.0"
|
||||
|
||||
dependencies:
|
||||
clock: ^1.1.0
|
||||
|
||||
@@ -21,12 +21,12 @@ void main() {
|
||||
'https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com';
|
||||
const jwkPublicKeysUrl =
|
||||
'https://login.microsoftonline.com/common/discovery/v2.0/keys';
|
||||
final jwkKeyStoreJsonString =
|
||||
File(p.join('test', 'fixtures', 'jwk_key_store.json')).readAsStringSync();
|
||||
final keyValueKeyStoreString =
|
||||
File(
|
||||
p.join('test', 'fixtures', 'key_value_key_store.json'),
|
||||
).readAsStringSync();
|
||||
final jwkKeyStoreJsonString = File(
|
||||
p.join('test', 'fixtures', 'jwk_key_store.json'),
|
||||
).readAsStringSync();
|
||||
final keyValueKeyStoreString = File(
|
||||
p.join('test', 'fixtures', 'key_value_key_store.json'),
|
||||
).readAsStringSync();
|
||||
final expiresAt = DateTime.fromMillisecondsSinceEpoch(1643687866 * 1000);
|
||||
final validTime = expiresAt.subtract(const Duration(minutes: 15));
|
||||
|
||||
|
||||
@@ -322,11 +322,13 @@ class RedisClient {
|
||||
|
||||
final retryInterval = _socketOptions.retryInterval;
|
||||
final totalAttempts = _socketOptions.retryAttempts;
|
||||
final remainingAttempts =
|
||||
wasConnected ? totalAttempts : retryAttempts - 1;
|
||||
final remainingAttempts = wasConnected
|
||||
? totalAttempts
|
||||
: retryAttempts - 1;
|
||||
final attemptsMade = totalAttempts - remainingAttempts;
|
||||
final attemptInfo =
|
||||
attemptsMade > 0 ? ' ($attemptsMade/$totalAttempts attempts)' : '';
|
||||
final attemptInfo = attemptsMade > 0
|
||||
? ' ($attemptsMade/$totalAttempts attempts)'
|
||||
: '';
|
||||
|
||||
if (wasConnected) _reset();
|
||||
|
||||
@@ -375,8 +377,9 @@ class RedisClient {
|
||||
final totalAttempts = _commandOptions.retryAttempts;
|
||||
remainingAttempts ??= _commandOptions.retryAttempts;
|
||||
final attemptsMade = totalAttempts - remainingAttempts;
|
||||
final attemptInfo =
|
||||
attemptsMade > 0 ? ' ($attemptsMade/$totalAttempts attempts)' : '';
|
||||
final attemptInfo = attemptsMade > 0
|
||||
? ' ($attemptsMade/$totalAttempts attempts)'
|
||||
: '';
|
||||
|
||||
_logger.debug('Executing "$command"$attemptInfo.');
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ repository: https://github.com/shorebirdtech/shorebird/tree/main/packages/redis_
|
||||
topics: [redis, cache, shorebird]
|
||||
|
||||
environment:
|
||||
sdk: ">=3.7.0 <4.0.0"
|
||||
sdk: ">=3.8.0 <4.0.0"
|
||||
|
||||
dependencies:
|
||||
resp_client: ^1.2.0
|
||||
|
||||
@@ -469,8 +469,8 @@ void main() {
|
||||
await expectLater(
|
||||
client.timeSeries.add(
|
||||
key: key,
|
||||
timestamp:
|
||||
RedisTimeSeriesTimestamp.client.now(), // Use client clock
|
||||
timestamp: RedisTimeSeriesTimestamp.client
|
||||
.now(), // Use client clock
|
||||
value: 56,
|
||||
),
|
||||
completes,
|
||||
@@ -490,8 +490,8 @@ void main() {
|
||||
await expectLater(
|
||||
client.timeSeries.add(
|
||||
key: key,
|
||||
timestamp:
|
||||
RedisTimeSeriesTimestamp.server.now(), // Use server clock
|
||||
timestamp: RedisTimeSeriesTimestamp.server
|
||||
.now(), // Use server clock
|
||||
value: 99,
|
||||
),
|
||||
completes,
|
||||
|
||||
@@ -5,7 +5,7 @@ homepage: https://shorebird.dev
|
||||
repository: https://github.com/shorebirdtech/shorebird/tree/main/packages/scoped_deps
|
||||
|
||||
environment:
|
||||
sdk: ">=3.7.0 <4.0.0"
|
||||
sdk: ">=3.8.0 <4.0.0"
|
||||
|
||||
dependencies:
|
||||
meta: ^1.0.0
|
||||
|
||||
@@ -69,10 +69,9 @@ class AndroidSdk {
|
||||
/// Returns the default path to the Android SDK if a home directory is defined
|
||||
/// and we're on a recognized platform, or null otherwise.
|
||||
String? _defaultAndroidSdkPath() {
|
||||
final home =
|
||||
platform.isWindows
|
||||
? platform.environment['USERPROFILE']
|
||||
: platform.environment['HOME'];
|
||||
final home = platform.isWindows
|
||||
? platform.environment['USERPROFILE']
|
||||
: platform.environment['HOME'];
|
||||
if (home == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -23,11 +23,10 @@ class FileSetDiff extends Equatable {
|
||||
return FileSetDiff(
|
||||
addedPaths: newPaths.difference(oldPaths),
|
||||
removedPaths: oldPaths.difference(newPaths),
|
||||
changedPaths:
|
||||
oldPaths
|
||||
.intersection(newPaths)
|
||||
.where((name) => oldPathHashes[name] != newPathHashes[name])
|
||||
.toSet(),
|
||||
changedPaths: oldPaths
|
||||
.intersection(newPaths)
|
||||
.where((name) => oldPathHashes[name] != newPathHashes[name])
|
||||
.toSet(),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -43,8 +43,8 @@ class Plist {
|
||||
String get versionNumber {
|
||||
final applicationProperties =
|
||||
properties.containsKey(applicationPropertiesKey)
|
||||
? properties[applicationPropertiesKey]! as Map<String, Object>
|
||||
: properties;
|
||||
? properties[applicationPropertiesKey]! as Map<String, Object>
|
||||
: properties;
|
||||
final releaseVersion = applicationProperties[releaseVersionKey] as String?;
|
||||
final buildNumber = applicationProperties[buildNumberKey] as String?;
|
||||
if (releaseVersion == null) {
|
||||
|
||||
@@ -68,7 +68,8 @@ extension on String {
|
||||
/// @{endtemplate}
|
||||
class ArtifactBuilder {
|
||||
/// A general recommendation when building artifacts fails.
|
||||
static String runVanillaFlutterBuildRecommendation(String buildCommand) => '''
|
||||
static String runVanillaFlutterBuildRecommendation(String buildCommand) =>
|
||||
'''
|
||||
|
||||
${styleBold.wrap('💡 Fix Recommendations')}
|
||||
|
||||
|
||||
@@ -117,18 +117,17 @@ class AuthenticatedClient extends http.BaseClient {
|
||||
|
||||
if (credentials == null) {
|
||||
final token = _token!;
|
||||
credentials =
|
||||
_credentials = await _tryRefreshCredentials(
|
||||
token.authProvider.clientId,
|
||||
oauth2.AccessCredentials(
|
||||
// This isn't relevant for a refresh operation.
|
||||
AccessToken('Bearer', '', DateTime.timestamp()),
|
||||
token.refreshToken,
|
||||
token.authProvider.scopes,
|
||||
),
|
||||
_baseClient,
|
||||
authEndpoints: token.authProvider.authEndpoints,
|
||||
);
|
||||
credentials = _credentials = await _tryRefreshCredentials(
|
||||
token.authProvider.clientId,
|
||||
oauth2.AccessCredentials(
|
||||
// This isn't relevant for a refresh operation.
|
||||
AccessToken('Bearer', '', DateTime.timestamp()),
|
||||
token.refreshToken,
|
||||
token.authProvider.scopes,
|
||||
),
|
||||
_baseClient,
|
||||
authEndpoints: token.authProvider.authEndpoints,
|
||||
);
|
||||
_onRefreshCredentials?.call(credentials);
|
||||
}
|
||||
|
||||
@@ -136,13 +135,12 @@ class AuthenticatedClient extends http.BaseClient {
|
||||
final jwt = Jwt.parse(credentials.idToken!);
|
||||
final authProvider = jwt.authProvider;
|
||||
|
||||
credentials =
|
||||
_credentials = await _tryRefreshCredentials(
|
||||
authProvider.clientId,
|
||||
credentials,
|
||||
_baseClient,
|
||||
authEndpoints: authProvider.authEndpoints,
|
||||
);
|
||||
credentials = _credentials = await _tryRefreshCredentials(
|
||||
authProvider.clientId,
|
||||
credentials,
|
||||
_baseClient,
|
||||
authEndpoints: authProvider.authEndpoints,
|
||||
);
|
||||
_onRefreshCredentials?.call(credentials);
|
||||
}
|
||||
|
||||
|
||||
@@ -377,11 +377,11 @@ class BundleToolArtifact extends CachedArtifact {
|
||||
|
||||
@override
|
||||
String? get checksum =>
|
||||
// SHA-256 checksum of the bundletool.jar file.
|
||||
// When updating the bundletool version, be sure to update this checksum.
|
||||
// This can be done by running the following command:
|
||||
// ```shell
|
||||
// shasum --algorithm 256 /path/to/file
|
||||
// ```
|
||||
'''45881ead13388872d82c4255b195488b7fc33f2cac5a9a977b0afc5e92367592''';
|
||||
// SHA-256 checksum of the bundletool.jar file.
|
||||
// When updating the bundletool version, be sure to update this checksum.
|
||||
// This can be done by running the following command:
|
||||
// ```shell
|
||||
// shasum --algorithm 256 /path/to/file
|
||||
// ```
|
||||
'''45881ead13388872d82c4255b195488b7fc33f2cac5a9a977b0afc5e92367592''';
|
||||
}
|
||||
|
||||
@@ -547,8 +547,9 @@ aab artifact already exists, continuing...''');
|
||||
artifactPath: releaseZipPath,
|
||||
arch: primaryWindowsReleaseArtifactArch,
|
||||
platform: ReleasePlatform.windows,
|
||||
hash:
|
||||
sha256.convert(await File(releaseZipPath).readAsBytes()).toString(),
|
||||
hash: sha256
|
||||
.convert(await File(releaseZipPath).readAsBytes())
|
||||
.toString(),
|
||||
canSideload: true,
|
||||
podfileLockHash: null,
|
||||
);
|
||||
@@ -825,10 +826,9 @@ aar artifact already exists, continuing...''');
|
||||
artifactPath: zippedAppFrameworkFile.path,
|
||||
arch: 'xcframework',
|
||||
platform: ReleasePlatform.ios,
|
||||
hash:
|
||||
sha256
|
||||
.convert(await zippedAppFrameworkFile.readAsBytes())
|
||||
.toString(),
|
||||
hash: sha256
|
||||
.convert(await zippedAppFrameworkFile.readAsBytes())
|
||||
.toString(),
|
||||
canSideload: false,
|
||||
podfileLockHash: null,
|
||||
);
|
||||
|
||||
@@ -45,11 +45,10 @@ class CodeSigner {
|
||||
_pemBytes(pemFile: publicKeyPemFile, type: PemLabel.publicKey),
|
||||
);
|
||||
|
||||
final publicKeySeq =
|
||||
ASN1Sequence()
|
||||
..add(ASN1Integer(publicKey.modulus))
|
||||
..add(ASN1Integer(publicKey.exponent))
|
||||
..encode();
|
||||
final publicKeySeq = ASN1Sequence()
|
||||
..add(ASN1Integer(publicKey.modulus))
|
||||
..add(ASN1Integer(publicKey.exponent))
|
||||
..encode();
|
||||
return base64.encode(publicKeySeq.encodedBytes!);
|
||||
}
|
||||
|
||||
|
||||
@@ -115,8 +115,8 @@ Android Toolchain
|
||||
final downloadProgress = logger.progress('Measuring GCP download speed');
|
||||
|
||||
try {
|
||||
final downloadSpeed =
|
||||
await networkChecker.performGCPDownloadSpeedTest();
|
||||
final downloadSpeed = await networkChecker
|
||||
.performGCPDownloadSpeedTest();
|
||||
downloadProgress.complete(
|
||||
'GCP Download Speed: ${downloadSpeed.toStringAsFixed(2)} MB/s',
|
||||
);
|
||||
|
||||
@@ -64,8 +64,8 @@ Please make sure you are running "shorebird init" from within your Flutter proje
|
||||
return ExitCode.software.code;
|
||||
}
|
||||
|
||||
final organizationMemberships =
|
||||
await codePushClientWrapper.getOrganizationMemberships();
|
||||
final organizationMemberships = await codePushClientWrapper
|
||||
.getOrganizationMemberships();
|
||||
if (organizationMemberships.isEmpty) {
|
||||
logger.err(
|
||||
'''You do not have any organizations. This should never happen. Please contact us on Discord or send us an email at contact@shorebird.dev.''',
|
||||
@@ -185,8 +185,9 @@ Please make sure you are running "shorebird init" from within your Flutter proje
|
||||
return ExitCode.software.code;
|
||||
}
|
||||
|
||||
final deflavoredAppName =
|
||||
existingApp.displayName.replaceAll(RegExp(r'\(.*\)'), '').trim();
|
||||
final deflavoredAppName = existingApp.displayName
|
||||
.replaceAll(RegExp(r'\(.*\)'), '')
|
||||
.trim();
|
||||
final flavorsToAppIds = shorebirdYaml.flavors!;
|
||||
for (final flavor in newFlavors) {
|
||||
final app = await codePushClientWrapper.createApp(
|
||||
@@ -219,13 +220,12 @@ Please make sure you are running "shorebird init" from within your Flutter proje
|
||||
final needsConfirmation = !force && shorebirdEnv.canAcceptUserInput;
|
||||
final pubspecName = shorebirdEnv.getPubspecYaml()!.name;
|
||||
var displayName = results['display-name'] as String?;
|
||||
displayName ??=
|
||||
needsConfirmation
|
||||
? logger.prompt(
|
||||
'${lightGreen.wrap('?')} How should we refer to this app?',
|
||||
defaultValue: pubspecName,
|
||||
)
|
||||
: pubspecName;
|
||||
displayName ??= needsConfirmation
|
||||
? logger.prompt(
|
||||
'${lightGreen.wrap('?')} How should we refer to this app?',
|
||||
defaultValue: pubspecName,
|
||||
)
|
||||
: pubspecName;
|
||||
final hasNoFlavors = productFlavors.isEmpty;
|
||||
final hasSomeFlavors =
|
||||
productFlavors.isNotEmpty &&
|
||||
@@ -331,7 +331,8 @@ For more information about Shorebird, visit ${link(uri: Uri.parse('https://shore
|
||||
required Directory projectRoot,
|
||||
Map<String, String>? flavors,
|
||||
}) {
|
||||
const content = '''
|
||||
const content =
|
||||
'''
|
||||
# This file is used to configure the Shorebird updater used by your app.
|
||||
# Learn more at $docsUrl
|
||||
# This file does not contain any sensitive information and should be checked into version control.
|
||||
|
||||
@@ -147,13 +147,9 @@ class AarPatcher extends Patcher {
|
||||
final privateKeyFile = argResults.file(
|
||||
CommonArguments.privateKeyArg.name,
|
||||
);
|
||||
final hashSignature =
|
||||
privateKeyFile != null
|
||||
? codeSigner.sign(
|
||||
message: hash,
|
||||
privateKeyPemFile: privateKeyFile,
|
||||
)
|
||||
: null;
|
||||
final hashSignature = privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
|
||||
try {
|
||||
final diffPath = await artifactManager.createDiff(
|
||||
|
||||
@@ -39,7 +39,8 @@ class AndroidPatcher extends Patcher {
|
||||
/// Android versions prior to 3.24.2 have a bug that can cause patches to
|
||||
/// be erroneously uninstalled.
|
||||
/// https://github.com/shorebirdtech/updater/issues/211 was fixed in 3.24.2
|
||||
static final updaterPatchErrorWarning = '''
|
||||
static final updaterPatchErrorWarning =
|
||||
'''
|
||||
Your version of flutter contains a known issue that can cause patches to be erroneously uninstalled in apps that use package:flutter_foreground_task or other plugins that start their own Flutter engines.
|
||||
This issue was fixed in Flutter 3.24.2. Please upgrade to a newer version of Flutter to avoid this issue.
|
||||
|
||||
@@ -192,13 +193,9 @@ Please refer to ${link(uri: Uri.parse('https://github.com/shorebirdtech/shorebir
|
||||
final privateKeyFile = argResults.file(
|
||||
CommonArguments.privateKeyArg.name,
|
||||
);
|
||||
final hashSignature =
|
||||
privateKeyFile != null
|
||||
? codeSigner.sign(
|
||||
message: hash,
|
||||
privateKeyPemFile: privateKeyFile,
|
||||
)
|
||||
: null;
|
||||
final hashSignature = privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
|
||||
try {
|
||||
final diffPath = await artifactManager.createDiff(
|
||||
|
||||
@@ -197,8 +197,9 @@ class IosFrameworkPatcher extends Patcher {
|
||||
lastBuildLinkMetadata = result.linkMetadata;
|
||||
}
|
||||
|
||||
final patchBuildFile =
|
||||
useLinker ? File(_vmcodeOutputPath) : aotSnapshotFile;
|
||||
final patchBuildFile = useLinker
|
||||
? File(_vmcodeOutputPath)
|
||||
: aotSnapshotFile;
|
||||
final File patchFile;
|
||||
if (await aotTools.isGeneratePatchDiffBaseSupported()) {
|
||||
final patchBaseProgress = logger.progress('Generating patch diff base');
|
||||
@@ -233,10 +234,9 @@ class IosFrameworkPatcher extends Patcher {
|
||||
final patchFileSize = patchFile.statSync().size;
|
||||
final privateKeyFile = argResults.file(CommonArguments.privateKeyArg.name);
|
||||
final hash = sha256.convert(patchBuildFile.readAsBytesSync()).toString();
|
||||
final hashSignature =
|
||||
privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
final hashSignature = privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
|
||||
return {
|
||||
Arch.arm64: PatchArtifactBundle(
|
||||
|
||||
@@ -60,10 +60,10 @@ class IosPatcher extends Patcher {
|
||||
static List<String> splitDebugInfoArgs(String? splitDebugInfoPath) {
|
||||
return splitDebugInfoPath != null
|
||||
? [
|
||||
'--dwarf-stack-traces',
|
||||
'--resolve-dwarf-paths',
|
||||
'''--save-debugging-info=${saveDebuggingInfoPath(splitDebugInfoPath)}''',
|
||||
]
|
||||
'--dwarf-stack-traces',
|
||||
'--resolve-dwarf-paths',
|
||||
'''--save-debugging-info=${saveDebuggingInfoPath(splitDebugInfoPath)}''',
|
||||
]
|
||||
: <String>[];
|
||||
}
|
||||
|
||||
@@ -132,10 +132,9 @@ class IosPatcher extends Patcher {
|
||||
|
||||
final String? podfileLockHash;
|
||||
if (shorebirdEnv.iosPodfileLockFile.existsSync()) {
|
||||
podfileLockHash =
|
||||
sha256
|
||||
.convert(shorebirdEnv.iosPodfileLockFile.readAsBytesSync())
|
||||
.toString();
|
||||
podfileLockHash = sha256
|
||||
.convert(shorebirdEnv.iosPodfileLockFile.readAsBytesSync())
|
||||
.toString();
|
||||
} else {
|
||||
podfileLockHash = null;
|
||||
}
|
||||
@@ -165,11 +164,10 @@ This may indicate that the patch contains native changes, which cannot be applie
|
||||
@override
|
||||
Future<File> buildPatchArtifact({String? releaseVersion}) async {
|
||||
final shouldCodesign = argResults['codesign'] == true;
|
||||
final (flutterVersionAndRevision, flutterVersion) =
|
||||
await (
|
||||
shorebirdFlutter.getVersionAndRevision(),
|
||||
shorebirdFlutter.getVersion(),
|
||||
).wait;
|
||||
final (flutterVersionAndRevision, flutterVersion) = await (
|
||||
shorebirdFlutter.getVersionAndRevision(),
|
||||
shorebirdFlutter.getVersion(),
|
||||
).wait;
|
||||
|
||||
if ((flutterVersion ?? minimumSupportedIosFlutterVersion) <
|
||||
minimumSupportedIosFlutterVersion) {
|
||||
@@ -316,10 +314,9 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}''');
|
||||
final patchFileSize = patchFile.statSync().size;
|
||||
final privateKeyFile = argResults.file(CommonArguments.privateKeyArg.name);
|
||||
final hash = sha256.convert(patchBuildFile.readAsBytesSync()).toString();
|
||||
final hashSignature =
|
||||
privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
final hashSignature = privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
|
||||
return {
|
||||
Arch.arm64: PatchArtifactBundle(
|
||||
|
||||
@@ -86,10 +86,9 @@ class LinuxPatcher extends Patcher {
|
||||
final appSoPath = p.join(tempDir.path, 'lib', 'libapp.so');
|
||||
|
||||
final privateKeyFile = argResults.file(CommonArguments.privateKeyArg.name);
|
||||
final hashSignature =
|
||||
privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
final hashSignature = privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
|
||||
final String diffPath;
|
||||
try {
|
||||
|
||||
@@ -102,10 +102,9 @@ class MacosPatcher extends Patcher {
|
||||
|
||||
final String? podfileLockHash;
|
||||
if (shorebirdEnv.macosPodfileLockFile.existsSync()) {
|
||||
podfileLockHash =
|
||||
sha256
|
||||
.convert(shorebirdEnv.macosPodfileLockFile.readAsBytesSync())
|
||||
.toString();
|
||||
podfileLockHash = sha256
|
||||
.convert(shorebirdEnv.macosPodfileLockFile.readAsBytesSync())
|
||||
.toString();
|
||||
} else {
|
||||
podfileLockHash = null;
|
||||
}
|
||||
@@ -134,11 +133,10 @@ This may indicate that the patch contains native changes, which cannot be applie
|
||||
|
||||
@override
|
||||
Future<File> buildPatchArtifact({String? releaseVersion}) async {
|
||||
final (flutterVersionAndRevision, flutterVersion) =
|
||||
await (
|
||||
shorebirdFlutter.getVersionAndRevision(),
|
||||
shorebirdFlutter.getVersion(),
|
||||
).wait;
|
||||
final (flutterVersionAndRevision, flutterVersion) = await (
|
||||
shorebirdFlutter.getVersionAndRevision(),
|
||||
shorebirdFlutter.getVersion(),
|
||||
).wait;
|
||||
|
||||
if ((flutterVersion ?? minimumSupportedMacosFlutterVersion) <
|
||||
minimumSupportedMacosFlutterVersion) {
|
||||
@@ -214,10 +212,9 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}''');
|
||||
final patchFileSize = patchFile.statSync().size;
|
||||
final privateKeyFile = argResults.file(CommonArguments.privateKeyArg.name);
|
||||
final hash = sha256.convert(patchArtifact.readAsBytesSync()).toString();
|
||||
final hashSignature =
|
||||
privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
final hashSignature = privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
|
||||
return PatchArtifactBundle(
|
||||
arch: arch.arch,
|
||||
|
||||
@@ -329,8 +329,8 @@ NOTE: this is ${styleBold.wrap('not')} recommended. Asset changes cannot be incl
|
||||
} else if (shorebirdEnv.canAcceptUserInput) {
|
||||
release = await promptForRelease(releasePlatform);
|
||||
} else {
|
||||
final flutterVersionString =
|
||||
await shorebirdFlutter.getVersionAndRevision();
|
||||
final flutterVersionString = await shorebirdFlutter
|
||||
.getVersionAndRevision();
|
||||
logger.warn('''
|
||||
The release version to patch was not specified.
|
||||
Building with Flutter $flutterVersionString to determine the release version...
|
||||
@@ -372,24 +372,21 @@ Building with Flutter $flutterVersionString to determine the release version...
|
||||
|
||||
final supplementalArtifact =
|
||||
patcher.supplementaryReleaseArtifactArch != null
|
||||
? await codePushClientWrapper.maybeGetReleaseArtifact(
|
||||
appId: appId,
|
||||
releaseId: release.id,
|
||||
arch: patcher.supplementaryReleaseArtifactArch!,
|
||||
platform: releasePlatform,
|
||||
)
|
||||
: null;
|
||||
? await codePushClientWrapper.maybeGetReleaseArtifact(
|
||||
appId: appId,
|
||||
releaseId: release.id,
|
||||
arch: patcher.supplementaryReleaseArtifactArch!,
|
||||
platform: releasePlatform,
|
||||
)
|
||||
: null;
|
||||
|
||||
final releaseArchive = await downloadReleaseArtifact(
|
||||
releaseArtifact: releaseArtifact,
|
||||
);
|
||||
|
||||
final supplementArchive =
|
||||
supplementalArtifact != null
|
||||
? await downloadReleaseArtifact(
|
||||
releaseArtifact: supplementalArtifact,
|
||||
)
|
||||
: null;
|
||||
final supplementArchive = supplementalArtifact != null
|
||||
? await downloadReleaseArtifact(releaseArtifact: supplementalArtifact)
|
||||
: null;
|
||||
|
||||
final releaseFlutterShorebirdEnv = shorebirdEnv.copyWith(
|
||||
flutterRevisionOverride: release.flutterRevision,
|
||||
@@ -401,8 +398,8 @@ Building with Flutter $flutterVersionString to determine the release version...
|
||||
|
||||
// Don't built the patch artifact twice with the same Flutter revision.
|
||||
if (lastBuiltFlutterRevision != release.flutterRevision) {
|
||||
final flutterVersionString =
|
||||
await shorebirdFlutter.getVersionAndRevision();
|
||||
final flutterVersionString = await shorebirdFlutter
|
||||
.getVersionAndRevision();
|
||||
logger.info('''
|
||||
Building patch with Flutter $flutterVersionString
|
||||
''');
|
||||
@@ -555,14 +552,13 @@ Please re-run the release command for this version or create a new release.''');
|
||||
final size = formatBytes(patchArtifactBundles[arch]!.size);
|
||||
return '${arch.name} ($size)';
|
||||
});
|
||||
final trackSummary =
|
||||
(() {
|
||||
return switch (track) {
|
||||
DeploymentTrack.staging => '🟠 Track: ${lightCyan.wrap('Staging')}',
|
||||
DeploymentTrack.beta => '🔵 Track: ${lightCyan.wrap('Beta')}',
|
||||
DeploymentTrack.stable => '🟢 Track: ${lightCyan.wrap('Stable')}',
|
||||
};
|
||||
})();
|
||||
final trackSummary = (() {
|
||||
return switch (track) {
|
||||
DeploymentTrack.staging => '🟠 Track: ${lightCyan.wrap('Staging')}',
|
||||
DeploymentTrack.beta => '🔵 Track: ${lightCyan.wrap('Beta')}',
|
||||
DeploymentTrack.stable => '🟢 Track: ${lightCyan.wrap('Stable')}',
|
||||
};
|
||||
})();
|
||||
|
||||
final linkPercentage = patcher.linkPercentage;
|
||||
final minLinkPercentage = int.parse(
|
||||
|
||||
@@ -107,10 +107,9 @@ class WindowsPatcher extends Patcher {
|
||||
final appSoPath = p.join(tempDir.path, 'data', 'app.so');
|
||||
|
||||
final privateKeyFile = argResults.file(CommonArguments.privateKeyArg.name);
|
||||
final hashSignature =
|
||||
privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
final hashSignature = privateKeyFile != null
|
||||
? codeSigner.sign(message: hash, privateKeyPemFile: privateKeyFile)
|
||||
: null;
|
||||
|
||||
final String diffPath;
|
||||
try {
|
||||
|
||||
@@ -186,27 +186,21 @@ This is only applicable when previewing Android releases.''',
|
||||
//
|
||||
// With these two lists, we can now determine if a platform is previewable
|
||||
// or not, by making a difference between the two lists.
|
||||
final (allReleases, sideloadableReleases) =
|
||||
await (
|
||||
codePushClientWrapper.getReleases(appId: appId),
|
||||
codePushClientWrapper.getReleases(
|
||||
appId: appId,
|
||||
sideloadableOnly: true,
|
||||
),
|
||||
).wait;
|
||||
final (allReleases, sideloadableReleases) = await (
|
||||
codePushClientWrapper.getReleases(appId: appId),
|
||||
codePushClientWrapper.getReleases(appId: appId, sideloadableOnly: true),
|
||||
).wait;
|
||||
|
||||
final maybePlatform =
|
||||
results['platform'] != null
|
||||
? ReleasePlatform.values.byName(results['platform'] as String)
|
||||
: null;
|
||||
final platformReleases =
|
||||
sideloadableReleases
|
||||
.where(
|
||||
(r) =>
|
||||
maybePlatform == null ||
|
||||
r.activePlatforms.contains(maybePlatform),
|
||||
)
|
||||
.toList();
|
||||
final maybePlatform = results['platform'] != null
|
||||
? ReleasePlatform.values.byName(results['platform'] as String)
|
||||
: null;
|
||||
final platformReleases = sideloadableReleases
|
||||
.where(
|
||||
(r) =>
|
||||
maybePlatform == null ||
|
||||
r.activePlatforms.contains(maybePlatform),
|
||||
)
|
||||
.toList();
|
||||
|
||||
if (platformReleases.isEmpty) {
|
||||
if (maybePlatform != null) {
|
||||
@@ -232,10 +226,9 @@ This is only applicable when previewing Android releases.''',
|
||||
return ExitCode.usage.code;
|
||||
}
|
||||
|
||||
final availablePlatforms =
|
||||
release.activePlatforms
|
||||
.where((p) => supportedReleasePlatforms.contains(p))
|
||||
.toList();
|
||||
final availablePlatforms = release.activePlatforms
|
||||
.where((p) => supportedReleasePlatforms.contains(p))
|
||||
.toList();
|
||||
|
||||
if (availablePlatforms.isEmpty) {
|
||||
final activePlatformsString = release.activePlatforms
|
||||
@@ -813,10 +806,9 @@ This is only applicable when previewing Android releases.''',
|
||||
}
|
||||
|
||||
final shouldUseDeviceCtl = deviceForLaunch != null;
|
||||
final progressCompleteMessage =
|
||||
deviceForLaunch != null
|
||||
? 'Using device ${deviceForLaunch.name}'
|
||||
: '''No iOS 17+ device found, looking for devices running iOS 16 or lower''';
|
||||
final progressCompleteMessage = deviceForLaunch != null
|
||||
? 'Using device ${deviceForLaunch.name}'
|
||||
: '''No iOS 17+ device found, looking for devices running iOS 16 or lower''';
|
||||
deviceLocateProgress.complete(progressCompleteMessage);
|
||||
|
||||
final int installExitCode;
|
||||
@@ -1033,11 +1025,10 @@ This is only applicable when previewing Android releases.''',
|
||||
/// that can be previewed).
|
||||
extension Previewable on Release {
|
||||
/// Returns the platforms that can be previewed.
|
||||
List<ReleasePlatform> get activePlatforms =>
|
||||
platformStatuses.entries
|
||||
.where((e) => e.value == ReleaseStatus.active)
|
||||
.map((e) => e.key)
|
||||
.toList();
|
||||
List<ReleasePlatform> get activePlatforms => platformStatuses.entries
|
||||
.where((e) => e.value == ReleaseStatus.active)
|
||||
.map((e) => e.key)
|
||||
.toList();
|
||||
}
|
||||
|
||||
/// Given two [Release]s, one with all the platforms, previewable or not,
|
||||
|
||||
@@ -33,14 +33,13 @@ class AarReleaser extends Releaser {
|
||||
String get buildNumber => argResults['build-number'] as String;
|
||||
|
||||
/// The architectures to build the aar for.
|
||||
Set<Arch> get architectures =>
|
||||
(argResults['target-platform'] as List<String>)
|
||||
.map(
|
||||
(platform) => AndroidArch.availableAndroidArchs.firstWhere(
|
||||
(arch) => arch.targetPlatformCliArg == platform,
|
||||
),
|
||||
)
|
||||
.toSet();
|
||||
Set<Arch> get architectures => (argResults['target-platform'] as List<String>)
|
||||
.map(
|
||||
(platform) => AndroidArch.availableAndroidArchs.firstWhere(
|
||||
(arch) => arch.targetPlatformCliArg == platform,
|
||||
),
|
||||
)
|
||||
.toSet();
|
||||
|
||||
@override
|
||||
ReleaseType get releaseType => ReleaseType.aar;
|
||||
|
||||
@@ -34,14 +34,13 @@ class AndroidReleaser extends Releaser {
|
||||
String get artifactDisplayName => 'Android app bundle';
|
||||
|
||||
/// The architectures to build for.
|
||||
Set<Arch> get architectures =>
|
||||
(argResults['target-platform'] as List<String>)
|
||||
.map(
|
||||
(platform) => AndroidArch.availableAndroidArchs.firstWhere(
|
||||
(arch) => arch.targetPlatformCliArg == platform,
|
||||
),
|
||||
)
|
||||
.toSet();
|
||||
Set<Arch> get architectures => (argResults['target-platform'] as List<String>)
|
||||
.map(
|
||||
(platform) => AndroidArch.availableAndroidArchs.firstWhere(
|
||||
(arch) => arch.targetPlatformCliArg == platform,
|
||||
),
|
||||
)
|
||||
.toSet();
|
||||
|
||||
/// Whether to generate an APK in addition to the AAB.
|
||||
late bool generateApk = argResults['artifact'] as String == 'apk';
|
||||
@@ -93,14 +92,13 @@ Please comment and upvote ${link(uri: Uri.parse('https://github.com/shorebirdtec
|
||||
|
||||
@override
|
||||
Future<FileSystemEntity> buildReleaseArtifacts() async {
|
||||
final architectures =
|
||||
(argResults['target-platform'] as List<String>)
|
||||
.map(
|
||||
(platform) => AndroidArch.availableAndroidArchs.firstWhere(
|
||||
(arch) => arch.targetPlatformCliArg == platform,
|
||||
),
|
||||
)
|
||||
.toSet();
|
||||
final architectures = (argResults['target-platform'] as List<String>)
|
||||
.map(
|
||||
(platform) => AndroidArch.availableAndroidArchs.firstWhere(
|
||||
(arch) => arch.targetPlatformCliArg == platform,
|
||||
),
|
||||
)
|
||||
.toSet();
|
||||
|
||||
final base64PublicKey = argResults.encodedPublicKey;
|
||||
final aab = await artifactBuilder.buildAppBundle(
|
||||
@@ -184,14 +182,13 @@ Please comment and upvote ${link(uri: Uri.parse('https://github.com/shorebirdtec
|
||||
project: projectRoot,
|
||||
flavor: flavor,
|
||||
);
|
||||
apkText =
|
||||
generateApk
|
||||
? '''
|
||||
apkText = generateApk
|
||||
? '''
|
||||
|
||||
Or distribute the apk:
|
||||
${lightCyan.wrap(apkFile.path)}
|
||||
'''
|
||||
: '';
|
||||
: '';
|
||||
} else {
|
||||
apkText = '';
|
||||
}
|
||||
|
||||
@@ -72,8 +72,8 @@ class IosFrameworkReleaser extends Releaser {
|
||||
// Delete the Shorebird supplement directory if it exists.
|
||||
// This is to ensure that we don't accidentally upload stale artifacts
|
||||
// when building with older versions of Flutter.
|
||||
final shorebirdSupplementDir =
|
||||
artifactManager.getIosReleaseSupplementDirectory();
|
||||
final shorebirdSupplementDir = artifactManager
|
||||
.getIosReleaseSupplementDirectory();
|
||||
if (shorebirdSupplementDir?.existsSync() ?? false) {
|
||||
shorebirdSupplementDir!.deleteSync(recursive: true);
|
||||
}
|
||||
|
||||
@@ -97,8 +97,8 @@ To change the version of this release, change your app's version in your pubspec
|
||||
// Delete the Shorebird supplement directory if it exists.
|
||||
// This is to ensure that we don't accidentally upload stale artifacts
|
||||
// when building with older versions of Flutter.
|
||||
final shorebirdSupplementDir =
|
||||
artifactManager.getIosReleaseSupplementDirectory();
|
||||
final shorebirdSupplementDir = artifactManager
|
||||
.getIosReleaseSupplementDirectory();
|
||||
if (shorebirdSupplementDir?.existsSync() ?? false) {
|
||||
shorebirdSupplementDir!.deleteSync(recursive: true);
|
||||
}
|
||||
@@ -157,10 +157,9 @@ To change the version of this release, change your app's version in your pubspec
|
||||
final xcarchiveDirectory = artifactManager.getXcarchiveDirectory()!;
|
||||
final String? podfileLockHash;
|
||||
if (shorebirdEnv.iosPodfileLockFile.existsSync()) {
|
||||
podfileLockHash =
|
||||
sha256
|
||||
.convert(shorebirdEnv.iosPodfileLockFile.readAsBytesSync())
|
||||
.toString();
|
||||
podfileLockHash = sha256
|
||||
.convert(shorebirdEnv.iosPodfileLockFile.readAsBytesSync())
|
||||
.toString();
|
||||
} else {
|
||||
podfileLockHash = null;
|
||||
}
|
||||
@@ -168,10 +167,9 @@ To change the version of this release, change your app's version in your pubspec
|
||||
appId: appId,
|
||||
releaseId: release.id,
|
||||
xcarchivePath: xcarchiveDirectory.path,
|
||||
runnerPath:
|
||||
artifactManager
|
||||
.getIosAppDirectory(xcarchiveDirectory: xcarchiveDirectory)!
|
||||
.path,
|
||||
runnerPath: artifactManager
|
||||
.getIosAppDirectory(xcarchiveDirectory: xcarchiveDirectory)!
|
||||
.path,
|
||||
isCodesigned: codesign,
|
||||
podfileLockHash: podfileLockHash,
|
||||
supplementPath: artifactManager.getIosReleaseSupplementDirectory()?.path,
|
||||
|
||||
@@ -81,7 +81,8 @@ To change the version of this release, change your app's version in your pubspec
|
||||
);
|
||||
|
||||
@override
|
||||
String get postReleaseInstructions => '''
|
||||
String get postReleaseInstructions =>
|
||||
'''
|
||||
|
||||
Linux release created at ${artifactManager.linuxBundleDirectory.path}.
|
||||
''';
|
||||
|
||||
@@ -146,10 +146,9 @@ To change the version of this release, change your app's version in your pubspec
|
||||
|
||||
final String? podfileLockHash;
|
||||
if (shorebirdEnv.macosPodfileLockFile.existsSync()) {
|
||||
podfileLockHash =
|
||||
sha256
|
||||
.convert(shorebirdEnv.macosPodfileLockFile.readAsBytesSync())
|
||||
.toString();
|
||||
podfileLockHash = sha256
|
||||
.convert(shorebirdEnv.macosPodfileLockFile.readAsBytesSync())
|
||||
.toString();
|
||||
} else {
|
||||
podfileLockHash = null;
|
||||
}
|
||||
@@ -173,7 +172,8 @@ To change the version of this release, change your app's version in your pubspec
|
||||
);
|
||||
|
||||
@override
|
||||
String get postReleaseInstructions => '''
|
||||
String get postReleaseInstructions =>
|
||||
'''
|
||||
|
||||
macOS app created at ${artifactManager.getMacOSAppDirectory(flavor: flavor)!.path}.
|
||||
''';
|
||||
|
||||
@@ -269,8 +269,8 @@ of the iOS app that is using this module. (aar and ios-framework only)''',
|
||||
return await runScoped(() async {
|
||||
await cache.updateAll();
|
||||
|
||||
final flutterVersionString =
|
||||
await shorebirdFlutter.getVersionAndRevision();
|
||||
final flutterVersionString = await shorebirdFlutter
|
||||
.getVersionAndRevision();
|
||||
logger.info(
|
||||
'Building ${releaser.artifactDisplayName} with Flutter $flutterVersionString',
|
||||
);
|
||||
|
||||
@@ -114,7 +114,8 @@ To change the version of this release, change your app's version in your pubspec
|
||||
}
|
||||
|
||||
@override
|
||||
String get postReleaseInstructions => '''
|
||||
String get postReleaseInstructions =>
|
||||
'''
|
||||
|
||||
Windows executable created at ${artifactManager.getWindowsReleaseDirectory().path}.
|
||||
''';
|
||||
|
||||
@@ -144,12 +144,11 @@ class GetApksCommand extends ShorebirdCommand {
|
||||
|
||||
await extractFileToDisk(apksZipFile.path, outputDirectory.path);
|
||||
|
||||
final apks =
|
||||
outputDirectory
|
||||
.listSync()
|
||||
.whereType<File>()
|
||||
.where((file) => file.path.endsWith('.apk'))
|
||||
.toList();
|
||||
final apks = outputDirectory
|
||||
.listSync()
|
||||
.whereType<File>()
|
||||
.where((file) => file.path.endsWith('.apk'))
|
||||
.toList();
|
||||
if (apks.isNotEmpty) {
|
||||
logger.info('Generated ${apks.length} apk(s):');
|
||||
for (final file in apks) {
|
||||
|
||||
@@ -286,12 +286,11 @@ class AotTools {
|
||||
|
||||
double? _extractLinkPercentage(File file) {
|
||||
if (!file.existsSync()) return null;
|
||||
final status =
|
||||
const LineSplitter()
|
||||
.convert(file.readAsStringSync())
|
||||
.map(json.decode)
|
||||
.cast<Map<String, dynamic>>()
|
||||
.toList();
|
||||
final status = const LineSplitter()
|
||||
.convert(file.readAsStringSync())
|
||||
.map(json.decode)
|
||||
.cast<Map<String, dynamic>>()
|
||||
.toList();
|
||||
|
||||
final linkSuccess = status.firstWhereOrNull(
|
||||
(line) => line['type'] == 'link_success',
|
||||
|
||||
@@ -31,7 +31,8 @@ class DevicectlException implements Exception {
|
||||
final Object? underlyingException;
|
||||
|
||||
@override
|
||||
String toString() => '''
|
||||
String toString() =>
|
||||
'''
|
||||
DevicectlException: $message
|
||||
Underlying exception: ${underlyingException ?? '(none)'}
|
||||
''';
|
||||
@@ -228,8 +229,9 @@ class Devicectl {
|
||||
);
|
||||
}
|
||||
|
||||
final devicesMatchValue =
|
||||
JsonPath(r'$.result.devices').read(jsonResult).firstOrNull?.value;
|
||||
final devicesMatchValue = JsonPath(
|
||||
r'$.result.devices',
|
||||
).read(jsonResult).firstOrNull?.value;
|
||||
if (devicesMatchValue == null) {
|
||||
throw DevicectlException(message: failureErrorMessage);
|
||||
}
|
||||
|
||||
@@ -34,7 +34,8 @@ class NSError extends Equatable {
|
||||
Json toJson() => _$NSErrorToJson(this);
|
||||
|
||||
@override
|
||||
String toString() => '''
|
||||
String toString() =>
|
||||
'''
|
||||
NSError(
|
||||
code: $code,
|
||||
domain: $domain,
|
||||
@@ -84,7 +85,8 @@ class UserInfo extends Equatable {
|
||||
Json toJson() => _$UserInfoToJson(this);
|
||||
|
||||
@override
|
||||
String toString() => '''
|
||||
String toString() =>
|
||||
'''
|
||||
UserInfo(
|
||||
description: $description,
|
||||
localizedDescription: $localizedDescription,
|
||||
@@ -144,7 +146,8 @@ class NSUnderlyingError extends Equatable {
|
||||
Json toJson() => _$NSUnderlyingErrorToJson(this);
|
||||
|
||||
@override
|
||||
String toString() => '''
|
||||
String toString() =>
|
||||
'''
|
||||
NSUnderlyingError(
|
||||
$error
|
||||
)''';
|
||||
|
||||
@@ -34,31 +34,27 @@ UserInfo _$UserInfoFromJson(Map<String, dynamic> json) => $checkedCreate(
|
||||
final val = UserInfo(
|
||||
description: $checkedConvert(
|
||||
'NSDescription',
|
||||
(v) =>
|
||||
v == null
|
||||
? null
|
||||
: StringContainer.fromJson(v as Map<String, dynamic>),
|
||||
(v) => v == null
|
||||
? null
|
||||
: StringContainer.fromJson(v as Map<String, dynamic>),
|
||||
),
|
||||
localizedDescription: $checkedConvert(
|
||||
'NSLocalizedDescription',
|
||||
(v) =>
|
||||
v == null
|
||||
? null
|
||||
: StringContainer.fromJson(v as Map<String, dynamic>),
|
||||
(v) => v == null
|
||||
? null
|
||||
: StringContainer.fromJson(v as Map<String, dynamic>),
|
||||
),
|
||||
localizedFailureReason: $checkedConvert(
|
||||
'NSLocalizedFailureReason',
|
||||
(v) =>
|
||||
v == null
|
||||
? null
|
||||
: StringContainer.fromJson(v as Map<String, dynamic>),
|
||||
(v) => v == null
|
||||
? null
|
||||
: StringContainer.fromJson(v as Map<String, dynamic>),
|
||||
),
|
||||
underlyingError: $checkedConvert(
|
||||
'NSUnderlyingError',
|
||||
(v) =>
|
||||
v == null
|
||||
? null
|
||||
: NSUnderlyingError.fromJson(v as Map<String, dynamic>),
|
||||
(v) => v == null
|
||||
? null
|
||||
: NSUnderlyingError.fromJson(v as Map<String, dynamic>),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
|
||||
@@ -124,7 +124,8 @@ Your device is locked. Unlock your device first before running.
|
||||
4- Build or run your project again''';
|
||||
|
||||
/// Message when there is no provisioning profile.
|
||||
static const noProvisioningProfileInstructions = '''
|
||||
static const noProvisioningProfileInstructions =
|
||||
'''
|
||||
════════════════════════════════════════════════════════════════════════════════
|
||||
No Provisioning Profile was found for your project's Bundle Identifier or your\u0020
|
||||
device. You can create a new Provisioning Profile for your project in Xcode for\u0020
|
||||
@@ -218,8 +219,9 @@ Or run on an iOS simulator without code signing
|
||||
if (debuggerState == _DebuggerState.launching) {
|
||||
logger.detail(line);
|
||||
final attachSuccess = line == 'success';
|
||||
debuggerState =
|
||||
attachSuccess ? _DebuggerState.attached : _DebuggerState.detached;
|
||||
debuggerState = attachSuccess
|
||||
? _DebuggerState.attached
|
||||
: _DebuggerState.detached;
|
||||
launchProgress.complete(
|
||||
attachSuccess ? 'Started app' : 'Failed to start app',
|
||||
);
|
||||
|
||||
@@ -58,7 +58,8 @@ class PatchExecutable {
|
||||
// More info: https://github.com/shorebirdtech/shorebird/issues/2329
|
||||
const vcRuntimeNotFoundExitCode = -1073741515;
|
||||
if (result.exitCode == vcRuntimeNotFoundExitCode && platform.isWindows) {
|
||||
messageDetails = '''
|
||||
messageDetails =
|
||||
'''
|
||||
This error code indicates that the Microsoft C++ runtime (VCRUNTIME140.dll) could not be found.
|
||||
|
||||
The C++ Runtime can be installed from Microsoft at:
|
||||
|
||||
@@ -22,10 +22,9 @@ extension OptionFinder on ArgResults {
|
||||
// We would ideally check for abbreviations here as well, but ArgResults
|
||||
// doesn't expose its parser (which we could use to get the list of
|
||||
// [Options] being parsed) or an abbreviations map.
|
||||
final abbr =
|
||||
argParser.options.values
|
||||
.firstWhereOrNull((option) => option.name == name)
|
||||
?.abbr;
|
||||
final abbr = argParser.options.values
|
||||
.firstWhereOrNull((option) => option.name == name)
|
||||
?.abbr;
|
||||
|
||||
final flagsToCheck = ['--$name', if (abbr != null) '-$abbr'];
|
||||
|
||||
|
||||
@@ -7,9 +7,8 @@ String formatBytes(int bytes, {int decimals = 2}) {
|
||||
final i = (log(bytes) / log(1024)).floor();
|
||||
final value = bytes / pow(1024, i);
|
||||
final suffix = suffixes[i];
|
||||
final formattedValue =
|
||||
value % 1 == 0 || decimals <= 0
|
||||
? '${value.toInt()} $suffix'
|
||||
: '${value.toStringAsFixed(decimals)} $suffix';
|
||||
final formattedValue = value % 1 == 0 || decimals <= 0
|
||||
? '${value.toInt()} $suffix'
|
||||
: '${value.toStringAsFixed(decimals)} $suffix';
|
||||
return formattedValue;
|
||||
}
|
||||
|
||||
@@ -17,19 +17,18 @@ const _logFileName = 'shorebird.log';
|
||||
/// Where logs are written for the current Shorebird CLI run. A new file will
|
||||
/// be created for every run of the Shorebird CLI, and will have the name
|
||||
/// `timestamp_shorebird.log`.
|
||||
final File currentRunLogFile =
|
||||
(() {
|
||||
final timestamp = clock.now().millisecondsSinceEpoch;
|
||||
final file = File(
|
||||
p.join(shorebirdEnv.logsDirectory.path, '${timestamp}_$_logFileName'),
|
||||
);
|
||||
final File currentRunLogFile = (() {
|
||||
final timestamp = clock.now().millisecondsSinceEpoch;
|
||||
final file = File(
|
||||
p.join(shorebirdEnv.logsDirectory.path, '${timestamp}_$_logFileName'),
|
||||
);
|
||||
|
||||
if (!file.existsSync()) {
|
||||
file.createSync(recursive: true);
|
||||
}
|
||||
if (!file.existsSync()) {
|
||||
file.createSync(recursive: true);
|
||||
}
|
||||
|
||||
return file;
|
||||
})();
|
||||
return file;
|
||||
})();
|
||||
|
||||
/// {@template shorebird_logger}
|
||||
/// A [Logger] that
|
||||
|
||||
@@ -35,14 +35,13 @@ class NetworkCheckerException implements Exception {
|
||||
/// {@endtemplate}
|
||||
class NetworkChecker {
|
||||
/// The URLs to check for network reachability.
|
||||
static final urlsToCheck =
|
||||
[
|
||||
'https://api.shorebird.dev',
|
||||
'https://console.shorebird.dev',
|
||||
'https://oauth2.googleapis.com',
|
||||
'https://storage.googleapis.com',
|
||||
'https://cdn.shorebird.cloud',
|
||||
].map(Uri.parse).toList();
|
||||
static final urlsToCheck = [
|
||||
'https://api.shorebird.dev',
|
||||
'https://console.shorebird.dev',
|
||||
'https://oauth2.googleapis.com',
|
||||
'https://storage.googleapis.com',
|
||||
'https://cdn.shorebird.cloud',
|
||||
].map(Uri.parse).toList();
|
||||
|
||||
/// Verify that each of [urlsToCheck] responds to an HTTP GET request.
|
||||
Future<void> checkReachability() async {
|
||||
|
||||
@@ -167,10 +167,9 @@ class Apple {
|
||||
return;
|
||||
}
|
||||
final baseName = p.basename(file.path);
|
||||
final destName =
|
||||
newBaseName != null
|
||||
? baseName.replaceFirst('App', newBaseName)
|
||||
: baseName;
|
||||
final destName = newBaseName != null
|
||||
? baseName.replaceFirst('App', newBaseName)
|
||||
: baseName;
|
||||
file.copySync(p.join(destDir.path, destName));
|
||||
}
|
||||
|
||||
@@ -270,10 +269,9 @@ class Apple {
|
||||
|
||||
final linkProgress = logger.progress('Linking AOT files');
|
||||
double? linkPercentage;
|
||||
final dumpDebugInfoDir =
|
||||
await aotTools.isLinkDebugInfoSupported()
|
||||
? Directory.systemTemp.createTempSync()
|
||||
: null;
|
||||
final dumpDebugInfoDir = await aotTools.isLinkDebugInfoSupported()
|
||||
? Directory.systemTemp.createTempSync()
|
||||
: null;
|
||||
|
||||
Future<void> dumpDebugInfo() async {
|
||||
if (dumpDebugInfoDir == null) return;
|
||||
|
||||
@@ -107,11 +107,10 @@ class ShorebirdAndroidArtifacts {
|
||||
}
|
||||
|
||||
final allFiles = directory.listSync();
|
||||
final artifactCandidates =
|
||||
allFiles.whereType<File>().where((file) {
|
||||
final fileName = p.basename(file.path);
|
||||
return fileName.artifactId == artifactId;
|
||||
}).toList();
|
||||
final artifactCandidates = allFiles.whereType<File>().where((file) {
|
||||
final fileName = p.basename(file.path);
|
||||
return fileName.artifactId == artifactId;
|
||||
}).toList();
|
||||
|
||||
if (artifactCandidates.isEmpty) {
|
||||
throw ArtifactNotFoundException(
|
||||
@@ -141,8 +140,9 @@ class ShorebirdAndroidArtifacts {
|
||||
flavor != null ? '${flavor}Release' : 'release',
|
||||
);
|
||||
|
||||
final artifactName =
|
||||
flavor == null ? 'app-release.aab' : 'app-$flavor-release.aab';
|
||||
final artifactName = flavor == null
|
||||
? 'app-release.aab'
|
||||
: 'app-$flavor-release.aab';
|
||||
|
||||
return _findArtifact(
|
||||
directory: Directory(buildDir),
|
||||
@@ -160,8 +160,9 @@ class ShorebirdAndroidArtifacts {
|
||||
'flutter-apk',
|
||||
);
|
||||
|
||||
final artifactName =
|
||||
flavor == null ? 'app-release.apk' : 'app-$flavor-release.apk';
|
||||
final artifactName = flavor == null
|
||||
? 'app-release.apk'
|
||||
: 'app-$flavor-release.apk';
|
||||
|
||||
return _findArtifact(
|
||||
directory: Directory(buildDir),
|
||||
|
||||
@@ -125,10 +125,9 @@ class ShorebirdCliCommandRunner extends CompletionCommandRunner<int> {
|
||||
}
|
||||
|
||||
final process = ShorebirdProcess();
|
||||
final shorebirdArtifacts =
|
||||
engineConfig.localEngineSrcPath != null
|
||||
? const ShorebirdLocalEngineArtifacts()
|
||||
: const ShorebirdCachedArtifacts();
|
||||
final shorebirdArtifacts = engineConfig.localEngineSrcPath != null
|
||||
? const ShorebirdLocalEngineArtifacts()
|
||||
: const ShorebirdCachedArtifacts();
|
||||
return await runScoped<Future<int?>>(
|
||||
() => runCommand(topLevelResults),
|
||||
values: {
|
||||
|
||||
@@ -134,10 +134,9 @@ To fix, update your pubspec.yaml to include the following:
|
||||
Future<List<ValidationIssue>> runValidators(
|
||||
List<Validator> validators,
|
||||
) async {
|
||||
final validationIssues =
|
||||
(await Future.wait(
|
||||
validators.map((v) => v.validate()),
|
||||
)).flattened.toList();
|
||||
final validationIssues = (await Future.wait(
|
||||
validators.map((v) => v.validate()),
|
||||
)).flattened.toList();
|
||||
|
||||
for (final issue in validationIssues) {
|
||||
logger.info(issue.displayMessage);
|
||||
|
||||
+2
-1
@@ -28,7 +28,8 @@ class AndroidInternetPermissionValidator extends Validator {
|
||||
|
||||
// coverage:ignore-start
|
||||
@override
|
||||
String get incorrectContextMessage => '''
|
||||
String get incorrectContextMessage =>
|
||||
'''
|
||||
The ${_androidSrcDirectory?.path ?? 'android/app/src'} directory does not exist.
|
||||
|
||||
The command you are running must be run within a Flutter app project that supports the Android platform. If you are releasing a Flutter module, use 'aar' in place of 'android' in your shorebird command.''';
|
||||
|
||||
@@ -34,8 +34,9 @@ class MacosEntitlementsValidator extends Validator {
|
||||
/// project_root/macos/Runner/Release.entitlements, where "Runner" may have
|
||||
/// been renamed.
|
||||
File? get _releaseEntitlementsPlist {
|
||||
final entitlementParentCandidateDirectories =
|
||||
_macosDirectory!.listSync().whereType<Directory>();
|
||||
final entitlementParentCandidateDirectories = _macosDirectory!
|
||||
.listSync()
|
||||
.whereType<Directory>();
|
||||
|
||||
for (final appDir in entitlementParentCandidateDirectories) {
|
||||
final entitlementsPlist = File(
|
||||
@@ -57,7 +58,8 @@ class MacosEntitlementsValidator extends Validator {
|
||||
bool canRunInCurrentContext() => _macosDirectory?.existsSync() ?? false;
|
||||
|
||||
@override
|
||||
String? get incorrectContextMessage => '''
|
||||
String? get incorrectContextMessage =>
|
||||
'''
|
||||
The ${_macosDirectory?.path ?? 'macos'} directory does not exist.
|
||||
|
||||
The command you are running must be run within a Flutter app project that supports the macOS platform.''';
|
||||
@@ -93,10 +95,9 @@ The command you are running must be run within a Flutter app project that suppor
|
||||
severity: ValidationIssueSeverity.error,
|
||||
message:
|
||||
'''${_releaseEntitlementsPlist!.path} is missing the Allow Unsigned Executable Memory ($allowUnsignedExecutableMemoryKey) entitlement.''',
|
||||
fix:
|
||||
() => addAllowUnsignedExecutableMemoryEntitlementToPlist(
|
||||
_releaseEntitlementsPlist!,
|
||||
),
|
||||
fix: () => addAllowUnsignedExecutableMemoryEntitlementToPlist(
|
||||
_releaseEntitlementsPlist!,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,23 +5,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: _fe_analyzer_shared
|
||||
sha256: "88399e291da5f7e889359681a8f64b18c5123e03576b01f32a6a276611e511c3"
|
||||
sha256: e55636ed79578b9abca5fecf9437947798f5ef7456308b5cb85720b793eac92f
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "78.0.0"
|
||||
_macros:
|
||||
dependency: transitive
|
||||
description: dart
|
||||
source: sdk
|
||||
version: "0.3.3"
|
||||
version: "82.0.0"
|
||||
analyzer:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: analyzer
|
||||
sha256: "62899ef43d0b962b056ed2ebac6b47ec76ffd003d5f7c4e4dc870afe63188e33"
|
||||
sha256: "904ae5bb474d32c38fb9482e2d925d5454cda04ddd0e55d2e6826bc72f6ba8c0"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.1.0"
|
||||
version: "7.4.5"
|
||||
archive:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -42,18 +37,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: asn1lib
|
||||
sha256: "4bae5ae63e6d6dd17c4aac8086f3dec26c0236f6a0f03416c6c19d830c367cf5"
|
||||
sha256: "0511d6be23b007e95105ae023db599aea731df604608978dada7f9faf2637623"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.5.8"
|
||||
version: "1.6.4"
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: async
|
||||
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
|
||||
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.12.0"
|
||||
version: "2.13.0"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -82,10 +77,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_daemon
|
||||
sha256: "294a2edaf4814a378725bfe6358210196f5ea37af89ecd81bfa32960113d4948"
|
||||
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.3"
|
||||
version: "4.0.4"
|
||||
build_resolvers:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -138,10 +133,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: built_value
|
||||
sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2"
|
||||
sha256: ea90e81dc4a25a043d9bee692d20ed6d1c4a1662a28c03a96417446c093ed6b4
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.9.3"
|
||||
version: "8.9.5"
|
||||
checked_yaml:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -158,6 +153,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.1"
|
||||
cli_config:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cli_config
|
||||
sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.0"
|
||||
cli_util:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -202,10 +205,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: coverage
|
||||
sha256: e3493833ea012784c740e341952298f1cc77f1f01b1bbc3eb4eecf6984fb7f43
|
||||
sha256: "802bd084fb82e55df091ec8ad1553a7331b61c08251eef19a508b6f3f3a9858d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.11.1"
|
||||
version: "1.13.1"
|
||||
crypto:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -218,18 +221,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac"
|
||||
sha256: "5b236382b47ee411741447c1f1e111459c941ea1b3f2b540dde54c210a3662af"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
version: "3.1.0"
|
||||
decimal:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: decimal
|
||||
sha256: da8f65df568345f2738cc8b0de74971c86d2d93ce5fc8c4ec094f6b7c5d48eb5
|
||||
sha256: "28239b8b929c1bd8618702e6dbc96e2618cf99770bbe9cb040d6cf56a11e4ec3"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.0"
|
||||
version: "3.2.1"
|
||||
equatable:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -242,10 +245,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: ffi
|
||||
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
||||
sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.3"
|
||||
version: "2.1.4"
|
||||
file:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -274,18 +277,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: glob
|
||||
sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
|
||||
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
version: "2.1.3"
|
||||
google_identity_services_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: google_identity_services_web
|
||||
sha256: "55580f436822d64c8ff9a77e37d61f5fb1e6c7ec9d632a43ee324e2a05c3c6c9"
|
||||
sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.3"
|
||||
version: "0.3.3+1"
|
||||
googleapis_auth:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -354,10 +357,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
|
||||
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.1"
|
||||
version: "0.7.2"
|
||||
json_annotation:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -397,14 +400,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
macros:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: macros
|
||||
sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.3-main.0"
|
||||
mason_logger:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -433,10 +428,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: meta
|
||||
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
|
||||
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.16.0"
|
||||
version: "1.17.0"
|
||||
mime:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -465,10 +460,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: package_config
|
||||
sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67"
|
||||
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "2.2.0"
|
||||
path:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -617,10 +612,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_web_socket
|
||||
sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
|
||||
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
version: "3.0.0"
|
||||
shorebird_code_push_client:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -727,26 +722,26 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: test
|
||||
sha256: f1665eeffe3b6b193548b5f515e8d1b54ccd9a6e0e7721a417e134e7ed7f06a1
|
||||
sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.26.0"
|
||||
version: "1.26.2"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: "6c7653816b1c938e121b69ff63a33c9dc68102b65a5fb0a5c0f9786256ed33e6"
|
||||
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.5"
|
||||
version: "0.7.6"
|
||||
test_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_core
|
||||
sha256: "3caa7c3956b366643b2dedecff764cc32030317b2a15252aed845570df6bcc0f"
|
||||
sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.9"
|
||||
version: "0.6.11"
|
||||
timing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -791,10 +786,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
|
||||
sha256: "6f82e9ee8e7339f5d8b699317f6f3afc17c80a68ebef1bc0d6f52a678c14b1e6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "15.0.0"
|
||||
version: "15.0.1"
|
||||
watcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -807,26 +802,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web
|
||||
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
||||
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
version: "1.1.1"
|
||||
web_socket:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web_socket
|
||||
sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
|
||||
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.6"
|
||||
version: "1.0.1"
|
||||
web_socket_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web_socket_channel
|
||||
sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
|
||||
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
version: "3.0.3"
|
||||
webkit_inspection_protocol:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -839,10 +834,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: win32
|
||||
sha256: b89e6e24d1454e149ab20fbb225af58660f0c0bf4475544650700d8e2da54aef
|
||||
sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.11.0"
|
||||
version: "5.13.0"
|
||||
xml:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -868,4 +863,4 @@ packages:
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
sdks:
|
||||
dart: ">=3.7.0 <4.0.0"
|
||||
dart: ">=3.8.0 <4.0.0"
|
||||
|
||||
@@ -6,7 +6,7 @@ repository: https://github.com/shorebirdtech/shorebird
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
sdk: ">=3.7.0 <4.0.0"
|
||||
sdk: ">=3.8.0 <4.0.0"
|
||||
|
||||
dependencies:
|
||||
archive: ^4.0.7
|
||||
|
||||
@@ -831,12 +831,11 @@ Reason: Exited with code 70.'''),
|
||||
runInShell: any(named: 'runInShell'),
|
||||
),
|
||||
).thenAnswer((_) async {
|
||||
appDill =
|
||||
File(p.join(projectRoot.path, '.dart_tool', 'app.dill'))
|
||||
..createSync(recursive: true)
|
||||
..setLastModifiedSync(
|
||||
DateTime.now().add(const Duration(seconds: 10)),
|
||||
);
|
||||
appDill = File(p.join(projectRoot.path, '.dart_tool', 'app.dill'))
|
||||
..createSync(recursive: true)
|
||||
..setLastModifiedSync(
|
||||
DateTime.now().add(const Duration(seconds: 10)),
|
||||
);
|
||||
|
||||
return ExitCode.success.code;
|
||||
});
|
||||
@@ -1018,12 +1017,11 @@ Reason: Exited with code 70.'''),
|
||||
runInShell: any(named: 'runInShell'),
|
||||
),
|
||||
).thenAnswer((_) async {
|
||||
appDill =
|
||||
File(p.join(projectRoot.path, '.dart_tool', 'app.dill'))
|
||||
..createSync(recursive: true)
|
||||
..setLastModifiedSync(
|
||||
DateTime.now().add(const Duration(seconds: 10)),
|
||||
);
|
||||
appDill = File(p.join(projectRoot.path, '.dart_tool', 'app.dill'))
|
||||
..createSync(recursive: true)
|
||||
..setLastModifiedSync(
|
||||
DateTime.now().add(const Duration(seconds: 10)),
|
||||
);
|
||||
|
||||
return ExitCode.success.code;
|
||||
});
|
||||
@@ -1215,12 +1213,11 @@ Reason: Exited with code 70.'''),
|
||||
runInShell: any(named: 'runInShell'),
|
||||
),
|
||||
).thenAnswer((_) async {
|
||||
appDill =
|
||||
File(p.join(projectRoot.path, '.dart_tool', 'app.dill'))
|
||||
..createSync(recursive: true)
|
||||
..setLastModifiedSync(
|
||||
DateTime.now().add(const Duration(seconds: 10)),
|
||||
);
|
||||
appDill = File(p.join(projectRoot.path, '.dart_tool', 'app.dill'))
|
||||
..createSync(recursive: true)
|
||||
..setLastModifiedSync(
|
||||
DateTime.now().add(const Duration(seconds: 10)),
|
||||
);
|
||||
|
||||
return ExitCode.success.code;
|
||||
});
|
||||
|
||||
@@ -163,15 +163,16 @@ void main() {
|
||||
buildCodePushClient: ({Uri? hostedUri, http.Client? httpClient}) {
|
||||
return codePushClient;
|
||||
},
|
||||
obtainAccessCredentials: (
|
||||
clientId,
|
||||
scopes,
|
||||
client,
|
||||
userPrompt, {
|
||||
AuthEndpoints authEndpoints = const GoogleAuthEndpoints(),
|
||||
}) async {
|
||||
return accessCredentials;
|
||||
},
|
||||
obtainAccessCredentials:
|
||||
(
|
||||
clientId,
|
||||
scopes,
|
||||
client,
|
||||
userPrompt, {
|
||||
AuthEndpoints authEndpoints = const GoogleAuthEndpoints(),
|
||||
}) async {
|
||||
return accessCredentials;
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -272,8 +273,9 @@ void main() {
|
||||
),
|
||||
]),
|
||||
);
|
||||
final captured =
|
||||
verify(() => httpClient.send(captureAny())).captured;
|
||||
final captured = verify(
|
||||
() => httpClient.send(captureAny()),
|
||||
).captured;
|
||||
expect(captured, hasLength(1));
|
||||
final request = captured.first as http.BaseRequest;
|
||||
expect(request.headers['Authorization'], equals('Bearer $idToken'));
|
||||
@@ -409,8 +411,9 @@ void main() {
|
||||
),
|
||||
]),
|
||||
);
|
||||
final captured =
|
||||
verify(() => httpClient.send(captureAny())).captured;
|
||||
final captured = verify(
|
||||
() => httpClient.send(captureAny()),
|
||||
).captured;
|
||||
expect(captured, hasLength(1));
|
||||
final request = captured.first as http.BaseRequest;
|
||||
expect(request.headers['Authorization'], equals('Bearer $idToken'));
|
||||
@@ -553,7 +556,8 @@ Please regenerate using `shorebird login:ci`, update the $shorebirdTokenEnvVar e
|
||||
group('when token has leading or trailing spaces and newlines', () {
|
||||
setUp(() {
|
||||
when(() => platform.environment).thenReturn(<String, String>{
|
||||
shorebirdTokenEnvVar: '''
|
||||
shorebirdTokenEnvVar:
|
||||
'''
|
||||
${ciToken.toBase64()}
|
||||
|
||||
''',
|
||||
|
||||
@@ -346,20 +346,18 @@ void main() {
|
||||
completes,
|
||||
);
|
||||
|
||||
final requests =
|
||||
verify(
|
||||
() => httpClient.send(captureAny()),
|
||||
).captured.cast<http.BaseRequest>().map((r) => r.url).toList();
|
||||
final requests = verify(
|
||||
() => httpClient.send(captureAny()),
|
||||
).captured.cast<http.BaseRequest>().map((r) => r.url).toList();
|
||||
|
||||
String perEngine(String name) =>
|
||||
'${cache.storageBaseUrl}/${cache.storageBucket}/shorebird/$shorebirdEngineRevision/$name';
|
||||
|
||||
final expected =
|
||||
[
|
||||
perEngine('patch-darwin-x64.zip'),
|
||||
'https://github.com/google/bundletool/releases/download/1.17.1/bundletool-all-1.17.1.jar',
|
||||
perEngine('aot-tools.dill'),
|
||||
].map(Uri.parse).toList();
|
||||
final expected = [
|
||||
perEngine('patch-darwin-x64.zip'),
|
||||
'https://github.com/google/bundletool/releases/download/1.17.1/bundletool-all-1.17.1.jar',
|
||||
perEngine('aot-tools.dill'),
|
||||
].map(Uri.parse).toList();
|
||||
|
||||
expect(requests, equals(expected));
|
||||
});
|
||||
@@ -372,20 +370,18 @@ void main() {
|
||||
completes,
|
||||
);
|
||||
|
||||
final requests =
|
||||
verify(
|
||||
() => httpClient.send(captureAny()),
|
||||
).captured.cast<http.BaseRequest>().map((r) => r.url).toList();
|
||||
final requests = verify(
|
||||
() => httpClient.send(captureAny()),
|
||||
).captured.cast<http.BaseRequest>().map((r) => r.url).toList();
|
||||
|
||||
String perEngine(String name) =>
|
||||
'${cache.storageBaseUrl}/${cache.storageBucket}/shorebird/$shorebirdEngineRevision/$name';
|
||||
|
||||
final expected =
|
||||
[
|
||||
perEngine('patch-windows-x64.zip'),
|
||||
'https://github.com/google/bundletool/releases/download/1.17.1/bundletool-all-1.17.1.jar',
|
||||
perEngine('aot-tools.dill'),
|
||||
].map(Uri.parse).toList();
|
||||
final expected = [
|
||||
perEngine('patch-windows-x64.zip'),
|
||||
'https://github.com/google/bundletool/releases/download/1.17.1/bundletool-all-1.17.1.jar',
|
||||
perEngine('aot-tools.dill'),
|
||||
].map(Uri.parse).toList();
|
||||
|
||||
expect(requests, equals(expected));
|
||||
});
|
||||
@@ -398,20 +394,18 @@ void main() {
|
||||
completes,
|
||||
);
|
||||
|
||||
final requests =
|
||||
verify(
|
||||
() => httpClient.send(captureAny()),
|
||||
).captured.cast<http.BaseRequest>().map((r) => r.url).toList();
|
||||
final requests = verify(
|
||||
() => httpClient.send(captureAny()),
|
||||
).captured.cast<http.BaseRequest>().map((r) => r.url).toList();
|
||||
|
||||
String perEngine(String name) =>
|
||||
'${cache.storageBaseUrl}/${cache.storageBucket}/shorebird/$shorebirdEngineRevision/$name';
|
||||
|
||||
final expected =
|
||||
[
|
||||
perEngine('patch-linux-x64.zip'),
|
||||
'https://github.com/google/bundletool/releases/download/1.17.1/bundletool-all-1.17.1.jar',
|
||||
perEngine('aot-tools.dill'),
|
||||
].map(Uri.parse).toList();
|
||||
final expected = [
|
||||
perEngine('patch-linux-x64.zip'),
|
||||
'https://github.com/google/bundletool/releases/download/1.17.1/bundletool-all-1.17.1.jar',
|
||||
perEngine('aot-tools.dill'),
|
||||
].map(Uri.parse).toList();
|
||||
|
||||
expect(requests, equals(expected));
|
||||
});
|
||||
|
||||
@@ -30,7 +30,8 @@ void main() {
|
||||
const appId = 'test_app_id';
|
||||
const appName = 'test_app_name';
|
||||
const app = App(id: appId, displayName: appName);
|
||||
const pubspecYamlContent = '''
|
||||
const pubspecYamlContent =
|
||||
'''
|
||||
name: $appName
|
||||
version: $version
|
||||
environment:
|
||||
|
||||
@@ -586,20 +586,17 @@ void main() {
|
||||
|
||||
// Hash the patch artifacts and append '-signature' to get the
|
||||
// expected signatures, per the mock of [codeSigner.sign] above.
|
||||
final expectedSignatures =
|
||||
Arch.values
|
||||
.map(
|
||||
(arch) =>
|
||||
patchArtifactForArch(extractedAarDirectory, arch),
|
||||
)
|
||||
.map(
|
||||
(f) => sha256.convert(f.readAsBytesSync()).toString(),
|
||||
)
|
||||
.map((hash) => '$hash-signature')
|
||||
.toList();
|
||||
final expectedSignatures = Arch.values
|
||||
.map(
|
||||
(arch) => patchArtifactForArch(extractedAarDirectory, arch),
|
||||
)
|
||||
.map((f) => sha256.convert(f.readAsBytesSync()).toString())
|
||||
.map((hash) => '$hash-signature')
|
||||
.toList();
|
||||
|
||||
final signatures =
|
||||
result.values.map((bundle) => bundle.hashSignature).toList();
|
||||
final signatures = result.values
|
||||
.map((bundle) => bundle.hashSignature)
|
||||
.toList();
|
||||
expect(signatures, equals(expectedSignatures));
|
||||
},
|
||||
);
|
||||
|
||||
@@ -629,17 +629,15 @@ Looked in:
|
||||
|
||||
// Hash the patch artifacts and append '-signature' to get the
|
||||
// expected signatures, per the mock of [codeSigner.sign] above.
|
||||
final expectedSignatures =
|
||||
Arch.values
|
||||
.map(patchArtifactForArch)
|
||||
.map(
|
||||
(f) => sha256.convert(f.readAsBytesSync()).toString(),
|
||||
)
|
||||
.map((hash) => '$hash-signature')
|
||||
.toList();
|
||||
final expectedSignatures = Arch.values
|
||||
.map(patchArtifactForArch)
|
||||
.map((f) => sha256.convert(f.readAsBytesSync()).toString())
|
||||
.map((hash) => '$hash-signature')
|
||||
.toList();
|
||||
|
||||
final signatures =
|
||||
result.values.map((bundle) => bundle.hashSignature).toList();
|
||||
final signatures = result.values
|
||||
.map((bundle) => bundle.hashSignature)
|
||||
.toList();
|
||||
expect(signatures, equals(expectedSignatures));
|
||||
},
|
||||
);
|
||||
|
||||
@@ -326,8 +326,9 @@ void main() {
|
||||
).thenAnswer((_) async => nativeChangeDiffStatus);
|
||||
|
||||
const podfileLockContents = 'lock file';
|
||||
podfileLockHash =
|
||||
sha256.convert(utf8.encode(podfileLockContents)).toString();
|
||||
podfileLockHash = sha256
|
||||
.convert(utf8.encode(podfileLockContents))
|
||||
.toString();
|
||||
final podfileLockFile =
|
||||
File(
|
||||
p.join(
|
||||
|
||||
@@ -346,8 +346,9 @@ void main() {
|
||||
),
|
||||
);
|
||||
|
||||
final expectedHash =
|
||||
sha256.convert(await patchArtifact.readAsBytes()).toString();
|
||||
final expectedHash = sha256
|
||||
.convert(await patchArtifact.readAsBytes())
|
||||
.toString();
|
||||
|
||||
expect(
|
||||
patchArtifacts,
|
||||
|
||||
@@ -321,8 +321,9 @@ void main() {
|
||||
).thenAnswer((_) async => nativeChangeDiffStatus);
|
||||
|
||||
const podfileLockContents = 'lock file';
|
||||
podfileLockHash =
|
||||
sha256.convert(utf8.encode(podfileLockContents)).toString();
|
||||
podfileLockHash = sha256
|
||||
.convert(utf8.encode(podfileLockContents))
|
||||
.toString();
|
||||
final podfileLockFile =
|
||||
File(
|
||||
p.join(
|
||||
|
||||
@@ -1020,10 +1020,9 @@ void main() {
|
||||
|
||||
// Verify that the logger.chooseOne<Release> display function is
|
||||
// correct
|
||||
final displayFunctionCapture =
|
||||
verificationResult.captured.flattened
|
||||
.whereType<String Function(Release)>()
|
||||
.first;
|
||||
final displayFunctionCapture = verificationResult.captured.flattened
|
||||
.whereType<String Function(Release)>()
|
||||
.first;
|
||||
expect(displayFunctionCapture(release), equals(release.version));
|
||||
},
|
||||
);
|
||||
|
||||
@@ -417,8 +417,9 @@ void main() {
|
||||
),
|
||||
);
|
||||
|
||||
final expectedHash =
|
||||
sha256.convert(await patchArtifact.readAsBytes()).toString();
|
||||
final expectedHash = sha256
|
||||
.convert(await patchArtifact.readAsBytes())
|
||||
.toString();
|
||||
|
||||
expect(
|
||||
patchArtifacts,
|
||||
|
||||
@@ -123,11 +123,10 @@ void main() {
|
||||
final tempDir = Directory.systemTemp.createTempSync();
|
||||
final aabDirectory = Directory(p.join(tempDir.path, 'app-release'))
|
||||
..createSync(recursive: true);
|
||||
final yamlContents =
|
||||
[
|
||||
'app_id: $appId\n',
|
||||
if (channel != null) 'channel: $channel\n',
|
||||
].join();
|
||||
final yamlContents = [
|
||||
'app_id: $appId\n',
|
||||
if (channel != null) 'channel: $channel\n',
|
||||
].join();
|
||||
File(
|
||||
p.join(
|
||||
aabDirectory.path,
|
||||
@@ -1323,11 +1322,16 @@ channel: ${track.channel}
|
||||
),
|
||||
).called(1);
|
||||
verify(
|
||||
() =>
|
||||
adb.startApp(package: any(named: 'package'), deviceId: deviceId),
|
||||
() => adb.startApp(
|
||||
package: any(named: 'package'),
|
||||
deviceId: deviceId,
|
||||
),
|
||||
).called(1);
|
||||
verify(
|
||||
() => adb.logcat(filter: any(named: 'filter'), deviceId: deviceId),
|
||||
() => adb.logcat(
|
||||
filter: any(named: 'filter'),
|
||||
deviceId: deviceId,
|
||||
),
|
||||
).called(1);
|
||||
});
|
||||
|
||||
@@ -2201,14 +2205,16 @@ channel: ${DeploymentTrack.staging.channel}
|
||||
});
|
||||
|
||||
group('log output', () {
|
||||
final rawLogOutput = '''
|
||||
final rawLogOutput =
|
||||
'''
|
||||
2025-01-31 10:15:29.807 Df macos_sandbox[33557:2cc3d] [com.apple.network:] networkd_settings_read_from_file initialized networkd settings by reading plist directly
|
||||
|
||||
2025-01-31 10:15:29.807 Df macos_sandbox[33557:2cc3d] [com.apple.network:path] nw_path_libinfo_path_check [5E11C960-BB0A-456A-8024-620DAB6CCF17 Hostname#941210b4:0 tcp, legacy-socket, attribution: developer]
|
||||
libinfo check path: satisfied (Path is satisfied), interface: en0, ipv4, dns
|
||||
|
||||
2025-01-31 10:15:29.808 Df macos_sandbox[33557:2cc12] [dev.shorebird:updater::updater] [shorebird] Reporting successful launch.
|
||||
'''.split('\n');
|
||||
'''
|
||||
.split('\n');
|
||||
|
||||
setUp(() {
|
||||
setupMacosShorebirdYaml();
|
||||
|
||||
@@ -464,8 +464,7 @@ void main() {
|
||||
test('returns expected instructions', () {
|
||||
expect(
|
||||
runWithOverrides(() => aarReleaser.postReleaseInstructions),
|
||||
equals(
|
||||
'''
|
||||
equals('''
|
||||
|
||||
Your next steps:
|
||||
|
||||
@@ -497,8 +496,7 @@ dependencies {
|
||||
releaseImplementation '${shorebirdEnv.androidPackageName}:flutter_release:$buildNumber'
|
||||
// ...
|
||||
}''')}
|
||||
''',
|
||||
),
|
||||
'''),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -506,10 +506,9 @@ To change the version of this release, change your app's version in your pubspec
|
||||
group('when plist does not contain version number', () {
|
||||
late File plist;
|
||||
setUp(() {
|
||||
plist =
|
||||
File(p.join(xcarchiveDirectory.path, 'Info.plist'))
|
||||
..createSync()
|
||||
..writeAsStringSync('''
|
||||
plist = File(p.join(xcarchiveDirectory.path, 'Info.plist'))
|
||||
..createSync()
|
||||
..writeAsStringSync('''
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
|
||||
@@ -429,10 +429,9 @@ To change the version of this release, change your app's version in your pubspec
|
||||
group('when plist does not contain version number', () {
|
||||
late File plist;
|
||||
setUp(() {
|
||||
plist =
|
||||
File(p.join(appDirectory.path, 'Contents', 'Info.plist'))
|
||||
..createSync()
|
||||
..writeAsStringSync('''
|
||||
plist = File(p.join(appDirectory.path, 'Contents', 'Info.plist'))
|
||||
..createSync()
|
||||
..writeAsStringSync('''
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
|
||||
@@ -96,8 +96,9 @@ void main() {
|
||||
'returns null if no CoreDevice with the given deviceID can be found',
|
||||
() async {
|
||||
exitCode = ExitCode.success;
|
||||
jsonOutput =
|
||||
File('$fixturesPath/device_list_success.json').readAsStringSync();
|
||||
jsonOutput = File(
|
||||
'$fixturesPath/device_list_success.json',
|
||||
).readAsStringSync();
|
||||
expect(
|
||||
await runWithOverrides(
|
||||
() => devicectl.deviceForLaunch(deviceId: 'fake device id'),
|
||||
@@ -109,10 +110,9 @@ void main() {
|
||||
|
||||
test('returns null if no CoreDevice can be found', () async {
|
||||
exitCode = ExitCode.success;
|
||||
jsonOutput =
|
||||
File(
|
||||
'$fixturesPath/device_list_success_empty.json',
|
||||
).readAsStringSync();
|
||||
jsonOutput = File(
|
||||
'$fixturesPath/device_list_success_empty.json',
|
||||
).readAsStringSync();
|
||||
expect(
|
||||
await runWithOverrides(() => devicectl.deviceForLaunch()),
|
||||
isNull,
|
||||
@@ -123,8 +123,9 @@ void main() {
|
||||
"returns a device if device's OS version is 17 or greater",
|
||||
() async {
|
||||
exitCode = ExitCode.success;
|
||||
jsonOutput =
|
||||
File('$fixturesPath/device_list_success.json').readAsStringSync();
|
||||
jsonOutput = File(
|
||||
'$fixturesPath/device_list_success.json',
|
||||
).readAsStringSync();
|
||||
expect(
|
||||
await runWithOverrides(() => devicectl.deviceForLaunch()),
|
||||
isNotNull,
|
||||
@@ -230,16 +231,16 @@ void main() {
|
||||
group('when install succeeds', () {
|
||||
setUp(() {
|
||||
exitCode = ExitCode.success;
|
||||
jsonOutput =
|
||||
File('$fixturesPath/install_success.json').readAsStringSync();
|
||||
jsonOutput = File(
|
||||
'$fixturesPath/install_success.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
group('when output json does not contain app bundleId', () {
|
||||
setUp(() {
|
||||
jsonOutput =
|
||||
File(
|
||||
'$fixturesPath/install_success_no_bundle_id.json',
|
||||
).readAsStringSync();
|
||||
jsonOutput = File(
|
||||
'$fixturesPath/install_success_no_bundle_id.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
test('throws DevicectlException', () {
|
||||
@@ -281,8 +282,9 @@ void main() {
|
||||
group('when json contains error', () {
|
||||
setUp(() {
|
||||
exitCode = ExitCode.success;
|
||||
jsonOutput =
|
||||
File('$fixturesPath/launch_failure.json').readAsStringSync();
|
||||
jsonOutput = File(
|
||||
'$fixturesPath/launch_failure.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
test(
|
||||
@@ -308,8 +310,9 @@ void main() {
|
||||
group('when launch succeeds', () {
|
||||
setUp(() {
|
||||
exitCode = ExitCode.success;
|
||||
jsonOutput =
|
||||
File('$fixturesPath/launch_success.json').readAsStringSync();
|
||||
jsonOutput = File(
|
||||
'$fixturesPath/launch_success.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
test('completes successfully', () async {
|
||||
@@ -395,10 +398,9 @@ void main() {
|
||||
|
||||
group('when no device is found', () {
|
||||
setUp(() {
|
||||
deviceListJsonOutput =
|
||||
File(
|
||||
'$fixturesPath/device_list_success_empty.json',
|
||||
).readAsStringSync();
|
||||
deviceListJsonOutput = File(
|
||||
'$fixturesPath/device_list_success_empty.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
test('returns exit code 70', () async {
|
||||
@@ -416,10 +418,12 @@ void main() {
|
||||
|
||||
group('when install fails', () {
|
||||
setUp(() {
|
||||
deviceListJsonOutput =
|
||||
File('$fixturesPath/device_list_success.json').readAsStringSync();
|
||||
installJsonOutput =
|
||||
File('$fixturesPath/install_failure.json').readAsStringSync();
|
||||
deviceListJsonOutput = File(
|
||||
'$fixturesPath/device_list_success.json',
|
||||
).readAsStringSync();
|
||||
installJsonOutput = File(
|
||||
'$fixturesPath/install_failure.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
test('returns exit code 70 ', () async {
|
||||
@@ -441,12 +445,15 @@ void main() {
|
||||
|
||||
group('when launch fails', () {
|
||||
setUp(() {
|
||||
deviceListJsonOutput =
|
||||
File('$fixturesPath/device_list_success.json').readAsStringSync();
|
||||
installJsonOutput =
|
||||
File('$fixturesPath/install_success.json').readAsStringSync();
|
||||
launchJsonOutput =
|
||||
File('$fixturesPath/launch_failure.json').readAsStringSync();
|
||||
deviceListJsonOutput = File(
|
||||
'$fixturesPath/device_list_success.json',
|
||||
).readAsStringSync();
|
||||
installJsonOutput = File(
|
||||
'$fixturesPath/install_success.json',
|
||||
).readAsStringSync();
|
||||
launchJsonOutput = File(
|
||||
'$fixturesPath/launch_failure.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
test('returns exit code 70 ', () async {
|
||||
@@ -474,12 +481,15 @@ void main() {
|
||||
|
||||
group('when install and launch succeed', () {
|
||||
setUp(() {
|
||||
deviceListJsonOutput =
|
||||
File('$fixturesPath/device_list_success.json').readAsStringSync();
|
||||
installJsonOutput =
|
||||
File('$fixturesPath/install_success.json').readAsStringSync();
|
||||
launchJsonOutput =
|
||||
File('$fixturesPath/launch_success.json').readAsStringSync();
|
||||
deviceListJsonOutput = File(
|
||||
'$fixturesPath/device_list_success.json',
|
||||
).readAsStringSync();
|
||||
installJsonOutput = File(
|
||||
'$fixturesPath/install_success.json',
|
||||
).readAsStringSync();
|
||||
launchJsonOutput = File(
|
||||
'$fixturesPath/launch_success.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
test('returns exit code 0', () async {
|
||||
@@ -505,8 +515,9 @@ void main() {
|
||||
setUp(() {
|
||||
// This fixture is synthetic, as I was not able to get this command
|
||||
// to fail.
|
||||
jsonOutput =
|
||||
File('$fixturesPath/device_list_failure.json').readAsStringSync();
|
||||
jsonOutput = File(
|
||||
'$fixturesPath/device_list_failure.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
test('throws a DevicectlException', () {
|
||||
@@ -527,10 +538,9 @@ void main() {
|
||||
setUp(() {
|
||||
// This fixture is synthetic, as I was not able to get this command
|
||||
// to fail.
|
||||
jsonOutput =
|
||||
File(
|
||||
'$fixturesPath/device_list_success_no_devices.json',
|
||||
).readAsStringSync();
|
||||
jsonOutput = File(
|
||||
'$fixturesPath/device_list_success_no_devices.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
test('throws a DevicectlException', () {
|
||||
@@ -549,8 +559,9 @@ void main() {
|
||||
|
||||
group('when command succeeds', () {
|
||||
setUp(() {
|
||||
jsonOutput =
|
||||
File('$fixturesPath/device_list_success.json').readAsStringSync();
|
||||
jsonOutput = File(
|
||||
'$fixturesPath/device_list_success.json',
|
||||
).readAsStringSync();
|
||||
});
|
||||
|
||||
test('returns a list of iOS devices', () async {
|
||||
|
||||
@@ -10,10 +10,9 @@ void main() {
|
||||
late ArgParser argParser;
|
||||
|
||||
setUp(() {
|
||||
argParser =
|
||||
ArgParser()
|
||||
..addOption('foo', abbr: 'f')
|
||||
..addOption('bar');
|
||||
argParser = ArgParser()
|
||||
..addOption('foo', abbr: 'f')
|
||||
..addOption('bar');
|
||||
});
|
||||
|
||||
group('findOption', () {
|
||||
@@ -88,41 +87,40 @@ void main() {
|
||||
late ArgParser parser;
|
||||
|
||||
setUp(() {
|
||||
parser =
|
||||
ArgParser()
|
||||
..addMultiOption(
|
||||
CommonArguments.dartDefineArg.name,
|
||||
help: CommonArguments.dartDefineArg.description,
|
||||
)
|
||||
..addMultiOption(
|
||||
CommonArguments.dartDefineFromFileArg.name,
|
||||
help: CommonArguments.dartDefineFromFileArg.description,
|
||||
)
|
||||
..addOption(
|
||||
CommonArguments.buildNameArg.name,
|
||||
help: CommonArguments.buildNameArg.description,
|
||||
)
|
||||
..addOption(
|
||||
CommonArguments.buildNumberArg.name,
|
||||
help: CommonArguments.buildNumberArg.description,
|
||||
)
|
||||
..addOption(
|
||||
CommonArguments.splitDebugInfoArg.name,
|
||||
help: CommonArguments.splitDebugInfoArg.description,
|
||||
)
|
||||
..addOption(
|
||||
CommonArguments.exportMethodArg.name,
|
||||
help: CommonArguments.exportMethodArg.description,
|
||||
)
|
||||
..addOption(
|
||||
CommonArguments.exportOptionsPlistArg.name,
|
||||
help: CommonArguments.exportOptionsPlistArg.description,
|
||||
)
|
||||
..addMultiOption(
|
||||
'platforms',
|
||||
allowed: ReleaseType.values.map((e) => e.cliName),
|
||||
)
|
||||
..addFlag('verbose', abbr: 'v');
|
||||
parser = ArgParser()
|
||||
..addMultiOption(
|
||||
CommonArguments.dartDefineArg.name,
|
||||
help: CommonArguments.dartDefineArg.description,
|
||||
)
|
||||
..addMultiOption(
|
||||
CommonArguments.dartDefineFromFileArg.name,
|
||||
help: CommonArguments.dartDefineFromFileArg.description,
|
||||
)
|
||||
..addOption(
|
||||
CommonArguments.buildNameArg.name,
|
||||
help: CommonArguments.buildNameArg.description,
|
||||
)
|
||||
..addOption(
|
||||
CommonArguments.buildNumberArg.name,
|
||||
help: CommonArguments.buildNumberArg.description,
|
||||
)
|
||||
..addOption(
|
||||
CommonArguments.splitDebugInfoArg.name,
|
||||
help: CommonArguments.splitDebugInfoArg.description,
|
||||
)
|
||||
..addOption(
|
||||
CommonArguments.exportMethodArg.name,
|
||||
help: CommonArguments.exportMethodArg.description,
|
||||
)
|
||||
..addOption(
|
||||
CommonArguments.exportOptionsPlistArg.name,
|
||||
help: CommonArguments.exportOptionsPlistArg.description,
|
||||
)
|
||||
..addMultiOption(
|
||||
'platforms',
|
||||
allowed: ReleaseType.values.map((e) => e.cliName),
|
||||
)
|
||||
..addFlag('verbose', abbr: 'v');
|
||||
});
|
||||
|
||||
test('returns an empty list when rest is empty', () {
|
||||
|
||||
@@ -24,11 +24,11 @@ void main() {
|
||||
group('releaseTypes', () {
|
||||
late ArgParser parser;
|
||||
setUp(() {
|
||||
parser =
|
||||
ArgParser()..addMultiOption(
|
||||
'platforms',
|
||||
allowed: ReleaseType.values.map((e) => e.cliName),
|
||||
);
|
||||
parser = ArgParser()
|
||||
..addMultiOption(
|
||||
'platforms',
|
||||
allowed: ReleaseType.values.map((e) => e.cliName),
|
||||
);
|
||||
});
|
||||
|
||||
group('when nothing is provided', () {
|
||||
|
||||
@@ -584,10 +584,9 @@ test-revision
|
||||
..writeAsStringSync(revision, flush: true);
|
||||
expect(
|
||||
runWithOverrides(
|
||||
() =>
|
||||
const ShorebirdEnv(
|
||||
flutterRevisionOverride: override,
|
||||
).flutterRevision,
|
||||
() => const ShorebirdEnv(
|
||||
flutterRevisionOverride: override,
|
||||
).flutterRevision,
|
||||
),
|
||||
equals(override),
|
||||
);
|
||||
|
||||
@@ -516,7 +516,8 @@ Tools • Dart 3.0.6 • DevTools 2.23.1''');
|
||||
directory: any(named: 'directory'),
|
||||
),
|
||||
).thenAnswer(
|
||||
(_) async => '''
|
||||
(_) async =>
|
||||
'''
|
||||
$revision
|
||||
''',
|
||||
);
|
||||
|
||||
@@ -63,7 +63,10 @@ void main() {
|
||||
isTrue,
|
||||
);
|
||||
verify(
|
||||
() => git.fetch(directory: any(named: 'directory'), args: ['--tags']),
|
||||
() => git.fetch(
|
||||
directory: any(named: 'directory'),
|
||||
args: ['--tags'],
|
||||
),
|
||||
).called(1);
|
||||
verify(
|
||||
() => git.revParse(
|
||||
@@ -100,7 +103,10 @@ void main() {
|
||||
isFalse,
|
||||
);
|
||||
verify(
|
||||
() => git.fetch(directory: any(named: 'directory'), args: ['--tags']),
|
||||
() => git.fetch(
|
||||
directory: any(named: 'directory'),
|
||||
args: ['--tags'],
|
||||
),
|
||||
).called(1);
|
||||
verify(
|
||||
() => git.revParse(
|
||||
|
||||
@@ -6,7 +6,7 @@ repository: https://github.com/shorebirdtech/shorebird
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
sdk: ">=3.7.0 <4.0.0"
|
||||
sdk: ">=3.8.0 <4.0.0"
|
||||
|
||||
dependencies:
|
||||
collection: ^1.18.0
|
||||
|
||||
@@ -436,10 +436,9 @@ void main() {
|
||||
group('when podfileLockHash is provided', () {
|
||||
test('makes the correct request', () async {
|
||||
final tempDir = Directory.systemTemp.createTempSync();
|
||||
final fixture =
|
||||
File(path.join(tempDir.path, 'release.txt'))
|
||||
..createSync()
|
||||
..writeAsStringSync('hello');
|
||||
final fixture = File(path.join(tempDir.path, 'release.txt'))
|
||||
..createSync()
|
||||
..writeAsStringSync('hello');
|
||||
const expectedRequest = CreateReleaseArtifactRequest(
|
||||
arch: arch,
|
||||
platform: platform,
|
||||
@@ -487,10 +486,9 @@ void main() {
|
||||
group('when podfileLockHash is null', () {
|
||||
test('makes the correct request', () async {
|
||||
final tempDir = Directory.systemTemp.createTempSync();
|
||||
final fixture =
|
||||
File(path.join(tempDir.path, 'release.txt'))
|
||||
..createSync()
|
||||
..writeAsStringSync('hello');
|
||||
final fixture = File(path.join(tempDir.path, 'release.txt'))
|
||||
..createSync()
|
||||
..writeAsStringSync('hello');
|
||||
const expectedRequest = CreateReleaseArtifactRequest(
|
||||
arch: arch,
|
||||
platform: platform,
|
||||
|
||||
+3
-4
@@ -13,10 +13,9 @@ GetAppsResponse _$GetAppsResponseFromJson(Map<String, dynamic> json) =>
|
||||
final val = GetAppsResponse(
|
||||
apps: $checkedConvert(
|
||||
'apps',
|
||||
(v) =>
|
||||
(v as List<dynamic>)
|
||||
.map((e) => AppMetadata.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
(v) => (v as List<dynamic>)
|
||||
.map((e) => AppMetadata.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
|
||||
+3
-4
@@ -14,10 +14,9 @@ GetOrganizationAppsResponse _$GetOrganizationAppsResponseFromJson(
|
||||
final val = GetOrganizationAppsResponse(
|
||||
apps: $checkedConvert(
|
||||
'apps',
|
||||
(v) =>
|
||||
(v as List<dynamic>)
|
||||
.map((e) => AppMetadata.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
(v) => (v as List<dynamic>)
|
||||
.map((e) => AppMetadata.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
|
||||
+3
-4
@@ -14,10 +14,9 @@ GetOrganizationUsersResponse _$GetOrganizationUsersResponseFromJson(
|
||||
final val = GetOrganizationUsersResponse(
|
||||
users: $checkedConvert(
|
||||
'users',
|
||||
(v) =>
|
||||
(v as List<dynamic>)
|
||||
.map((e) => OrganizationUser.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
(v) => (v as List<dynamic>)
|
||||
.map((e) => OrganizationUser.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
|
||||
+5
-7
@@ -14,13 +14,11 @@ GetOrganizationsResponse _$GetOrganizationsResponseFromJson(
|
||||
final val = GetOrganizationsResponse(
|
||||
organizations: $checkedConvert(
|
||||
'organizations',
|
||||
(v) =>
|
||||
(v as List<dynamic>)
|
||||
.map(
|
||||
(e) =>
|
||||
OrganizationMembership.fromJson(e as Map<String, dynamic>),
|
||||
)
|
||||
.toList(),
|
||||
(v) => (v as List<dynamic>)
|
||||
.map(
|
||||
(e) => OrganizationMembership.fromJson(e as Map<String, dynamic>),
|
||||
)
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
|
||||
+3
-4
@@ -14,10 +14,9 @@ GetReleaseArtifactsResponse _$GetReleaseArtifactsResponseFromJson(
|
||||
final val = GetReleaseArtifactsResponse(
|
||||
artifacts: $checkedConvert(
|
||||
'artifacts',
|
||||
(v) =>
|
||||
(v as List<dynamic>)
|
||||
.map((e) => ReleaseArtifact.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
(v) => (v as List<dynamic>)
|
||||
.map((e) => ReleaseArtifact.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
|
||||
+3
-4
@@ -14,10 +14,9 @@ GetReleasePatchesResponse _$GetReleasePatchesResponseFromJson(
|
||||
final val = GetReleasePatchesResponse(
|
||||
patches: $checkedConvert(
|
||||
'patches',
|
||||
(v) =>
|
||||
(v as List<dynamic>)
|
||||
.map((e) => ReleasePatch.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
(v) => (v as List<dynamic>)
|
||||
.map((e) => ReleasePatch.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
|
||||
+3
-4
@@ -13,10 +13,9 @@ GetReleasesResponse _$GetReleasesResponseFromJson(Map<String, dynamic> json) =>
|
||||
final val = GetReleasesResponse(
|
||||
releases: $checkedConvert(
|
||||
'releases',
|
||||
(v) =>
|
||||
(v as List<dynamic>)
|
||||
.map((e) => Release.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
(v) => (v as List<dynamic>)
|
||||
.map((e) => Release.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
),
|
||||
);
|
||||
return val;
|
||||
|
||||
+3
-4
@@ -17,10 +17,9 @@ PatchCheckResponse _$PatchCheckResponseFromJson(Map<String, dynamic> json) =>
|
||||
patchAvailable: $checkedConvert('patch_available', (v) => v as bool),
|
||||
patch: $checkedConvert(
|
||||
'patch',
|
||||
(v) =>
|
||||
v == null
|
||||
? null
|
||||
: PatchCheckMetadata.fromJson(v as Map<String, dynamic>),
|
||||
(v) => v == null
|
||||
? null
|
||||
: PatchCheckMetadata.fromJson(v as Map<String, dynamic>),
|
||||
),
|
||||
rolledBackPatchNumbers: $checkedConvert(
|
||||
'rolled_back_patch_numbers',
|
||||
|
||||
@@ -16,10 +16,9 @@ ReleasePatch _$ReleasePatchFromJson(Map<String, dynamic> json) =>
|
||||
channel: $checkedConvert('channel', (v) => v as String?),
|
||||
artifacts: $checkedConvert(
|
||||
'artifacts',
|
||||
(v) =>
|
||||
(v as List<dynamic>)
|
||||
.map((e) => PatchArtifact.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
(v) => (v as List<dynamic>)
|
||||
.map((e) => PatchArtifact.fromJson(e as Map<String, dynamic>))
|
||||
.toList(),
|
||||
),
|
||||
isRolledBack: $checkedConvert('is_rolled_back', (v) => v as bool),
|
||||
notes: $checkedConvert('notes', (v) => v as String?),
|
||||
|
||||
@@ -6,7 +6,7 @@ repository: https://github.com/shorebirdtech/shorebird
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
sdk: ">=3.7.0 <4.0.0"
|
||||
sdk: ">=3.8.0 <4.0.0"
|
||||
|
||||
dependencies:
|
||||
decimal: ^3.0.2
|
||||
|
||||
Reference in New Issue
Block a user