/azure-flutter-tasks

Easily build and deploy with latest Flutter build tasks for Azure DevOps Pipelines Tasks

Primary LanguageJavaScriptMIT LicenseMIT

Flutter Extension for Azure DevOps

Latest Flutter tasks for Azure DevOps.

Initially a fork maintained by me of the awesome work done by original author Github. As per people's request, this is now a separate repo as this is now an advanced/latest extension with more features.

NOTE : I will no longer maintain my fork instead this repository will be updated, as this has developed into a lot more than the original extension.

Support

PRs are always welcome. Feel free to create an issue if you face any problem.

Don't forget to star this repo, thanks 👍

Buy Me A Coffee


Installation & Usage

Installation can be done using Visual Studio MarketPlace. Add the tasks to your build definition.


Pipeline Tasks

Install

Installs the Flutter SDK onto the running agent if not already installed. Then uses it for following tasks.

  • Select the Release Url Mode: auto (default), custom. If custom is specified, a Custom (Flutter SDK Install Url) must be set.
  • Select the channel: stable (default), beta, or dev.
  • Select the version of the SDK to install: latest (default), custom. If custom is specified, a customVersion must be set.
  • (Optional). Set the customVersion (in a <M>.<m>.<p> semver format) if needed.
  • (Optional). Set the Custom (Flutter SDK Install Url) to release install url like https://storage.googleapis.com/flutter_infra_release/releases/stable/macos/flutter_macos_2.2.1-stable.zip or any other available on (https://flutter.dev/docs/development/tools/sdk/releases?tab=windows).
  • (Optional). Set the customArch (example 'arm64') if needed.

Build

Build the given mobile application project. You must call the Flutter Install task or use the optional flutterDirectory task input that points to your flutter/bin folder before execution. All application bundles are created in the build/outputs folder of your project.

  • Select the projectDirectory that contains the pubspec.yaml file.
  • Select the target platform. Options are: apk (default), aab, ios, ipa, web, all mobile (all mobile platforms only), desktop (windows), desktop (macos), desktop (linux), all desktop (all desktop platforms only) , all (all platforms).
  • (Optional). Set flutterDirectory to set path to the Flutter SDK if you were not using Flutter Install task before this one
  • (Optional). Set buildName (like 1.2.3) that will override the manifest's one.
  • (Optional). Set buildNumber (like 12) that will override the manifest's one. Use $(Build.BuildNumber) to use build number as auto incremental number.
  • (Optional). Set buildFlavour (like development) to specify a build flavour. Must match Android Gradle flavor definition or XCode scheme.
  • (Optional). Set entryPoint to override the main entry point file of the application. Default is 'lib/main.dart'.
  • (Optional). Set verboseMode if you wish to get detailed verbose log output for diagnoses purposes. Default is false.
  • (Optional). Set debugMode if you wish to override the default release mode for the build. Default is false. This flag cannot be combined with profileMode=true.
  • (Optional). Set profileMode if you wish to add the --profile flag to the build. Default is false. This flag cannot be combined with debugMode=true.
  • (Optional). Set dartDefine compile-time variables, use as : foo=bar (use 'dartDefineMulti' for multiple args)"
  • (Optional). Set dartDefineMulti compile-time variables, use as (space separated) : foo=bar key1=val1 key2=val2 (use for multiple --dart-define arguments)"
  • (Optional). Set dartDefineMultiArgSeparator Separator used in params passed to dartDefineMulti. Default is single space (' ')
  • (Optional). Set extraArgs if you want to pass more official/custom command arguments, Space Separated. Example: "--no-tree-shake-icons --publish-to-play"
  • (Optional). Set extraArgsSeparator Separator used in params passed to extraArgs. Default is single space (' ')
  • (Android).(Optional). Set apkTargetPlatform for the Android platform architecture target: default (default set by Flutter sdk) android-arm , android-arm64, android-x86, android-x64, custom.
  • (Android).(Optional). Set customApkTargetPosition for the custom target platform architecture, provide your own combination (comma separated) of valid values. Example like android-arm,android-arm64,android-x64
  • (Android).(Optional). Set the build mode splitPerAbi to compile the code into an APK per target ABI. Otherwise the build will result in a single APK.
  • (iOS).(Optional). Set iosTargetPlatform for the iOS target: device (default), simulator.
  • (iOS).(Optional). Set iosCodesign to configure whenever the bundle odesign the application bundle (only available on device builds, and activated by default). Warning: you must install a valid certificate before build with the Install an Apple Certificatetask
  • (ipa).(Optional). Set exportOptionsPlist to the path of your ExportOptions.plist to configure --export-options-plist. This flag cannot be combined with '--split-debug-info'. Optionally export an IPA with these options. See 'xcodebuild -h' for available exportOptionsPlist keys.

