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 👍
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 Certificate
task
- (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