From e366d6800a42e8e1fb8e078ae7eecaad64ae63c6 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Wed, 3 Jun 2020 12:58:26 -0700 Subject: [PATCH 1/5] Start running the build and tests on windows for CI. --- .circleci/config.yml | 78 +++++++++++++++---- .../com/diffplug/spotless/JreVersion.java | 7 +- 2 files changed, 66 insertions(+), 19 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 539beda293..65b1117347 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,3 +1,7 @@ +version: 2.1 +orbs: + win: circleci/windows@2.4.0 + anchors: env_gradle: &env_gradle environment: @@ -5,13 +9,15 @@ anchors: # https://circleci.com/blog/how-to-handle-java-oom-errors/ # try the experimental JVM option _JAVA_OPTIONS: "-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap" - GRADLE_OPTS: "-Dorg.gradle.workers.max=2" # and we're only allowed to use 2 vCPUs + # and we're only allowed to use 2 vCPUs + GRADLE_OPTS: "-Dorg.gradle.workers.max=2" docker: - image: cimg/openjdk:8.0 env_gradle_large: &env_gradle_large << : *env_gradle resource_class: large # https://circleci.com/docs/2.0/configuration-reference/#resource_class - GRADLE_OPTS: "-Dorg.gradle.workers.max=4" + environment: + GRADLE_OPTS: "-Dorg.gradle.workers.max=4" restore_cache_wrapper: &restore_cache_wrapper restore_cache: @@ -40,8 +46,6 @@ anchors: path: lib-extra/build/test-results/test - store_test_results: path: plugin-gradle/build/test-results/test - -version: 2 jobs: # gradlew spotlessCheck assemble testClasses assemble_testClasses: @@ -105,6 +109,45 @@ jobs: path: plugin-maven/build/test-results/npm - store_test_results: path: plugin-gradle/build/test-results/npm + test_windows: + executor: + name: win/default + shell: cmd.exe + steps: + - checkout + # install openjdk8 + - restore_cache: + key: choco2-ojdkbuild8 + - run: + name: install + command: choco install ojdkbuild8 + - save_cache: + key: choco2-ojdkbuild8 + paths: + - ~\AppData\Local\Temp\chocolatey\ojdkbuild8 + # do the test + - restore_cache: + keys: + - gradle-deps-win-{{ checksum "build.gradle" }}-{{ checksum "gradle.properties" }} + - gradle-deps-win- + - run: + name: gradlew check + command: gradlew check --build-cache + - store_test_results: + path: testlib/build/test-results/test + - store_test_results: + path: lib-extra/build/test-results/test + - store_test_results: + path: plugin-gradle/build/test-results/test + - store_test_results: + path: plugin-maven/build/test-results/test + - save_cache: + paths: + - ~/.gradle/caches + - ~/.gradle/wrapper + - ~/.m2 + - ~/project/plugin-maven/build/localMavenRepository + key: gradle-deps-win-{{ checksum "build.gradle" }}-{{ checksum "gradle.properties" }} changelog_print: << : *env_gradle steps: @@ -158,19 +201,20 @@ workflows: version: 2 assemble_and_test: jobs: - - assemble_testClasses - - test_justmaven_8: - requires: - - assemble_testClasses - - test_nomaven_8: - requires: - - assemble_testClasses - - test_nomaven_11: - requires: - - assemble_testClasses - - test_npm_8: - requires: - - assemble_testClasses + - test_windows + # - assemble_testClasses + # - test_justmaven_8: + # requires: + # - assemble_testClasses + # - test_nomaven_8: + # requires: + # - assemble_testClasses + # - test_nomaven_11: + # requires: + # - assemble_testClasses + # - test_npm_8: + # requires: + # - assemble_testClasses deploy: jobs: - changelog_print: diff --git a/testlib/src/main/java/com/diffplug/spotless/JreVersion.java b/testlib/src/main/java/com/diffplug/spotless/JreVersion.java index 07d06aff8c..98104f11f4 100644 --- a/testlib/src/main/java/com/diffplug/spotless/JreVersion.java +++ b/testlib/src/main/java/com/diffplug/spotless/JreVersion.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 DiffPlug + * Copyright 2016-2020 DiffPlug * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,7 +27,10 @@ public static JreVersion thisVm() { } else if (jvmVersion.startsWith("11.")) { return _11; } else { - throw new IllegalStateException("Spotless build is only supported on Java 8 and Java 11"); + int version = Integer.parseInt(jvmVersion.substring(0, jvmVersion.indexOf('.'))); + JreVersion result = version > 11 ? _11 : _8; + System.err.println("WARNING: Only JRE 8 and 11 are officially supported, pretending unsupported version " + jvmVersion + " is JDK" + result.name()); + return result; } } } From 4f7fd780aefab8ae166ac6e09ce3571ead76fe8d Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Wed, 3 Jun 2020 16:23:50 -0700 Subject: [PATCH 2/5] Make `ratchetFrom` work on Windows. --- .../src/main/java/com/diffplug/gradle/spotless/GitRatchet.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GitRatchet.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GitRatchet.java index e4753540f4..2da3e9bafb 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GitRatchet.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GitRatchet.java @@ -44,6 +44,7 @@ import com.diffplug.common.base.Errors; import com.diffplug.common.collect.HashBasedTable; import com.diffplug.common.collect.Table; +import com.diffplug.spotless.FileSignature; class GitRatchet implements AutoCloseable { /** @@ -54,7 +55,7 @@ class GitRatchet implements AutoCloseable { */ public boolean isClean(Project project, ObjectId treeSha, File file) throws IOException { Repository repo = repositoryFor(project); - String path = repo.getWorkTree().toPath().relativize(file.toPath()).toString(); + String path = FileSignature.pathNativeToUnix(repo.getWorkTree().toPath().relativize(file.toPath()).toString()); // TODO: should be cached-per-repo if it is thread-safe, or per-repo-per-thread if it is not DirCache dirCache = repo.readDirCache(); From 6c29aeaf42bb86b7660dd2ef047d2208beb4c196 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Wed, 3 Jun 2020 16:28:47 -0700 Subject: [PATCH 3/5] Update changelogs. --- CHANGES.md | 1 + plugin-gradle/CHANGES.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 32cc50bf7a..950bfe347d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,7 @@ This document is intended for Spotless developers. We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `1.27.0`). ## [Unreleased] +* We are now running CI on windows. ([#596](https://github.com/diffplug/spotless/pull/596)) * We are now dogfooding `ratchetFrom` and `licenseHeader` with a `$YEAR` token to ensure that Spotless copyright headers stay up-to-date without adding noise to file history. ([#595](https://github.com/diffplug/spotless/pull/595)) * Added `LineEnding.nativeIsWin()`, `FileSignature.pathNativeToUnix()`, and `FileSignature.pathUnixToNative()`, along with many API-invisible fixes and cleanup. ([#592](https://github.com/diffplug/spotless/pull/592)) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 17cc1e072e..0fe164d934 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -4,6 +4,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format ( ## [Unreleased] ### Fixed +* `ratchetFrom` incorrectly marked every file as though it were clean on Windows. * Improved the warning message for `paddedCell` deprecation, along with many API-invisible fixes and cleanup. ([#592](https://github.com/diffplug/spotless/pull/592)) ## [4.2.0] - 2020-06-03 From 26136cf6b255181958673c6e48fd39e38c0c2700 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Wed, 3 Jun 2020 16:34:02 -0700 Subject: [PATCH 4/5] Fix a bug in the unreleased FileSignature.pathNativeToUnix --- lib/src/main/java/com/diffplug/spotless/FileSignature.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/src/main/java/com/diffplug/spotless/FileSignature.java b/lib/src/main/java/com/diffplug/spotless/FileSignature.java index 50ae857370..0c0cb7a198 100644 --- a/lib/src/main/java/com/diffplug/spotless/FileSignature.java +++ b/lib/src/main/java/com/diffplug/spotless/FileSignature.java @@ -112,7 +112,7 @@ public File getOnlyFile() { /** Transforms a native path to a unix one. */ public static String pathNativeToUnix(String pathNative) { - return LineEnding.nativeIsWin() ? pathNative : pathNative.replace('\\', '/'); + return LineEnding.nativeIsWin() ? pathNative.replace('\\', '/') : pathNative; } /** Transforms a unix path to a native one. */ From 6a3e9eefda3385e5c05daff0df3f219542aedb60 Mon Sep 17 00:00:00 2001 From: Ned Twigg Date: Wed, 3 Jun 2020 16:35:22 -0700 Subject: [PATCH 5/5] Bring back CI for other platforms. --- .circleci/config.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 65b1117347..8890ceeccd 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -202,19 +202,19 @@ workflows: assemble_and_test: jobs: - test_windows - # - assemble_testClasses - # - test_justmaven_8: - # requires: - # - assemble_testClasses - # - test_nomaven_8: - # requires: - # - assemble_testClasses - # - test_nomaven_11: - # requires: - # - assemble_testClasses - # - test_npm_8: - # requires: - # - assemble_testClasses + - assemble_testClasses + - test_justmaven_8: + requires: + - assemble_testClasses + - test_nomaven_8: + requires: + - assemble_testClasses + - test_nomaven_11: + requires: + - assemble_testClasses + - test_npm_8: + requires: + - assemble_testClasses deploy: jobs: - changelog_print: