diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml new file mode 100644 index 0000000..3c3cf7e --- /dev/null +++ b/.github/workflows/pre-release.yml @@ -0,0 +1,48 @@ +name: Pre-Release + +# Controls when the workflow will run +on: + # Triggers the workflow on pull request events but only for the main branch + pull_request: + branches: [main] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "Build and Pre-Release APK" + releases: + name: Build and Pre-Release APK + # The type of runner that the job will run on + runs-on: ubuntu-latest + steps: + - name: Checkout the code + uses: actions/checkout@v4 + + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: '17' + + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + channel: 'stable' + + - name: Get packages + run: flutter pub get + + - name: Generate Java keystore + env: + KEY_JKS: ${{ secrets.KEY_JKS }} + run: echo "$KEY_JKS" | base64 --decode > release-keystore.jks + + - name: Build APK + env: + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + run: flutter build apk --split-per-abi + + - name: Pre-release APK by uploading it to Artifacts + uses: actions/upload-artifact@v3 + with: + name: APKS + path: build/app/outputs/flutter-apk/*.apk diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..b6fbe25 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,61 @@ +# This is a basic workflow to help you get started with Actions +name: Release + +# Controls when the workflow will run +on: + # Triggers the workflow on push events but only for the main branch + push: + branches: [main] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "Build and Release APK" + releases: + name: Build and Release APK + # The type of runner that the job will run on + runs-on: ubuntu-latest + steps: + - name: Checkout the code + uses: actions/checkout@v4 + + - name: Get version from pubspec.yaml + id: version + run: echo "::set-output name=version::$(grep "version:" pubspec.yaml | cut -c10-)" + + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: '17' + + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + channel: 'stable' + + - name: Get packages + run: flutter pub get + + - name: Generate Java keystore + env: + KEY_JKS: ${{ secrets.KEY_JKS }} + run: echo "$KEY_JKS" | base64 --decode > release-keystore.jks + + - name: Build APK + env: + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + run: flutter build apk --split-per-abi + + - name: Get current date + id: date + run: echo "::set-output name=date::$(TZ='Asia/Jakarta' date +'%A %d-%m-%Y %T WIB')" + + - name: Release APK + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifacts: 'build/app/outputs/flutter-apk/*.apk' + body: 'Published at ${{ steps.date.outputs.date }}' + name: 'v${{ steps.version.outputs.version }}' + token: ${{ secrets.GH_TOKEN }} + tag: ${{ steps.version.outputs.version }} diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml new file mode 100644 index 0000000..04964ac --- /dev/null +++ b/.github/workflows/staging.yml @@ -0,0 +1,37 @@ +name: Staging + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the develop branch + push: + branches: [staging] + pull_request: + branches: [staging] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + name: Analyze + # The type of runner that the job will run on + runs-on: ubuntu-latest + steps: + - name: Checkout the code + uses: actions/checkout@v4 + + - name: Setup Java + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: '17' + + - name: Setup Flutter + uses: subosito/flutter-action@v2 + with: + channel: 'stable' + + - name: Get packages + run: flutter pub get + + - name: Analyze + run: flutter analyze diff --git a/.gitignore b/.gitignore index 6928530..815e63e 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,6 @@ app.*.map.json /android/app/release /android/local.properties +# Others +*.keystore +*.jks \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index d2bc54e..e31ee77 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -30,11 +30,17 @@ android { versionName = flutter.versionName } + signingConfigs { + release { + storeFile file("../../release-keystore.jks") + storePassword = "$System.env.KEY_PASSWORD" + keyAlias = "release" + keyPassword = "$System.env.KEY_PASSWORD" + } + } buildTypes { release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.debug + signingConfig signingConfigs.release } } }