start second (or third?) reborn

This commit is contained in:
2024-02-16 13:40:47 +06:00
parent ff973e63fc
commit e98a484c4d
72 changed files with 173 additions and 200 deletions
build.gradle
client/src/androidMain
defaultAndroidSettings.gradleextensions.gradle
features
auth
client
common
server
src
jvmMain
kotlin
dev
inmo
postssystem
client
template
client
common
common
client
src
jsMain
kotlin
dev
inmo
postssystem
features
common
main
common
src
commonMain
kotlin
dev
inmo
postssystem
features
jvmMain
kotlin
dev
inmo
postssystem
features
linuxX64Main
kotlin
dev
inmo
postssystem
features
main
mingwX64Main
kotlin
dev
inmo
postssystem
features
content
binary
client
common
client
common
text
client
common
files
client
src
commonMain
kotlin
dev
inmo
postssystem
features
main
common
src
jvmMain
kotlin
dev
inmo
postssystem
features
main
posts
client
common
src
commonMain
kotlin
dev
inmo
postssystem
features
posts
common
main
server
src
jvmMain
kotlin
dev
inmo
postssystem
features
publication
client
common
roles
client
common
manager
client
common
status
client
src
commonMain
kotlin
dev
inmo
postssystem
features
main
common
template
client
common
users
client
common
build.gradle
src
commonMain
kotlin
dev
inmo
postssystem
features
users
common
jvmMain
kotlin
dev
inmo
postssystem
features
main
gradle
mppAndroidProject.gradlemppJavaProject.gradlemppJsProject.gradlemppProjectWithSerialization.gradle
publicators
simple
client
src
common
src
template
client
src
common
src
publish.gradle
services
posts
client
src
common
src
template
client
src
common
src
settings.gradle
targets/telegram
content
polls
client
src
common
src
loader
client
src
common
src
template
client
src
common
src

@ -23,6 +23,7 @@ allprojects {
mavenCentral()
google()
maven { url "https://maven.pkg.jetbrains.space/public/p/compose/dev" }
maven { url "https://nexus.inmo.dev/repository/maven-releases/" }
}
}

