diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 12728d35..c346d474 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -23,10 +23,14 @@ jobs: - name: Rename cli-shadow to cli run: | - mv cli/build/distributions/cli-shadow.zip cli/build/distributions/cli.zip - mv cli/build/distributions/cli-shadow.tar cli/build/distributions/cli.tar + mv cli/build/distributions/cli-shadow-*.zip cli/build/distributions/cli.zip + mv cli/build/distributions/cli-shadow-*.tar cli/build/distributions/cli.tar - - name: Release + - name: Rename samt-ls-version to samt-ls + run: | + mv language-server/build/libs/samt-ls-*.jar language-server/build/libs/samt-ls.jar + + - name: Create GitHub Release uses: softprops/action-gh-release@v1 with: files: | @@ -36,3 +40,11 @@ jobs: fail_on_unmatched_files: true draft: true generate_release_notes: true + + - name: Publish to Sonatype OSSRH + run: ./gradlew --no-daemon publishMavenPublicationToOSSRHRepository + env: + SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + ORG_GRADLE_PROJECT_signingKey: ${{ secrets.PGP_SECRET }} + ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.PGP_PASSWORD }} diff --git a/.github/workflows/publish-snapshot.yml b/.github/workflows/publish-snapshot.yml new file mode 100644 index 00000000..d3603f93 --- /dev/null +++ b/.github/workflows/publish-snapshot.yml @@ -0,0 +1,22 @@ +name: Publish Snapshot +on: + push: + branches: [main] + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: 17 + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + + - name: Publish Snapshot to Sonatype OSSRH + run: ./gradlew --no-daemon publishMavenPublicationToOSSRHRepository + env: + SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} diff --git a/build.gradle.kts b/build.gradle.kts index 70ad21bc..95841b8a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,6 @@ plugins { alias(libs.plugins.kover) + alias(libs.plugins.versioning) } repositories { @@ -8,9 +9,7 @@ repositories { dependencies { kover(project(":common")) - kover(project(":lexer")) - kover(project(":parser")) - kover(project(":semantic")) + kover(project(":compiler")) kover(project(":cli")) kover(project(":language-server")) kover(project(":samt-config")) @@ -28,3 +27,15 @@ koverReport { } } } + +version = "0.0.0-SNAPSHOT" +gitVersioning.apply { + refs { + branch(".+") { + version = "\${ref}-SNAPSHOT" + } + tag("v(?.*)") { + version = "\${ref.version}" + } + } +} diff --git a/buildSrc/src/main/kotlin/samt-core.kotlin-conventions.gradle.kts b/buildSrc/src/main/kotlin/samt-core.kotlin-jvm.gradle.kts similarity index 93% rename from buildSrc/src/main/kotlin/samt-core.kotlin-conventions.gradle.kts rename to buildSrc/src/main/kotlin/samt-core.kotlin-jvm.gradle.kts index bd9e46be..15006d79 100644 --- a/buildSrc/src/main/kotlin/samt-core.kotlin-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/samt-core.kotlin-jvm.gradle.kts @@ -22,4 +22,4 @@ repositories { mavenCentral() } -group = "samt-core" +group = "tools.samt" diff --git a/buildSrc/src/main/kotlin/samt-core.library.gradle.kts b/buildSrc/src/main/kotlin/samt-core.library.gradle.kts new file mode 100644 index 00000000..cc513fc3 --- /dev/null +++ b/buildSrc/src/main/kotlin/samt-core.library.gradle.kts @@ -0,0 +1,76 @@ +plugins { + id("samt-core.kotlin-jvm") + `java-library` + `maven-publish` + signing +} + +val mavenName: String by project.extra +val mavenDescription: String by project.extra + +publishing { + publications { + create("maven") { + pom { + name.set(provider { mavenName }) + description.set(provider { mavenDescription }) + url.set("https://github.com/samtkit/core") + licenses { + license { + name.set("MIT License") + url.set("https://github.com/samtkit/core/blob/main/LICENSE") + } + } + developers { + developer { + name.set("Pascal Honegger") + email.set("pascal.honegger@samt.tools") + organization.set("Simple API Modeling Toolkit") + organizationUrl.set("https://github.com/samtkit") + } + developer { + name.set("Marcel Joss") + email.set("marcel.joss@samt.tools") + organization.set("Simple API Modeling Toolkit") + organizationUrl.set("https://github.com/samtkit") + } + developer { + name.set("Leonard Schütz") + email.set("leonard.schuetz@samt.tools") + organization.set("Simple API Modeling Toolkit") + organizationUrl.set("https://github.com/samtkit") + } + } + scm { + connection.set("scm:git:git://github.com/samtkit/core.git") + developerConnection.set("scm:git:ssh://github.com/samtkit/core.git") + url.set("https://github.com/samtkit/core") + } + } + from(components["java"]) + } + } + + repositories { + maven { + name = "OSSRH" + url = if (version.toString().endsWith("-SNAPSHOT")) { + uri("https://s01.oss.sonatype.org/content/repositories/snapshots/") + } else { + uri("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") + } + credentials { + username = System.getenv("SONATYPE_USERNAME") + password = System.getenv("SONATYPE_PASSWORD") + } + } + } +} + +signing { + isRequired = !version.toString().endsWith("-SNAPSHOT") + val signingKey: String? by project + val signingPassword: String? by project + useInMemoryPgpKeys(signingKey, signingPassword) + sign(publishing.publications["maven"]) +} diff --git a/cli/build.gradle.kts b/cli/build.gradle.kts index 8260b821..b10bd80d 100644 --- a/cli/build.gradle.kts +++ b/cli/build.gradle.kts @@ -1,6 +1,6 @@ plugins { application - id("samt-core.kotlin-conventions") + id("samt-core.kotlin-jvm") alias(libs.plugins.shadow) kotlin("plugin.serialization") alias(libs.plugins.kover) @@ -11,12 +11,9 @@ dependencies { implementation(libs.mordant) implementation(libs.kotlinx.serialization.json) implementation(project(":common")) - implementation(project(":lexer")) - implementation(project(":parser")) - implementation(project(":semantic")) + implementation(project(":compiler")) implementation(project(":samt-config")) implementation(project(":codegen")) - implementation(project(":public-api")) } application { diff --git a/codegen/build.gradle.kts b/codegen/build.gradle.kts index dbbdcad2..ed397e55 100644 --- a/codegen/build.gradle.kts +++ b/codegen/build.gradle.kts @@ -1,13 +1,15 @@ plugins { - id("samt-core.kotlin-conventions") + id("samt-core.kotlin-jvm") + id("samt-core.library") alias(libs.plugins.kover) } +val mavenName: String by extra("SAMT CodeGen") +val mavenDescription: String by extra("Call SAMT plugins to generate code from SAMT files.") + dependencies { implementation(project(":common")) - implementation(project(":parser")) - implementation(project(":semantic")) - implementation(project(":public-api")) - testImplementation(project(":lexer")) + implementation(project(":compiler")) + api(project(":public-api")) testImplementation(project(":samt-config")) } diff --git a/codegen/src/main/kotlin/tools/samt/codegen/http/HttpTransport.kt b/codegen/src/main/kotlin/tools/samt/codegen/http/HttpTransport.kt index 1b9feef2..46eca267 100644 --- a/codegen/src/main/kotlin/tools/samt/codegen/http/HttpTransport.kt +++ b/codegen/src/main/kotlin/tools/samt/codegen/http/HttpTransport.kt @@ -81,22 +81,27 @@ object HttpTransportConfigurationParser : TransportConfigurationParser { // and can generate default configurations for operations that have no explicit configuration. // check for duplicate method/path combinations within current service - for (operation in parsedOperations) { - if (operation.path == path && operation.method == methodEnum) { - val duplicate = operation - params.reportError("Operation '${serviceName}.${operationName}' cannot be mapped to the same method and path combination ($method $servicePath$path) as operation '${serviceName}.${duplicate.name}'", operationConfig) + for (parsedOperation in parsedOperations) { + if (parsedOperation.path == path && parsedOperation.method == methodEnum) { + params.reportError( + "Operation '${serviceName}.${operationName}' cannot be mapped to the same method and path combination ($method $servicePath$path) as operation '${serviceName}.${parsedOperation.name}'", + operationConfig + ) continue@operationConfigLoop } } // check for duplicate method/path combinations within previously declared services - for (service in parsedServices.filter { it.path == servicePath }) { - val duplicate = service.operations.find { op -> + for (parsedService in parsedServices.filter { it.path == servicePath }) { + val duplicate = parsedService.operations.find { op -> op.path == path && op.method == methodEnum } if (duplicate != null) { - params.reportError("Operation '${serviceName}.${operationName}' cannot be mapped to the same method and path combination ($method ${service.path}$path) as operation '${service.name}.${duplicate.name}'", operationConfig) + params.reportError( + "Operation '${serviceName}.${operationName}' cannot be mapped to the same method and path combination ($method ${parsedService.path}$path) as operation '${parsedService.name}.${duplicate.name}'", + operationConfig + ) continue@operationConfigLoop } } diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 65973888..f1bd9c49 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -1,4 +1,8 @@ plugins { - id("samt-core.kotlin-conventions") + id("samt-core.kotlin-jvm") + id("samt-core.library") alias(libs.plugins.kover) } + +val mavenName: String by extra("SAMT Common") +val mavenDescription: String by extra("Common SAMT module") diff --git a/compiler/build.gradle.kts b/compiler/build.gradle.kts new file mode 100644 index 00000000..a767c22f --- /dev/null +++ b/compiler/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + id("samt-core.kotlin-jvm") + id("samt-core.library") + alias(libs.plugins.kover) +} + +val mavenName: String by extra("SAMT Compiler") +val mavenDescription: String by extra("Parse, analyze, and do whatever you desire with SAMT files.") + +dependencies { + implementation(kotlin("reflect")) + implementation(project(":common")) +} diff --git a/lexer/src/main/kotlin/tools/samt/lexer/Lexer.kt b/compiler/src/main/kotlin/tools/samt/lexer/Lexer.kt similarity index 99% rename from lexer/src/main/kotlin/tools/samt/lexer/Lexer.kt rename to compiler/src/main/kotlin/tools/samt/lexer/Lexer.kt index b017da3a..bb8b7e2d 100644 --- a/lexer/src/main/kotlin/tools/samt/lexer/Lexer.kt +++ b/compiler/src/main/kotlin/tools/samt/lexer/Lexer.kt @@ -1,6 +1,8 @@ package tools.samt.lexer -import tools.samt.common.* +import tools.samt.common.DiagnosticContext +import tools.samt.common.FileOffset +import tools.samt.common.Location import java.io.BufferedReader import java.io.Reader diff --git a/lexer/src/main/kotlin/tools/samt/lexer/Tokens.kt b/compiler/src/main/kotlin/tools/samt/lexer/Tokens.kt similarity index 100% rename from lexer/src/main/kotlin/tools/samt/lexer/Tokens.kt rename to compiler/src/main/kotlin/tools/samt/lexer/Tokens.kt diff --git a/parser/src/main/kotlin/tools/samt/parser/Nodes.kt b/compiler/src/main/kotlin/tools/samt/parser/Nodes.kt similarity index 100% rename from parser/src/main/kotlin/tools/samt/parser/Nodes.kt rename to compiler/src/main/kotlin/tools/samt/parser/Nodes.kt diff --git a/parser/src/main/kotlin/tools/samt/parser/Parser.kt b/compiler/src/main/kotlin/tools/samt/parser/Parser.kt similarity index 100% rename from parser/src/main/kotlin/tools/samt/parser/Parser.kt rename to compiler/src/main/kotlin/tools/samt/parser/Parser.kt diff --git a/semantic/src/main/kotlin/tools/samt/semantic/ConstraintBuilder.kt b/compiler/src/main/kotlin/tools/samt/semantic/ConstraintBuilder.kt similarity index 100% rename from semantic/src/main/kotlin/tools/samt/semantic/ConstraintBuilder.kt rename to compiler/src/main/kotlin/tools/samt/semantic/ConstraintBuilder.kt diff --git a/semantic/src/main/kotlin/tools/samt/semantic/Package.kt b/compiler/src/main/kotlin/tools/samt/semantic/Package.kt similarity index 96% rename from semantic/src/main/kotlin/tools/samt/semantic/Package.kt rename to compiler/src/main/kotlin/tools/samt/semantic/Package.kt index bb497a4c..dc734690 100644 --- a/semantic/src/main/kotlin/tools/samt/semantic/Package.kt +++ b/compiler/src/main/kotlin/tools/samt/semantic/Package.kt @@ -1,6 +1,8 @@ package tools.samt.semantic -import tools.samt.parser.* +import tools.samt.parser.BundleIdentifierNode +import tools.samt.parser.IdentifierNode +import tools.samt.parser.Node class Package(val name: String, private val parent: Package?) { val subPackages: MutableList = mutableListOf() diff --git a/semantic/src/main/kotlin/tools/samt/semantic/SemanticModel.kt b/compiler/src/main/kotlin/tools/samt/semantic/SemanticModel.kt similarity index 99% rename from semantic/src/main/kotlin/tools/samt/semantic/SemanticModel.kt rename to compiler/src/main/kotlin/tools/samt/semantic/SemanticModel.kt index 10be0c11..806ca2f1 100644 --- a/semantic/src/main/kotlin/tools/samt/semantic/SemanticModel.kt +++ b/compiler/src/main/kotlin/tools/samt/semantic/SemanticModel.kt @@ -214,7 +214,7 @@ internal class SemanticModelBuilder( filePackage.sourcePackage.linkType(import, type) val name = if (import.alias != null) { - import.alias!!.name + import.alias.name } else { import.name.components.last().name } diff --git a/semantic/src/main/kotlin/tools/samt/semantic/SemanticModelAnnotationProcessor.kt b/compiler/src/main/kotlin/tools/samt/semantic/SemanticModelAnnotationProcessor.kt similarity index 100% rename from semantic/src/main/kotlin/tools/samt/semantic/SemanticModelAnnotationProcessor.kt rename to compiler/src/main/kotlin/tools/samt/semantic/SemanticModelAnnotationProcessor.kt diff --git a/semantic/src/main/kotlin/tools/samt/semantic/SemanticModelPostProcessor.kt b/compiler/src/main/kotlin/tools/samt/semantic/SemanticModelPostProcessor.kt similarity index 100% rename from semantic/src/main/kotlin/tools/samt/semantic/SemanticModelPostProcessor.kt rename to compiler/src/main/kotlin/tools/samt/semantic/SemanticModelPostProcessor.kt diff --git a/semantic/src/main/kotlin/tools/samt/semantic/SemanticModelPreProcessor.kt b/compiler/src/main/kotlin/tools/samt/semantic/SemanticModelPreProcessor.kt similarity index 100% rename from semantic/src/main/kotlin/tools/samt/semantic/SemanticModelPreProcessor.kt rename to compiler/src/main/kotlin/tools/samt/semantic/SemanticModelPreProcessor.kt diff --git a/semantic/src/main/kotlin/tools/samt/semantic/SemanticModelReferenceResolver.kt b/compiler/src/main/kotlin/tools/samt/semantic/SemanticModelReferenceResolver.kt similarity index 100% rename from semantic/src/main/kotlin/tools/samt/semantic/SemanticModelReferenceResolver.kt rename to compiler/src/main/kotlin/tools/samt/semantic/SemanticModelReferenceResolver.kt diff --git a/semantic/src/main/kotlin/tools/samt/semantic/Types.kt b/compiler/src/main/kotlin/tools/samt/semantic/Types.kt similarity index 100% rename from semantic/src/main/kotlin/tools/samt/semantic/Types.kt rename to compiler/src/main/kotlin/tools/samt/semantic/Types.kt diff --git a/semantic/src/main/kotlin/tools/samt/semantic/UserMetadata.kt b/compiler/src/main/kotlin/tools/samt/semantic/UserMetadata.kt similarity index 100% rename from semantic/src/main/kotlin/tools/samt/semantic/UserMetadata.kt rename to compiler/src/main/kotlin/tools/samt/semantic/UserMetadata.kt diff --git a/lexer/src/test/kotlin/tools/samt/lexer/LexerTest.kt b/compiler/src/test/kotlin/tools/samt/lexer/LexerTest.kt similarity index 100% rename from lexer/src/test/kotlin/tools/samt/lexer/LexerTest.kt rename to compiler/src/test/kotlin/tools/samt/lexer/LexerTest.kt diff --git a/lexer/src/test/kotlin/tools/samt/lexer/TokensTest.kt b/compiler/src/test/kotlin/tools/samt/lexer/TokensTest.kt similarity index 100% rename from lexer/src/test/kotlin/tools/samt/lexer/TokensTest.kt rename to compiler/src/test/kotlin/tools/samt/lexer/TokensTest.kt diff --git a/parser/src/test/kotlin/tools/samt/parser/CustomAssertions.kt b/compiler/src/test/kotlin/tools/samt/parser/CustomAssertions.kt similarity index 100% rename from parser/src/test/kotlin/tools/samt/parser/CustomAssertions.kt rename to compiler/src/test/kotlin/tools/samt/parser/CustomAssertions.kt diff --git a/parser/src/test/kotlin/tools/samt/parser/NodeAssertions.kt b/compiler/src/test/kotlin/tools/samt/parser/NodeAssertions.kt similarity index 100% rename from parser/src/test/kotlin/tools/samt/parser/NodeAssertions.kt rename to compiler/src/test/kotlin/tools/samt/parser/NodeAssertions.kt diff --git a/parser/src/test/kotlin/tools/samt/parser/ParserTest.kt b/compiler/src/test/kotlin/tools/samt/parser/ParserTest.kt similarity index 99% rename from parser/src/test/kotlin/tools/samt/parser/ParserTest.kt rename to compiler/src/test/kotlin/tools/samt/parser/ParserTest.kt index 05d8b69b..4f261ccc 100644 --- a/parser/src/test/kotlin/tools/samt/parser/ParserTest.kt +++ b/compiler/src/test/kotlin/tools/samt/parser/ParserTest.kt @@ -2,7 +2,10 @@ package tools.samt.parser import org.junit.jupiter.api.Nested import org.junit.jupiter.api.assertThrows -import tools.samt.common.* +import tools.samt.common.DiagnosticContext +import tools.samt.common.DiagnosticController +import tools.samt.common.DiagnosticException +import tools.samt.common.SourceFile import tools.samt.lexer.Lexer import java.net.URI import kotlin.test.Test diff --git a/semantic/src/test/kotlin/tools/samt/semantic/SemanticModelTest.kt b/compiler/src/test/kotlin/tools/samt/semantic/SemanticModelTest.kt similarity index 100% rename from semantic/src/test/kotlin/tools/samt/semantic/SemanticModelTest.kt rename to compiler/src/test/kotlin/tools/samt/semantic/SemanticModelTest.kt diff --git a/gradle.properties b/gradle.properties index 5ad69748..306e0bad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1 +1,2 @@ -org.gradle.configuration-cache=true +# Breaks with the current version of the gradle versioning plugin +# org.gradle.configuration-cache=true diff --git a/language-server/build.gradle.kts b/language-server/build.gradle.kts index 25afa76e..3bc10077 100644 --- a/language-server/build.gradle.kts +++ b/language-server/build.gradle.kts @@ -1,6 +1,6 @@ plugins { application - id("samt-core.kotlin-conventions") + id("samt-core.kotlin-jvm") alias(libs.plugins.shadow) alias(libs.plugins.kover) } @@ -9,9 +9,7 @@ dependencies { implementation(libs.jCommander) implementation(libs.lsp4j) implementation(project(":common")) - implementation(project(":lexer")) - implementation(project(":parser")) - implementation(project(":semantic")) + implementation(project(":compiler")) implementation(project(":samt-config")) } diff --git a/lexer/build.gradle.kts b/lexer/build.gradle.kts deleted file mode 100644 index f2b02990..00000000 --- a/lexer/build.gradle.kts +++ /dev/null @@ -1,9 +0,0 @@ -plugins { - id("samt-core.kotlin-conventions") - alias(libs.plugins.kover) -} - -dependencies { - implementation(project(":common")) - testImplementation(kotlin("reflect")) -} diff --git a/parser/build.gradle.kts b/parser/build.gradle.kts deleted file mode 100644 index 51a6ee58..00000000 --- a/parser/build.gradle.kts +++ /dev/null @@ -1,10 +0,0 @@ -plugins { - id("samt-core.kotlin-conventions") - alias(libs.plugins.kover) -} - -dependencies { - implementation(kotlin("reflect")) - implementation(project(":common")) - implementation(project(":lexer")) -} diff --git a/public-api/build.gradle.kts b/public-api/build.gradle.kts index d194b3df..465c8985 100644 --- a/public-api/build.gradle.kts +++ b/public-api/build.gradle.kts @@ -1,3 +1,7 @@ plugins { - id("samt-core.kotlin-conventions") + id("samt-core.kotlin-jvm") + id("samt-core.library") } + +val mavenName: String by extra("SAMT Public API") +val mavenDescription: String by extra("Public API for creating custom SAMT plugins.") diff --git a/samt-config/build.gradle.kts b/samt-config/build.gradle.kts index 05dd071c..742ba6bb 100644 --- a/samt-config/build.gradle.kts +++ b/samt-config/build.gradle.kts @@ -1,8 +1,12 @@ plugins { - id("samt-core.kotlin-conventions") + id("samt-core.kotlin-jvm") + id("samt-core.library") alias(libs.plugins.kover) } +val mavenName: String by extra("SAMT Config") +val mavenDescription: String by extra("SAMT Configuration Parser") + dependencies { implementation(project(":common")) implementation(libs.kotlinx.serialization.yaml) diff --git a/semantic/build.gradle.kts b/semantic/build.gradle.kts deleted file mode 100644 index 8c543873..00000000 --- a/semantic/build.gradle.kts +++ /dev/null @@ -1,10 +0,0 @@ -plugins { - id("samt-core.kotlin-conventions") - alias(libs.plugins.kover) -} - -dependencies { - implementation(project(":common")) - implementation(project(":parser")) - testImplementation(project(":lexer")) -} diff --git a/settings.gradle.kts b/settings.gradle.kts index bbf7bfa5..6d7b7dd7 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,9 +2,7 @@ rootProject.name = "samt-core" include( ":common", ":cli", - ":lexer", - ":parser", - ":semantic", + ":compiler", ":language-server", ":samt-config", ":codegen", @@ -20,6 +18,7 @@ dependencyResolutionManagement { val kotlinxSerialization = "1.5.1" val kamlVersion = "0.53.0" val kover = "0.7.0" + val gitVersioning = "6.4.2" val lsp4j = "0.21.0" create("libs") { @@ -32,6 +31,7 @@ dependencyResolutionManagement { plugin("shadow", "com.github.johnrengelman.shadow").version(shadow) plugin("kover", "org.jetbrains.kotlinx.kover").version(kover) + plugin("versioning", "me.qoomon.git-versioning").version(gitVersioning) } } }