Skip to content

Application Release #122

Application Release

Application Release #122

Workflow file for this run

name: Application Release
on:
workflow_dispatch:
inputs:
version:
description: 'Version to bump'
required: true
type: choice
default: 'none'
options:
- none
- major
- minor
- patch
- pre
- release
release_title:
description: 'Release title'
type: string
required: false
env:
VERSION_BUMP: ${{ github.event.inputs.version }}
RELEASE_TITLE: ${{ github.event.inputs.release_title }}
jobs:
android-build:
runs-on: ubuntu-latest
steps:
- name: setup actions
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'adopt'
java-version: '17'
- name: parse flutter version
run: |
export FLUTTER_VERSION=$(./.github/workflows/get_flutter_version.sh)
echo "FLUTTER_VERSION=$FLUTTER_VERSION" >> $GITHUB_ENV
- name: setup flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: cache flutter dependencies
uses: actions/cache@v4
with:
path: ${{ env.PUB_CACHE }}
key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }}
restore-keys: ${{ runner.os }}-flutter-
- name: get flutter dependencies
run: flutter pub get
- name: bump version
if: ${{ github.event.inputs.version != 'none' }}
run: |
dart pub global activate cider
cider bump ${{ env.VERSION_BUMP }} --bump-build
- name: configure release keys
env:
KEYSTORE: ${{ secrets.KEYSTORE }}
KEYCONFIG: ${{ secrets.KEYCONFIG }}
run: |
mkdir -p android/keys
echo "$KEYSTORE" | base64 -d > android/keys/key.pkcs
echo "$KEYCONFIG" | base64 -d > android/keys/key.properties
- name: build APK
run: flutter build apk
- name: build AAB
run: flutter build appbundle
- name: package release
run: |
mv build/app/outputs/flutter-apk/app-release.apk app-release.apk
mv build/app/outputs/bundle/release/app-release.aab app-release.aab
- name: upload APK to artifacts
uses: actions/upload-artifact@v4
with:
name: release-apk
path: app-release.apk
- name: upload AAB to artifacts
uses: actions/upload-artifact@v4
with:
name: release-aab
path: app-release.aab
ios-build:
runs-on: macos-latest
steps:
- name: setup actions
uses: actions/checkout@v4
- name: parse flutter version
run: |
export FLUTTER_VERSION=$(./.github/workflows/get_flutter_version.sh)
echo "FLUTTER_VERSION=$FLUTTER_VERSION" >> $GITHUB_ENV
- name: setup flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: cache flutter dependencies
uses: actions/cache@v4
with:
path: ${{ env.PUB_CACHE }}
key: ${{ runner.os }}-flutter-${{ hashFiles('**/pubspec.lock') }}
restore-keys: ${{ runner.os }}-flutter-
- name: get flutter dependencies
run: flutter pub get
- name: bump version
if: ${{ github.event.inputs.version != 'none' }}
run: |
dart pub global activate cider
cider bump ${{ env.VERSION_BUMP }} --bump-build
- name: build IPA
run: flutter build ios --no-codesign
- name: package release
run: |
cd build/ios/iphoneos
mkdir Payload
mv Runner.app Payload/Runner.app
zip -9 -r Runner.zip Payload
mv Runner.zip ../../../Runner.ipa
- name: upload IPA to artifacts
uses: actions/upload-artifact@v4
with:
name: release-ios
path: Runner.ipa
release:
needs: [android-build, ios-build]
if: ${{ github.ref == 'refs/heads/master' && github.event.inputs.version != 'none' }}
runs-on: ubuntu-latest
steps:
- name: setup actions
uses: actions/checkout@v4
- name: setup ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
- name: parse flutter version
run: |
export FLUTTER_VERSION=$(./.github/workflows/get_flutter_version.sh)
echo "FLUTTER_VERSION=$FLUTTER_VERSION" >> $GITHUB_ENV
- name: setup flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: setup cider
run: dart pub global activate cider
- name: bump and release version
run: |
cider bump ${{ env.VERSION_BUMP }} --bump-build
cider release
- name: get new version
run: echo "VERSION=$(cider version)" >> $GITHUB_ENV
- name: get new build number
run: |
VERSION=${{ env.VERSION }}
BUILD_NUMBER=${VERSION#*+}
echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV
- name: write playstore changelogs
run: bundle exec fastlane android changelog
- name: commit version increase
uses: EndBug/add-and-commit@v9
with:
message: increased version
default_author: github_actions
add: |
pubspec.yaml
CHANGELOG.md
fastlane
- name: download APK from artifacts
uses: actions/download-artifact@v4
with:
name: release-apk
- name: download AAB from artifacts
uses: actions/download-artifact@v4
with:
name: release-aab
- name: download IPA from artifacts
uses: actions/download-artifact@v4
with:
name: release-ios
- name: arrange asset files
run: |
mkdir -p build/app/outputs/bundle/release
mv app-release.aab build/app/outputs/bundle/release/
mv app-release.apk e1547.apk
mv Runner.ipa e1547.ipa
- name: configure playstore keys
env:
KEYSTORE: ${{ secrets.PLAYSTORE }}
run: |
mkdir -p android/keys
echo "$KEYSTORE" > android/keys/playstore.json
- name: publish to Play Store
run: bundle exec fastlane android upload
- name: create release
uses: softprops/action-gh-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.VERSION }}
name: ${{ env.RELEASE_TITLE }}
body_path: ./fastlane/metadata/android/en-US/changelogs/${{ env.BUILD_NUMBER }}.txt
files: |
e1547.apk
e1547.ipa