Because Fastlane is slow, overcomplicated, and I'm tired of waiting for Ruby to do simple things.
A blazingly fast CLI tool written in Go for Android release management and Teams notifications. Does what Fastlane does, but without the headaches.
Fastlane is great in theory, but in practice:
- ⏰ Slow: Ruby startup time + dependency loading = eternal waiting
- 🐌 Bloated: Need 50 gems just to upload a file?
- 🔧 Overengineered: Simple tasks require complex configuration
- 😤 Frustrating: When you just want to upload an APK and move on with your life
Releasebot is the answer: a single binary that does exactly what you need, nothing more.
go build -o releasebotcd ansible
ansible-playbook -i hosts.yaml playbook.ymlSet the path to your Google Play service account JSON credentials:
export FASTLANE_KEY=/path/to/your/service-account.jsonOr add it to your .env file (gitignored):
FASTLANE_KEY=/path/to/your/service-account.json
Here's how I actually use it in my workflow - one command to build and upload:
VERSION_CODE=$(releasebot nextVersionCode --package=com.vgregion.hud) \
./gradlew hud:bundleRelease && \
releasebot upload \
--package=com.vgregion.hud \
--track=internal \
--aab=hud/build/outputs/bundle/release/*.aab \
--status=completedThis fetches the next version code, builds the release bundle with that version, and immediately uploads it to the internal track. No waiting, no Ruby, just done.
Upload an Android App Bundle to a specific track:
releasebot upload \
--package com.example.app \
--track internal \
--aab ./app-release.aab \
--status completedOptions:
--package: Android package name (e.g.,com.vgregion.hud)--track: Release track (internal,alpha,beta,production)--aab: Path to your .aab file--status:draftorcompleted
Find out what version code to use for your next build:
releasebot nextVersionCode --package com.example.appReturns the next available version code (e.g., 42).
Promote an existing version to a different track:
releasebot updateTrack \
--package com.example.app \
--version 42 \
--track productionPerfect for promoting an internal release to beta or production.
Download a universal APK from Google Play Console:
releasebot downloadApk \
--package com.example.app \
--version 42Downloads to /tmp/com.example.app_42.apk.
Send a message to Microsoft Teams with a QR code:
echo "Build complete! 🎉" | releasebot teams-notify \
--title "Download APK" \
--url "https://example.com/download" \
--webhook_url "https://outlook.office.com/webhook/..."Automatically generates a QR code for the URL and includes it in the Teams message.
Releasebot includes smart shell completion for common values:
# Tab completion works for package names
releasebot upload --package <TAB>
# Suggests: com.vgregion.hud, com.vgregion.migraine, com.vgregion.epilepsy
# Tab completion for .aab files
releasebot upload --package com.example.app --track internal --aab <TAB>
# Lists all .aab files in current directory
# Tab completion for status
releasebot upload --package com.example.app --track internal --aab app.aab --status <TAB>
# Suggests: draft, completedBuilt with:
- Cobra: Clean CLI interface
- Google Play Developer API: Direct API access, no middleman
- go-teams-notify: Microsoft Teams integration
- go-qrcode: QR code generation
Two main packages:
slowlane/: Google Play Console operations (upload, download, version management)botstuff/: Teams notifications with QR codes
go test ./...Edit slowlane/download_apk.go and add your package to the ourPackages() function:
func ourPackages(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
pkgs := []string{
"com.vgregion.hud",
"com.vgregion.migraine",
"com.vgregion.epilepsy",
"com.your.new.package", // Add here
}
return pkgs, cobra.ShellCompDirectiveNoSpace
}This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) - see the LICENSE file for details.
This means you're free to use, modify, and distribute this software, but if you run a modified version as a service or distribute it, you must release your source code under the same license. No one gets to steal this and make it proprietary.
Attribution required: If you use this, give credit. I'm an attention whore and I want people to know who saved them from Fastlane hell.
Made with ❤️ (and frustration) by someone who just wanted to ship apps faster.