chore(deps): upgrade to Dart 3.8.0 (#3106)

This commit is contained in:
Felix Angelov
2025-05-21 17:52:56 -05:00
committed by GitHub
parent 6b48b786da
commit 192fbb94e3
92 changed files with 777 additions and 832 deletions
@@ -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';
}
+63 -68
View File
@@ -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"
+1 -1
View File
@@ -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',
+61 -66
View File
@@ -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"
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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
+6 -6
View File
@@ -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.');
+1 -1
View File
@@ -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,
+1 -1
View File
@@ -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')}
+17 -19
View File
@@ -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);
}
+7 -7
View File
@@ -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);
@@ -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!,
),
),
);
}
+57 -62
View File
@@ -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"
+1 -1
View File
@@ -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()}
''',
+24 -30
View File
@@ -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,
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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