NOTE : for --release builds, pass debugMode=false and profileMode=false

Test

Launch tests and publish a report as build test results.

  • Select the projectDirectory that contains to pubspec.yaml file.
  • (Optional). Set testName as a regular expression matching substrings of the names of tests to run.
  • (Optional). Set testPlainName as a plain-text substring of the names of tests to run.
  • (Optional). Set updateGoldens: whether matchesGoldenFile() calls within your test methods should update the golden files rather than test for an existing match.
  • (Optional). Set generateCodeCoverageReport to generate code coverage report based on tests in the project. The report file is located in the specified projectDirectory in coverage/lcov.info.
  • (Optional). Set concurrency to specify the number of concurrent test processes to run. Default is 6.
  • (Optional). Set extraArgs if you want to pass more official/custom command arguments, Comma Separated. Example: "--no-sound-null-safety,--dart-define=<foo=bar>"

Analyze

Launch analyze on flutter directory.

  • Select the projectDirectory that contains the pubspec.yaml file.
  • (Optional). Set pubGet if you wish to run pub get command before analyze. Default is true.
  • (Optional). Set extraArgs if you want to pass more official/custom command arguments. Example: "--fatal-infos --fatal-warnings"
  • (Optional). Set extraArgsSeparator Separator used in params passed to extraArgs. Default is single space (' ')

Command

Launch a Flutter command with custom arguments.

  • Set the arguments to your custom valid flutter command.
  • Select the projectDirectory that contains the pubspec.yaml file.
  • (Optional). Set flutterDirectory to set path to the Flutter SDK if you were not using Flutter Install task before this one
  • (Optional). Set argSeparator Separator used in params passed to extraArgs. Default is single space (' ')

Env

Task to create the environment variables FlutterToolPath, FlutterPubCachePath and DartToolPath.

  • Pick the Flutter path from either to Custom Path or File Path.
  • Select the Custom Path to give a path string like "$(Agent.ToolsDirectory)/<yourPath>/flutter"
  • Select the File Path to set path to the Flutter SDK

NOTE : Do not give path to 'bin' folder


Environment Variables

Environment variables created by the Install or Env tasks are :

  • $(FlutterToolPath) - can be used as "$(FlutterToolPath)/flutter packages get"
  • $(FlutterPubCachePath) can be used as "$(FlutterPubCachePath)/pubver set $(Version)"
  • $(DartToolPath) - can be used as "$(DartToolPath)/dart prog.dart arg1"

FAQ

First, please read the WIKI and then FAQs before opening any new issues.

Flutter command isn't recognized ?

Make sure that you have a Flutter Install at the beginning of your definition.

Can I run a custom Flutter command ?

Yes, right after the Flutter Install task, a FlutterToolPath environment variable points to the bin of the Flutter SDK directory. You just have to use $(FlutterToolPath) in your following tasks. Example: "$(FlutterToolPath)/flutter packages get"

Can I run Dart program ?

Yes, right after the Flutter Install task, a DartToolPath environment variable points to the bin of the Dart SDK directory. You just have to use $(DartToolPath) in your following tasks. Example: "$(DartToolPath)/dart program.dart arg1 arg2"

Can I access Flutter's pub-cache ?

Yes, right after the Flutter Install task, a FlutterPubCachePath environment variable points to the pub-cache directory that Flutter installs all depdencies. You just have to use $(FlutterPubCachePath) in your following tasks. Example: "$(FlutterPubCachePath)/pubver set $(Version)"

Facing error - "No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi" ?

Read this issue #16 for solution or this stackoverflow

How to run "Integeration Tests" ?

Read this wiki for steps, thanks to @maksymgendin for the help.

IOS build fail "Provisional Profile Errors" ?

Read this #35 for help

Any IOS or Android Examples (Setup Guide/YAML config)

Read this issue #37 and this wiki setup

iOS build fails with: "Xcode couldn't find any iOS App Development provisioning profiles matching..."

Read this issue #49


Sample Build Pipeline Config (3rd Party)

Disclaimer : These are 3rd Party YAML config, please use them on your own discretion

Improve

First, please read the WIKI and then FAQs before opening any new issues. Help me by reporting bugs, creating PRs, submit new ideas for features or anything else that you want to share.

More

Check out my other useful Flutter packages on pub.dev or more DevOps extensions on marketplace

Source Code

Source code can be found on Github.

Previous fork : Github

Original repo : Github.


License

MIT