@ -1,31 +1,6 @@
apply plugin: 'com.getkeepsafe.dexcount'
android {
ext {
jvmKotlinFolderFile = {
String sep = File.separator
return new File("${project.projectDir}${sep}src${sep}jvmMain${sep}kotlin")
}
enableIncludingJvmCodeInAndroidPart = {
File jvmKotlinFolder = jvmKotlinFolderFile()
if (jvmKotlinFolder.exists()) {
android.sourceSets.main.java.srcDirs += jvmKotlinFolder.path
}
}
disableIncludingJvmCodeInAndroidPart = {
File jvmKotlinFolder = jvmKotlinFolderFile()
String[] oldDirs = android.sourceSets.main.java.srcDirs
android.sourceSets.main.java.srcDirs = []
for (oldDir in oldDirs) {
if (oldDir != jvmKotlinFolder.path) {
android.sourceSets.main.java.srcDirs += oldDir
}
}
}
}
compileSdkVersion libs.versions.android.props.compileSdk.get().toInteger()
buildToolsVersion libs.versions.android.props.buildTools.get()
@ -34,6 +9,7 @@ android {
targetSdkVersion libs.versions.android.props.compileSdk.get().toInteger()
versionCode "${android_code_version}".toInteger()
versionName "$version"
namespace "${project.group}.${project.name}"
}
buildTypes {
release {
@ -51,18 +27,7 @@ android {
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
sourceSets {
String sep = File.separator
main.java.srcDirs += "src${sep}main${sep}kotlin"
}
enableIncludingJvmCodeInAndroidPart()
}

@ -13,21 +13,6 @@ allprojects {
projectByName(name)
}
allTargetsConfiguration = { ->
kotlin {
targets.all {
compilations.all {
kotlinOptions {
freeCompilerArgs += [
"-P",
"plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true"
]
}
}
}
}
}
mppProjectWithSerializationPresetPath = "${rootProject.projectDir.absolutePath}/mppProjectWithSerialization.gradle"
mppJavaProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJavaProject.gradle"
mppJsProjectPresetPath = "${rootProject.projectDir.absolutePath}/mppJsProject.gradle"

@ -1,7 +1,6 @@
package dev.inmo.postssystem.features.auth.client
import dev.inmo.micro_utils.common.Either
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
import dev.inmo.postssystem.features.auth.common.AuthKey
import dev.inmo.postssystem.features.auth.common.AuthTokenInfo
import dev.inmo.postssystem.features.common.common.AdditionalModules
@ -27,7 +26,6 @@ fun createAuthorizedFeaturesDIModule(
installClientAuthenticator(serverUrl, get(), get(AuthorizedQualifiers.CredsQualifier), onAuthKeyUpdated, onUserRetrieved, onAuthKeyInvalidated)
}
}
single { UnifiedRequester(get(), get()) }
single { StatusFeatureClient(get(AuthorizedQualifiers.ServerUrlQualifier), get()) }
AdditionalModules.Authorized.modules.forEach {

@ -2,14 +2,14 @@ package dev.inmo.postssystem.features.auth.client
import dev.inmo.postssystem.features.auth.common.*
import dev.inmo.postssystem.features.users.common.User
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
import dev.inmo.micro_utils.ktor.client.bodyOrNull
import dev.inmo.micro_utils.ktor.common.buildStandardUrl
import io.ktor.client.HttpClient
import io.ktor.client.request.HttpRequestBuilder
import io.ktor.client.request.*
import kotlinx.serialization.builtins.nullable
class ClientAuthFeature(
private val requester: UnifiedRequester,
private val client: HttpClient,
baseUrl: String
) : AuthFeature {
private val rootUrl = buildStandardUrl(baseUrl.dropLastWhile { it == '/' }, authRootPathPart)
@ -26,28 +26,23 @@ class ClientAuthFeature(
authGetMePathPart
)
constructor(client: HttpClient, rootUrl: String): this(
UnifiedRequester(client),
rootUrl
)
override suspend fun auth(creds: AuthCreds): AuthTokenInfo? = client.post(
fullAuthPath
) {
setBody(creds)
}.bodyOrNull()
override suspend fun auth(creds: AuthCreds): AuthTokenInfo? = requester.unipost(
fullAuthPath,
AuthCreds.serializer() to creds,
AuthTokenInfo.serializer().nullable
)
override suspend fun refresh(refresh: RefreshToken): AuthTokenInfo? = client.post(
fullRefreshPath
) {
setBody(refresh)
}.bodyOrNull()
override suspend fun refresh(refresh: RefreshToken): AuthTokenInfo? = requester.unipost(
fullRefreshPath,
RefreshToken.serializer() to refresh,
AuthTokenInfo.serializer().nullable
)
override suspend fun getMe(authToken: AuthToken): User? = requester.unipost(
fullGetMePath,
AuthToken.serializer() to authToken,
User.serializer().nullable
)
override suspend fun getMe(authToken: AuthToken): User? = client.post(
fullGetMePath
) {
setBody(authToken)
}.bodyOrNull()
fun isAuthRequest(builder: HttpRequestBuilder): Boolean = builder.url.buildString().let {
it == fullAuthPath || it == fullRefreshPath

@ -37,7 +37,7 @@ fun HttpClientConfig<*>.installClientAuthenticator(
}.onSecond {
currentRefreshToken = it.refresh
}
val creds = initialAuthKey.t1 as? AuthCreds
val creds = initialAuthKey.t1OrNull as? AuthCreds
var userRefreshJob: Job? = null
install("Auth Token Refresher") {

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.auth.client"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.auth.common"/>

@ -1,6 +1,6 @@
package dev.inmo.postssystem.features.auth.server.tokens
import com.soywiz.klock.DateTime
import korlibs.time.DateTime
import dev.inmo.postssystem.features.auth.common.AuthToken
import dev.inmo.postssystem.features.auth.common.RefreshToken
import dev.inmo.postssystem.features.users.common.UserId

@ -1,7 +1,7 @@
package dev.inmo.postssystem.features.auth.server.tokens
import com.soywiz.klock.DateTime
import com.soywiz.klock.milliseconds
import korlibs.time.DateTime
import korlibs.time.milliseconds
import dev.inmo.postssystem.features.auth.common.*
import dev.inmo.postssystem.features.common.common.Milliseconds
import dev.inmo.postssystem.features.users.common.*

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.client.template.client"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.client.template.common"/>

@ -1,8 +1,8 @@
package dev.inmo.postssystem.features.common.common.ui
import androidx.compose.runtime.Composable
import com.soywiz.klock.DateTime
import com.soywiz.klock.ISO8601
import korlibs.time.DateTime
import korlibs.time.ISO8601
import org.jetbrains.compose.web.dom.Text
object DateTimeView {

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.common.client"/>

@ -1,6 +1,6 @@
package dev.inmo.postssystem.features.common.common
import com.soywiz.klock.DateTime
import korlibs.time.DateTime
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.builtins.serializer

@ -1,6 +1,7 @@
package dev.inmo.postssystem.features.common.common
import org.koin.core.definition.Definition
import org.koin.core.definition.KoinDefinition
import org.koin.core.instance.InstanceFactory
import org.koin.core.module.Module
import org.koin.core.qualifier.Qualifier
@ -11,6 +12,6 @@ inline fun <reified T : Any> Module.singleWithBinds(
qualifier: Qualifier? = null,
createdAtStart: Boolean = false,
noinline definition: Definition<T>
): Pair<Module, InstanceFactory<*>> {
): KoinDefinition<*> {
return single(qualifier, createdAtStart, definition) binds (T::class.allSuperclasses.toTypedArray())
}

@ -0,0 +1,10 @@
package dev.inmo.postssystem.features.common.common
import dev.inmo.micro_utils.common.MPPFile
import dev.inmo.micro_utils.common.filename
import dev.inmo.micro_utils.mime_types.*
actual val MPPFile.mimeType: MimeType
get() {
return getMimeTypeOrAny(filename.extension)
}

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.common.common"/>

@ -0,0 +1,11 @@
package dev.inmo.postssystem.features.common.common
import dev.inmo.micro_utils.common.MPPFile
import dev.inmo.micro_utils.common.filename
import dev.inmo.micro_utils.mime_types.MimeType
import dev.inmo.micro_utils.mime_types.getMimeTypeOrAny
actual val MPPFile.mimeType: MimeType
get() {
return getMimeTypeOrAny(filename.extension)
}

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.content.binary.client"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.content.binary.common"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.content.client"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.content.common"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.content.content.text.client"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.content.content.text.common"/>

@ -2,28 +2,28 @@ package dev.inmo.postssystem.features.files.client
import dev.inmo.postssystem.features.files.common.*
import dev.inmo.postssystem.features.files.common.storage.ReadFilesStorage
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
import dev.inmo.micro_utils.ktor.client.bodyOrNull
import dev.inmo.micro_utils.ktor.common.buildStandardUrl
import dev.inmo.micro_utils.repos.ReadCRUDRepo
import dev.inmo.micro_utils.repos.ktor.client.crud.KtorReadStandardCrudRepo
import dev.inmo.micro_utils.repos.ktor.client.crud.KtorReadCRUDRepoClient
import io.ktor.client.HttpClient
import io.ktor.client.request.post
import io.ktor.client.request.setBody
import io.ktor.client.statement.HttpResponse
import io.ktor.client.request.*
import io.ktor.client.statement.readBytes
import io.ktor.http.ContentType
import io.ktor.http.encodeURLQueryComponent
import kotlinx.serialization.BinaryFormat
import kotlinx.serialization.builtins.nullable
class ClientReadFilesStorage(
baseUrl: String,
private val client: HttpClient,
private val serialFormat: BinaryFormat
) : ReadFilesStorage, ReadCRUDRepo<MetaFileInfoStorageWrapper, FileId> by KtorReadStandardCrudRepo(
private val serialFormat: BinaryFormat,
contentType: ContentType
) : ReadFilesStorage, ReadCRUDRepo<MetaFileInfoStorageWrapper, FileId> by KtorReadCRUDRepoClient<MetaFileInfoStorageWrapper, FileId>(
buildStandardUrl(baseUrl, filesRootPathPart),
UnifiedRequester(client, serialFormat),
MetaFileInfoStorageWrapper.serializer(),
MetaFileInfoStorageWrapper.serializer().nullable,
FileId.serializer()
client,
contentType,
{ it.string.encodeURLQueryComponent() }
) {
private val fullFilesPath = buildStandardUrl(baseUrl, filesRootPathPart)
private val fullFilesGetBytesPath = buildStandardUrl(
@ -37,12 +37,11 @@ class ClientReadFilesStorage(
override suspend fun getFullFileInfo(
id: FileId
): FullFileInfoStorageWrapper? = unifiedRequester.uniget(
): FullFileInfoStorageWrapper? = client.get(
buildStandardUrl(
fullFilesPath,
filesGetFullFileInfoPathPart,
filesFileIdParameter to unifiedRequester.encodeUrlQueryValue(FileId.serializer(), id)
),
FullFileInfoStorageWrapper.serializer().nullable
)
filesFileIdParameter to id.string.encodeURLQueryComponent()
)
).bodyOrNull()
}

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.files.client"/>

@ -61,4 +61,8 @@ class DiskReadFilesStorage(
}
)
}
override suspend fun getIdsByPagination(pagination: Pagination): PaginationResult<FileId> {
return metasKeyValueRepo.keys(pagination)
}
}

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.files.common"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.posts.client"/>

@ -1,6 +1,6 @@
package dev.inmo.postssystem.features.posts.common
import com.soywiz.klock.DateTime
import korlibs.time.DateTime
import dev.inmo.postssystem.features.common.common.DateTimeSerializer
import dev.inmo.postssystem.features.content.common.Content
import dev.inmo.postssystem.features.content.common.ContentId

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.posts.common"/>

@ -1,6 +1,6 @@
package dev.inmo.postssystem.features.posts.server
import com.soywiz.klock.DateTime
import korlibs.time.DateTime
import dev.inmo.micro_utils.repos.exposed.*
import dev.inmo.postssystem.features.content.common.ContentId
import dev.inmo.postssystem.features.posts.common.*

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.publication.client"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.publication.common"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.roles.client"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.roles.common"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.roles.manager.client"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.roles.manager.common"/>

@ -2,11 +2,9 @@ package dev.inmo.postssystem.features.status.client
import dev.inmo.postssystem.features.status.common.statusAuthorisedPathPart
import dev.inmo.postssystem.features.status.common.statusRootPart
import dev.inmo.micro_utils.ktor.client.UnifiedRequester
import dev.inmo.micro_utils.ktor.common.buildStandardUrl
import io.ktor.client.HttpClient
import io.ktor.client.request.get
import io.ktor.client.statement.HttpResponse
import io.ktor.http.HttpStatusCode
class StatusFeatureClient(

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.status.client"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.status.common"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.template.client"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.template.common"/>

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.users.client"/>

@ -21,7 +21,3 @@ kotlin {
}
}
}
android {
disableIncludingJvmCodeInAndroidPart()
}

@ -31,7 +31,7 @@ sealed class User : NewUser {
}
@Serializable
data class DefaultUser(
data class RegisteredUser(
override val id: UserId,
override val firstName: String,
override val lastName: String,

@ -3,8 +3,7 @@ package dev.inmo.postssystem.features.users.common
import dev.inmo.micro_utils.repos.exposed.AbstractExposedCRUDRepo
import dev.inmo.micro_utils.repos.exposed.initTable
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.statements.InsertStatement
import org.jetbrains.exposed.sql.statements.UpdateStatement
import org.jetbrains.exposed.sql.statements.*
class ExposedUsersStorage(override val database: Database) : UsersStorage, AbstractExposedCRUDRepo<User, UserId, NewUser>(
tableName = "Users"
@ -15,11 +14,12 @@ class ExposedUsersStorage(override val database: Database) : UsersStorage, Abstr
private val lastNameColumn = text("lastName")
override val primaryKey: PrimaryKey = PrimaryKey(userIdColumn)
override val selectById: ISqlExpressionBuilder.(UserId) -> Op<Boolean> = { userIdColumn.eq(it.long) }
override val ResultRow.asId: UserId
get() = UserId(get(userIdColumn))
override val selectByIds: SqlExpressionBuilder.(List<UserId>) -> Op<Boolean> = { userIdColumn.inList(it.map { it.long }) }
override val selectById: SqlExpressionBuilder.(UserId) -> Op<Boolean> = { userIdColumn.eq(it.long) }
override val ResultRow.asObject: User
get() = DefaultUser(
get() = RegisteredUser(
get(userIdColumn).userId,
get(firstNameColumn),
get(lastNameColumn),
@ -36,13 +36,13 @@ class ExposedUsersStorage(override val database: Database) : UsersStorage, Abstr
it[lastNameColumn] = value.lastName
}
override fun update(id: UserId, value: NewUser, it: UpdateStatement) {
override fun update(id: UserId?, value: NewUser, it: UpdateBuilder<Int>) {
it[usernameColumn] = value.username.string
it[firstNameColumn] = value.firstName
it[lastNameColumn] = value.lastName
}
override fun InsertStatement<Number>.asObject(value: NewUser): User = DefaultUser(
override fun InsertStatement<Number>.asObject(value: NewUser): User = RegisteredUser(
get(userIdColumn).userId,
get(firstNameColumn),
get(lastNameColumn),

@ -1 +0,0 @@
<manifest package="dev.inmo.postssystem.features.users.common"/>

@ -1,39 +1,42 @@
[versions]
kotlin = "1.6.21"
kotlin-serialization = "1.3.3"
jsuikit = "0.1.7"
compose = "1.2.0-alpha01-dev709"
microutils = "0.11.1"
tgbotapi = "2.0.2"
ktor = "2.0.2"
klock = "2.7.0"
koin = "3.2.0"
exposed = "0.38.2"
kotlin = "1.9.22"
kotlin-serialization = "1.6.2"
kotlin-coroutines = "1.7.3"
jsuikit = "0.7.4"
compose = "1.5.12"
microutils = "0.20.34"
tgbotapi = "10.0.1"
ktor = "2.3.8"
korlibs = "5.3.1"
koin = "3.5.3"
exposed = "0.47.0"
psql = "42.3.6"
scrimage = "4.0.31"
dokka = "1.6.21"
scrimage = "4.1.1"
dokka = "1.9.10"
logback = "1.2.10"
uuid = "0.4.1"
uuid = "0.8.2"
android-junit = "4.12"
android-test-junit = "1.1.2"
android-espresso-core = "3.3.0"
gh-release = "2.3.7"
gh-release = "2.5.1"
android-gradle = "7.0.4"
android-gradle = "8.2.2"
dexcount = "3.1.0"
android-coreKtx = "1.7.0"
android-coreKtx = "1.12.0"
android-recyclerView = "1.2.1"
android-appCompat = "1.4.1"
android-fragment = "1.6.2"
android-compose-material3 = "1.1.2"
android-espresso = "3.3.0"
android-test = "1.1.2"
android-props-minSdk = "19"
android-props-compileSdk = "32"
android-props-buildTools = "32.0.0"
android-props-minSdk = "21"
android-props-compileSdk = "34"
android-props-buildTools = "34.0.0"
[libraries]
@ -42,6 +45,10 @@ kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref =
kotlin-serialization = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlin-serialization" }
kotlin-serialization-properties = { module = "org.jetbrains.kotlinx:kotlinx-serialization-properties", version.ref = "kotlin-serialization" }
kotlin-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlin-coroutines" }
kotlin-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlin-coroutines" }
kotlin-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlin-coroutines" }
jsuikit = { module = "dev.inmo:kjsuikit", version.ref = "jsuikit" }
postgresql = { module = "org.postgresql:postgresql", version.ref = "psql" }
@ -81,12 +88,18 @@ microutils-serialization-typedserializer = { module = "dev.inmo:micro_utils.seri
tgbotapi = { module = "dev.inmo:tgbotapi", version.ref = "tgbotapi" }
klock = { module = "com.soywiz.korlibs.klock:klock", version.ref = "klock" }
klock = { module = "com.soywiz.korge:korlibs-time", version.ref = "korlibs" }
krypto = { module = "com.soywiz.korge:korlibs-crypto", version.ref = "korlibs" }
scrimage = { module = "com.sksamuel.scrimage:scrimage-core", version.ref = "scrimage" }
androidx-test-junit = { module = "androidx.test.ext:junit", version.ref = "android-test-junit" }
androidx-espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "android-espresso-core" }
android-coreKtx = { module = "androidx.core:core-ktx", version.ref = "android-coreKtx" }
android-recyclerView = { module = "androidx.recyclerview:recyclerview", version.ref = "android-recyclerView" }
android-appCompat-resources = { module = "androidx.appcompat:appcompat-resources", version.ref = "android-appCompat" }
android-compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "android-compose-material3" }
android-fragment = { module = "androidx.fragment:fragment", version.ref = "android-fragment" }
android-espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "android-espresso" }
android-test-junit = { module = "androidx.test.ext:junit", version.ref = "android-test" }
# classpaths

@ -1,4 +1,4 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
zipStoreBase=GRADLE_USER_HOME

@ -1,11 +1,16 @@
project.version = "$version"
project.group = "$group"
// apply from: "$publishGradlePath"
apply from: "$publishGradlePath"
kotlin {
android {
androidTarget {
publishAllLibraryVariants()
compilations.all {
kotlinOptions {
jvmTarget = "17"
}
}
}
sourceSets {
@ -18,18 +23,15 @@ kotlin {
dependencies {
implementation kotlin('test-common')
implementation kotlin('test-annotations-common')
}
}
androidTest {
dependencies {
implementation kotlin('test-junit')
implementation libs.androidx.test.junit
implementation libs.androidx.espresso
implementation libs.kt.coroutines.test
}
}
}
allTargetsConfiguration()
}
apply from: "$defaultAndroidSettingsPresetPath"
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

@ -4,7 +4,13 @@ project.group = "$group"
apply from: "$publishGradlePath"
kotlin {
jvm()
jvm {
compilations.main {
kotlinOptions {
jvmTarget = "17"
}
}
}
sourceSets {
commonMain {
@ -16,6 +22,7 @@ kotlin {
dependencies {
implementation kotlin('test-common')
implementation kotlin('test-annotations-common')
implementation libs.kotlin.coroutines.test
}
}
@ -25,11 +32,9 @@ kotlin {
}
}
}
allTargetsConfiguration()
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

@ -13,12 +13,14 @@ kotlin {
commonMain {
dependencies {
implementation kotlin('stdlib')
api libs.kotlin.serialization
}
}
commonTest {
dependencies {
implementation kotlin('test-common')
implementation kotlin('test-annotations-common')
implementation libs.kotlin.coroutines.test
}
}
jsTest {
@ -28,6 +30,9 @@ kotlin {
}
}
}
allTargetsConfiguration()
}
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

@ -4,19 +4,30 @@ project.group = "$group"
apply from: "$publishGradlePath"
kotlin {
jvm()
jvm {
compilations.main {
kotlinOptions {
jvmTarget = "17"
}
}
}
js (IR) {
browser()
nodejs()
}
android {
androidTarget {
publishAllLibraryVariants()
compilations.all {
kotlinOptions {
jvmTarget = "17"
}
}
}
sourceSets {
commonMain {
dependencies {
implementation libs.kotlin.std
implementation kotlin('stdlib')
api libs.kotlin.serialization
}
}
@ -24,6 +35,7 @@ kotlin {
dependencies {
implementation kotlin('test-common')
implementation kotlin('test-annotations-common')
implementation libs.kotlin.coroutines.test
}
}
jvmTest {
@ -37,21 +49,21 @@ kotlin {
implementation kotlin('test-junit')
}
}
androidTest {
androidUnitTest {
dependencies {
implementation kotlin('test-junit')
implementation libs.androidx.test.junit
implementation libs.androidx.espresso
implementation libs.android.test.junit
implementation libs.android.espresso
}
}
}
allTargetsConfiguration()
androidMain.dependsOn jvmMain
}
}
apply from: "$defaultAndroidSettingsPresetPath"
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

@ -1,7 +1,7 @@
apply plugin: 'maven-publish'
task javadocsJar(type: Jar) {
classifier = 'javadoc'
archiveClassifier = 'javadoc'
}
publishing {
@ -49,12 +49,15 @@ publishing {
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/PostsSystem/core")
credentials {
username = project.hasProperty('GITHUBPACKAGES_USER') ? project.property('GITHUBPACKAGES_USER') : System.getenv('GITHUBPACKAGES_USER')
password = project.hasProperty('GITHUBPACKAGES_PASSWORD') ? project.property('GITHUBPACKAGES_PASSWORD') : System.getenv('GITHUBPACKAGES_PASSWORD')
}
}
}
}
}
}

@ -83,5 +83,3 @@ includes.each { originalName ->
project.projectDir = new File(projectDirectory)
println(project)
}
enableFeaturePreview("VERSION_CATALOGS")