diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..4470df7 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,94 @@ +name: Android Release + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +permissions: + contents: write + + +jobs: + buid: + runs-on: ubuntu-latest + env: + KEYSTORE_PATH: keystore/my-keystore + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + RELEASE_SIGN_KEY_ALIAS: ${{ secrets.RELEASE_SIGN_KEY_ALIAS }} + RELEASE_SIGN_KEY_PASSWORD: ${{ secrets.RELEASE_SIGN_KEY_PASSWORD }} + + steps: + - name: Checkout repository + uses: actions/checkout@v6.0.2 + + - name: Checkout keystore repo + uses: actions/checkout@v6.0.2 + with: + repository: ${{ secrets.KEYSTORE_GIT_REPOSITORY }} + token: ${{ secrets.KEYSTORE_REPOSITORY_TOKEN }} + path: app/keystore + + - name: Generate keys.kt + env: + API_URL: ${{ secrets.API_URL_SECRET }} + WEBSOCKET_URL: ${{ secrets.WEBSOCKET_URL_SECRET }} + run: | + mkdir -p app/src/main/java/com/app/masterplan/di + cat > app/src/main/java/com/app/masterplan/di/keys.kt << EOF + package com.app.masterplan.di + + const val API_URL = "$API_URL" + + EOF + + mkdir -p app/src/main/java/com/app/masterplan/framework/websocket + cat > app/src/main/java/com/app/masterplan/framework/websocket/keys.kt << EOF + package com.app.masterplan.framework.websocket + + const val WEBSOCKET_URL = "WEBSOCKET_URL" + + EOF + + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 17 + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Clean project + run: ./gradlew clean + + - name: Build with Gradle + run: ./gradlew build + + - name: Extract Version Name + id: extract_version + run: | + VERSION_NAME=$(grep -m1 "versionName" app/build.gradle.kts | grep -o '"[^"]*"' | tr -d '"') + echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_OUTPUT + + - name: Sign APK + run: | + ./gradlew assembleRelease --stacktrace --info + ./gradlew bundleRelease --stacktrace --info + + + - name: Create Tag and Release + id: create_release + uses: softprops/action-gh-release@v3.0.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ steps.extract_version.outputs.VERSION_NAME }} + release_name: MasterPlan v${{ steps.extract_version.outputs.VERSION_NAME }} + draft: false + prerelease: false + files: | + app/build/outputs/apk/release/app-release.apk + app/build/outputs/bundle/release/app-release.aab \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7fb5711..e060e68 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -17,13 +17,23 @@ android { minSdk = 26 targetSdk = 36 versionCode = 1 - versionName = "1.0" + versionName = "1.0.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } + signingConfigs { + create("release"){ + storeFile = file(System.getenv("KEYSTORE_PATH") ?: "app/keystore") + storePassword = System.getenv("KEYSTORE_PASSWORD") + keyAlias = System.getenv("RELEASE_SIGN_KEY_ALIAS") + keyPassword = System.getenv("RELEASE_SIGN_KEY_PASSWORD") + } + } + buildTypes { release { + signingConfig = signingConfigs.getByName("release") isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"),