flutter_release_x 0.5.0
flutter_release_x: ^0.5.0 copied to clipboard
A CLI tool to easily build, release, and share Flutter apps. Supports cloud uploads, QR codes, and download links for fast distribution.
Flutter Release X #
Flutter Release X is a powerful command-line tool that transforms your Flutter app release process, quick and easy. Designed for efficiency and ease of use, it allows you to:
- Simplify Your Workflow: Replace complex CI/CD pipelines with a single command to effortlessly generate and distribute release builds.
- Seamless Cloud Integration: Easily configure cloud platforms like GitHub, Google Drive, AWS S3, GitLab, Google Play Store, Apple App Store, and Diawi by simply providing your API keys and tokens. Once configured, enjoy hassle-free, automatic uploads.
- Instant Distribution: Automatically generate QR codes and download links for your builds, enabling quick and easy distribution to your team or users with no additional effort.
- Multi-Platform Support: Build and distribute for Android, iOS, Web, macOS, Windows, and Linux from a single command.
With Flutter Release X, streamline your release process, enhance collaboration, and reduce time-to-marketβall while focusing on what truly matters: building amazing apps.
π Documentation #
Learn everything about FRX, from setup to quick examples to advanced configurations.
Table of Contents #
- β¨ What's New
- π Features Overview
- πΏ Installation
- π Usage
- π Update Checking
- βοΈ Configuration
- β Steps for Setup
- π Cloud Integration
- π Notification Setup Guides
- π± QR Code Configuration
- π .gitignore Configuration
- βοΈ License
- π Want to Connect?
- π€ Contributors
- π Contribute or Support (optional)
What's New #
| Feature | Description |
|---|---|
Quick Setup with frx init |
Get started in seconds! Run frx init to automatically generate a starter config.yaml file with all options and helpful comments. |
| Update Checking | Automatic background update checking keeps you informed about new versions. Use frx check-update to manually check for updates. |
| Advanced Pipeline | Automate and streamline your CI/CD pipeline with the new advanced pipeline feature, integrating multiple steps in one command. |
| Multi-Platform Build | Build for all supported platforms (ios, android, web, macos, windows, linux) using --target all for faster releases or just specify it like frx build -t ios,web. |
| Notification System | Send real-time notifications to popular platforms like Slack using frx notify. |
Features Overview #
The table below outlines the current status of various features. Features marked with "Available via Advanced Pipeline" are not part of the basic Flutter Release X setup but can be enabled through our Advanced Pipeline feature for enhanced automation.
| Feature | Status | Description | Achievable via Advanced Pipeline |
|---|---|---|---|
| β¨ Advanced Pipeline | β New | Streamline and automate your entire CI/CD workflow in one command. | β |
| APK Builds | β Integrated | Fully integrated APK build process. | β |
| GitHub Upload | β Integrated | Directly upload your builds to a GitHub repository for seamless sharing. | β |
| Google Drive Upload | β Integrated | Securely store your builds in Google Drive. | β |
| Upload Link Generation | β Integrated | Automatically generate and share download links for your builds. | β |
| QR Code Generation | β Integrated | Instantly generate QR codes for quick access to your build downloads. | β |
| Slack Integration | β Integrated | Keep your team updated by sharing builds directly on Slack. | β |
| iOS Builds | β Integrated | iOS build support is not available by default. | β Available via Advanced Pipeline |
| Windows Builds | β Integrated | Windows build support is not available by default. | β Available via Advanced Pipeline |
| macOS Builds | β Integrated | macOS build support is not available by default. | β Available via Advanced Pipeline |
| Linux Builds | β Integrated | Linux build support is not available by default. | β Available via Advanced Pipeline |
| AWS S3 Upload | β Integrated | Scalable cloud storage uploads through AWS S3 with support for custom regions and key prefixes. | β |
| GitLab Upload | β Integrated | Direct upload to GitLab repositories for seamless version control and release management. | β |
| Google Play Store Upload | β Integrated | Streamline your Android app distribution via the Google Play Store with support for multiple tracks (internal, alpha, beta, production). | β |
| Apple App Store Upload | β Integrated | Simplify iOS app distribution with the Apple App Store Connect API integration. | β |
| Diawi Upload | β Integrated | Upload IPA/APK to Diawi for fast ad-hoc distribution - generates short install links and QR codes, with optional password protection and link expiry for secure tester installs. | β |
Note: Features marked as "Available via Advanced Pipeline" require configuration through the Advanced Pipeline option in Flutter Release X. For further details, please refer to the Official frx documentation.
Tip: Checkout Cookbook for quick implementation Cookbook
Installation #
You can install Flutter Release X globally using dart:
dart pub global activate flutter_release_x
Alternatively, add it as a dependency in your pubspec.yaml:
dart pub add flutter_release_x
Usage #
Flutter Release X provides easy commands to build, upload, and manage your releases. Here are the main commands:
Quick Start #
The easiest way to get started is to initialize a new FRX project:
frx init
This creates a config.yaml file in your current directory with:
- β All available upload options (commented out, ready to enable)
- β QR code settings with sensible defaults
- β Helpful comments and examples
- β Links to setup documentation
Then simply:
- Open
config.yamland configure the services you want to use - Add your API keys and tokens
- Run
frx buildto start building and releasing!
Commands #
| Command | Description |
|---|---|
frx init |
Initialize a new FRX project by creating a starter config.yaml file with helpful comments. |
frx build |
Builds the release APK, uploads to Cloud, and generates a QR code & link. |
frx build -s |
Displays the current configuration settings. This helps verify if your setup is correct. |
frx build -c <path_to_config> |
Use this flag to specify a custom configuration file path, overriding the default config.yaml. |
frx build --target all |
Builds release builds for all supported platforms (iOS, Android, Web, macOS, Windows, Linux). |
frx notify --platform slack --message 'message' |
Sends a notification to Slack with a custom message. |
frx notify --platform teams --message 'message' |
Sends a notification to Microsoft Teams with a custom message. |
frx check-update |
Manually check if a new version of FRX is available. |
frx version |
Display the current version of Flutter Release X (frx). |
Examples #
-
Initialize a new FRX project (recommended for first-time users):
frx initThis creates a
config.yamlfile with all options and helpful comments. You can also specify a custom filename:frx init --config my-config.yamlOr force overwrite an existing config:
frx init --force -
To build the release APK, upload it to Cloud, and generate a QR code & Downloadable link:
frx build -
To build release builds for all platforms, upload to Cloud, and generate a QR code & downloadable link:
frx build --target all -
To build only for Android and iOS:
frx build -t android,ios -
To notify on popular platforms like Slack or Microsoft Teams with a custom message:
frx notify --platform slack --message ":rocket: New Release Available!"or
frx notify -p slack -m ":rocket: New Release Available!" -
To notify Microsoft Teams:
frx notify --platform teams --message ":rocket: New Release Available!"or
frx notify -p teams -m ":rocket: New Release Available!" -
To verify your configuration, run:
--show-config: Displays the current configuration settings. By default, it reads fromconfig.yaml. If a custom file path is provided, it reads from the specified file. Use this option to verify that the setup is correctly configured.frx build -s -
--config: Use this flag to specify a custom configuration file path, overriding the defaultconfig.yaml. This allows you to point to a specific configuration file as needed.frx build -c config/file/path -
To check for updates manually:
frx check-update -
To display the current version:
frx versionor
frx -v
Update Checking #
Flutter Release X automatically checks for updates in the background when you run any command. This helps you stay up-to-date with the latest features and improvements.
Automatic Update Checks #
- Background Checking: FRX automatically checks for updates when you run any command.
Manual Update Check #
You can manually check for updates at any time using:
frx check-update
This command:
- Forces a fresh check (bypasses the 24-hour cache)
- Shows the current version and latest available version
- Provides update instructions if a newer version is available
Updating FRX #
When a new version is available, update FRX using:
dart pub global activate flutter_release_x
Or visit the pub.dev package page for more information.
Configuration #
Create a config.yaml file in the root directory of your project to specify your upload options and QR code generation settings:
Config file #
# Path to Flutter binary
# Example for Windows: C:/dev/flutter/bin/flutter.bat
# Example for macOS: /Users/USER_NAME/development/flutter/bin/flutter
flutter_path: FLUTTER/BINARY/PATH
upload_options:
github:
enabled: true
token: YOUR_GITHUB_TOKEN # Required: Personal Access Token for GitHub
repo: REPO/PATH # Required: GitHub repository path, e.g., RittikSoni/Flutter-Release-X
tag: v0.0.1 # Release tag (e.g., version number)
google_drive:
enabled: true
client_id: YOUR_CLIENT_ID # Required: Google API Client ID
client_secret: YOUR_CLIENT_SECRET # Required: Google API Client Secret
diawi:
enabled: true
token: YOUR_DIAWI_TOKEN # Required: Diawi API Token (get from https://www.diawi.com/profile/api)
wall_of_apps: false # Optional: Display on Diawi wall of apps (default: false)
find_by_udid: false # Optional: Allow finding by UDID (default: false)
callback_url: "" # Optional: URL to notify when upload completes
installation_notifications: false # Optional: Enable installation notifications (default: false)
password: "" # Optional: Password protection for the download link
comment: "" # Optional: Comment/description for the upload
aws:
enabled: false
access_key_id: YOUR_AWS_ACCESS_KEY_ID # Required: AWS Access Key ID
secret_access_key: YOUR_AWS_SECRET_ACCESS_KEY # Required: AWS Secret Access Key
region: us-east-1 # Optional: AWS region (default: us-east-1)
bucket_name: your-bucket-name # Required: S3 bucket name
key_prefix: flutter-release-x # Optional: Prefix for uploaded files (default: empty)
gitlab:
enabled: false
token: YOUR_GITLAB_TOKEN # Required: GitLab Personal Access Token
project_id: "12345678" # Required: GitLab Project ID (found in project settings)
tag: v0.0.1 # Optional: Release tag (default: v0.0.1)
ref: main # Optional: Branch or commit SHA from which to create the tag (default: main)
host: https://gitlab.com # Optional: GitLab host URL (default: https://gitlab.com, use for self-hosted instances)
play_store:
enabled: false
service_account_json_path: ./path/to/service-account.json # Required: Path to Google Play Service Account JSON file
package_name: com.example.app # Required: Android app package name
track: internal # Optional: Release track - internal, alpha, beta, or production (default: internal)
release_name: "Release v1.0.0" # Optional: Custom release name
app_store:
enabled: false
api_key_path: ./path/to/AuthKey_XXXXXXXXXX.p8 # Required: Path to App Store Connect API Key (.p8 file)
api_issuer: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # Required: App Store Connect API Key Issuer ID (UUID format)
app_id: "1234567890" # Required: App Store Connect App ID
bundle_id: com.example.app # Optional: iOS app bundle identifier
slack:
enabled: true
bot_user_oauth_token: YOUR_BOT_TOKEN # Required: Slack Bot OAuth Token, e.g., xoxb-XXXXXXXXX-XXXXXXXXX-XXXXXXXXXXXXX
default_channel_id: CHANNEL_ID # Required: Slack channel ID, e.g., CXXXXXXXXX
share_QR: true # Optional: Share QR code in Slack (default: true)
share_link: true # Optional: Share build download link in Slack (default: true)
custom_message: "π Check out the latest build! Download your app now!" # Custom message to accompany the link
mention_users: ["U0XXXXXXX", "U08XXXXXXXX"] # List of Slack user/member IDs to mention. Note: not username or display name.
teams:
enabled: false
webhook_url: YOUR_WEBHOOK_URL # Required: Microsoft Teams Incoming Webhook URL
share_QR: true # Optional: Share QR code in Teams (default: true)
share_link: true # Optional: Share build download link in Teams (default: true)
custom_message: "π Check out the latest build! Download your app now!" # Custom message to accompany the link
mention_users: ["John Doe", "Jane Smith"] # List of Teams user names to mention
# QR Code generation settings
qr_code:
enabled: true # Whether to generate QR codes (true/false)
save_file: true # Save the QR code image to the file system (true/false)
show_in_command: true # Display QR code in the command line output (true/false)
size: 256 # Size of the generated QR code (pixels)
error_correction_level: low # Error correction level: low, medium, quartile, high
save_path: "./release-qr-code.png" # File path to save the QR code image
# Advanced Pipeline Configuration [OPTIONAL]
# This section allows you to define multiple pipeline steps that can be executed in sequence. Each step can have its own commands, dependencies, and upload options.
# If a custom pipeline is provided, it will override the default flow and behavior.
# Ensure that the pipeline steps are properly defined to reflect the intended execution order.
# e.g.,
pipeline_steps:
- name: "Build APK"
command: "flutter build apk --release"
customExitCondition: "error: some specific error message" # Stop if this error appears in the output
upload_output: true # Enable upload for this step
output_path: "./build/app/outputs/flutter-apk/app-release.apk" # APK path
notify_slack: false # Do not notify Slack after this step
- name: "Run Tests"
command: "flutter test"
customExitCondition: "Test failed" # Stop if tests fail
upload_output: false # No upload for this step
notify_slack: true # Notify Slack after tests complete
- name: "Lint"
command: "flutter analyze"
customExitCondition: "issues found" # Stop if issues found
- name: "Package Release"
command: "node --version"
customExitCondition: "version mismatch" # Stop if version mismatch is found
upload_output: true # Upload to cloud on success
output_path: "./release-package.zip" # Path to release package
notify_slack: true # Notify on Slack on success
- name: "Deploy to Cloud"
command: "./deploy_to_cloud.sh"
customExitCondition: "deployment failed" # Stop if deployment fails
upload_output: false # No upload as deployment is handled separately
notify_slack: true # Notify on Slack on success
# Note: The order of steps in the pipeline is crucial!
# Each step depends on the successful completion of the previous step.
# If a step fails due to a custom exit condition, the pipeline will halt immediately,
# and subsequent steps will not be executed. Ensure that custom exit conditions are properly defined
# to avoid unwanted interruptions in the pipeline flow.
Flutter Path #
| Key | Description | Example |
|---|---|---|
flutter_path |
Path to the Flutter binary | C:/dev/flutter/bin/flutter.bat (Windows), /Users/USER_NAME/development/flutter/bin/flutter (macOS) |
Upload Options #
GitHub #
| Key | Description | Required | Example |
|---|---|---|---|
enabled |
Enable GitHub upload | Yes | true |
token |
Personal Access Token for GitHub | Yes | YOUR_GITHUB_TOKEN |
repo |
GitHub repository path | Yes | RittikSoni/Flutter-Release-X |
tag |
Release tag (e.g., version number) | No | v0.0.1 (Defaults to v0.0.1) |
Google Drive #
| Key | Description | Required | Example |
|---|---|---|---|
enabled |
Enable Google Drive upload | Yes | true |
client_id |
Google API Client ID | Yes | YOUR_CLIENT_ID |
client_secret |
Google API Client Secret | Yes | YOUR_CLIENT_SECRET |
Diawi #
| Key | Description | Required | Example |
|---|---|---|---|
enabled |
Enable Diawi upload | Yes | true |
token |
Diawi API Token | Yes | Get from Diawi Profile |
wall_of_apps |
Display on Diawi wall of apps | No | false (default) |
find_by_udid |
Allow finding by UDID | No | false (default) |
callback_url |
URL to notify when upload completes | No | "" |
installation_notifications |
Enable installation notifications | No | false (default) |
password |
Password protection for the download link | No | "" |
comment |
Comment/description for the upload | No | "" |
AWS S3 #
| Key | Description | Required | Example |
|---|---|---|---|
enabled |
Enable AWS S3 upload | Yes | true |
access_key_id |
AWS Access Key ID | Yes | YOUR_AWS_ACCESS_KEY_ID |
secret_access_key |
AWS Secret Access Key | Yes | YOUR_AWS_SECRET_ACCESS_KEY |
region |
AWS region | No | us-east-1 (default) |
bucket_name |
S3 bucket name | Yes | your-bucket-name |
key_prefix |
Prefix for uploaded files (organizes files) | No | flutter-release-x |
Note: The S3 bucket must have public read permissions for direct URL access, or you'll need to use presigned URLs. Check your bucket's public access settings in the AWS Console.
GitLab #
| Key | Description | Required | Example |
|---|---|---|---|
enabled |
Enable GitLab upload | Yes | true |
token |
GitLab Personal Access Token | Yes | Get from GitLab profile settings |
project_id |
GitLab Project ID (found in project settings) | Yes | "12345678" |
tag |
Release tag (e.g., version number) | No | v0.0.1 (default) |
ref |
Branch or commit SHA from which to create the tag | No | main (default) |
host |
GitLab host URL (for self-hosted instances) | No | https://gitlab.com (default) |
Google Play Store #
| Key | Description | Required | Example |
|---|---|---|---|
enabled |
Enable Google Play Store upload | Yes | true |
service_account_json_path |
Path to Google Play Service Account JSON file | Yes | ./path/to/service-account.json |
package_name |
Android app package name | Yes | com.example.app |
track |
Release track | No | internal (Options: internal, alpha, beta, production) |
release_name |
Custom release name | No | "Release v1.0.0" |
Note: Requires a Google Play Service Account with appropriate permissions. The service account must have access to your app in the Play Console.
Apple App Store #
| Key | Description | Required | Example |
|---|---|---|---|
enabled |
Enable App Store upload | Yes | true |
api_key_path |
Path to App Store Connect API Key (.p8 file) | Yes | ./path/to/AuthKey_XXXXXXXXXX.p8 |
api_issuer |
App Store Connect API Key Issuer ID (UUID) | Yes | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
app_id |
App Store Connect App ID | Yes | "1234567890" |
bundle_id |
iOS app bundle identifier | No | com.example.app |
Note: Full IPA upload via API requires proper JWT signing. For production uploads, consider using Transporter, Fastlane, or Xcode Organizer for more reliable uploads.
Slack #
| Key | Description | Required | Example |
|---|---|---|---|
enabled |
Enable Slack upload | Yes | true |
bot_user_oauth_token |
Slack Bot OAuth Token | Yes | YOUR_BOT_TOKEN |
default_channel_id |
Slack channel ID | Yes | CXXXXXXXXX |
share_QR |
Whether to share QR code on Slack | No | true (default) |
share_link |
Whether to share build download link on Slack | No | true (default) |
custom_message |
Custom message to share with the build link | No | "π Check out the latest build! Download your app now!" |
mention_users |
List of Slack user/member IDs to mention | No | ["U0XXXXXXX", "U08XXXXXXXX"] |
Microsoft Teams #
| Key | Description | Required | Example |
|---|---|---|---|
enabled |
Enable Microsoft Teams notifications | Yes | true |
webhook_url |
Microsoft Teams Incoming Webhook URL | Yes | Get from Teams channel connectors |
share_QR |
Whether to share QR code in Teams | No | true (default) |
share_link |
Whether to share build download link in Teams | No | true (default) |
custom_message |
Custom message to share with the build link | No | "π Check out the latest build! Download your app now!" |
mention_users |
List of Teams user names to include in message | No | ["John Doe", "Jane Smith"] (Note: Webhooks don't support @mentions, names will be shown as plain text) |
QR Code Generation Settings #
| Key | Description | Default | Example |
|---|---|---|---|
enabled |
Whether to generate QR codes | true |
true |
save_file |
Whether to save the QR code image to the file system | true |
true |
show_in_command |
Whether to display the QR code in the command line | true |
true |
size |
Size of the generated QR code (in pixels) | 256 |
256 |
error_correction_level |
Error correction level for the QR code | low |
low (Options: low, medium, quartile, high) |
save_path |
File path to save the QR code image | ./release-qr-code.png |
./release-qr-code.png |
Advance Pipeline #
| Field | Description | Example Value | Required | Default Value |
|---|---|---|---|---|
| name | The name of the pipeline step. | "Build APK" | Yes | N/A |
| command | The command to run for this pipeline step. | flutter build apk --release |
Yes | N/A |
| upload_output | Whether to upload the output from this step. | true or false |
No | false |
| output_path | The file path where the output is stored (if applicable). | ./build/app/outputs/flutter-apk/app-release.apk |
No | N/A |
| notify_slack | Whether to notify Slack after this step completes. | true or false |
No | false |
| custom_exit_condition | Custom condition for when to stop the pipeline step. It checks for a specific match in the stdout or stderr. If matched, the pipeline stops. If not matched, the pipeline continues. |
"error: some specific error message" (Stop if a specific error occurs in the output) |
No | N/A |
Steps for Setup #
-
Initialize FRX (Recommended for new users)
Run the init command to create a starter config file:
frx initThis creates a
config.yamlfile with all available options, helpful comments, and examples. Much easier than creating it manually! -
Configure config.yaml
Open the generated
config.yamlfile and:- Uncomment the upload options you want to use
- Fill in your API keys and tokens
- Customize QR code settings if needed
If you have a custom file path, you can specify it with the
-cflag when running commands. -
Generate Cloud Credentials For cloud uploads (GitHub or Google Drive), follow these steps:
-
GitHub Configuration
- Generate a Personal Access Token (PAT) in GitHub and add it to your config.yaml.
-
Google Drive Configuration
- Create a Google Cloud Project and enable the Google Drive API.
- Generate OAuth 2.0 credentials for your app and add the client_id and client_secret to your config.yaml.
-
-
Generate Slack Credentials (Optional)
-
Run the Tool After setting up the configuration, run:
frx buildThis command will build your Flutter project, upload it, and generate a QR code & shareable link.
Cloud Integration #
Github Configuration #
Generating a GitHub Personal Access Token #
To enable your Flutter CLI tool to upload and delete releases on GitHub, you'll need to generate a Personal Access Token (PAT) with the appropriate permissions. Follow the steps below to create and configure your token.
Steps to Generate a GitHub Token
-
Open the GitHub Token Generation Page:
-
Set the Token Name:
- In the Note field, enter a descriptive name for your token, such as
Flutter Release X Token.
- In the Note field, enter a descriptive name for your token, such as
-
Select Scopes:
- Under Select scopes, check the following permissions:
repo(Full control of private repositories)- This includes access to public and private repositories, which is required for uploading and deleting releases.
- Under Select scopes, check the following permissions:
-
Generate the Token:
- Click the Generate token button at the bottom of the page.
- Copy the token immediately, as you wonβt be able to see it again.
-
Set Up Your Project:
github: enabled: true token: YOUR_GITHUB_TOKEN
Google Drive Configuration #
To upload files to Google Drive, follow these steps to set up your credentials:
-
Create a Google Cloud Project:
- Go to the Google Cloud Console.
- Create a new project or select an existing one.
-
Enable the Drive API:
- In the Google Cloud Console, navigate to APIs & Services > Library.
- Search for "Google Drive API" and enable it.
-
Create OAuth 2.0 Credentials:
- Go to APIs & Services > Credentials.
- Click on Create Credentials and select OAuth Client ID.
- Configure the consent screen if prompted.
- Set the application type to Desktop App.
- Note down the generated Client ID and Client Secret.
-
Set Up Your Project:
google_drive: enabled: true client_id: YOUR_CLIENT_ID client_secret: YOUR_CLIENT_SECRETBy following these steps, your application will be able to authenticate with Google Drive using the client ID and secret to upload files.
Diawi Configuration #
Diawi is a service for distributing iOS and Android apps via direct download links. To configure Diawi:
-
Create a Diawi Account:
- Go to Diawi and create an account.
-
Get Your API Token:
- Log in to your Diawi account.
- Go to Profile > API.
- Copy your API token.
-
Set Up Your Project:
diawi: enabled: true token: YOUR_DIAWI_TOKEN wall_of_apps: false find_by_udid: false
AWS S3 Configuration #
To upload files to AWS S3, you'll need AWS credentials with S3 upload permissions:
-
Create AWS Credentials:
- Go to the AWS IAM Console.
- Create a new user or use an existing one.
- Attach a policy with S3 upload permissions (e.g.,
AmazonS3FullAccessor a custom policy). - Create an Access Key ID and Secret Access Key.
-
Create an S3 Bucket:
- Go to the S3 Console.
- Create a new bucket or use an existing one.
- Note: For public access, configure bucket permissions appropriately.
-
Set Up Your Project:
aws: enabled: true access_key_id: YOUR_AWS_ACCESS_KEY_ID secret_access_key: YOUR_AWS_SECRET_ACCESS_KEY region: us-east-1 bucket_name: your-bucket-name key_prefix: flutter-release-x
Important: Ensure your S3 bucket has the appropriate permissions. For public downloads, enable public read access. For private files, consider using presigned URLs.
GitLab Configuration #
To upload releases to GitLab:
-
Generate a Personal Access Token:
- Go to GitLab Profile > Personal Access Tokens.
- Create a token with
apiscope. - Copy the token.
-
Find Your Project ID:
- Go to your GitLab project.
- The Project ID is shown on the project's main page under the project name, or in Settings > General.
-
Set Up Your Project:
gitlab: enabled: true token: YOUR_GITLAB_TOKEN project_id: "12345678" tag: v0.0.1 ref: main host: https://gitlab.com
Note: For self-hosted GitLab instances, update the
hostfield with your GitLab URL.
Google Play Store Configuration #
To upload apps to Google Play Store:
-
Create a Service Account:
- Go to Google Cloud Console.
- Create a new project or select an existing one.
- Enable the Google Play Android Developer API.
- Create a Service Account and download the JSON key file.
-
Grant Access in Play Console:
- Go to Google Play Console.
- Navigate to Setup > API access.
- Link your service account and grant appropriate permissions.
-
Set Up Your Project:
play_store: enabled: true service_account_json_path: ./path/to/service-account.json package_name: com.example.app track: internal release_name: "Release v1.0.0"
Apple App Store Configuration #
To upload apps to App Store Connect:
-
Generate an API Key:
- Go to App Store Connect.
- Navigate to Users and Access > Keys.
- Create a new API key with App Manager or Admin role.
- Download the
.p8key file and note the Key ID and Issuer ID.
-
Find Your App ID:
- In App Store Connect, go to My Apps.
- Select your app and find the App ID in the App Information section.
-
Set Up Your Project:
app_store: enabled: true api_key_path: ./path/to/AuthKey_XXXXXXXXXX.p8 api_issuer: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx app_id: "1234567890" bundle_id: com.example.app
Note: Full IPA upload via App Store Connect API requires proper JWT signing with ES256. For production use, consider using Transporter, Fastlane, or Xcode Organizer for more reliable uploads.
Slack Configuration Setup Guide #
To configure Slack, follow these simple steps:
1. Create a Slack App #
- Go to the Slack API: Your Apps page.
- Click on Create New App.
- Choose From Scratch and give your app a name (e.g., "Build Notifier Bot") and select your workspace.
- Click Create App.
2. Add Scopes for the App #
Scopes define the permissions your app will have. To upload QR code and Share Flutter build Download link, you'll need to add the following scopes:
For Uploading Files
- Go to the OAuth & Permissions page in your Slack App's settings.
- Under Scopes, find the section called Bot Token Scopes.
- Add the following scope:
files:writeβ Allows your app to upload files.
For Sending Chat Messages
- Under the same Bot Token Scopes section, add:
chat:writeβ Allows your app to send messages to channels.
3. Install the App to Your Workspace #
- Once you've added the required scopes, scroll to the OAuth & Permissions page.
- Click the Install App to Workspace button.
- You'll be prompted to authorize the app with the selected permissions. Click Allow to proceed.
4. Get the Bot User OAuth Token #
After installing the app, you will receive a Bot User OAuth Token. This token is required for your Slack configuration to upload files and send messages.
- In the OAuth & Permissions page, under OAuth Tokens & Redirect URLs, copy the Bot User OAuth Token (it should look like
xoxb-XXXXXXXXX-XXXXXXXXX-XXXXXXXXXXXXX). - This is your
YOUR_BOT_TOKENin the configuration.
5. Find Your Channel ID #
The CHANNEL_ID is the unique identifier for the Slack channel where the bot will send messages and share files.
To Find the Channel ID
- Go to the desired channel in your Slack workspace.
- Click on the channel name at the top to open the channel details.
- In the URL of the channel, you will see something like
https://app.slack.com/client/TXXXXXXXX/CXXXXXXXXX. - The part after the last
/(e.g.,CXXXXXXXXX) is yourCHANNEL_ID.
6. Get Member/User IDs to Mention #
If you want to mention specific users in the Slack message, you will need their Slack User IDs.
To Find a User's ID
- Open the user's profile by clicking on their name in Slack.
- Click on three dots and Copy Member Id (e.g.,
UXXXXXXXX) is the user's User ID. - Repeat this for each user you want to mention and collect their User IDs.
Now, you can use the YOUR_BOT_TOKEN, CHANNEL_ID, and member_ids in your configuration to automate Slack file uploads and download link sending.
Microsoft Teams Configuration Setup Guide #
To configure Microsoft Teams notifications, follow these simple steps:
1. Create an Incoming Webhook
- Go to your Microsoft Teams channel where you want to receive notifications.
- Click on the three dots (β―) next to the channel name.
- Select Connectors from the menu.
- Search for Incoming Webhook and click Configure.
- Give your webhook a name (e.g., "Build Notifier") and optionally upload an image.
- Click Create.
- Copy the webhook URL that is generated (you won't be able to see it again).
Note: Checkout official microsoft teams docs for detailed walkthrough.
2. Set Up Your Project
teams:
enabled: true
webhook_url: YOUR_WEBHOOK_URL
share_QR: true
share_link: true
custom_message: "π Check out the latest build! Download your app now!"
mention_users: ["John Doe", "Jane Smith"]
3. Get User Names for Mentions (Optional)
- In Microsoft Teams, you can include user names in the message.
- Important: Teams webhooks don't support actual @mentions. User names will be included as plain text in the message.
- Add user display names to the
mention_userslist in your configuration. - They will appear as "Mentioning: John Doe, Jane Smith" in the message.
Note: Microsoft Teams webhooks use Adaptive Cards for rich message formatting. The QR code will be embedded as a base64 image in the card. For actual @mentions, you would need to use the Microsoft Graph API or Bot Framework, which is beyond the scope of simple webhook integration.
QR Code Configuration #
Flutter Release X can generate QR codes for quick sharing. The QR codes can be customized with various settings.
| Setting | Description |
|---|---|
enabled |
Enable or disable QR code generation. (true/false) |
save_file |
Flag to save the QR code image. (true/false) |
show_in_command |
Display the QR code in the command line output. (true/false) |
size |
QR code image size (e.g., 256). |
error_correction_level |
Error correction level (low, medium, quartile, high). |
save_path |
File path to save the QR code image. |
Recommended .gitignore Configuration #
To prevent exposing sensitive information or to safeguard your project from unintentionally committing sensitive information or unnecessary files, we strongly recommend adding the following entries to your .gitignore file to excluded from version control:
gdcredentials.json: Contains credentials such as API keys and authentication tokens.config.yaml: Includes custom configuration or environment-specific data, which may contain sensitive information (e.g., database credentials).
If you're using a custom configuration file, replace config.yaml with the actual filename (e.g., custom_config.yaml).
License #
This project is licensed under the MIT License - see the MIT LICENSE file for details.
Want to Connect? #
π‘ Have suggestions or ideas? Iβd love to hear them! π Found a bug? Donβt worry, Iβll squash it in no time!
Feel free to reach out to me:
π§ Email: contact.kingrittik@gmail.com
π Documentation: frx docs
π¬ Discord: Join Discord Community
π GitHub: Flutter Release X Repository
πΊ YouTube: Learn Flutter & More with Rittik
πΈ Instagram: @kingrittikofficial
π Medium: @kingrittik
βοΈ Buy me a coffee: @kingrittik
Contributors #
Get Involved #
β€οΈπ Love using Flutter Release X? We're expanding its capabilities and would love your input! If you have ideas or want to contribute, check out our GitHub repository and star the project to show your support.
https://github.com/RittikSoni/Flutter-Release-X
Let's make Flutter Release X even more awesome together! π
Looking to contribute? Join me on this journey!
Check out the Contributing Guidelines and submit your pull requests.
Together, letβs make Flutter development faster, easier, and more fun! π
Support the package (optional) #
If Flutter Release X has made your development process smoother, please consider supporting our work. Your support is entirely optional but truly appreciated!
- Give a Thumbs Up: Click the star/thumbs-up at the top of this page to show your appreciation.
- Become a Sponsor: Sponsor this project on GitHub
- Buy Me A Coffee:

Thank you for helping us keep Flutter Release X thriving!


