From 931bb3244f69a67a08e51abcea6a8d4693be1691 Mon Sep 17 00:00:00 2001 From: Gleb Koval Date: Wed, 20 Dec 2023 13:25:40 +0000 Subject: [PATCH 1/4] CI --- .github/workflows/publish.yaml | 40 ++++++++++++++++++++++++++ .github/workflows/test.yaml | 29 +++++++++++++++++++ build.gradle.kts | 52 ++++++++++++++++++++++++++++++++-- 3 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/publish.yaml create mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 0000000..c212da8 --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,40 @@ +name: Publish Workflow +on: + push: + tags: + - v* +jobs: + publish: + name: Publish library + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: adopt + java-version: 17 + + - name: Verify Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + + - name: Run checks + run: ./gradlew check + + - name: Parse parameters + id: parse + run: | + export VERSION="$(echo ${{ github.ref_name }} | cut -c2-)" + echo "Parsed version: '$VERSION'" + echo "tinyvm_version=$VERSION" >> "$GITHUB_OUTPUT" + + - name: Publish to Gitea package repository + env: + TINYVM_VERSION: ${{ steps.parse.outputs.tinyvm_version }} + GITEA_USERNAME: ${{ github.repository_owner }} + GITEA_TOKEN: ${{ secrets.deploy_token }} + run: ./gradlew publishAllPublicationsToGiteaRepository \ No newline at end of file diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..8890e68 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,29 @@ +name: Test Workflow +on: + pull_request: + branches: + - main + push: + branches: + - main +jobs: + lint-and-test: + name: Lint and test library + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: adopt + java-version: 17 + + - name: Verify Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + + - name: Run checks + run: ./gradlew check \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 256e71b..5dd218d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,9 +1,12 @@ plugins { kotlin("jvm") version "1.9.21" + id("org.jmailen.kotlinter") version "4.1.0" + id("org.jetbrains.dokka") version "1.9.10" + `maven-publish` } -group = "net.koval" -version = "1.0-SNAPSHOT" +group = "net.koval.teamcity-build-step-extension-test-task" +version = System.getenv("FILESYSTEM_VERSION") repositories { mavenCentral() @@ -19,4 +22,47 @@ tasks.test { kotlin { jvmToolchain(11) -} \ No newline at end of file +} + +val dokkaHtml by tasks.getting(org.jetbrains.dokka.gradle.DokkaTask::class) +val javadocJar: TaskProvider by tasks.registering(Jar::class) { + dependsOn(dokkaHtml) + archiveClassifier.set("javadoc") + from(dokkaHtml.outputDirectory) +} + +publishing { + publications.register("gpr") { + artifactId = "filesystem" + from(components["java"]) + artifact(javadocJar) + pom { + name.set("TeamCity Kotlin Script build step extension library - Test Task - test filesystem") + description.set("This is a small project to make a very basic filesystem library in Kotlin and was" + + "created using the instructions below as part of my application to the JetBrains internship project" + + "\"TeamCity Kotlin Script build step extension library\".") + url.set("https://git.koval.net/cyclane/teamcity-build-step-extension-test-task") + developers { + developer { + id.set("cyclane") + name.set("Gleb Koval") + email.set("gleb@koval.net") + } + } + scm { + url.set("https://git.koval.net/cyclane/teamcity-build-step-extension-test-task") + } + } + } + + repositories { + maven { + name = "Gitea" + url = uri("https://git.koval.net/api/packages/cyclane/maven") + credentials { + username = System.getenv("GITEA_USERNAME") + password = System.getenv("GITEA_TOKEN") + } + } + } +} -- 2.40.1 From 9164ff24436acceedab9694d58811d71d18d6688 Mon Sep 17 00:00:00 2001 From: Gleb Koval Date: Wed, 20 Dec 2023 13:29:58 +0000 Subject: [PATCH 2/4] Test release --- .github/workflows/publish.yaml | 7 +++++-- build.gradle.kts | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index c212da8..5d299a7 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -1,8 +1,11 @@ name: Publish Workflow on: + pull_request: + branches: + - main push: - tags: - - v* + branches: + - main jobs: publish: name: Publish library diff --git a/build.gradle.kts b/build.gradle.kts index 5dd218d..0125d39 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = "net.koval.teamcity-build-step-extension-test-task" -version = System.getenv("FILESYSTEM_VERSION") +version = "0.0.0" repositories { mavenCentral() -- 2.40.1 From 1fd3fa8907645923ff2b8587e0d578278130c7d2 Mon Sep 17 00:00:00 2001 From: Gleb Koval Date: Wed, 20 Dec 2023 15:12:56 +0000 Subject: [PATCH 3/4] Linting --- .editorconfig | 5 +- src/main/kotlin/filesystem/FSCreator.kt | 8 +- src/main/kotlin/filesystem/FSEntry.kt | 4 +- src/test/kotlin/filesystem/FSCreatorTest.kt | 96 ++++++++++++++------- 4 files changed, 79 insertions(+), 34 deletions(-) diff --git a/.editorconfig b/.editorconfig index e515871..ddafa2d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,4 +10,7 @@ max_line_length = 120 tab_width = 4 [{*.yaml,*.yml}] -indent_size = 2 \ No newline at end of file +indent_size = 2 + +[{*.kt,*.kts}] +ij_kotlin_packages_to_use_import_on_demand = org.junit.jupiter.api \ No newline at end of file diff --git a/src/main/kotlin/filesystem/FSCreator.kt b/src/main/kotlin/filesystem/FSCreator.kt index 3c277f0..51ef381 100644 --- a/src/main/kotlin/filesystem/FSCreator.kt +++ b/src/main/kotlin/filesystem/FSCreator.kt @@ -8,7 +8,10 @@ import java.nio.file.Path class FSCreator { // Create entry, leaving existing folders' contents, but overwriting existing files. @Throws(FileSystemException::class) - fun create(entryToCreate: FSEntry, destination: String) { + fun create( + entryToCreate: FSEntry, + destination: String, + ) { val queue = ArrayDeque>() queue.add(entryToCreate to Path.of(destination)) @@ -20,7 +23,8 @@ class FSCreator { is FSFile -> Files.createFile(path) is FSFolder -> Files.createDirectory(path) } - } catch (_: FileAlreadyExistsException) {} // Allow files/folders to already exist. + } catch (_: FileAlreadyExistsException) { + } // Allow files/folders to already exist. when (entry) { is FSFile -> Files.write(path, entry.content.toByteArray()) is FSFolder -> queue.addAll(entry.entries.map { it to path }) diff --git a/src/main/kotlin/filesystem/FSEntry.kt b/src/main/kotlin/filesystem/FSEntry.kt index 6e158b0..531da2a 100644 --- a/src/main/kotlin/filesystem/FSEntry.kt +++ b/src/main/kotlin/filesystem/FSEntry.kt @@ -4,6 +4,6 @@ package filesystem // (as we expect), and it also makes the class abstract as required. sealed class FSEntry(val name: String) -class FSFile(name: String, val content: String): FSEntry(name) +class FSFile(name: String, val content: String) : FSEntry(name) -class FSFolder(name: String, val entries: List): FSEntry(name) \ No newline at end of file +class FSFolder(name: String, val entries: List) : FSEntry(name) \ No newline at end of file diff --git a/src/test/kotlin/filesystem/FSCreatorTest.kt b/src/test/kotlin/filesystem/FSCreatorTest.kt index 249c0bf..7cc3fe1 100644 --- a/src/test/kotlin/filesystem/FSCreatorTest.kt +++ b/src/test/kotlin/filesystem/FSCreatorTest.kt @@ -29,19 +29,36 @@ class FSCreatorTest { fun `create entries`() { val readme = FSFile("README", "Hello World!") val gomod = FSFile("go.mod", "module example.com/hello-world\n\ngo1.21.5") - val maingo = FSFile("main.go", "package main\n\nimport \"example.com/hello-world/utils\"\n\n" + - "func main() {\n\tprintln(\"Hello World!\")\n}") - val helloworldgo = FSFile("hello-world.go", "package utils\n\nfunc PrintHelloWorld() {\n" + - "\tprintln(\"Hello World!\")\n}") + val maingo = + FSFile( + "main.go", + "package main\n\nimport \"example.com/hello-world/utils\"\n\n" + + "func main() {\n\tprintln(\"Hello World!\")\n}", + ) + val helloworldgo = + FSFile( + "hello-world.go", + "package utils\n\nfunc PrintHelloWorld() {\n" + + "\tprintln(\"Hello World!\")\n}", + ) assertDoesNotThrow("should create entries") { - creator.create(FSFolder("folder", listOf( - readme, - gomod, - maingo, - FSFolder("utils", listOf( - helloworldgo - )) - )), "_tmp") + creator.create( + FSFolder( + "folder", + listOf( + readme, + gomod, + maingo, + FSFolder( + "utils", + listOf( + helloworldgo, + ), + ), + ), + ), + "_tmp", + ) } // If objects don't exist, these functions will throw anyway, so don't explicitly check for existence. // Similarly, don't explicitly check if an object is a directory. @@ -54,25 +71,46 @@ class FSCreatorTest { @Test fun `create existing entries`() { assertDoesNotThrow("creation one") { - creator.create(FSFolder("folder", listOf( - FSFolder("sub-folder", listOf( - FSFile("hi", "hi") - )), - FSFolder("another-folder", listOf()), - FSFile("1.txt", "One!"), - FSFile("2.txt", "Two!") - )), "_tmp") + creator.create( + FSFolder( + "folder", + listOf( + FSFolder( + "sub-folder", + listOf( + FSFile("hi", "hi"), + ), + ), + FSFolder("another-folder", listOf()), + FSFile("1.txt", "One!"), + FSFile("2.txt", "Two!"), + ), + ), + "_tmp", + ) } assertDoesNotThrow("creation two") { - creator.create(FSFolder("folder", listOf( - FSFolder("another-folder", listOf( - FSFolder("secrets", listOf( - FSFile("secret", "P4ssW0rd") - )) - )), - FSFile("1.txt", "One is a good number"), - FSFile("3.txt", "Three!") - )), "_tmp") + creator.create( + FSFolder( + "folder", + listOf( + FSFolder( + "another-folder", + listOf( + FSFolder( + "secrets", + listOf( + FSFile("secret", "P4ssW0rd"), + ), + ), + ), + ), + FSFile("1.txt", "One is a good number"), + FSFile("3.txt", "Three!"), + ), + ), + "_tmp", + ) } assertEquals("hi", Files.readString(Path.of("_tmp/folder/sub-folder/hi"))) assertEquals("P4ssW0rd", Files.readString(Path.of("_tmp/folder/another-folder/secrets/secret"))) -- 2.40.1 From 3d89468625698d73ea30d9469b8e7714bf1412a2 Mon Sep 17 00:00:00 2001 From: Gleb Koval Date: Wed, 20 Dec 2023 15:24:11 +0000 Subject: [PATCH 4/4] Revert "Test release" This reverts commit 9164ff24436acceedab9694d58811d71d18d6688. --- .github/workflows/publish.yaml | 7 ++----- build.gradle.kts | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 5d299a7..c212da8 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -1,11 +1,8 @@ name: Publish Workflow on: - pull_request: - branches: - - main push: - branches: - - main + tags: + - v* jobs: publish: name: Publish library diff --git a/build.gradle.kts b/build.gradle.kts index 0125d39..5dd218d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { } group = "net.koval.teamcity-build-step-extension-test-task" -version = "0.0.0" +version = System.getenv("FILESYSTEM_VERSION") repositories { mavenCentral() -- 2.40.1