diff --git a/.github/workflows/build-app.yaml b/.github/workflows/build-app.yaml new file mode 100644 index 000000000..e4cc8ab33 --- /dev/null +++ b/.github/workflows/build-app.yaml @@ -0,0 +1,36 @@ +name: Build APP + +on: + workflow_dispatch: # Allows manual triggering + pull_request: + branches: + - main + +jobs: + build_app: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: "21" + distribution: "zulu" + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + + - name: Create Keystore + env: + ANDROID_KEYSTORE_FILE: ${{ secrets.APP_SIGNING_KEY }} + run: | + mkdir -p $HOME/.android + echo $ANDROID_KEYSTORE_FILE | base64 --decode > $HOME/.android/debug.keystore + - name: Build Release apk + working-directory: app + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + ANDROID_KEYSTORE_ALIAS: solana_dapp + ANDROID_KEYSTORE_PASSWORD: ${{ secrets.APP_SIGNING_KEYSTORE_PASSWORD }} + ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD: ${{ secrets.APP_SIGNING_KEY_SOLANA_DAPP_PASSWORD }} + run: ./gradlew assembleRelease --stacktrace diff --git a/app/app/build.gradle b/app/app/build.gradle index 0955c4b34..be851c94a 100644 --- a/app/app/build.gradle +++ b/app/app/build.gradle @@ -20,10 +20,22 @@ plugins { import java.text.SimpleDateFormat import org.yaml.snakeyaml.Yaml +import groovy.json.JsonSlurper +import org.apache.commons.io.FilenameUtils +def githubRepo = 'urnetwork/sdk' +def latestReleaseUrl = "https://api.github.com/repos/${githubRepo}/releases/latest" +def downloadDir = "${buildDir}/downloads" -def bringyourHomeDir = System.getenv('BRINGYOUR_HOME') ?: "${System.env.HOME}/bringyour" +def bringyourHomeDir = System.getenv('BRINGYOUR_HOME') ?: "." +subprojects { subproject -> + subproject.tasks.whenTaskAdded { + if (it.name.contains("kapt")) { + it.enabled = false + } + } +} ext.envSecret = { envName -> def servicesFile = file("$bringyourHomeDir/vault/$envName/services.yml") if (servicesFile.exists()) { @@ -41,31 +53,41 @@ ext.envSecret = { envName -> } android { - ext.appVersion = { -> - def out = new ByteArrayOutputStream() - def osName = '' - def osArch = '' - switch (System.getProperty('os.name')) { - case 'Linux': - osName = 'linux' - break - case 'Mac OS X': - osName = 'darwin' - break - } - switch (System.getProperty('os.arch')) { - case 'amd64': - osArch = 'amd64' - case 'aarch64': - osArch = 'arm64' - break - } - exec { - executable "${bringyourHomeDir}/warp/warpctl/build/${osName}/${osArch}/warpctl" - args 'ls', 'version', '-b' - standardOutput out - } - out.toString().trim() + + compileOptions { + sourceCompatibility JavaVersion.VERSION_19 + targetCompatibility JavaVersion.VERSION_19 + } + kotlinOptions { + jvmTarget = '19' + } + + ext.appVersion = { -> "1.2.3" + + // def out = new ByteArrayOutputStream() + // def osName = '' + // def osArch = '' + // switch (System.getProperty('os.name')) { + // case 'Linux': + // osName = 'linux' + // break + // case 'Mac OS X': + // osName = 'darwin' + // break + // } + // switch (System.getProperty('os.arch')) { + // case 'amd64': + // osArch = 'amd64' + // case 'aarch64': + // osArch = 'arm64' + // break + // } + // exec { + // executable "${bringyourHomeDir}/warp/warpctl/build/${osName}/${osArch}/warpctl" + // args 'ls', 'version', '-b' + // standardOutput out + // } + // out.toString().trim() } ext.appVersionCode = { -> // hours since company founding @@ -98,10 +120,10 @@ android { signingConfigs { debug { - storeFile file("${System.properties['user.home']}/.android/debug.keystore") - keyAlias 'androiddebugkey' - keyPassword 'android' - storePassword 'android' + storeFile file(System.getenv('ANDROID_KEYSTORE_FILE') ?: "${System.properties['user.home']}/.android/debug.keystore") + keyAlias System.getenv('ANDROID_KEYSTORE_ALIAS') ?: 'androiddebugkey' + keyPassword System.getenv('ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD') ?: 'android' + storePassword System.getenv('ANDROID_KEYSTORE_PASSWORD') ?: 'android' } } @@ -269,14 +291,36 @@ android { kotlinCompilerExtensionVersion = "1.5.13" } - tasks.register('goclientBuild', Exec) { - workingDir "${bringyourHomeDir}/sdk" - commandLine 'make', 'init', 'build_android' + // tasks.register('goclientBuild', Exec) { + // // workingDir "${bringyourHomeDir}/sdk" + // commandLine 'bash' '-c' '' + // } + + task downloadLatestReleaseArtifacts { + doLast { + def conn = new URL(latestReleaseUrl).openConnection() + + def json = new JsonSlurper().parse(conn.inputStream) + json.assets.each { asset -> + if (asset.name.endsWith('.jar') || asset.name.endsWith('.aar')) { + def downloadUrl = asset.browser_download_url + def fileName = FilenameUtils.getName(downloadUrl) + def file = new File(downloadDir, fileName) + if (!file.parentFile.exists()) { + file.parentFile.mkdirs() + } + println "Downloading ${downloadUrl}" + file.withOutputStream { out -> + new URL(downloadUrl).withInputStream { from -> out << from } + } + } + } + } } tasks.withType(JavaCompile).tap { configureEach { - compileTask -> compileTask.dependsOn goclientBuild + compileTask -> compileTask.dependsOn downloadLatestReleaseArtifacts } } } diff --git a/app/settings.gradle b/app/settings.gradle index 2b66b4840..c9c990c20 100644 --- a/app/settings.gradle +++ b/app/settings.gradle @@ -20,13 +20,27 @@ dependencyResolutionManagement { // circle sdk maven { + + def mavenPassword = System.getenv("GITHUB_TOKEN") ?: null + + + Properties properties = new Properties() properties.load(new File(rootDir.absolutePath + "/dependencies.properties").newDataInputStream()) - url properties.getProperty('pwsdk.maven.url') - credentials { - username properties.getProperty('pwsdk.maven.username') - password properties.getProperty('pwsdk.maven.password') + if (mavenPassword != null) { + url properties.getProperty('pwsdk.maven.url') + credentials { + username 'x-access-token' + password mavenPassword + } + } else { + url properties.getProperty('pwsdk.maven.url') + + credentials { + username properties.getProperty('pwsdk.maven.username') + password properties.getProperty('pwsdk.maven.password') + } } } }