chore: add cspell checking to our CI (#2421)

This commit is contained in:
Eric Seidel
2024-08-19 14:53:10 -07:00
committed by GitHub
parent 5620b3445e
commit e6852bfbac
38 changed files with 173 additions and 47 deletions
+6
View File
@@ -15,6 +15,12 @@ jobs:
name: ✅ Semantic Pull Request
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1
cspell:
name: 🔤 Check Spelling
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/spell_check.yml@v1
with:
config: cspell.config.yaml
changes:
runs-on: ubuntu-latest
+1 -1
View File
@@ -1,6 +1,6 @@
# Code push Notes
Just place to keep running notes about our development of codepush for Flutter.
Just place to keep running notes about our development of code push for Flutter.
## Server push vs. code push
+1 -1
View File
@@ -1,5 +1,5 @@
# This is the windows equivalent of the `third_party/flutter/bin/internal/shared.sh` script
# compiles `shorebird_cli/bin/shorebird_cli.dart` to `bin/cache/shorebird.shapshot`
# compiles `shorebird_cli/bin/shorebird_cli.dart` to `bin/cache/shorebird.snapshot`
$ErrorActionPreference = "Stop"
+109
View File
@@ -0,0 +1,109 @@
$schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json
version: "0.2"
ignorePaths:
["coverage", "bin/cache", "third_party", "build", "*.xcscheme", "fixtures"]
words:
- pubspec
- podfile
- Apks
- metadatas
- logcat
- mktemp
- gradlew
- bundletool
- genhtml
- sideload
- endtemplate
- mocktail
- libapp
- aarch
- codesign
- xcarchive
- xcrun
- vmcode
- xcodebuild
- sideloadable
- bryanoltman
- signup
- lerping
- precache
- devicectl
- exitcode
- writeln
- xcodeproj
- xcschemes
- xcshareddata
- armeabi
- cipd
- canvaskit
- libimobiledevice
- hotreload
- libflutter
- apigee
- pointycastle
- pkcs
- appbundle
- felangel
- bitcode
- xcscheme
- archs
- shorebirdtech
- aapt
- USERPROFILE
- LOCALAPPDATA
- Unpatchable
- multioption
- xcframework
- deflavored
- dylib
- libplist
- usbmuxd
- pwsh
- readlink
- unawaited
- NOAUTH
- WRONGPASS
- FLUSHALL
- pana
- idevicesyslog
- Entra
- xlink
- propertylistserialization
- Retryable
- storyboardc
- iphoneos
- lproj
- iokit
- backboardd
- dyld
- bintools
- codesigned
- codesigning
- previewable
- udid # Unique Device Identifier
- podspec
- exportoptions
- ANDROIDD
- propertylistserialization
- VCRUNTIME
- Oltman
- xcworkspace
- SIGSTOP
- lldb
- nserror
- sysroot
- RSAPKCS
- PRNG
- sideloaded
- Azul
- altool
- aabs
- upvote
- Verdana
- reinit
- allprojects # From gradle files
- aars # Android Archive
- orri # Arm64 instruction, Or Register with Immediate
- unmockable
- dorny # From .github dir, doesn't show up in "**" check?
- requirepass # From .github dir, doesn't show up in "**" check?
+5 -4
View File
@@ -8,11 +8,11 @@ import 'package:path/path.dart' as p;
import 'package:test/test.dart';
void main() {
const token =
const token = // cspell: disable-next-line
'''eyJhbGciOiJSUzI1NiIsImtpZCI6ImMxMGM5MGJhNGMzNjYzNTE2ZTA3MDdkMGU5YTg5NDgxMDYyODUxNTgiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vbXktYXBwIiwiYXVkIjoibXktYXBwIiwiYXV0aF90aW1lIjoxNjQzNjg0MjY2LCJ1c2VyX2lkIjoiRzR1MzdXdk90dmVWR0pRb1pCWGpxcHVWazZWMiIsInN1YiI6Ikc0dTM3V3ZPdHZlVkdKUW9aQlhqcXB1Vms2VjIiLCJpYXQiOjE2NDM2ODQyNjYsImV4cCI6MTY0MzY4Nzg2NiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJmaXJlYmFzZSI6eyJpZGVudGl0aWVzIjp7ImVtYWlsIjpbInRlc3RAZ21haWwuY29tIl19LCJzaWduX2luX3Byb3ZpZGVyIjoicGFzc3dvcmQifX0.bUWnX_XmR1d9EmeFeYSsK_CHU1u9NPIHgyaQueZ6urYOtxvuL_QodjPl0c9CBJwctwPnxVyRmkeNCw0oF9xBgph0NApLL4FIG6vpDPZfW9txZBYr8xIvaqvmD0diACENAQdjRT2XmyEdQ2-U7SsTonybHmLoU9FMQTjAgw4NCALQvExfB6rtQ9GDsOBt1xoBkB3Vo7a5OmugZ1aHXF69b8As6137-Dggf5qx5R3oLRFovICMMesQziE3vGi-WKcbQxSeiD-9a6ShPAhk41XiyjFGDEOtUCQo63uwQnMw3g0KVtC6bzIyFq-E91vhxumxXzxPYC-kg7iUYiSZy7Y-Aw''';
const tokenNoAuthTime =
const tokenNoAuthTime = // cspell: disable-next-line
'''eyJhbGciOiJSUzI1NiIsImtpZCI6ImMxMGM5MGJhNGMzNjYzNTE2ZTA3MDdkMGU5YTg5NDgxMDYyODUxNTgiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vbXktYXBwIiwiYXVkIjoibXktYXBwIiwidXNlcl9pZCI6Ikc0dTM3V3ZPdHZlVkdKUW9aQlhqcXB1Vms2VjIiLCJzdWIiOiJHNHUzN1d2T3R2ZVZHSlFvWkJYanFwdVZrNlYyIiwiaWF0IjoxNjQzNjg0MjY2LCJleHAiOjE2NDM2ODc4NjYsImVtYWlsIjoidGVzdEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJlbWFpbCI6WyJ0ZXN0QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6InBhc3N3b3JkIn19.ZWCadE43mUk43cPQdNCCi4WhDgB4ZsDT9rhPGQq_1uFPhzkVrCSRcjUhwkzH11VLap_MVurNvI_pGWbu9Z4CRPvGFzXPpuNveWy2qFPEa4jcM-R40vsbrP30vNnrp4PrmqgLar0vWs6FZ2g9fbjU8L1LaU5ik31OKSXufTIKn_hPHhyIC33tYTpWzG3Abq3H9EELHUXKW9nEcN8YYnOHAZ3A6ymb3DyBguhf2O-XAIlrn1WoxRRqlukFGSmprk7heonbVUTzoc3sIDZcC-Cj1U9wTee1NmqmU7v3SvpBRGnuXz-5rzSRHblyVxn_EEfCYwjsDUwetYpyFcCs5dqPlQ''';
const tokenWithNoMatchingKid =
const tokenWithNoMatchingKid = // cspell: disable-next-line
'''eyJhbGciOiJSUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vbXktYXBwIiwiYXVkIjoibXktYXBwIiwidXNlcl9pZCI6Ikc0dTM3V3ZPdHZlVkdKUW9aQlhqcXB1Vms2VjIiLCJzdWIiOiJHNHUzN1d2T3R2ZVZHSlFvWkJYanFwdVZrNlYyIiwiaWF0IjoxNjQzNjg0MjY2LCJleHAiOjE2NDM2ODc4NjYsImVtYWlsIjoidGVzdEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJlbWFpbCI6WyJ0ZXN0QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6InBhc3N3b3JkIn19.RBAwg-Ttf36aDkVR97Rd50aMp-0yzk8do_4AUPFi9nEhKu0Ye8ox_9hdTBttJYxoOq0NbH2zz0JHSnSHqoTvCleVhoGqg8YghzH0NiqncPfDzi-IcRfy2K8CrOoXuqXaj3YWrbrzNWAYV46eFmvI2TmPO55AyFOjhvLpW-uf96ceOPjueZm8o5K2DZym86BAhSdShknONV2O7b2vW34TXf3UJdISs5p9z6Si4JOWGjbVPY45CO16ODdDxyUGUM2-IVQloB7bg0nMqQbIjKDoO5g9d1nguR2Z-YBiv0BX1MDWDlrBsMAzzRVaFlf6YQS1LKxu2tnMdCrBnK_Wvqt5sQ''';
const keyValuePublicKeysUrl =
'https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com';
@@ -217,8 +217,9 @@ void main() {
});
group('when key store is JWK store', () {
const token =
const token = // cspell: disable-next-line
'''eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6InRSNHdrWWhIeEhvX3FlcHJTMDhDdXc4eGNPdyJ9.eyJ2ZXIiOiIyLjAiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vOTE4ODA0MGQtNmM2Ny00YzViLWIxMTItMzZhMzA0YjY2ZGFkL3YyLjAiLCJzdWIiOiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFKclpOMmI0eldUNzhQWFJEN2J6dkxrIiwiYXVkIjoiYzRhZjk1NjYtOGEzNi00MzQ4LWI0MTMtZGFiNjY1Yjg3MTdkIiwiZXhwIjoxNzA4NTQ2MDYwLCJpYXQiOjE3MDg0NTkzNjAsIm5iZiI6MTcwODQ1OTM2MCwiZW1haWwiOiJicnlhbm9sdG1hbkBob3RtYWlsLmNvbSIsInRpZCI6IjkxODgwNDBkLTZjNjctNGM1Yi1iMTEyLTM2YTMwNGI2NmRhZCIsImFpbyI6IkRtUE91OTNxdWlSNm9OYVBrMjl1dVFSTkhSN0NIS0V4VDlrSE5DamVJIUdpN3JMQks2SDZYYzdkUWl2ZmRxTVZ5VExuNDMxUWRaTXpPSHQqaDQ2NWViQTlBWE9RdzhOdlM3dzNTbFREWU9iOW52OGh2SHNDTXZqdlJJMzRaWXlPbiE2MHBUcXghWnVmeTF0VnRGMWp6VEVsQmlUTjRrOWJIU0RDUFZaU1BlaXNzYjFLdmhCamc4biFPUSptNWszSmZ3JCQifQ.PhZfpmMmhlW_w9P-EQjcA-DgD0Mxnufxgn6rsKlQYtRn2hmT8uGOlMpMthYIeYLhVPtQqPyHDdW-0GxJ3ROK6prlogvPt8SxY8lSiJ6a4XCNmGop-7MxWGkYhqnMw21TKiSsGIr5LSuD3b_5RK6uBipra0rf819Wlvp6JbXulGSHt9N_qyq8328npCHRYbIDOBcOgDjnPjDFp_pJ99-itCsM8OO0npZJZ64MmlENgEYswnOQYlCShF1HLQwes7uGuw8ZBik-XSu44iJKJ9u4Ai3BjpxYdMFmMZ-B4DpF3uWpFsK-X9tMbi23gwufu5X_6aqtZYRLg052M1SUaBiMUw''';
// cspell: disable-next-line
const audience = 'c4af9566-8a36-4348-b413-dab665b8717d';
const issuer =
'''https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0''';
+1
View File
@@ -1,3 +1,4 @@
<!-- cspell: ignore requirepass -->
# Contributing
We are happy to accept contributions!
@@ -250,7 +250,7 @@ void main() {
},
},
};
const other = {'qux': 'quux'};
const other = {'qux': 'quux'}; // cspell:disable-line
await expectLater(client.json.get(key: key), completion(isNull));
await expectLater(client.json.set(key: key, value: value), completes);
await expectLater(
@@ -1,3 +1,4 @@
// cspell:words Filesx
import 'dart:io';
import 'package:collection/collection.dart';
@@ -1,3 +1,4 @@
// cspell:words microsoftonline
import 'package:googleapis_auth/googleapis_auth.dart';
/// Endpoints for OAuth authentication with Azure/Entra/Microsoft.
@@ -1,3 +1,4 @@
// cspell:words dgst
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
@@ -175,7 +175,7 @@ class AarPatcher extends Patcher {
@override
Future<String> extractReleaseVersionFromArtifact(File artifact) {
// Not implemented - release verison must be specified by the user.
// Not implemented - release version must be specified by the user.
throw UnimplementedError(
'Release version must be specified using --release-version.',
);
@@ -221,7 +221,7 @@ class IosFrameworkPatcher extends Patcher {
@override
Future<String> extractReleaseVersionFromArtifact(File artifact) {
// Not implemented - release verison must be specified by the user.
// Not implemented - release version must be specified by the user.
throw UnimplementedError(
'Release version must be specified using --release-version.',
);
@@ -86,7 +86,7 @@ class PreviewCommand extends ShorebirdCommand {
/// - Warn the user about the platform if that platform is not the one
/// the user specified with `--platform`.
/// - Error out if the user specified a platform that is not previewable.
void _assertPreviwableReleases({
void _assertPreviewableReleases({
required Release releaseWithAllPlatforms,
required Release release,
}) {
@@ -203,7 +203,7 @@ class PreviewCommand extends ShorebirdCommand {
final releaseWithAllPlatforms = releasesWithAllPlatforms.firstWhere(
(r) => r.id == release.id,
);
_assertPreviwableReleases(
_assertPreviewableReleases(
releaseWithAllPlatforms: releaseWithAllPlatforms,
release: release,
);
@@ -485,7 +485,7 @@ ${summary.join('\n')}
);
}
/// Instructions explaining how to patch the release that was just creatd.
/// Instructions explaining how to patch the release that was just created.
void printPatchInstructions({
required Releaser releaser,
required String releaseVersion,
@@ -300,7 +300,7 @@ Or run on an iOS simulator without code signing
} catch (exception, stackTrace) {
logger.detail('[ios-deploy] failed: $exception\n$stackTrace');
debuggerState = _DebuggerState.detached;
logger.err('[ios-deplay] failed: $exception');
logger.err('[ios-deploy] failed: $exception');
return ExitCode.software.code;
}
}
@@ -328,7 +328,7 @@ Or run on an iOS simulator without code signing
}
}
// Handles interpretting stdout line and logs errors accordingly.
// Handles interpreting stdout line and logs errors accordingly.
// Always returns the original line.
@visibleForTesting
String detectFailures(String line, Logger logger) {
@@ -22,9 +22,9 @@ extension OptionFinder on ArgResults {
return this[name] as String?;
}
// We would ideally check for abbrevations here as well, but 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 abbrevations map.
// [Options] being parsed) or an abbreviations map.
final abbr = argParser.options.values
.firstWhereOrNull((option) => option.name == name)
?.abbr;
@@ -105,7 +105,7 @@ extension ForwardedArgs on ArgResults {
bool _isPositionalArgPlatform(String arg) =>
ReleaseType.values.any((target) => target.cliName == arg);
/// All parsed args with the given name. Because of multioptions, there may
/// All parsed args with the given name. Because of multi-options, there may
/// be multiple values for a single name, so we return a potentially empty
/// [Iterable<String>] instead of a [String?].
Iterable<String> _argsNamed(String name) {
@@ -1,6 +1,6 @@
// ignore_for_file: public_member_api_docs
extension NullOrEmtpy on String? {
extension NullOrEmpty on String? {
/// Returns `true` if this string is null or empty.
bool get isNullOrEmpty => this == null || this!.isEmpty;
}
@@ -82,7 +82,7 @@ class PatchDiffChecker {
..info(
yellow.wrap('''
If you don't know why you're seeing this error, visit our troublshooting page at ${troubleshootingUrl.toLink()}'''),
If you don't know why you're seeing this error, visit our troubleshooting page at ${troubleshootingUrl.toLink()}'''),
);
if (!allowNativeChanges) {
@@ -166,7 +166,7 @@ class Ios {
.toSet();
}
/// Parses the .xcsheme file to determine if it was created for an app
/// Parses the .xcscheme file to determine if it was created for an app
/// extension. We don't want to include these schemes as app flavors.
///
/// xcschemes are XML files that contain metadata about the scheme, including
@@ -20,7 +20,7 @@ const iOSLinkPercentageUrl = '$statusUrl#link-percentage-ios';
/// Link to the troubleshooting page on the Shorebird documentation.
const troubleshootingUrl = '$docsUrl/troubleshooting';
/// Link to the troubshooting section which covers the
/// Link to the troubleshooting section which covers the
/// Unsupported class file major version
const unsupportedClassFileVersionUrl =
'$troubleshootingUrl#unsupported-class-file-major-version-65';
@@ -1,3 +1,4 @@
// cspell:ignore asdf, qwer, zxcv
import 'package:shorebird_cli/src/archive_analysis/archive_analysis.dart';
import 'package:test/test.dart';
@@ -122,7 +122,7 @@ void main() {
);
});
test('throws error when patch artfiact file does not exist', () async {
test('throws error when patch artifact file does not exist', () async {
await expectLater(
() => runWithOverrides(
() async => artifactManager.createDiff(
@@ -119,7 +119,7 @@ void main() {
});
group(Auth, () {
const idToken =
const idToken = // cspell:disable-next-line
'''eyJhbGciOiJIUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMjM0NSIsImhkIjoic2hvcmViaXJkLmRldiIsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxMjM0LCJleHAiOjY3ODl9.MYbITALvKsGYTYjw1o7AQ0ObkqRWVBSr9cFYJrvA46g''';
const refreshToken = 'shorebird-token';
const ciToken = CiToken(
@@ -362,7 +362,7 @@ void main() {
),
);
const expiredIdToken =
const expiredIdToken = // cspell:disable-next-line
'''eyJhbGciOiJIUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMjM0NSIsImhkIjoic2hvcmViaXJkLmRldiIsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxMjM0LCJleHAiOjY3ODl9.MYbITALvKsGYTYjw1o7AQ0ObkqRWVBSr9cFYJrvA46g''';
final onRefreshCredentialsCalls = <oauth2.AccessCredentials>[];
final expiredCredentials = oauth2.AccessCredentials(
@@ -416,7 +416,7 @@ void main() {
),
);
const expiredIdToken =
const expiredIdToken = // cspell:disable-next-line
'''eyJhbGciOiJIUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMjM0NSIsImhkIjoic2hvcmViaXJkLmRldiIsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxMjM0LCJleHAiOjY3ODl9.MYbITALvKsGYTYjw1o7AQ0ObkqRWVBSr9cFYJrvA46g''';
final onRefreshCredentialsCalls = <oauth2.AccessCredentials>[];
final expiredCredentials = oauth2.AccessCredentials(
@@ -137,13 +137,13 @@ void main() {
createdAt: DateTime(2023),
updatedAt: DateTime(2023),
);
final partchArtifactBundle = PatchArtifactBundle(
final patchArtifactBundle = PatchArtifactBundle(
arch: arch.arch,
path: 'path',
hash: '',
size: 4,
);
final patchArtifactBundles = {arch: partchArtifactBundle};
final patchArtifactBundles = {arch: patchArtifactBundle};
const archs = [Arch.arm64];
const releaseArtifact = ReleaseArtifact(
id: 1,
@@ -1332,7 +1332,7 @@ You can manage this release in the ${link(uri: uri, message: 'Shorebird Console'
verifyNever(() => progress.fail(any()));
});
test('completes succesfully when a flavor is provided', () async {
test('completes successfully when a flavor is provided', () async {
const flavorName = 'myFlavor';
when(
() => codePushClient.createReleaseArtifact(
@@ -1598,7 +1598,7 @@ You can manage this release in the ${link(uri: uri, message: 'Shorebird Console'
verifyNever(() => progress.fail(any()));
});
test('completes succesfully when a flavor is provided', () async {
test('completes successfully when a flavor is provided', () async {
const flavorName = 'myFlavor';
when(
() => codePushClient.createReleaseArtifact(
@@ -2139,11 +2139,11 @@ You can manage this release in the ${link(uri: uri, message: 'Shorebird Console'
verify(
() => codePushClient.createPatchArtifact(
appId: appId,
artifactPath: partchArtifactBundle.path,
artifactPath: patchArtifactBundle.path,
patchId: patchId,
arch: arch.arch,
platform: releasePlatform,
hash: partchArtifactBundle.hash,
hash: patchArtifactBundle.hash,
),
).called(1);
});
@@ -2202,11 +2202,11 @@ You can manage this release in the ${link(uri: uri, message: 'Shorebird Console'
verify(
() => codePushClient.createPatchArtifact(
appId: appId,
artifactPath: partchArtifactBundle.path,
artifactPath: patchArtifactBundle.path,
patchId: patchId,
arch: arch.arch,
platform: releasePlatform,
hash: partchArtifactBundle.hash,
hash: patchArtifactBundle.hash,
),
).called(1);
verify(() => codePushClient.getChannels(appId: appId)).called(1);
@@ -2258,11 +2258,11 @@ You can manage this release in the ${link(uri: uri, message: 'Shorebird Console'
verify(
() => codePushClient.createPatchArtifact(
appId: appId,
artifactPath: partchArtifactBundle.path,
artifactPath: patchArtifactBundle.path,
patchId: patchId,
arch: arch.arch,
platform: releasePlatform,
hash: partchArtifactBundle.hash,
hash: patchArtifactBundle.hash,
),
).called(1);
verify(() => codePushClient.getChannels(appId: appId)).called(1);
@@ -1,3 +1,4 @@
// cspell:words pubin dgst outform
import 'dart:convert';
import 'dart:io';
@@ -155,7 +155,7 @@ void main() {
test('exits with code 0 when logged in successfully', () async {
const token = CiToken(
// "shorebird-token" in base64
refreshToken: 'c2hvcmViaXJkLXRva2Vu',
refreshToken: 'c2hvcmViaXJkLXRva2Vu', // cspell:disable-line
authProvider: AuthProvider.google,
);
when(
@@ -441,9 +441,9 @@ void main() {
});
group('createPatchArtifacts', () {
const postLinkerFlutterRevision =
const postLinkerFlutterRevision = // cspell: disable-next-line
'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
const preLinkerFlutterRevision =
const preLinkerFlutterRevision = // cspell: disable-next-line
'83305b5088e6fe327fb3334a73ff190828d85713';
const appId = 'appId';
const arch = 'aarch64';
@@ -774,7 +774,7 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}''',
});
group('createPatchArtifacts', () {
const postLinkerFlutterRevision =
const postLinkerFlutterRevision = // cspell: disable-next-line
'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
const preLinkerFlutterRevision =
'83305b5088e6fe327fb3334a73ff190828d85713';
@@ -521,7 +521,7 @@ $exception''',
});
});
group('when flutter-verison is a git hash', () {
group('when flutter-version is a git hash', () {
const revision = 'deadbeef';
setUp(() {
when(() => argResults['flutter-version']).thenReturn(revision);
@@ -45,12 +45,12 @@ void main() {
});
});
group('when version string not parseable', () {
group('when version string not parsable', () {
setUp(() {
device = const AppleDevice(
deviceProperties: DeviceProperties(
name: deviceName,
osVersionNumber: 'unparseable version number',
osVersionNumber: 'unparsable version number',
),
hardwareProperties: hardwareProperties,
connectionProperties: connectionProperties,
@@ -305,7 +305,7 @@ BUILD FAILED in 3s
});
group(
'when flavors are mixed, starting with upper case, finishin with camel',
'when flavors are mixed, starting with upper case, finishing with camel',
() {
test(
'extracts flavors',
@@ -139,7 +139,7 @@ void main() {
bundlePath,
]),
).called(1);
verify(() => logger.err('[ios-deplay] failed: $exception')).called(1);
verify(() => logger.err('[ios-deploy] failed: $exception')).called(1);
});
test('dumps backtrace on process stopped', () async {
@@ -1,3 +1,4 @@
// cspell:ignore qwer
import 'package:args/args.dart';
import 'package:shorebird_cli/src/common_arguments.dart';
import 'package:shorebird_cli/src/extensions/arg_results.dart';
@@ -1,3 +1,4 @@
// cspell:words stableplaystore stableglobal
import 'dart:io';
import 'package:archive/archive_io.dart';
@@ -1,3 +1,4 @@
// cspell:words revis
import 'dart:io';
import 'package:mason_logger/mason_logger.dart';
@@ -911,7 +912,7 @@ origin/flutter_release/3.10.6''';
});
group('formatVersion', () {
test('returns the correct formated value', () {
test('returns the correct formatted value', () {
expect(
runWithOverrides(
() => shorebirdFlutter.formatVersion(
@@ -1,3 +1,4 @@
// cspell:ignore asdfasdf
import 'dart:io';
import 'package:mason_logger/mason_logger.dart';
@@ -47,7 +47,7 @@ void main() {
expect(results, isEmpty);
});
test('retursn an error when shorebird version cannot be determined',
test('returns an error when shorebird version cannot be determined',
() async {
when(shorebirdVersion.isLatest).thenThrow(
const ProcessException('git', ['rev-parse', 'HEAD']),
@@ -116,7 +116,7 @@ void main() {
expect(request.hasHeaders(expectedHeaders), isTrue);
});
test('returns null if reponse is a 404', () async {
test('returns null if response is a 404', () async {
when(() => httpClient.send(any())).thenAnswer(
(_) async => http.StreamedResponse(
const Stream.empty(),