diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..ba3f2d6 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,31 @@ +name: Build & Test + +on: + pull_request: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - uses: gradle/actions/setup-gradle@v4 + + - name: Run tests + run: ./gradlew :composeApp:testDebugUnitTest + + - name: Build debug APK + run: ./gradlew :androidApp:assembleDebug + + - name: Upload debug APK + uses: actions/upload-artifact@v4 + with: + name: debug-apk + path: androidApp/build/outputs/apk/debug/*.apk diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d4c80b9 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,39 @@ +name: Release + +on: + release: + types: [created] + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - uses: gradle/actions/setup-gradle@v4 + + - name: Decode keystore + run: echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > ${{ runner.temp }}/keystore.jks + + - name: Build signed release APK + env: + KEYSTORE_PATH: ${{ runner.temp }}/keystore.jks + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + run: ./gradlew :androidApp:assembleRelease + + - name: Upload release APK + env: + GH_TOKEN: ${{ github.token }} + run: | + mv androidApp/build/outputs/apk/release/androidApp-release.apk nikki-${{ github.event.release.tag_name }}.apk + gh release upload ${{ github.event.release.tag_name }} nikki-${{ github.event.release.tag_name }}.apk diff --git a/.gitignore b/.gitignore index d06861d..d66a1c3 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,10 @@ index.html script.js styles.css +# Signing +*.jks +*.keystore + # Dev artifacts PLAN.md Screenshot_*.png diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts index 6baa214..3b31125 100644 --- a/androidApp/build.gradle.kts +++ b/androidApp/build.gradle.kts @@ -16,6 +16,18 @@ android { versionName = "1.0.0" } + signingConfigs { + create("release") { + val path = System.getenv("KEYSTORE_PATH") + if (path != null) { + storeFile = file(path) + storePassword = System.getenv("KEYSTORE_PASSWORD") + keyAlias = System.getenv("KEY_ALIAS") + keyPassword = System.getenv("KEY_PASSWORD") + } + } + } + buildTypes { release { isMinifyEnabled = true @@ -23,6 +35,7 @@ android { getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) + signingConfig = signingConfigs.getByName("release") } }