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 name: ✅ Semantic Pull Request
uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1 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: changes:
runs-on: ubuntu-latest runs-on: ubuntu-latest
+1 -1
View File
@@ -1,6 +1,6 @@
# Code push Notes # 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 ## 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 # 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" $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'; import 'package:test/test.dart';
void main() { void main() {
const token = const token = // cspell: disable-next-line
'''eyJhbGciOiJSUzI1NiIsImtpZCI6ImMxMGM5MGJhNGMzNjYzNTE2ZTA3MDdkMGU5YTg5NDgxMDYyODUxNTgiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vbXktYXBwIiwiYXVkIjoibXktYXBwIiwiYXV0aF90aW1lIjoxNjQzNjg0MjY2LCJ1c2VyX2lkIjoiRzR1MzdXdk90dmVWR0pRb1pCWGpxcHVWazZWMiIsInN1YiI6Ikc0dTM3V3ZPdHZlVkdKUW9aQlhqcXB1Vms2VjIiLCJpYXQiOjE2NDM2ODQyNjYsImV4cCI6MTY0MzY4Nzg2NiwiZW1haWwiOiJ0ZXN0QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJmaXJlYmFzZSI6eyJpZGVudGl0aWVzIjp7ImVtYWlsIjpbInRlc3RAZ21haWwuY29tIl19LCJzaWduX2luX3Byb3ZpZGVyIjoicGFzc3dvcmQifX0.bUWnX_XmR1d9EmeFeYSsK_CHU1u9NPIHgyaQueZ6urYOtxvuL_QodjPl0c9CBJwctwPnxVyRmkeNCw0oF9xBgph0NApLL4FIG6vpDPZfW9txZBYr8xIvaqvmD0diACENAQdjRT2XmyEdQ2-U7SsTonybHmLoU9FMQTjAgw4NCALQvExfB6rtQ9GDsOBt1xoBkB3Vo7a5OmugZ1aHXF69b8As6137-Dggf5qx5R3oLRFovICMMesQziE3vGi-WKcbQxSeiD-9a6ShPAhk41XiyjFGDEOtUCQo63uwQnMw3g0KVtC6bzIyFq-E91vhxumxXzxPYC-kg7iUYiSZy7Y-Aw'''; '''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'''; '''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'''; '''eyJhbGciOiJSUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vbXktYXBwIiwiYXVkIjoibXktYXBwIiwidXNlcl9pZCI6Ikc0dTM3V3ZPdHZlVkdKUW9aQlhqcXB1Vms2VjIiLCJzdWIiOiJHNHUzN1d2T3R2ZVZHSlFvWkJYanFwdVZrNlYyIiwiaWF0IjoxNjQzNjg0MjY2LCJleHAiOjE2NDM2ODc4NjYsImVtYWlsIjoidGVzdEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJlbWFpbCI6WyJ0ZXN0QGdtYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6InBhc3N3b3JkIn19.RBAwg-Ttf36aDkVR97Rd50aMp-0yzk8do_4AUPFi9nEhKu0Ye8ox_9hdTBttJYxoOq0NbH2zz0JHSnSHqoTvCleVhoGqg8YghzH0NiqncPfDzi-IcRfy2K8CrOoXuqXaj3YWrbrzNWAYV46eFmvI2TmPO55AyFOjhvLpW-uf96ceOPjueZm8o5K2DZym86BAhSdShknONV2O7b2vW34TXf3UJdISs5p9z6Si4JOWGjbVPY45CO16ODdDxyUGUM2-IVQloB7bg0nMqQbIjKDoO5g9d1nguR2Z-YBiv0BX1MDWDlrBsMAzzRVaFlf6YQS1LKxu2tnMdCrBnK_Wvqt5sQ''';
const keyValuePublicKeysUrl = const keyValuePublicKeysUrl =
'https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com'; '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', () { 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'''; '''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 audience = 'c4af9566-8a36-4348-b413-dab665b8717d';
const issuer = const issuer =
'''https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0'''; '''https://login.microsoftonline.com/9188040d-6c67-4c5b-b112-36a304b66dad/v2.0''';
+1
View File
@@ -1,3 +1,4 @@
<!-- cspell: ignore requirepass -->
# Contributing # Contributing
We are happy to accept contributions! 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.get(key: key), completion(isNull));
await expectLater(client.json.set(key: key, value: value), completes); await expectLater(client.json.set(key: key, value: value), completes);
await expectLater( await expectLater(
@@ -1,3 +1,4 @@
// cspell:words Filesx
import 'dart:io'; import 'dart:io';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
@@ -1,3 +1,4 @@
// cspell:words microsoftonline
import 'package:googleapis_auth/googleapis_auth.dart'; import 'package:googleapis_auth/googleapis_auth.dart';
/// Endpoints for OAuth authentication with Azure/Entra/Microsoft. /// Endpoints for OAuth authentication with Azure/Entra/Microsoft.
@@ -1,3 +1,4 @@
// cspell:words dgst
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data'; import 'dart:typed_data';
@@ -175,7 +175,7 @@ class AarPatcher extends Patcher {
@override @override
Future<String> extractReleaseVersionFromArtifact(File artifact) { 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( throw UnimplementedError(
'Release version must be specified using --release-version.', 'Release version must be specified using --release-version.',
); );
@@ -221,7 +221,7 @@ class IosFrameworkPatcher extends Patcher {
@override @override
Future<String> extractReleaseVersionFromArtifact(File artifact) { 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( throw UnimplementedError(
'Release version must be specified using --release-version.', '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 /// - Warn the user about the platform if that platform is not the one
/// the user specified with `--platform`. /// the user specified with `--platform`.
/// - Error out if the user specified a platform that is not previewable. /// - Error out if the user specified a platform that is not previewable.
void _assertPreviwableReleases({ void _assertPreviewableReleases({
required Release releaseWithAllPlatforms, required Release releaseWithAllPlatforms,
required Release release, required Release release,
}) { }) {
@@ -203,7 +203,7 @@ class PreviewCommand extends ShorebirdCommand {
final releaseWithAllPlatforms = releasesWithAllPlatforms.firstWhere( final releaseWithAllPlatforms = releasesWithAllPlatforms.firstWhere(
(r) => r.id == release.id, (r) => r.id == release.id,
); );
_assertPreviwableReleases( _assertPreviewableReleases(
releaseWithAllPlatforms: releaseWithAllPlatforms, releaseWithAllPlatforms: releaseWithAllPlatforms,
release: release, 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({ void printPatchInstructions({
required Releaser releaser, required Releaser releaser,
required String releaseVersion, required String releaseVersion,
@@ -300,7 +300,7 @@ Or run on an iOS simulator without code signing
} catch (exception, stackTrace) { } catch (exception, stackTrace) {
logger.detail('[ios-deploy] failed: $exception\n$stackTrace'); logger.detail('[ios-deploy] failed: $exception\n$stackTrace');
debuggerState = _DebuggerState.detached; debuggerState = _DebuggerState.detached;
logger.err('[ios-deplay] failed: $exception'); logger.err('[ios-deploy] failed: $exception');
return ExitCode.software.code; 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. // Always returns the original line.
@visibleForTesting @visibleForTesting
String detectFailures(String line, Logger logger) { String detectFailures(String line, Logger logger) {
@@ -22,9 +22,9 @@ extension OptionFinder on ArgResults {
return this[name] as String?; 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 // 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 final abbr = argParser.options.values
.firstWhereOrNull((option) => option.name == name) .firstWhereOrNull((option) => option.name == name)
?.abbr; ?.abbr;
@@ -105,7 +105,7 @@ extension ForwardedArgs on ArgResults {
bool _isPositionalArgPlatform(String arg) => bool _isPositionalArgPlatform(String arg) =>
ReleaseType.values.any((target) => target.cliName == 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 /// be multiple values for a single name, so we return a potentially empty
/// [Iterable<String>] instead of a [String?]. /// [Iterable<String>] instead of a [String?].
Iterable<String> _argsNamed(String name) { Iterable<String> _argsNamed(String name) {
@@ -1,6 +1,6 @@
// ignore_for_file: public_member_api_docs // ignore_for_file: public_member_api_docs
extension NullOrEmtpy on String? { extension NullOrEmpty on String? {
/// Returns `true` if this string is null or empty. /// Returns `true` if this string is null or empty.
bool get isNullOrEmpty => this == null || this!.isEmpty; bool get isNullOrEmpty => this == null || this!.isEmpty;
} }
@@ -82,7 +82,7 @@ class PatchDiffChecker {
..info( ..info(
yellow.wrap(''' 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) { if (!allowNativeChanges) {
@@ -166,7 +166,7 @@ class Ios {
.toSet(); .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. /// extension. We don't want to include these schemes as app flavors.
/// ///
/// xcschemes are XML files that contain metadata about the scheme, including /// 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. /// Link to the troubleshooting page on the Shorebird documentation.
const troubleshootingUrl = '$docsUrl/troubleshooting'; 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 /// Unsupported class file major version
const unsupportedClassFileVersionUrl = const unsupportedClassFileVersionUrl =
'$troubleshootingUrl#unsupported-class-file-major-version-65'; '$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:shorebird_cli/src/archive_analysis/archive_analysis.dart';
import 'package:test/test.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( await expectLater(
() => runWithOverrides( () => runWithOverrides(
() async => artifactManager.createDiff( () async => artifactManager.createDiff(
@@ -119,7 +119,7 @@ void main() {
}); });
group(Auth, () { group(Auth, () {
const idToken = const idToken = // cspell:disable-next-line
'''eyJhbGciOiJIUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMjM0NSIsImhkIjoic2hvcmViaXJkLmRldiIsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxMjM0LCJleHAiOjY3ODl9.MYbITALvKsGYTYjw1o7AQ0ObkqRWVBSr9cFYJrvA46g'''; '''eyJhbGciOiJIUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMjM0NSIsImhkIjoic2hvcmViaXJkLmRldiIsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxMjM0LCJleHAiOjY3ODl9.MYbITALvKsGYTYjw1o7AQ0ObkqRWVBSr9cFYJrvA46g''';
const refreshToken = 'shorebird-token'; const refreshToken = 'shorebird-token';
const ciToken = CiToken( const ciToken = CiToken(
@@ -362,7 +362,7 @@ void main() {
), ),
); );
const expiredIdToken = const expiredIdToken = // cspell:disable-next-line
'''eyJhbGciOiJIUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMjM0NSIsImhkIjoic2hvcmViaXJkLmRldiIsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxMjM0LCJleHAiOjY3ODl9.MYbITALvKsGYTYjw1o7AQ0ObkqRWVBSr9cFYJrvA46g'''; '''eyJhbGciOiJIUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMjM0NSIsImhkIjoic2hvcmViaXJkLmRldiIsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxMjM0LCJleHAiOjY3ODl9.MYbITALvKsGYTYjw1o7AQ0ObkqRWVBSr9cFYJrvA46g''';
final onRefreshCredentialsCalls = <oauth2.AccessCredentials>[]; final onRefreshCredentialsCalls = <oauth2.AccessCredentials>[];
final expiredCredentials = oauth2.AccessCredentials( final expiredCredentials = oauth2.AccessCredentials(
@@ -416,7 +416,7 @@ void main() {
), ),
); );
const expiredIdToken = const expiredIdToken = // cspell:disable-next-line
'''eyJhbGciOiJIUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMjM0NSIsImhkIjoic2hvcmViaXJkLmRldiIsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxMjM0LCJleHAiOjY3ODl9.MYbITALvKsGYTYjw1o7AQ0ObkqRWVBSr9cFYJrvA46g'''; '''eyJhbGciOiJIUzI1NiIsImtpZCI6IjEyMzQiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI1MjMzMDIyMzMyOTMtZWlhNWFudG0wdGd2ZWsyNDB0NDZvcmN0a3RpYWJyZWsuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMjM0NSIsImhkIjoic2hvcmViaXJkLmRldiIsImVtYWlsIjoidGVzdEBlbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaWF0IjoxMjM0LCJleHAiOjY3ODl9.MYbITALvKsGYTYjw1o7AQ0ObkqRWVBSr9cFYJrvA46g''';
final onRefreshCredentialsCalls = <oauth2.AccessCredentials>[]; final onRefreshCredentialsCalls = <oauth2.AccessCredentials>[];
final expiredCredentials = oauth2.AccessCredentials( final expiredCredentials = oauth2.AccessCredentials(
@@ -137,13 +137,13 @@ void main() {
createdAt: DateTime(2023), createdAt: DateTime(2023),
updatedAt: DateTime(2023), updatedAt: DateTime(2023),
); );
final partchArtifactBundle = PatchArtifactBundle( final patchArtifactBundle = PatchArtifactBundle(
arch: arch.arch, arch: arch.arch,
path: 'path', path: 'path',
hash: '', hash: '',
size: 4, size: 4,
); );
final patchArtifactBundles = {arch: partchArtifactBundle}; final patchArtifactBundles = {arch: patchArtifactBundle};
const archs = [Arch.arm64]; const archs = [Arch.arm64];
const releaseArtifact = ReleaseArtifact( const releaseArtifact = ReleaseArtifact(
id: 1, id: 1,
@@ -1332,7 +1332,7 @@ You can manage this release in the ${link(uri: uri, message: 'Shorebird Console'
verifyNever(() => progress.fail(any())); 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'; const flavorName = 'myFlavor';
when( when(
() => codePushClient.createReleaseArtifact( () => codePushClient.createReleaseArtifact(
@@ -1598,7 +1598,7 @@ You can manage this release in the ${link(uri: uri, message: 'Shorebird Console'
verifyNever(() => progress.fail(any())); 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'; const flavorName = 'myFlavor';
when( when(
() => codePushClient.createReleaseArtifact( () => codePushClient.createReleaseArtifact(
@@ -2139,11 +2139,11 @@ You can manage this release in the ${link(uri: uri, message: 'Shorebird Console'
verify( verify(
() => codePushClient.createPatchArtifact( () => codePushClient.createPatchArtifact(
appId: appId, appId: appId,
artifactPath: partchArtifactBundle.path, artifactPath: patchArtifactBundle.path,
patchId: patchId, patchId: patchId,
arch: arch.arch, arch: arch.arch,
platform: releasePlatform, platform: releasePlatform,
hash: partchArtifactBundle.hash, hash: patchArtifactBundle.hash,
), ),
).called(1); ).called(1);
}); });
@@ -2202,11 +2202,11 @@ You can manage this release in the ${link(uri: uri, message: 'Shorebird Console'
verify( verify(
() => codePushClient.createPatchArtifact( () => codePushClient.createPatchArtifact(
appId: appId, appId: appId,
artifactPath: partchArtifactBundle.path, artifactPath: patchArtifactBundle.path,
patchId: patchId, patchId: patchId,
arch: arch.arch, arch: arch.arch,
platform: releasePlatform, platform: releasePlatform,
hash: partchArtifactBundle.hash, hash: patchArtifactBundle.hash,
), ),
).called(1); ).called(1);
verify(() => codePushClient.getChannels(appId: appId)).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( verify(
() => codePushClient.createPatchArtifact( () => codePushClient.createPatchArtifact(
appId: appId, appId: appId,
artifactPath: partchArtifactBundle.path, artifactPath: patchArtifactBundle.path,
patchId: patchId, patchId: patchId,
arch: arch.arch, arch: arch.arch,
platform: releasePlatform, platform: releasePlatform,
hash: partchArtifactBundle.hash, hash: patchArtifactBundle.hash,
), ),
).called(1); ).called(1);
verify(() => codePushClient.getChannels(appId: appId)).called(1); verify(() => codePushClient.getChannels(appId: appId)).called(1);
@@ -1,3 +1,4 @@
// cspell:words pubin dgst outform
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
@@ -155,7 +155,7 @@ void main() {
test('exits with code 0 when logged in successfully', () async { test('exits with code 0 when logged in successfully', () async {
const token = CiToken( const token = CiToken(
// "shorebird-token" in base64 // "shorebird-token" in base64
refreshToken: 'c2hvcmViaXJkLXRva2Vu', refreshToken: 'c2hvcmViaXJkLXRva2Vu', // cspell:disable-line
authProvider: AuthProvider.google, authProvider: AuthProvider.google,
); );
when( when(
@@ -441,9 +441,9 @@ void main() {
}); });
group('createPatchArtifacts', () { group('createPatchArtifacts', () {
const postLinkerFlutterRevision = const postLinkerFlutterRevision = // cspell: disable-next-line
'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef'; 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
const preLinkerFlutterRevision = const preLinkerFlutterRevision = // cspell: disable-next-line
'83305b5088e6fe327fb3334a73ff190828d85713'; '83305b5088e6fe327fb3334a73ff190828d85713';
const appId = 'appId'; const appId = 'appId';
const arch = 'aarch64'; const arch = 'aarch64';
@@ -774,7 +774,7 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}''',
}); });
group('createPatchArtifacts', () { group('createPatchArtifacts', () {
const postLinkerFlutterRevision = const postLinkerFlutterRevision = // cspell: disable-next-line
'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef'; 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef';
const preLinkerFlutterRevision = const preLinkerFlutterRevision =
'83305b5088e6fe327fb3334a73ff190828d85713'; '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'; const revision = 'deadbeef';
setUp(() { setUp(() {
when(() => argResults['flutter-version']).thenReturn(revision); 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(() { setUp(() {
device = const AppleDevice( device = const AppleDevice(
deviceProperties: DeviceProperties( deviceProperties: DeviceProperties(
name: deviceName, name: deviceName,
osVersionNumber: 'unparseable version number', osVersionNumber: 'unparsable version number',
), ),
hardwareProperties: hardwareProperties, hardwareProperties: hardwareProperties,
connectionProperties: connectionProperties, connectionProperties: connectionProperties,
@@ -305,7 +305,7 @@ BUILD FAILED in 3s
}); });
group( group(
'when flavors are mixed, starting with upper case, finishin with camel', 'when flavors are mixed, starting with upper case, finishing with camel',
() { () {
test( test(
'extracts flavors', 'extracts flavors',
@@ -139,7 +139,7 @@ void main() {
bundlePath, bundlePath,
]), ]),
).called(1); ).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 { test('dumps backtrace on process stopped', () async {
@@ -1,3 +1,4 @@
// cspell:ignore qwer
import 'package:args/args.dart'; import 'package:args/args.dart';
import 'package:shorebird_cli/src/common_arguments.dart'; import 'package:shorebird_cli/src/common_arguments.dart';
import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/extensions/arg_results.dart';
@@ -1,3 +1,4 @@
// cspell:words stableplaystore stableglobal
import 'dart:io'; import 'dart:io';
import 'package:archive/archive_io.dart'; import 'package:archive/archive_io.dart';
@@ -1,3 +1,4 @@
// cspell:words revis
import 'dart:io'; import 'dart:io';
import 'package:mason_logger/mason_logger.dart'; import 'package:mason_logger/mason_logger.dart';
@@ -911,7 +912,7 @@ origin/flutter_release/3.10.6''';
}); });
group('formatVersion', () { group('formatVersion', () {
test('returns the correct formated value', () { test('returns the correct formatted value', () {
expect( expect(
runWithOverrides( runWithOverrides(
() => shorebirdFlutter.formatVersion( () => shorebirdFlutter.formatVersion(
@@ -1,3 +1,4 @@
// cspell:ignore asdfasdf
import 'dart:io'; import 'dart:io';
import 'package:mason_logger/mason_logger.dart'; import 'package:mason_logger/mason_logger.dart';
@@ -47,7 +47,7 @@ void main() {
expect(results, isEmpty); expect(results, isEmpty);
}); });
test('retursn an error when shorebird version cannot be determined', test('returns an error when shorebird version cannot be determined',
() async { () async {
when(shorebirdVersion.isLatest).thenThrow( when(shorebirdVersion.isLatest).thenThrow(
const ProcessException('git', ['rev-parse', 'HEAD']), const ProcessException('git', ['rev-parse', 'HEAD']),
@@ -116,7 +116,7 @@ void main() {
expect(request.hasHeaders(expectedHeaders), isTrue); 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( when(() => httpClient.send(any())).thenAnswer(
(_) async => http.StreamedResponse( (_) async => http.StreamedResponse(
const Stream.empty(), const Stream.empty(),