From f62d63be99fa4e7b99d88e55334e248a1f016f9e Mon Sep 17 00:00:00 2001 From: Serhii Prodan <22973227+serpro69@users.noreply.github.com> Date: Tue, 13 Aug 2024 22:47:43 +0200 Subject: [PATCH] Make 'docs' a standalone module Docs are finally starting to fail hard... Version 0.21.1 of Orchid seems to no longer be available: Could not resolve all dependencies for configuration ':docs:detachedConfiguration3'. > Could not find io.github.javaeden.orchid:OrchidCore:0.21.1. Searched in the following locations: - https://repo.maven.apache.org/maven2/io/github/javaeden/orchid/OrchidCore/0.21.1/OrchidCore-0.21.1.pom - https://plugins.gradle.org/m2/io/github/javaeden/orchid/OrchidCore/0.21.1/OrchidCore-0.21.1.pom Required by: project :docs I've discovered that there's a version 1.0.0-SNAPSHOT published to maven central, and tried using that, but it also fails: [INFO] GeneratorServiceImpl: Generating [indices] Error: Exception in thread "main" java.lang.NoSuchMethodError: 'double kotlin.time.DurationKt.toDuration(long, java.util.concurrent.TimeUnit)' at com.eden.orchid.api.generators.GeneratorMetrics.getIndexingTime-UwyO8pc$orchid_core(GeneratorMetrics.kt:28) This seems to be due to breaking changes in kotlin, since orchid:1.0.0-SNAPSHOT uses 1.4.31 and we're using 1.9.x in kotlin-faker currently. So the only option I could see before #166 is done (which I still can't find time for...), taking docs out of the kotlin-faker build configuration and converting it to a standalone gradle project, with own build configs, a lower gradle and kotlin version (due to kotlin-to-gradle compatibilities), and so on, seems like the only viable option. The good part of this whole mess is that this workaround actually seems to be working... phew. --- .github/workflows/docs.yml | 9 +- CONTRIBUTING.adoc | 6 +- Makefile | 9 +- bom/build.gradle.kts | 2 +- build.gradle.kts | 2 +- docs/build.gradle.kts | 32 +-- docs/gradle/wrapper/gradle-wrapper.properties | 5 + docs/gradlew | 185 ++++++++++++++++++ docs/gradlew.bat | 89 +++++++++ docs/settings.gradle.kts | 1 + settings.gradle.kts | 2 +- 11 files changed, 314 insertions(+), 28 deletions(-) create mode 100644 docs/gradle/wrapper/gradle-wrapper.properties create mode 100755 docs/gradlew create mode 100644 docs/gradlew.bat create mode 100644 docs/settings.gradle.kts diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index d539623d0..0806bbe92 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -41,15 +41,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - with: - fetch-depth: 0 - # we need jdk >= 11 to be able to configure cli-bot module due to graal plugin requirements - # at the same time using jdk 17 fails with 'module java.base does not "opens java.lang" to unnamed module' error - # more details in CONTRIBUTING - - name: Set up JDK 11 + - name: Set up JDK 8 uses: actions/setup-java@v4 with: - java-version: 11 + java-version: 8 distribution: 'temurin' - name: Deploy Docs run: make deploy-docs diff --git a/CONTRIBUTING.adoc b/CONTRIBUTING.adoc index 4b5f2750e..83dcabc86 100644 --- a/CONTRIBUTING.adoc +++ b/CONTRIBUTING.adoc @@ -66,8 +66,8 @@ _If this is your first pull request - please add yourself to the "contributors s == Prerequisites * JDK 8 (temurin or any other distribution; mandatory) -* JDK 11 (temurin or any other distribution; mandatory) -* JDK 17 (GraalVM CE distribution; optional) +* JDK 11 (temurin or any other distribution; mandatory due to plugin dependencies) +* JDK 17 (GraalVM CE distribution; optional; needed for building `cli-bot` image) Some details for the above requirements are as follows: @@ -76,7 +76,7 @@ Some details for the above requirements are as follows: ** GraalVM CE is needed to build the native image of the link:cli-bot[`cli-bot`] application. But since it's a module in the project and therefore is part of the project's build configuration process, it introduces a hard dependency on jdk version 11 or higher *** GraalVM CE jdk distribution can be omitted if one does not want to build the native image of the `cli-bot` application, but any other jdk with version >= 11 is still mandatory to build the rest of the project as mentioned above. *** GraalVM CE jdk can be installed with e.g. sdkman, or can be downloaded and installed directly from the link:https://github.com/graalvm/graalvm-ce-builds/releases[graalvm-ce-builds releases] -** To build link:docs[`docs`] module, only jdk 11 works currently. This is again due to the fact that gradle configuration stage for `cli-bot` module will simply fail with a lower version, but at the same time jdk 17 also doesn't work for `docs` module itself due to `module java.base does not "opens java.lang" to unnamed module` error... +** The link:docs[`docs`] module is currently built outside of the main kotlin-faker gradle proccesses. It depends on kotlin 1.4.31 and for this reason, the `docs` module has been removed from the kotlin-faker gradle build processes and should now be treated as a standalone project, with all gradle commands needing to be executed inside the `docs` directory. One can use either java 8 or 11 to build the documentation. == Code Structure diff --git a/Makefile b/Makefile index 26090d6e4..400d4d856 100644 --- a/Makefile +++ b/Makefile @@ -28,10 +28,11 @@ endif .PHONY: deploy-docs deploy-docs: ## deploys documentation with orchid - sed -i 's/^\s\sbaseUrl:\shttp:\/\/localhost:8080/ baseUrl: https:\/\/serpro69.github.io\/kotlin-faker/' ./docs/src/orchid/resources/config.yml - sed -i 's/^\s\shomePageOnly:.*/#/' ./docs/src/orchid/resources/config.yml - ./gradlew :docs:orchidDeploy -PorchidEnvironment=prod -PorchidDiagnose=$(ORCHID_DIAGNOSE) - git checkout ./docs/src/orchid/resources/config.yml + cd docs; \ + sed -i 's/^\s\sbaseUrl:\shttp:\/\/localhost:8080/ baseUrl: https:\/\/serpro69.github.io\/kotlin-faker/' ./src/orchid/resources/config.yml; \ + sed -i 's/^\s\shomePageOnly:.*/#/' ./src/orchid/resources/config.yml; \ + ./gradlew orchidDeploy -PorchidEnvironment=prod -PorchidDiagnose=$(ORCHID_DIAGNOSE); \ + git checkout ./src/orchid/resources/config.yml .PHONY: snapshot-minor snapshot-minor: ## publishes next snapshot with a minor version bump diff --git a/bom/build.gradle.kts b/bom/build.gradle.kts index 593655b42..efed3e7e7 100644 --- a/bom/build.gradle.kts +++ b/bom/build.gradle.kts @@ -9,7 +9,7 @@ val bom = project // Exclude subprojects that will never be published so that when configuring this project // we don't force their configuration and do unnecessary work -val excludeFromBom = listOf(":cli-bot", ":docs", ":extension", ":faker", ":test", ":extension:kotest-property-test") +val excludeFromBom = listOf(":cli-bot", /*":docs",*/ ":extension", ":faker", ":test", ":extension:kotest-property-test") fun projectsFilter(candidateProject: Project) = excludeFromBom.none { candidateProject.path == it } && candidateProject.name != bom.name diff --git a/build.gradle.kts b/build.gradle.kts index 07e444bac..c38af38cd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -172,5 +172,5 @@ tasks.withType().configureEach { } apiValidation { - ignoredProjects += listOf("bom", "cli-bot", "docs", "test") + ignoredProjects += listOf("bom", "cli-bot", /*"docs",*/ "test") } diff --git a/docs/build.gradle.kts b/docs/build.gradle.kts index 0ced42fa4..14a8341bb 100644 --- a/docs/build.gradle.kts +++ b/docs/build.gradle.kts @@ -1,8 +1,3 @@ -@file:Suppress("KDocMissingDocumentation") - -import io.github.serpro69.semverkt.gradle.plugin.tasks.TagTask -import kotlinx.validation.KotlinApiBuildTask -import kotlinx.validation.KotlinApiCompareTask import org.jetbrains.kotlin.gradle.tasks.KotlinCompile /* @@ -20,7 +15,7 @@ Commands: */ plugins { - kotlin("jvm") + kotlin("jvm") version "1.4.31" id("com.eden.orchidPlugin") version "0.21.1" } @@ -45,7 +40,26 @@ dependencies { orchidRuntimeOnly("io.github.copper-leaf.orchid:orchid-asciidoc-feature:1.0.0-SNAPSHOT") } -project.version = "${project.version}" +// TODO: there should be a better way to handle version here? +// Maybe it doesn't matter much, I really should get rid of Orchid... +project.version = "2.1.0-SNAPSHOT" + +configure { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +tasks.withType { + options.encoding = "UTF-8" + sourceCompatibility = "1.8" + targetCompatibility = "1.8" +} + +tasks.withType { + kotlinOptions { + jvmTarget = "1.8" + } +} orchid { environment = if (findProperty("env") == "prod") "prod" else "debug" @@ -57,7 +71,3 @@ orchid { System.getenv("GITHUB_TOKEN") } } - -tasks.withType { - enabled = false -} diff --git a/docs/gradle/wrapper/gradle-wrapper.properties b/docs/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..05679dc3c --- /dev/null +++ b/docs/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/docs/gradlew b/docs/gradlew new file mode 100755 index 000000000..744e882ed --- /dev/null +++ b/docs/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MSYS* | MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/docs/gradlew.bat b/docs/gradlew.bat new file mode 100644 index 000000000..ac1b06f93 --- /dev/null +++ b/docs/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/docs/settings.gradle.kts b/docs/settings.gradle.kts new file mode 100644 index 000000000..7d7e4f404 --- /dev/null +++ b/docs/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "docs" diff --git a/settings.gradle.kts b/settings.gradle.kts index 24d535938..d6388d836 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -16,7 +16,7 @@ include( ":bom", ":core", ":cli-bot", - ":docs", +// ":docs", ) val extensions =