# Automate Flutter App Releases
> **TLDR** You can find the script [here](https://gist.github.com/rodydavis/774b36e32d7efa882cca8dd16da6e74c).
```markdown
#!/bin/bash
echo "App Release Automator by @rodydavis"
action="$1"
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
if [ ${action} = "build" ]; then
echo "${green}Generating built files.. ${reset}"
flutter packages pub run build_runner clean
flutter packages pub run build_runner build --delete-conflicting-outputs
pub global activate pubspec_version
git commit -a -m "Build $(pubver bump patch)"
echo "${green}Building Project...${reset}"
find . -name "*-e" -type f -delete
flutter format .
flutter clean
echo "${green}Project Size: $(find . -name "*.dart" | xargs cat | wc -c)${reset}"
echo "${green}Building APK...${reset}"
flutter build apk
echo "${green}Builing IPA..${reset}"
cd ./ios && pod install && pod repo update && cd ..
flutter build ios
git commit -a -m "Project Rebuilt"
elif [ ${action} = "beta" ]; then
echo "${green}Generating built files..${reset}"
flutter packages pub run build_runner clean
flutter packages pub run build_runner build --delete-conflicting-outputs
pub global activate pubspec_version
git commit -a -m "Beta $(pubver bump patch)"
echo "${green}Building Project...${reset}"
find . -name "*-e" -type f -delete
flutter format .
flutter clean
echo "${green}Project Size: $(find . -name "*.dart" | xargs cat | wc -c)${reset}"
echo "${green}Building APK...${reset}"
flutter build apk
echo "${green}Sending Android to Beta...${reset}"
cd ./android && fastlane beta && cd ..
echo "${green}Builing IPA..${reset}"
flutter build ios
echo "${green}Sending iOS to Beta..${reset}"
cd ./ios && fastlane beta && cd ..
git commit -a -m "Sent to Beta"
elif [ ${action} = "release" ]; then
echo "${green}Generating built files..${reset}"
flutter packages pub run build_runner clean
flutter packages pub run build_runner build --delete-conflicting-outputs
pub global activate pubspec_version
git commit -a -m "Production $(pubver bump minor)"
echo "${green}Building Project...${reset}"
find . -name "*-e" -type f -delete
flutter format .
flutter clean
echo "${green}Project Size: $(find . -name "*.dart" | xargs cat | wc -c)${reset}"
echo "${green}Building APK...${reset}"
flutter build apk
echo "${green}Sending Android to Production...${reset}"
cd ./android && fastlane release && cd ..
echo "${green}Builing IPA..${reset}"
flutter build ios
echo "${green}Sending iOS to Production...${reset}"
cd ./ios && fastlane release && cd ..
git commit -a -m "Sent to Production"
fi
echo "${green}Successfully completed${reset}"
```
Needed:
* Fastlane setup in each directory
* build\_runner as a dependency
* Git Project in VCS
Steps to Run:
1. Download this file and put it at the root level of your flutter project
2. Open the terminal and navigate to your project location
3. Enter this command: `chmod +x release.sh`
Usage
* For beta: `./release.sh beta`
* For production: `./release.sh release`
It will do the following:
* Bump the version numbers if you are using the version in the `pubspec.yaml`
* Release the apps with Fastlane
* Format all Dart Files
* Clean Project
* Rebuild classes
* Add commit message
Make your life easier and automate your builds to beta and production!
What you need
--------------
* [Fastlane](https://fastlane.tools/) setup in each directory
* [build\_runner](https://pub.dartlang.org/packages/build_runner) as a dependency
* Git Project in VCS
Initial Setup
--------------
* Download [this file](https://gist.github.com/rodydavis/774b36e32d7efa882cca8dd16da6e74c)
* Put it at the root level of your flutter project
* Open the terminal and navigate to your project location
* Enter this command: chmod +x release.sh
Usage
------
Now you can call this script!
* For beta: `./release.sh beta`
* For production: `./release.sh release`
Overview
---------
* Bump the version numbers if you are using the version in the pubspec.yaml
* Release the apps with Fastlane
* Format all Dart Files
* Clean Project
* Rebuild classes
* Add commit messages
* Updates Cocoa Pods