Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hey24sheep/azure-flutter-tasks
Easily build and deploy with latest Flutter build tasks for Azure DevOps Pipelines Tasks
https://github.com/hey24sheep/azure-flutter-tasks
azure azure-devops azure-pipelines cd ci ci-cd cicd extension flutter flutter-app flutter-ci vsts vsts-extension vsts-tasks
Last synced: about 17 hours ago
JSON representation
Easily build and deploy with latest Flutter build tasks for Azure DevOps Pipelines Tasks
- Host: GitHub
- URL: https://github.com/hey24sheep/azure-flutter-tasks
- Owner: hey24sheep
- License: mit
- Created: 2021-07-10T08:19:59.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2025-01-04T10:09:25.000Z (18 days ago)
- Last Synced: 2025-01-14T04:07:17.854Z (8 days ago)
- Topics: azure, azure-devops, azure-pipelines, cd, ci, ci-cd, cicd, extension, flutter, flutter-app, flutter-ci, vsts, vsts-extension, vsts-tasks
- Language: JavaScript
- Homepage: https://marketplace.visualstudio.com/items?itemName=Hey24sheep.flutter
- Size: 571 KB
- Stars: 93
- Watchers: 4
- Forks: 22
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Flutter Extension for Azure DevOps
[![](https://img.shields.io/badge/hey24sheep.com-202124.svg?style=for-the-badge&logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADIAAAAcCAMAAAAURxzFAAAADFBMVEUAAAAbvfUcvfUcvfXEslmQAAAAA3RSTlMA4PgXbk0cAAAATElEQVR42u3RgQbAMAyE4dvu%2Fd95Y%2FiHkRyEkUPTK5%2BqajMZ32FH00kriWltYkqDsHJekmd8AQiBvPWfSPH8iPhQcEv0lYycCDGWzQW5CAN5SL8q5AAAAABJRU5ErkJggg%3D%3D)](https://hey24sheep.com)
![](https://img.shields.io/visual-studio-marketplace/release-date/hey24sheep.flutter?color=green&style=flat-square)
![](https://img.shields.io/visual-studio-marketplace/azure-devops/installs/total/hey24sheep.flutter?style=flat-square)
![](https://img.shields.io/visual-studio-marketplace/last-updated/hey24sheep.flutter?style=flat-square)
![](https://img.shields.io/visual-studio-marketplace/r/hey24sheep.flutter?color=green&style=flat-square)
![](https://img.shields.io/visual-studio-marketplace/v/hey24sheep.flutter?label=current%20version&style=flat-square)Latest [Flutter](http://flutter.io) tasks for [Azure DevOps](https://azure.microsoft.com/en-gb/services/devops/).
Initially a [fork](https://github.com/hey24sheep/vsts-flutter-tasks) maintained by me of the awesome work done by original author [Github](https://github.com/aloisdeniel/vsts-flutter-tasks). 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](https://marketplace.visualstudio.com/items?itemName=hey24sheep.flutter). Add the tasks to your build definition.
# Pipeline Tasks
### Install
![](images/step_install.png)
Installs the [Flutter SDK](https://flutter.io/sdk-archive/) 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 `..` 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
![](images/step_build.png)
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
![](images/step_test.png)
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="### Analyze
![](images/step_analyze.png)
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
![](images/step_command.png)
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
![](images/step_env.png)
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)//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](https://github.com/hey24sheep/azure-flutter-tasks/wiki) and then [FAQs](https://github.com/hey24sheep/azure-flutter-tasks#faq) 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](https://github.com/hey24sheep/azure-flutter-tasks/issues/16) for solution or this [stackoverflow](https://stackoverflow.com/questions/60404457/no-version-of-ndk-matched-the-requested-version/65698078#65698078)
> How to run "Integeration Tests" ?
Read this [wiki](https://github.com/hey24sheep/azure-flutter-tasks/wiki/Integeration-Test-Support) for steps, thanks to [@maksymgendin](https://github.com/maksymgendin) for the help.
> IOS build fail "Provisional Profile Errors" ?
Read this [#35](https://github.com/hey24sheep/azure-flutter-tasks/issues/35#issuecomment-1063794699) for help
> Any IOS or Android Examples (Setup Guide/YAML config)
Read this issue [#37](https://github.com/hey24sheep/azure-flutter-tasks/issues/37) and this [wiki setup](https://github.com/hey24sheep/azure-flutter-tasks/wiki/IOS-&-Android-Example-Setup-Guide)
> iOS build fails with: "Xcode couldn't find any iOS App Development provisioning profiles matching..."
Read this issue [#49](https://github.com/hey24sheep/azure-flutter-tasks/issues/49)
## Sample Build Pipeline Config (3rd Party)
> Disclaimer : These are 3rd Party YAML config, please use them on your own discretion
- [xeladu - Flutter Build Pipeline](https://github.com/xeladu/flutter_build_pipeline)
## Improve
First, please read the [WIKI](https://github.com/hey24sheep/azure-flutter-tasks/wiki) and then [FAQs](https://github.com/hey24sheep/azure-flutter-tasks#faq) 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.- Just [write an issue](https://github.com/hey24sheep/azure-flutter-tasks/issues) on GitHub. ✏️
## More
Check out my other useful **Flutter** packages on [pub.dev](https://pub.dev/publishers/hey24sheep.com/packages)
or more **DevOps** extensions on [marketplace](https://marketplace.visualstudio.com/publishers/Hey24sheep)## Source Code
Source code can be found on [Github](https://github.com/hey24sheep/azure-flutter-tasks).
Previous fork : [Github](https://github.com/hey24sheep/vsts-flutter-tasks)
Original repo : [Github](https://github.com/aloisdeniel/vsts-flutter-tasks).
## License
[MIT](https://raw.githubusercontent.com/hey24sheep/vsts-flutter-tasks/master/LICENSE)