diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 939765f846..3455e26247 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -24,9 +24,7 @@ jobs: restore-keys: | maven-build- - name: Maven Install - run: mvn -B clean install -DskipTests - - name: Maven run test - run: mvn verify + run: mvn -B clean install - name: Code coverage report uses: codecov/codecov-action@v3 with: @@ -152,25 +150,13 @@ jobs: - name: Maven Install if: ${{ runner.os == 'Linux' || runner.os == 'macOS' }} run: | - mvn -B -T1C clean install -DskipTests - shell: bash - - - name: Maven run test - if: ${{ runner.os == 'Linux' || runner.os == 'macOS' }} - run: | - mvn verify + mvn -B -T1C clean install shell: bash - name: Maven Install on windows if: runner.os == 'Windows' run: | - mvn -B -T1C clean install -DskipTests - shell: cmd - - - name: Maven run test - if: runner.os == 'Windows' - run: | - mvn verify + mvn -B -T1C clean install shell: cmd # This step needs a Git repository, so it's impossible to extract it diff --git a/.github/workflows/metrics_for_master.yml b/.github/workflows/metrics_for_master.yml index 155cb76d7c..f31fbeacab 100644 --- a/.github/workflows/metrics_for_master.yml +++ b/.github/workflows/metrics_for_master.yml @@ -28,11 +28,9 @@ jobs: key: maven-build-${{ hashFiles('**/pom.xml') }} restore-keys: | maven-build- - - name: Maven Install - # we need to run `install` goal here so that gradle will be able to resolve dependencies and run tests on diktat-gradle-plugin - run: mvn -B install -DskipPluginMarker -DskipTests - name: Run tests - run: mvn verify + # we need to run `install` goal here so that gradle will be able to resolve dependencies and run tests on diktat-gradle-plugin + run: mvn -B install -DskipPluginMarker - name: Generate code coverage report uses: codecov/codecov-action@v3 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ccd63496ea..d8cd6b3c5f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,16 +49,10 @@ jobs: { "id": "gpg.passphrase", "passphrase": "${{ secrets.DIKTAT_GPG_PASS }}" }, { "id": "kotlin-maven-plugin-tools", "username": "${{github.actor}}", "password": "${{ secrets.GITHUB_TOKEN }}" } ] - # Runs tests, incl. smoke tests (using a fat JAR built from the - # "diktat-ruleset" module). The fat JAR is also used later during the - # "upload-release-asset" step (see below). - - name: Run tests - run: mvn -B clean install - # "diktat-ruleset" is a module that creates a fat JAR, which is, - # obviously, never released. Since we *do need* this fat JAR in order to - # run smoke tests, we *skip tests entirely* in this step. - - name: Deploy artifacts (skipping the clean, test, and verify phases) - run: mvn -B deploy -Prelease --projects "!diktat-ruleset" -DskipTests=true + - name: Deploy artifacts + run: mvn -B clean deploy -Prelease --projects '!diktat-ruleset' + - name: Build diktat.jar + run: mvn -B package --projects diktat-ruleset - name: Create Github Release id: create_release uses: actions/create-release@v1 diff --git a/.gitignore b/.gitignore index 37ac6a8ad3..e653b9107b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,11 @@ -target -.gradle -build +target/ +.gradle/ +build/ !ktlint/src/main/resources/config/.idea -/.idea +/.idea/ *.iml -out +out/ .DS_Store + +# Vim swap files +*.swp diff --git a/diktat-rules/pom.xml b/diktat-rules/pom.xml index 40d0bd03a5..cdde4b934e 100644 --- a/diktat-rules/pom.xml +++ b/diktat-rules/pom.xml @@ -161,6 +161,73 @@ + + + org.apache.maven.plugins + maven-jar-plugin + + + + default-jar + none + + + + fat-jar-for-smoke-tests + process-test-classes + + jar + + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.3.0 + + + false + + false + + ${project.name}-${project.version}-fat-jar-for-smoke-tests + + + com.squareup:kotlinpoet + net.java.dev.jna:jna + org.jetbrains.intellij.deps:trove4j + org.jetbrains.kotlin:kotlin-compiler-embeddable + org.jetbrains.kotlin:kotlin-daemon-embeddable + org.jetbrains.kotlin:kotlin-reflect + org.jetbrains.kotlin:kotlin-script-runtime + org.jetbrains.kotlin:kotlin-stdlib-common + org.jetbrains.kotlin:kotlin-stdlib-jdk7 + org.jetbrains.kotlin:kotlin-stdlib-jdk8 + org.jetbrains.kotlin:kotlin-stdlib + org.jetbrains:annotations + + + + + + fat-jar-for-smoke-tests + process-test-classes + + shade + + + + diff --git a/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/smoke/DiktatSaveSmokeTest.kt b/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/smoke/DiktatSaveSmokeTest.kt index bbc4e0153e..638d35ee91 100644 --- a/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/smoke/DiktatSaveSmokeTest.kt +++ b/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/smoke/DiktatSaveSmokeTest.kt @@ -8,6 +8,7 @@ import org.cqfn.diktat.util.prependPath import org.cqfn.diktat.util.retry import mu.KotlinLogging +import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.fail import org.assertj.core.api.SoftAssertions.assertSoftly import org.junit.jupiter.api.AfterAll @@ -24,9 +25,7 @@ import kotlin.io.path.createDirectories import kotlin.io.path.div import kotlin.io.path.exists import kotlin.io.path.listDirectoryEntries -import kotlin.io.path.name import kotlin.io.path.outputStream -import kotlin.io.path.pathString import kotlin.io.path.readText import kotlin.io.path.relativeTo import kotlin.system.measureNanoTime @@ -99,6 +98,8 @@ class DiktatSaveSmokeTest : DiktatSmokeTestBase() { @Suppress("WRONG_ORDER_IN_CLASS_LIKE_STRUCTURES") // False positives companion object { + private const val BUILD_DIRECTORY = "target" + private const val FAT_JAR_GLOB = "diktat-rules-*-fat-jar-for-smoke-tests.jar" private const val KTLINT_VERSION = "0.46.1" @Suppress("EMPTY_BLOCK_STRUCTURE_ERROR") @@ -164,14 +165,20 @@ class DiktatSaveSmokeTest : DiktatSmokeTestBase() { "The base directory for the smoke test is $baseDirectory." } - val diktatDir: String = - Path("../diktat-ruleset/target") - .takeIf { it.exists() } - ?.listDirectoryEntries() - ?.single { it.name.contains("diktat") } - ?.pathString ?: "" + /* + * The fat JAR should reside in the same directory as `ktlint` and + * `save*` and be named `diktat.jar` + * (see `diktat-rules/src/test/resources/test/smoke/save.toml`). + */ + val diktatFrom = Path(BUILD_DIRECTORY) + .takeIf(Path::exists) + ?.listDirectoryEntries(FAT_JAR_GLOB) + ?.singleOrNull() + assertThat(diktatFrom) + .describedAs(diktatFrom?.toString() ?: "$BUILD_DIRECTORY/$FAT_JAR_GLOB") + .isNotNull + .isRegularFile - val diktatFrom = Path(diktatDir) val diktat = baseDirectory / "diktat.jar" val save = baseDirectory / getSaveForCurrentOs() val ktlint = baseDirectory / "ktlint" @@ -179,7 +186,7 @@ class DiktatSaveSmokeTest : DiktatSmokeTestBase() { downloadFile(URL("https://github.com/saveourtool/save-cli/releases/download/v$SAVE_VERSION/${getSaveForCurrentOs()}"), save) downloadFile(URL("https://github.com/pinterest/ktlint/releases/download/$KTLINT_VERSION/ktlint"), ktlint) - diktatFrom.copyTo(diktat) + diktatFrom?.copyTo(diktat) } @AfterAll diff --git a/diktat-rules/src/test/kotlin/org/cqfn/diktat/util/FixTestBase.kt b/diktat-rules/src/test/kotlin/org/cqfn/diktat/util/FixTestBase.kt index 59d1a4ce78..82a7234cde 100644 --- a/diktat-rules/src/test/kotlin/org/cqfn/diktat/util/FixTestBase.kt +++ b/diktat-rules/src/test/kotlin/org/cqfn/diktat/util/FixTestBase.kt @@ -69,8 +69,8 @@ open class FixTestBase( val systemName = System.getProperty("os.name") val result = when { systemName.startsWith("Linux", ignoreCase = true) || systemName.startsWith("Mac", ignoreCase = true) -> - ProcessBuilder("sh", "-c", "chmod 777 $savePath ; ./$savePath src/test/resources/test/smoke/src/main/kotlin $testPath --log all") - else -> ProcessBuilder(savePath, "src/test/resources/test/smoke/src/main/kotlin", testPath) + ProcessBuilder("sh", "-c", "chmod 777 $savePath ; ./$savePath $filesDir/src/main/kotlin $testPath --log all") + else -> ProcessBuilder(savePath, "$filesDir/src/main/kotlin", testPath) } return result }