Flutter Android Release Build on GitHub Actions

Photo by Richy Great on Unsplash

workflow.yml

ใปใ‚“ใจๅ˜็ด”ใง keystore ใ‚’็”จๆ„ใ—ใฆ๏ผŒใ„ใ‚ใ‚†ใ‚‹ local.properties ใ‚’ไฝœๆˆใ—ใฆ build ใ—ใฆใ„ใ‚‹ใ ใ‘ใงใ™ใญ๏ผŽ
flavor ใ‚‚่€ƒใˆใ‚‹ใจใคใ‚‰ใ„ใงใ™ใŒ่‡ชๅˆ†ใฎใ‚ฑใƒผใ‚นใฎๅ ดๅˆใฏ โ€” dart-define=<foo=bar> ใงๆธˆใ‚€ใ‚ฑใƒผใ‚นใŒใปใจใ‚“ใฉใงใ™๏ผŽ

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v1
        with:
          java-version: '12.x'
      - uses: subosito/flutter-action@v1
        with:
          channel: 'stable'
      - run: echo "${{secrets.ANDROID_RELEASE_BASE64_KEY}}" | base64 -d > ./keystore.jks
      - run: echo "keyAlias=keystore" >> android/key.properties
      - run: echo "keyPassword=${{secrets.ANDROID_RELEASE_KEY_PASSWORD}}" >> android/key.properties
      - run: echo "storeFile=`pwd`/keystore.jks" >> android/key.properties
      - run: echo "storePassword=${{secrets.ANDROID_RELEASE_STORE_PASSWORD}}" >> android/key.properties
      - name: build apk
        run: flutter build apk --build-number ${GITHUB_RUN_NUMBER}
      - name: deploygate
        run: |
          curl \
          -H "Authorization: token ${{secrets.DEPLOYGATE_API_KEY}}" \
          -F "file=@build/app/outputs/flutter-apk/app-release.apk" \
          "https://deploygate.com/api/users/{username}/apps"

android/app/build.gradle

ไธŠใงไฝœๆˆใ—ใŸ key.properties ใ‚’่ชญใ‚€ใ‚ˆใ†ใซใ—ใพใ™๏ผŽ

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
  keystoreProperties.load(newFileInputStream(keystorePropertiesFile))
}signingConfigs {
  release {
    keyAlias keystoreProperties['keyAlias']
    keyPassword keystoreProperties['keyPassword']
    storeFile file(keystoreProperties['storeFile'])
    storePassword keystoreProperties['storePassword']
  }
}