Dart API
The built-in plugins can be accessed programmatically from Dart code โ no CLI invocation needed. This is useful for build scripts, custom tooling, or integrating impaktfull_cli into your own Dart application.
Setup
Use cli.run() to get direct access to plugin instances:
void main(List<String> args) async {
final cli = ImpaktfullCli(arguments: args);
await cli.run((cli) async {
// use plugins here
});
}
Use runMultipleCommands to sequence several plugin calls:
await cli.run((cli) async {
await cli.runMultipleCommands(() async {
await cli.flutterBuildPlugin.buildAndroid();
await cli.playStorePlugin.uploadToPlayStore(/* ... */);
});
});
CiCdPlugin
cli.ciCdPlugin โ Orchestrates full CI/CD pipelines. Combines build, sign, and upload into single calls.
buildAndroid
Future<void> buildAndroid({
String? flavor,
String mainDartFile = 'lib/main.dart',
FlutterBuildAndroidExtension extension = FlutterBuildAndroidExtension.aab,
bool obfuscate = true,
String? splitDebugInfoPath = '.build/debug-info',
int? buildNr,
AppCenterUploadConfig? appCenterUploadConfig,
PlayStoreUploadConfig? playStoreUploadConfig,
ImpaktfullDashboardAppTestingVersionUploadConfig? impaktfullDashboardUploadConfig,
})
Builds and optionally uploads an Android artifact. Pass an upload config to automatically push to App Center, Play Store, or the impaktfull dashboard after building.
buildAndroidWithFlavor
Future<void> buildAndroidWithFlavor({
required String flavor,
String mainDartPrefix = 'lib/main_',
FlutterBuildAndroidExtension extension = FlutterBuildAndroidExtension.aab,
bool obfuscate = true,
String? splitDebugInfoPaths = 'lib/main_',
int? buildNr,
AppCenterUploadConfig? appCenterUploadConfig,
PlayStoreUploadConfig? playStoreUploadConfig,
ImpaktfullDashboardAppTestingVersionUploadConfig? impaktfullDashboardUploadConfig,
})
Same as buildAndroid but resolves the entry point from a prefix + flavor name (e.g. lib/main_production.dart).
buildIos
Future<void> buildIos({
String? flavor,
String mainDartFile = 'lib/main.dart',
FlutterBuildIosExtension extension = FlutterBuildIosExtension.ipa,
bool obfuscate = true,
String? splitDebugInfoPath = '.build/debug-info',
int? buildNr,
AppCenterUploadConfig? appCenterUploadConfig,
TestFlightUploadConfig? testflightUploadConfig,
ImpaktfullDashboardAppTestingVersionUploadConfig? impaktfullDashboardUploadConfig,
})
buildIosWithFlavor
Future<void> buildIosWithFlavor({
required String flavor,
String mainDartPrefix = 'lib/main_',
FlutterBuildIosExtension extension = FlutterBuildIosExtension.ipa,
bool obfuscate = true,
String? splitDebugInfoPaths = 'lib/main_',
int? buildNr,
AppCenterUploadConfig? appCenterUploadConfig,
TestFlightUploadConfig? testflightUploadConfig,
ImpaktfullDashboardAppTestingVersionUploadConfig? impaktfullDashboardUploadConfig,
})
versionBump
Future<int> versionBump({
String? flavor,
String? suffix,
bool commitChanges = true,
})
Bumps the version in release_config.json, optionally commits the change, and returns the new build number.
getGithubBuildNr
Future<int> getGithubBuildNr({int incrementBy = 0})
Returns the current GITHUB_RUN_NUMBER env variable as an integer, optionally incremented.
buildAndroid
Future<File> buildAndroid({
String? flavor,
String? mainDartFile = 'lib/main.dart',
FlutterBuildAndroidExtension extension = FlutterBuildAndroidExtension.aab,
bool obfuscate = true,
String? splitDebugInfoPath = 'build/debug-info',
int? buildNr,
})
Returns the built .aab or .apk file.
buildIos
Future<File> buildIos({
String? flavor,
String? mainDartFile = 'lib/main.dart',
FlutterBuildIosExtension extension = FlutterBuildIosExtension.ipa,
bool obfuscate = true,
String? splitDebugInfoPath = '.build/debug-info',
int? buildNr,
})
Returns the built .ipa or .xcarchive file.
uploadToPlayStore
Future<void> uploadToPlayStore({
required File file,
required PlaystoreTrackType trackType,
required PlaystoreReleaseStatus releaseStatus,
File? serviceAccountCredentialsFile,
})
Uploads the given .aab or .apk to the specified Play Store track. If serviceAccountCredentialsFile is not provided, falls back to the GOOGLE_SERVICE_ACCOUNT_JSON_RAW environment variable.
uploadToAppCenter
Future<void> uploadToAppCenter({
required String appName,
required File file,
String? ownerName,
Secret? apiToken,
List<String> distributionGroups = defaultDistributionGroups,
bool notifyListeners = true,
})
Uploads a build artifact to App Center and optionally notifies distribution group members. Falls back to APPCENTER_OWNER_NAME and APPCENTER_API_TOKEN environment variables if not provided.
uploadToTestflightWithEmailPassword
Future<void> uploadToTestflightWithEmailPassword({
required File file,
String? email,
Secret? appSpecificPassword,
String type = 'ios',
})
Uses altool under the hood. Falls back to APPLE_EMAIL and APPLE_APP_SPECIFIC_PASSWORD environment variables if not provided.
getPassword
Future<Secret> getPassword({
required String vaultName,
required String opUuid,
required String fieldName,
Secret? rawServiceAccount,
String? logContext,
})
getOnePasswordField
Future<String> getOnePasswordField({
required String vaultName,
required String opUuid,
required String fieldName,
Secret? rawServiceAccount,
String? logContext,
})
Returns the field value as a plain string (use getPassword for sensitive values).
downloadFile
Future<File> downloadFile({
required String opUuid,
required String outputPath,
String? vaultName,
Secret? rawServiceAccount,
String? logContext,
bool removeFileAfterCliRun = true,
})
downloadDistributionCertificate
Future<File> downloadDistributionCertificate({
required String opUuid,
String? vaultName,
String outputPath = 'certificates/apple_distribution.p12',
Secret? rawServiceAccount,
bool removeFileAfterCliRun = true,
})
downloadServiceAccountCredentials
Future<File> downloadServiceAccountCredentials({
required String opUuid,
String outputPath = 'android/playstore_credentials.json',
String? vaultName,
Secret? rawServiceAccount,
bool removeFileAfterCliRun = true,
})
getCertificatePassword
Future<Secret> getCertificatePassword({
required String opUuid,
required String vaultName,
String fieldName = 'password',
Secret? rawServiceAccount,
})
getTestFlightCredentials
Future<TestFlightCredentials> getTestFlightCredentials({
required String vaultName,
required String opUuid,
Secret? rawServiceAccount,
})
cleanupStoredFiles
Future<void> cleanupStoredFiles()
Deletes any files downloaded from 1Password that were registered for cleanup. Called automatically at the end of ImpaktfullCli.run().
unlockKeyChain
Future<void> unlockKeyChain({
String name = 'login',
Secret? password,
})
Unlocks the named keychain. Falls back to the CI_KEYCHAIN_PASSWORD environment variable if password is not provided.
AppleProvisioningProfilePlugin
cli.appleProvisioningProfilePlugin โ Installs Apple provisioning profiles.
installProvisioningProfile
Future<void> installProvisioningProfile({
required File provisioningProfile,
bool override = true,
})
scanAndInstallProvisioningProfiles
Future<void> scanAndInstallProvisioningProfiles({
Directory? directory,
bool override = true,
})
Scans the given directory (defaults to the current directory) for .mobileprovision files and installs all of them.
SlackPlugin
Instantiate directly โ not exposed on ImpaktfullCli:
final slack = SlackPlugin(processRunner: cli.processRunner);
sendMessage
Future<void> sendMessage({
required String channelName,
String? message,
List<SlackMessageAttachment> attachments = const [],
})
GitPlugin
Instantiate directly โ not exposed on ImpaktfullCli:
final git = GitPlugin(processRunner: cli.processRunner);
isGitClean
Future<bool> isGitClean()
Returns true if there are no uncommitted changes. Returns true if git is not installed.
TestCoveragePlugin
Instantiate directly โ not exposed on ImpaktfullCli:
final coverage = TestCoveragePlugin(processRunner: cli.processRunner);
testCoverage
Future<TestCoverageReport> testCoverage({
required String path,
required TestCoverageType type,
String outputPath = 'coverage',
bool overrideLcovFile = true,
List<RegExp> ignorePatterns = const [],
})
Runs tests, generates an lcov report, and returns a TestCoverageReport with the coverage percentage and file breakdown.