{"id":22881220,"url":"https://github.com/hey24sheep/azure-flutter-tasks","last_synced_at":"2025-04-05T12:04:46.647Z","repository":{"id":37731188,"uuid":"384647797","full_name":"hey24sheep/azure-flutter-tasks","owner":"hey24sheep","description":"Easily build and deploy with latest Flutter build tasks for Azure DevOps Pipelines Tasks","archived":false,"fork":false,"pushed_at":"2025-01-04T10:09:25.000Z","size":585,"stargazers_count":97,"open_issues_count":14,"forks_count":22,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-29T11:06:31.035Z","etag":null,"topics":["azure","azure-devops","azure-pipelines","cd","ci","ci-cd","cicd","extension","flutter","flutter-app","flutter-ci","vsts","vsts-extension","vsts-tasks"],"latest_commit_sha":null,"homepage":"https://marketplace.visualstudio.com/items?itemName=Hey24sheep.flutter","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hey24sheep.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"hey24sheep","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://ko-fi.com/hey24sheep","https://paypal.me/hey24sheep"]}},"created_at":"2021-07-10T08:19:59.000Z","updated_at":"2025-03-26T11:25:52.000Z","dependencies_parsed_at":"2024-12-13T17:32:52.518Z","dependency_job_id":"ac614c0a-ccec-4642-b4e3-ced3c141a608","html_url":"https://github.com/hey24sheep/azure-flutter-tasks","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hey24sheep%2Fazure-flutter-tasks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hey24sheep%2Fazure-flutter-tasks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hey24sheep%2Fazure-flutter-tasks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hey24sheep%2Fazure-flutter-tasks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hey24sheep","download_url":"https://codeload.github.com/hey24sheep/azure-flutter-tasks/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247332602,"owners_count":20921853,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["azure","azure-devops","azure-pipelines","cd","ci","ci-cd","cicd","extension","flutter","flutter-app","flutter-ci","vsts","vsts-extension","vsts-tasks"],"created_at":"2024-12-13T17:32:04.630Z","updated_at":"2025-04-05T12:04:46.623Z","avatar_url":"https://github.com/hey24sheep.png","language":"JavaScript","funding_links":["https://github.com/sponsors/hey24sheep","https://ko-fi.com/hey24sheep","https://paypal.me/hey24sheep","https://ko-fi.com/J3J6Q1QXE"],"categories":[],"sub_categories":[],"readme":"# Flutter Extension for Azure DevOps \n\n[![](https://img.shields.io/badge/hey24sheep.com-202124.svg?style=for-the-badge\u0026logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADIAAAAcCAMAAAAURxzFAAAADFBMVEUAAAAbvfUcvfUcvfXEslmQAAAAA3RSTlMA4PgXbk0cAAAATElEQVR42u3RgQbAMAyE4dvu%2Fd95Y%2FiHkRyEkUPTK5%2BqajMZ32FH00kriWltYkqDsHJekmd8AQiBvPWfSPH8iPhQcEv0lYycCDGWzQW5CAN5SL8q5AAAAABJRU5ErkJggg%3D%3D)](https://hey24sheep.com)\n\n![](https://img.shields.io/visual-studio-marketplace/release-date/hey24sheep.flutter?color=green\u0026style=flat-square)\n![](https://img.shields.io/visual-studio-marketplace/azure-devops/installs/total/hey24sheep.flutter?style=flat-square)\n![](https://img.shields.io/visual-studio-marketplace/last-updated/hey24sheep.flutter?style=flat-square)\n![](https://img.shields.io/visual-studio-marketplace/r/hey24sheep.flutter?color=green\u0026style=flat-square)\n![](https://img.shields.io/visual-studio-marketplace/v/hey24sheep.flutter?label=current%20version\u0026style=flat-square)\n\nLatest [Flutter](http://flutter.io) tasks for [Azure DevOps](https://azure.microsoft.com/en-gb/services/devops/).\n\nInitially 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. \n\n\u003e 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.\n\n## Support\n\u003cp\u003e\nPRs are always welcome. Feel free to create an issue if you face any problem.\n\u003c/p\u003e\n\n\u003cp\u003eDon't forget to star this repo, thanks 👍\u003c/p\u003e\n\u003cp\u003e\n\u003ca href=\"https://ko-fi.com/J3J6Q1QXE\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003cimg src=\"https://img.shields.io/badge/buymeacoffee-F5E800.svg?style=for-the-badge\u0026logoColor=white\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwABOvYAATr2ATqxVzoAAAAHdElNRQfnAhALDBqwztzyAAADc0lEQVRo3u2YW0hUQRjHf3tRu5FmNytKSO2qkGKmFWRBURFdBIsgepEi6NGHeowg6K2XqCfBfPHFBH3oihaKRiVKiaHlRnbVzPJSu+u6u6cH181zzuzZOVurPZz/sMvOzP+b73++OTPzzYIFCxYsWJhl2EimmJVx9hLgPT18wC/qvIQHJe5lHBeVHCNVL+DVDLj/I+Mxx5mvFvB2BgUoKHioImu6gL4ZFqCg8IyCPwI+zoIAhU62Tgn4MisCFFpYDWDHHuclGAnbuYATbAyyJE4uJqjChR1wsIG9Oj/fKaURhgwD5cONX9AexIsbL0EDWze7ws6c7KFZx67E4Yw4BR6e0EobI6yggG3kMifUM85zGmjFSxKFHCCfhKjR8NPIG25wSNVazCYYEarv5TQLplFTOEU7CgqvKCN5Wk8q5QxEjcAkNtOjYkxQDmMC08/sFTxFBnXcI1vXbuOkcCL1AqBcw6kHt8D0SoRALmGZsN3OVUkBBfxQcbrs2HSkIWojCPjGV2F7kBq+RX0PAFy8U9VTRAJ6eSM12HR081qK52ZEVV8sEuBlwrQAP+NSvCTmqeoOkYAEHKYF2ATjiJDGKlV9RLQLpGtIMkhhqRQvU7MffhdFYDn5pgXkkiHBsrOPRFXLO5EAJ0dJMuU+kdLwPmmEHZxQ1YM0QUCwgoc5YkpACaMS+0A2LRpGH1uIcJy0sc5E+LuibsXJnOCFjlGBw0Ywwvt7lzN8knC/kQqKhD0TXOclNhJZyEEKdZPUTwlPMDhOb7MiqvssHsWYEQW4PPnoRid6bZQFuZaHMadkNVN3hIAhrY41Bu4fxOz+HulTw/ijUO+rs/gwMmN+eh/VkwmpnACFJnJ07tfTGKP7Pi6qEhp8EkbPNXtjNs0xuPbj4ho52lXnlTLuZGfYYgtPpWyC+Angw8MQbVRzjrWiDPSXpP5e9gNQRIekxXvOcpLD7CaPRZFP2FHJ4RQ+cIoSTVppVNpFl3E9hk3MopufJthNmuRDCDtuGZUhzNXe7Q0xiE9GQL+JIc2hQ/yXjFbAHZS4uB/gjhwxD1eMW4pxuSmfWZYJb0d/V55JpWghJHCe/n/o3E8DebLObaE3oYhz7CbNIGxK+DvyL/DQST23GDQnAMBJJjmsDOUHQQh9T+ULQd1H1DJKN2PywbdgwYIFC/8BfgOoCejMt+kv6wAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMy0wMi0xNlQxMToxMjoyNSswMDowMACYcDAAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjMtMDItMTZUMTE6MTI6MjUrMDA6MDBxxciMAAAAIHRFWHRzb2Z0d2FyZQBodHRwczovL2ltYWdlbWFnaWNrLm9yZ7zPHZ0AAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADUxMo+NU4EAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgANTEyHHwD3AAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxNjc2NTQ1OTQ14l6OBQAAABJ0RVh0VGh1bWI6OlNpemUAOTUwMkJC9h0QPgAAAEV0RVh0VGh1bWI6OlVSSQBmaWxlOi8vLi91cGxvYWRzLzU2L1hjQ3Bmd3ovMzkxMi9rb2ZpX2xvZ29faWNvbl8yNDc4OTQucG5nH4ex2wAAAABJRU5ErkJggg==\u0026logoColor=white\" alt=\"Buy Me A Coffee\" height=\"41\" width=\"174\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003cbr/\u003e\n\n## Installation \u0026 Usage\n\nInstallation can be done using [Visual Studio MarketPlace](https://marketplace.visualstudio.com/items?itemName=hey24sheep.flutter). Add the tasks to your build definition.\n\n\u003cbr/\u003e\n\n# Pipeline Tasks\n\n### Install\n\n![](images/step_install.png)\n\nInstalls the [Flutter SDK](https://flutter.io/sdk-archive/) onto the running agent if not already installed. Then uses it for following tasks.\n\n* Select the `Release Url Mode`: `auto` (default), `custom`. If `custom` is specified, a `Custom (Flutter SDK Install Url)` must be set.\n* Select the `channel`: `stable` (default), `beta`, or `dev`.\n* Select the `version` of the SDK to install:  `latest` (default), `custom`. If `custom` is specified, a `customVersion` must be set.\n* _(Optional)_. Set the `customVersion` (in a `\u003cM\u003e.\u003cm\u003e.\u003cp\u003e` semver format) if needed.\n* _(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).\n* _(Optional)_. Set the `customArch` (example 'arm64') if needed.\n\n### Build\n\n![](images/step_build.png)\n\nBuild 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.\n\n* Select the `projectDirectory` that contains the `pubspec.yaml` file.\n* 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).\n* _(Optional)_. Set `flutterDirectory` to set path to the Flutter SDK if you were not using `Flutter Install` task before this one\n* _(Optional)_. Set `buildName` (like `1.2.3`) that will override the manifest's one.\n* _(Optional)_. Set `buildNumber` (like `12`) that will override the manifest's one. Use `$(Build.BuildNumber)` to use build number as auto incremental number.\n* _(Optional)_. Set `buildFlavour` (like `development`) to specify a build flavour. Must match Android Gradle flavor definition or XCode scheme.\n* _(Optional)_. Set `entryPoint` to override the main entry point file of the application. Default is 'lib/main.dart'.\n* _(Optional)_. Set `verboseMode` if you wish to get detailed verbose log output for diagnoses purposes. Default is `false`.\n* _(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`.\n* _(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`.\n* _(Optional)_. Set `dartDefine` compile-time variables, use as : `foo=bar` (use 'dartDefineMulti' for multiple args)\"\n* _(Optional)_. Set `dartDefineMulti` compile-time variables, use as (space separated) : `foo=bar key1=val1 key2=val2` (use for multiple --dart-define arguments)\"\n* _(Optional)_. Set `dartDefineMultiArgSeparator` Separator used in params passed to `dartDefineMulti`. Default is single space (' ')\n* _(Optional)_. Set `extraArgs` if you want to pass more official/custom command arguments, `Space Separated`. Example: \"--no-tree-shake-icons --publish-to-play\"\n* _(Optional)_. Set `extraArgsSeparator` Separator used in params passed to `extraArgs`. Default is single space (' ')\n* __(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`.\n* __(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`\n* __(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.\n* __(iOS)__._(Optional)_. Set `iosTargetPlatform` for the iOS target: `device` (default), `simulator`.\n* __(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**\n* __(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.\n\n\u003e NOTE : for `--release` builds, pass `debugMode=false` and `profileMode=false`\n\n### Test\n\n![](images/step_test.png)\n\nLaunch tests and publish a report as build test results.\n\n* Select the `projectDirectory` that contains to `pubspec.yaml` file.\n* _(Optional)_. Set `testName` as a regular expression matching substrings of the names of tests to run.\n* _(Optional)_. Set `testPlainName` as a plain-text substring of the names of tests to run.\n* _(Optional)_. Set `updateGoldens`: whether `matchesGoldenFile()` calls within your test methods should update the golden files rather than test for an existing match.\n* _(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`.\n* _(Optional)_. Set `concurrency` to specify the number of concurrent test processes to run. Default is `6`.\n* _(Optional)_. Set `extraArgs` if you want to pass more official/custom command arguments, `Comma Separated`. Example: \"--no-sound-null-safety,--dart-define=\u003cfoo=bar\u003e\"\n\n### Analyze\n\n![](images/step_analyze.png)\n\nLaunch analyze on flutter directory.\n\n* Select the `projectDirectory` that contains the `pubspec.yaml` file.\n* _(Optional)_. Set `pubGet` if you wish to run `pub get` command before analyze. Default is `true`.\n* _(Optional)_. Set `extraArgs` if you want to pass more official/custom command arguments. Example: \"--fatal-infos --fatal-warnings\"\n* _(Optional)_. Set `extraArgsSeparator` Separator used in params passed to `extraArgs`. Default is single space (' ')\n\n\n### Command\n\n![](images/step_command.png)\n\nLaunch a Flutter command with custom arguments.\n\n* Set the `arguments` to your custom valid flutter command.\n* Select the `projectDirectory` that contains the `pubspec.yaml` file.\n* _(Optional)_. Set `flutterDirectory` to set path to the Flutter SDK if you were not using `Flutter Install` task before this one\n* _(Optional)_. Set `argSeparator` Separator used in params passed to `extraArgs`. Default is single space (' ')\n\n### Env\n\n![](images/step_env.png)\n\nTask to create the environment variables `FlutterToolPath`, `FlutterPubCachePath` and `DartToolPath`.\n\n* Pick the `Flutter path from` either to `Custom Path` or `File Path`.\n* Select the `Custom Path` to give a path string like \"`$(Agent.ToolsDirectory)/\u003cyourPath\u003e/flutter`\"\n* Select the `File Path` to set path to the Flutter SDK\n\n\u003e NOTE :  Do not give path to 'bin' folder\n\n\u003cbr/\u003e\n\n# Environment Variables\nEnvironment variables created by the `Install` or `Env` tasks are :\n\n* `$(FlutterToolPath)` - can be used as \"`$(FlutterToolPath)/flutter packages get`\"\n* `$(FlutterPubCachePath)` can be used as \"`$(FlutterPubCachePath)/pubver set $(Version)`\"\n* `$(DartToolPath)` - can be used as \"`$(DartToolPath)/dart prog.dart arg1`\"\n\n\u003cbr/\u003e\n\n# FAQ\n\nFirst, 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.\n\n\u003e Flutter command isn't recognized ?\n\nMake sure that you have a `Flutter Install` at the beginning of your definition.\n\n\u003e Can I run a custom Flutter command ?\n\nYes, 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`\"\n\n\u003e Can I run Dart program ?\n\nYes, 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`\"\n\n\u003e Can I access Flutter's pub-cache ?\n\nYes, 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)`\"\n\n\u003e Facing error - \"No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi\" ?\n\nRead 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)\n\n\u003e How to run \"Integeration Tests\" ?\n\nRead 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.\n\n\u003e IOS build fail \"Provisional Profile Errors\" ?\n\nRead this [#35](https://github.com/hey24sheep/azure-flutter-tasks/issues/35#issuecomment-1063794699) for help\n\n\u003e Any IOS or Android Examples (Setup Guide/YAML config)\n\nRead 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-\u0026-Android-Example-Setup-Guide)\n\n\u003e iOS build fails with: \"Xcode couldn't find any iOS App Development provisioning profiles matching...\"\n\nRead this issue [#49](https://github.com/hey24sheep/azure-flutter-tasks/issues/49)\n\n\u003cbr/\u003e\n\n## Sample Build Pipeline Config (3rd Party)\n\n\u003e Disclaimer : These are 3rd Party YAML config, please use them on your own discretion\n\n- [xeladu - Flutter Build Pipeline](https://github.com/xeladu/flutter_build_pipeline)\n\n## Improve\n\nFirst, 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.\nHelp me by reporting bugs, creating PRs, **submit new ideas** for features or anything else that you want to share.\n\n- Just [write an issue](https://github.com/hey24sheep/azure-flutter-tasks/issues) on GitHub. ✏️\n\n## More\n\nCheck out my other useful **Flutter** packages on [pub.dev](https://pub.dev/publishers/hey24sheep.com/packages) \n    or more **DevOps** extensions on [marketplace](https://marketplace.visualstudio.com/publishers/Hey24sheep)\n\n## Source Code\n\nSource code can be found on [Github](https://github.com/hey24sheep/azure-flutter-tasks).\n\nPrevious fork : [Github](https://github.com/hey24sheep/vsts-flutter-tasks)\n\nOriginal repo : [Github](https://github.com/aloisdeniel/vsts-flutter-tasks).\n\n\u003cbr/\u003e\n\n## License\n\n[MIT](https://raw.githubusercontent.com/hey24sheep/vsts-flutter-tasks/master/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhey24sheep%2Fazure-flutter-tasks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhey24sheep%2Fazure-flutter-tasks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhey24sheep%2Fazure-flutter-tasks/lists"}