Skip to content

Commit

Permalink
feat: add schema generator
Browse files Browse the repository at this point in the history
  • Loading branch information
finalchild committed Sep 6, 2024
1 parent b1e87a8 commit e922fbd
Show file tree
Hide file tree
Showing 325 changed files with 67,935 additions and 12 deletions.
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,11 @@

# Ignore Gradle build output directory
build
!common/build
common/build/**
!common/build/generated
common/build/generated/**
!common/build/generated/sources
common/build/generated/sources/**
!common/build/generated/sources/schemaCode
!common/build/generated/sources/schemaCode/**
14 changes: 14 additions & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
plugins {
kotlin("jvm") version "2.0.20"
kotlin("plugin.serialization") version "2.0.20"

}

dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1")
implementation("com.squareup:kotlinpoet-jvm:1.18.1")
}

repositories {
mavenCentral()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.portone.openapi

import kotlinx.serialization.json.Json
import kotlinx.serialization.json.jsonObject
import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import java.nio.file.Files

abstract class GenerateSchemaCodeTask : DefaultTask() {
@get:InputFile
abstract val inputFile: RegularFileProperty

@get:OutputDirectory
abstract val outputDirectory: DirectoryProperty

@TaskAction
fun generateSchemaCode() {
val document = Json.parseToJsonElement(Files.readString(inputFile.get().asFile.toPath())).jsonObject
SchemaGenerator(document, listOf(
"/payments",
"/payment-schedules",
"/identity-verifications",
"/billing-keys",
"/cash-receipts",
"/kakaopay",
), outputDirectory.get().asFile.toPath()).generateFiles()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.portone.openapi

import com.squareup.kotlinpoet.FileSpec
import com.squareup.kotlinpoet.KModifier
import com.squareup.kotlinpoet.PropertySpec
import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction

abstract class GenerateVersionCodeTask : DefaultTask() {
@get:Input
abstract val version: Property<String>

@get:OutputDirectory
abstract val outputDirectory: DirectoryProperty

@TaskAction
fun generateVersionCode() {
val outputDirectory = this.outputDirectory.get().asFile.toPath()

FileSpec.builder("io.portone.sdk.server", "Version")
.addProperty(PropertySpec.builder("SDK_VERSION", String::class, KModifier.CONST, KModifier.INTERNAL).initializer("%S", version.get()).build())
.build().writeTo(outputDirectory)
}
}
90 changes: 90 additions & 0 deletions buildSrc/src/main/kotlin/io/portone/openapi/PatchCodeTask.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package io.portone.openapi

import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import java.io.ByteArrayOutputStream
import java.nio.file.Files
import kotlin.io.path.listDirectoryEntries
import kotlin.io.path.relativeTo

abstract class PatchCodeTask : DefaultTask() {
@get:InputDirectory
abstract val originDirectory: DirectoryProperty

@get:InputDirectory
abstract val patchesDirectory: DirectoryProperty

@get:OutputDirectory
abstract val outputDirectory: DirectoryProperty

companion object {
private const val TAG_NAME = "patch-base"
}

@TaskAction
fun patchCode() {
val originDirectory = this.originDirectory.get().asFile.toPath()
val patchesDirectory = this.patchesDirectory.get().asFile.toPath()
val outputDirectory = this.outputDirectory.get().asFile.toPath()

Files.createDirectories(outputDirectory)

project.exec {
it.workingDir = outputDirectory.toFile()
it.executable = "git"
it.args = listOf("init")
it.isIgnoreExitValue = true
}

project.exec {
it.workingDir = outputDirectory.toFile()
it.executable = "git"
it.args = listOf("config", "commit.gpgSign", "false")
}

project.exec {
it.workingDir = project.rootProject.projectDir
it.executable = "git"
it.args = listOf("tag", TAG_NAME)
}

project.exec {
it.workingDir = project.rootProject.projectDir
it.executable = "git"
// use joinToString("/") because git filter-repo doesn't support '\' (windows path separator) in filter
it.args = listOf("filter-repo", "--force", "--subdirectory-filter", originDirectory.relativeTo(project.rootProject.projectDir.toPath()).joinToString("/"), "--target", outputDirectory.toString())
}

project.exec {
it.workingDir = project.rootProject.projectDir
it.executable = "git"
it.args = listOf("tag", "-d", TAG_NAME)
}

project.exec {
it.workingDir = outputDirectory.toFile()
it.executable = "git"
it.args = listOf("checkout", TAG_NAME)
}

project.exec {
it.workingDir = outputDirectory.toFile()
it.executable = "git"
it.args = listOf("am", "--abort")
it.standardOutput = ByteArrayOutputStream()
it.errorOutput = ByteArrayOutputStream()
it.isIgnoreExitValue = true
}

val patchFiles = patchesDirectory.listDirectoryEntries("*.patch").sorted()

project.exec {
it.workingDir = outputDirectory.toFile()
it.executable = "git"
it.args = listOf("am", "--3way", *patchFiles.map { it.toString() }.toTypedArray())
}
}
}
36 changes: 36 additions & 0 deletions buildSrc/src/main/kotlin/io/portone/openapi/SavePatchTask.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package io.portone.openapi

import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import java.nio.file.Files

abstract class SavePatchTask : DefaultTask() {
@get:InputDirectory
abstract val inputDirectory: DirectoryProperty

@get:OutputDirectory
abstract val outputDirectory: DirectoryProperty


companion object {
private const val TAG_NAME = "patch-base"
}

@TaskAction
fun patchCode() {
val inputDirectory = this.inputDirectory.get().asFile.toPath()
val outputDirectory = this.outputDirectory.get().asFile.toPath()

Files.createDirectories(outputDirectory)

project.exec {
it.workingDir = inputDirectory.toFile()
it.executable = "git"
it.args = listOf("format-patch", "--zero-commit", "--no-stat", "--minimal", "-N", "-o", outputDirectory.toString(), TAG_NAME)
}

}
}
Loading

0 comments on commit e922fbd

Please sign in to comment.