From fb5070d2c4d3a92fc4549e588c5990b8870dcdc5 Mon Sep 17 00:00:00 2001 From: em Date: Fri, 13 Jan 2023 15:38:17 +0100 Subject: [PATCH 01/17] Let ID be every type, since it is allowed by See GraphQL Spec https://graphql.org/learn/schema/#scalar-types --- .java-version | 1 + build.gradle | 49 ++--- gradle/wrapper/gradle-wrapper.jar | Bin 58695 -> 61574 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 269 ++++++++++++++--------- gradlew.bat | 38 ++-- 6 files changed, 200 insertions(+), 160 deletions(-) create mode 100644 .java-version diff --git a/.java-version b/.java-version new file mode 100644 index 00000000..62593409 --- /dev/null +++ b/.java-version @@ -0,0 +1 @@ +1.8 diff --git a/build.gradle b/build.gradle index 537f2edc..670a4f9f 100644 --- a/build.gradle +++ b/build.gradle @@ -5,13 +5,12 @@ buildscript { mavenCentral() } dependencies { - classpath 'biz.aQute.bnd:biz.aQute.bnd.gradle:5.1.2' + classpath 'biz.aQute.bnd:biz.aQute.bnd.gradle:6.4.0' classpath "org.jfrog.buildinfo:build-info-extractor-gradle:latest.release" } } plugins { - id 'net.researchgate.release' version '2.8.1' - id 'com.github.hierynomus.license' version '0.15.0' + id 'com.github.hierynomus.license' version '0.16.1' id 'maven-publish' id 'signing' id "io.github.gradle-nexus.publish-plugin" version "1.0.0" @@ -34,12 +33,6 @@ task javadocJar(type: Jar, dependsOn: javadoc) { from javadoc.destinationDir } -release { - tagTemplate = 'v${version}' - failOnPublishNeeded = false - failOnCommitNeeded = false -} - repositories { mavenCentral() } @@ -53,9 +46,9 @@ gradle.projectsEvaluated { } dependencies { - compile 'javax.validation:validation-api:1.1.0.Final' - compile 'com.graphql-java:graphql-java:17.4' - compile 'com.graphql-java:graphql-java-extended-scalars:17.0' + implementation 'javax.validation:validation-api:1.1.0.Final' + implementation 'com.graphql-java:graphql-java:17.2' + implementation 'com.graphql-java:graphql-java-extended-scalars:17.0' // OSGi @@ -64,9 +57,9 @@ dependencies { compileOnly 'org.osgi:org.osgi.service.component:1.3.0' compileOnly 'biz.aQute.bnd:biz.aQute.bndlib:3.2.0' - testCompile 'org.testng:testng:6.9.10' - testCompile 'org.hamcrest:hamcrest-all:1.3' - testCompile 'org.mockito:mockito-core:2.+' + testImplementation 'org.testng:testng:6.9.10' + testImplementation 'org.hamcrest:hamcrest-all:1.3' + testImplementation 'org.mockito:mockito-core:2.+' } test.useTestNG() @@ -140,29 +133,21 @@ publishing { } } -afterReleaseBuild.dependsOn nexusPublishing - -nexusPublishing { +publishing { repositories { - sonatype { - username = System.getenv("MAVEN_CENTRAL_USER") - password = System.getenv("MAVEN_CENTRAL_PASSWORD") + maven { + def releasesRepoUrl = "https://nexus.kw.kontextwork.com/repository/kw-maven-release" + def snapshotsRepoUrl = "https://nexus.kw.kontextwork.com/repository/kw-maven-snapshots" + url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl + credentials(PasswordCredentials) { + username "$ourNexusAuthorUser" + password "$ourNexusAuthorPassword" + } } } } -// to publish to local maven repo skip signing: ./gradlew publishToMavenLocal -x signGraphqlJavaPublication -signing { - def signingKey = System.getenv("MAVEN_CENTRAL_PGP_KEY") - useInMemoryPgpKeys(signingKey, "") - sign publishing.publications -} - task bundle(type: Bundle) { from sourceSets.main.output bndfile = file('bundle.bnd') } - -wrapper { - gradleVersion = '6.5.1' -} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index f3d88b1c2faf2fc91d853cd5d4242b5547257070..943f0cbfa754578e88a3dae77fce6e3dea56edbf 100644 GIT binary patch delta 39233 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 XzlJ0PkH9a_Rv8E<4FsY;_p9`ODYye< delta 36344 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�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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # 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" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # 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 - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +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" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + 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 @@ -105,79 +140,105 @@ 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 +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac 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 +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. # 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 +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # 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\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=`expr $i + 1` + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg 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; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# 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" +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 9618d8d9..93e3f59f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,10 +25,14 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused 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" @@ -37,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +55,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,38 +65,26 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :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 %CMD_LINE_ARGS% +"%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 +if %ERRORLEVEL% equ 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 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal From cd7802f1a2b791bfb66d98abd8aabac0ada18696 Mon Sep 17 00:00:00 2001 From: em Date: Mon, 16 Jan 2023 11:23:56 +0100 Subject: [PATCH 02/17] Upgrade different aspecs - upgrade gradle plugins - upgrade testng - upgrade osgi - upgrade graphql to 19.4A - add jaxb - upgrade to java 17 --- .github/workflows/build.yml | 6 ++-- .github/workflows/publish.yml | 6 ++-- .java-version | 2 +- build.gradle | 36 ++++++++----------- gradle.properties | 2 +- ...aphQLDirectivesViaClassDefinitionTest.java | 2 +- 6 files changed, 24 insertions(+), 30 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ec380e3f..eada7e4a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,11 +10,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up JDK 8 + - name: Set up JDK 17 uses: actions/setup-java@v2 with: - java-version: '8' - distribution: 'zulu' + java-version: '17' + distribution: 'temurin' - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1956a4f2..1c95dac5 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,11 +13,11 @@ jobs: environment: prod steps: - uses: actions/checkout@v2 - - name: Set up JDK 8 + - name: Set up JDK 17 uses: actions/setup-java@v2 with: - java-version: '8' - distribution: 'zulu' + java-version: '17' + distribution: 'temurin' - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle diff --git a/.java-version b/.java-version index 62593409..98d9bcb7 100644 --- a/.java-version +++ b/.java-version @@ -1 +1 @@ -1.8 +17 diff --git a/build.gradle b/build.gradle index 670a4f9f..ceaa755a 100644 --- a/build.gradle +++ b/build.gradle @@ -6,30 +6,24 @@ buildscript { } dependencies { classpath 'biz.aQute.bnd:biz.aQute.bnd.gradle:6.4.0' - classpath "org.jfrog.buildinfo:build-info-extractor-gradle:latest.release" } } plugins { - id 'com.github.hierynomus.license' version '0.16.1' + id 'java' + id 'idea' id 'maven-publish' - id 'signing' - id "io.github.gradle-nexus.publish-plugin" version "1.0.0" + id 'com.github.hierynomus.license' version '0.16.1' + id "biz.aQute.bnd.builder" version "6.4.0" } -apply plugin: 'java' -apply plugin: 'idea' -apply plugin: 'biz.aQute.bnd.builder' -apply plugin: 'maven-publish' - - // custom tasks for creating source/javadoc jars task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' + archiveClassifier = 'sources' from sourceSets.main.allSource } task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' + archiveClassifier = 'javadoc' from javadoc.destinationDir } @@ -46,18 +40,18 @@ gradle.projectsEvaluated { } dependencies { - implementation 'javax.validation:validation-api:1.1.0.Final' - implementation 'com.graphql-java:graphql-java:17.2' - implementation 'com.graphql-java:graphql-java-extended-scalars:17.0' - + implementation 'javax.validation:validation-api:2.0.1.Final' + implementation 'com.graphql-java:graphql-java:19.3' + implementation 'com.graphql-java:graphql-java-extended-scalars:19.1' + implementation 'javax.xml.bind:jaxb-api:2.3.1' // OSGi - compileOnly 'org.osgi:org.osgi.core:6.0.0' - compileOnly 'org.osgi:org.osgi.service.cm:1.5.0' - compileOnly 'org.osgi:org.osgi.service.component:1.3.0' - compileOnly 'biz.aQute.bnd:biz.aQute.bndlib:3.2.0' + compileOnly 'org.osgi:osgi.core:8.0.0' + compileOnly 'org.osgi:org.osgi.service.cm:1.6.0' + compileOnly 'org.osgi:org.osgi.service.component:1.5.1' + compileOnly 'biz.aQute.bnd:biz.aQute.bndlib:3.5.0' - testImplementation 'org.testng:testng:6.9.10' + testImplementation 'org.testng:testng:7.7.1' testImplementation 'org.hamcrest:hamcrest-all:1.3' testImplementation 'org.mockito:mockito-core:2.+' } diff --git a/gradle.properties b/gradle.properties index 966851e1..3db03507 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ org.gradle.daemon=true org.gradle.parallel=true org.gradle.jvmargs=-Dfile.encoding=UTF-8 -version = 9.1 +version = 10.0 diff --git a/src/test/java/graphql/annotations/GraphQLDirectivesViaClassDefinitionTest.java b/src/test/java/graphql/annotations/GraphQLDirectivesViaClassDefinitionTest.java index f3117194..4894b772 100644 --- a/src/test/java/graphql/annotations/GraphQLDirectivesViaClassDefinitionTest.java +++ b/src/test/java/graphql/annotations/GraphQLDirectivesViaClassDefinitionTest.java @@ -225,7 +225,7 @@ public void queryNameWithFalse_directivesProvidedToRegistry_wiringIsActivated() this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(upperCase.getName(), new DirectiveAndWiring(upperCase, UpperWiring.class)); GraphQLObjectType object = this.graphQLAnnotations.object(Query.class); GraphQLCodeRegistry codeRegistry = graphQLAnnotations.getContainer().getCodeRegistryBuilder().build(); - GraphQLSchema schema = newSchema().query(object).codeRegistry(codeRegistry).build(); + GraphQLSchema schema = newSchema().query(object).additionalDirective(upperCase).codeRegistry(codeRegistry).build(); ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("query { nameWithFalse }"); assertTrue(result.getErrors().isEmpty()); From dff22dd128bb6b7375552e90d857b528b6013ce1 Mon Sep 17 00:00:00 2001 From: em Date: Mon, 16 Jan 2023 11:36:14 +0100 Subject: [PATCH 03/17] Upgrade mockito --- build.gradle | 2 +- .../directives/DirectiveSchemaVisitorTest.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index ceaa755a..e0744808 100644 --- a/build.gradle +++ b/build.gradle @@ -53,7 +53,7 @@ dependencies { testImplementation 'org.testng:testng:7.7.1' testImplementation 'org.hamcrest:hamcrest-all:1.3' - testImplementation 'org.mockito:mockito-core:2.+' + testImplementation 'org.mockito:mockito-core:4.11.0' } test.useTestNG() diff --git a/src/test/java/graphql/annotations/directives/DirectiveSchemaVisitorTest.java b/src/test/java/graphql/annotations/directives/DirectiveSchemaVisitorTest.java index 0c5fd39f..8f97c722 100644 --- a/src/test/java/graphql/annotations/directives/DirectiveSchemaVisitorTest.java +++ b/src/test/java/graphql/annotations/directives/DirectiveSchemaVisitorTest.java @@ -77,8 +77,8 @@ public void visitGraphQLArgument_noDirectives_returnsContinue() { TraversalControl traversalControl = directiveSchemaVisitor.visitGraphQLArgument(argument, context); // Assert - verifyZeroInteractions(wiringMock); - verifyZeroInteractions(transformerUtilWrapper); + verifyNoMoreInteractions(wiringMock); + verifyNoMoreInteractions(transformerUtilWrapper); assertEquals(traversalControl, TraversalControl.CONTINUE); } @@ -98,7 +98,7 @@ public void visitGraphQLArgument_noWiringFunction_changedToSameNode() { directiveSchemaVisitor.visitGraphQLArgument(argument, context); // Assert - verifyZeroInteractions(wiringMock); + verifyNoMoreInteractions(wiringMock); verify(transformerUtilWrapper).changeNode(eq(context), eq(argument)); } @@ -133,8 +133,8 @@ public void visitGraphQLFieldDefinition_noDirectives_returnsContinue() { TraversalControl traversalControl = directiveSchemaVisitor.visitGraphQLFieldDefinition(type, context); // Assert - verifyZeroInteractions(wiringMock); - verifyZeroInteractions(transformerUtilWrapper); + verifyNoMoreInteractions(wiringMock); + verifyNoMoreInteractions(transformerUtilWrapper); assertEquals(traversalControl, TraversalControl.CONTINUE); } @@ -154,7 +154,7 @@ public void visitGraphQLFieldDefinition_noWiringFunction_changedToSameNode() { directiveSchemaVisitor.visitGraphQLFieldDefinition(type, context); // Assert - verifyZeroInteractions(wiringMock); + verifyNoMoreInteractions(wiringMock); verify(transformerUtilWrapper).changeNode(eq(context), eq(type)); } From 392600b40551b7062564bee8c1c412a66fd013b2 Mon Sep 17 00:00:00 2001 From: em Date: Tue, 4 Apr 2023 11:10:48 +0200 Subject: [PATCH 04/17] Upgrade graphql java to 19.5 gradle upgrade to 8.0.2 --- build.gradle | 3 ++- gradle/wrapper/gradle-wrapper.jar | Bin 61574 -> 61608 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 4 ++-- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index e0744808..2fa83bbd 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ gradle.projectsEvaluated { dependencies { implementation 'javax.validation:validation-api:2.0.1.Final' - implementation 'com.graphql-java:graphql-java:19.3' + implementation 'com.graphql-java:graphql-java:19.5' implementation 'com.graphql-java:graphql-java-extended-scalars:19.1' implementation 'javax.xml.bind:jaxb-api:2.3.1' @@ -53,6 +53,7 @@ dependencies { testImplementation 'org.testng:testng:7.7.1' testImplementation 'org.hamcrest:hamcrest-all:1.3' + // FIXME: do not upgrade to 5.x yet, bytebuddy issues testImplementation 'org.mockito:mockito-core:4.11.0' } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cbfa754578e88a3dae77fce6e3dea56edbf..ccebba7710deaf9f98673a68957ea02138b60d0a 100644 GIT binary patch delta 5094 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 delta 5107 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 I6Xdi10eY*&F8}}l diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f398c33c..bdc9a83b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68d..79a61d42 100755 --- a/gradlew +++ b/gradlew @@ -144,7 +144,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +152,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac From 8323f7087e19b080b781092f1642ece5fa63db95 Mon Sep 17 00:00:00 2001 From: em Date: Tue, 4 Apr 2023 12:10:20 +0200 Subject: [PATCH 05/17] Disable javadoc --- build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 2fa83bbd..60a709c2 100644 --- a/build.gradle +++ b/build.gradle @@ -68,7 +68,8 @@ publishing { version project.version artifact sourcesJar - artifact javadocJar + // FIXME: does no longer work (most probably gradle 8 related) +// artifact javadocJar pom.withXml { asNode().children().last() + { From b6b39a1e9ce5ac4537fd0e8b810b2a2b33846613 Mon Sep 17 00:00:00 2001 From: tm Date: Tue, 13 Jun 2023 16:02:20 +0200 Subject: [PATCH 06/17] Update GQL annotations to 20.3 --- build.gradle | 2 +- .../fieldBuilders/DirectivesBuilder.java | 26 +++++++------ .../annotations/GraphQLDataFetcherTest.java | 8 +++- .../annotations/GraphQLExtensionsTest.java | 3 +- .../annotations/GraphQLFragmentTest.java | 2 +- .../graphql/annotations/GraphQLHelper.java | 37 ++++++++++++++++++ .../graphql/annotations/GraphQLInputTest.java | 12 +++--- .../annotations/GraphQLInterfaceTest.java | 2 +- .../annotations/GraphQLObjectTest.java | 37 +++++++++--------- .../java/graphql/annotations/RelayTest.java | 16 ++++++-- .../connection/GraphQLConnectionTest.java | 38 ++++++++++--------- 11 files changed, 119 insertions(+), 64 deletions(-) create mode 100644 src/test/java/graphql/annotations/GraphQLHelper.java diff --git a/build.gradle b/build.gradle index 60a709c2..ca451feb 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ gradle.projectsEvaluated { dependencies { implementation 'javax.validation:validation-api:2.0.1.Final' - implementation 'com.graphql-java:graphql-java:19.5' + implementation 'com.graphql-java:graphql-java:20.3' implementation 'com.graphql-java:graphql-java-extended-scalars:19.1' implementation 'javax.xml.bind:jaxb-api:2.3.1' diff --git a/src/main/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilder.java b/src/main/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilder.java index 0082f5f5..f17810af 100644 --- a/src/main/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilder.java +++ b/src/main/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilder.java @@ -14,6 +14,14 @@ */ package graphql.annotations.processor.retrievers.fieldBuilders; +import java.lang.annotation.Annotation; +import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + import graphql.annotations.annotationTypes.directives.activation.GraphQLDirectives; import graphql.annotations.processor.ProcessingElementsContainer; import graphql.annotations.processor.exceptions.GraphQLAnnotationsException; @@ -23,14 +31,6 @@ import graphql.schema.GraphQLScalarType; import graphql.schema.GraphQLType; -import java.lang.annotation.Annotation; -import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - import static graphql.schema.GraphQLDirective.newDirective; @@ -133,13 +133,15 @@ private void transformArgument(Annotation annotation, GraphQLDirective.Builder d methods[finalI].setAccessible(true); Object argumentValue = methods[finalI].invoke(annotation); Object value; - if (graphQLArgument.getType() instanceof GraphQLScalarType) { + if ( graphQLArgument.getType() instanceof GraphQLScalarType ) + { value = ((GraphQLScalarType) graphQLArgument.getType()).getCoercing().parseValue(argumentValue); } - else{ + else + { value = argumentValue; } - builder.value(value); + builder.value( value ); } catch (Exception e) { throw new GraphQLAnnotationsException(COULD_NOT_PARSE_ARGUMENT_VALUE_TO_ARGUMENT_TYPE, e); } @@ -160,7 +162,7 @@ private void transformArgument(String[] argumentValues, GraphQLDirective.Builder try { Object value = ((GraphQLScalarType) graphQLArgument.getType()).getCoercing().parseValue(argumentValue); - builder.value(value); + builder.value( value ); } catch (Exception e) { throw new GraphQLAnnotationsException(COULD_NOT_PARSE_ARGUMENT_VALUE_TO_ARGUMENT_TYPE, e); } diff --git a/src/test/java/graphql/annotations/GraphQLDataFetcherTest.java b/src/test/java/graphql/annotations/GraphQLDataFetcherTest.java index 233a58df..3b172424 100644 --- a/src/test/java/graphql/annotations/GraphQLDataFetcherTest.java +++ b/src/test/java/graphql/annotations/GraphQLDataFetcherTest.java @@ -22,12 +22,14 @@ import graphql.annotations.processor.GraphQLAnnotations; import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; +import graphql.schema.GraphQLFieldDefinition; import graphql.schema.GraphQLSchema; import graphql.schema.PropertyDataFetcher; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.HashMap; +import java.util.function.Supplier; import static graphql.annotations.AnnotationsSchemaCreator.newAnnotationsSchema; import static org.testng.Assert.*; @@ -161,8 +163,10 @@ public SampleMultiArgDataFetcher(String target, String flip) { } @Override - public Object get(DataFetchingEnvironment environment) { - final Object result = super.get(environment); + public Object get( final GraphQLFieldDefinition fieldDefinition, final Object source, final Supplier supplier ) + throws Exception + { + final Object result = super.get( fieldDefinition, source, supplier ); if (flip) { return !(Boolean) result; } else { diff --git a/src/test/java/graphql/annotations/GraphQLExtensionsTest.java b/src/test/java/graphql/annotations/GraphQLExtensionsTest.java index 6f2f663f..db7e5d0e 100644 --- a/src/test/java/graphql/annotations/GraphQLExtensionsTest.java +++ b/src/test/java/graphql/annotations/GraphQLExtensionsTest.java @@ -117,7 +117,8 @@ public void fields() { public void values() { GraphQLSchema schema = newAnnotationsSchema().query(TestObject.class).typeExtension(TestObjectExtension.class).build(); - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{field field2 field3 field4 field5}", new GraphQLExtensionsTest.TestObject()); + ExecutionResult result = GraphQL.newGraphQL( schema ).build().execute( + GraphQLHelper.createExecutionInput( "{field field2 field3 field4 field5}", new GraphQLExtensionsTest.TestObject() ) ); Map data = result.getData(); assertEquals(data.get("field"), "test"); assertEquals(data.get("field2"), "test test2"); diff --git a/src/test/java/graphql/annotations/GraphQLFragmentTest.java b/src/test/java/graphql/annotations/GraphQLFragmentTest.java index df8c901e..b127bff4 100644 --- a/src/test/java/graphql/annotations/GraphQLFragmentTest.java +++ b/src/test/java/graphql/annotations/GraphQLFragmentTest.java @@ -65,7 +65,7 @@ public void testInterfaceInlineFragment() throws Exception { GraphQL graphQL2 = GraphQL.newGraphQL(schema).build(); // When - ExecutionResult graphQLResult = graphQL2.execute("{getItems { ... on MyObject {getA, getMy {getB}} ... on MyObject2 {getA, getB} }}", new RootObject()); + ExecutionResult graphQLResult = graphQL2.execute(GraphQLHelper.createExecutionInput("{getItems { ... on MyObject {getA, getMy {getB}} ... on MyObject2 {getA, getB} }}", new RootObject())); Set resultMap = ((Map) graphQLResult.getData()).entrySet(); // Then diff --git a/src/test/java/graphql/annotations/GraphQLHelper.java b/src/test/java/graphql/annotations/GraphQLHelper.java new file mode 100644 index 00000000..ededb29b --- /dev/null +++ b/src/test/java/graphql/annotations/GraphQLHelper.java @@ -0,0 +1,37 @@ +/** + * Copyright 2016 Yurii Rashkovskii + * + * 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 + * + * http://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 + */ +package graphql.annotations; + +import java.util.Map; + +import graphql.ExecutionInput; + +public class GraphQLHelper +{ + public static ExecutionInput createExecutionInput( String query, Object context, Map variables ) + { + ExecutionInput.Builder builder = ExecutionInput.newExecutionInput().query( query ).root( context ); + if ( variables != null ) + { + builder.variables( variables ); + } + return builder.build(); + } + + public static ExecutionInput createExecutionInput( String query, Object context ) + { + return createExecutionInput( query, context, null ); + } +} diff --git a/src/test/java/graphql/annotations/GraphQLInputTest.java b/src/test/java/graphql/annotations/GraphQLInputTest.java index 3561a7b0..3a129208 100644 --- a/src/test/java/graphql/annotations/GraphQLInputTest.java +++ b/src/test/java/graphql/annotations/GraphQLInputTest.java @@ -186,7 +186,7 @@ public void query() { .additionalType(TestObject.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ object { value(input:{key:\"test\"}) } }", new Query()); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ object { value(input:{key:\"test\"}) } }", new Query())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map>) result.getData()).get("object").get("value"), "testa"); } @@ -196,7 +196,7 @@ public void queryMultipleDefinitions() { GraphQLSchema schema = newAnnotationsSchema().query(QueryMultipleDefinitions.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ something(code: {firstField:\"a\",secondField:\"b\"}) somethingElse(code: {firstField:\"c\",secondField:\"d\"}) }", new QueryMultipleDefinitions()); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ something(code: {firstField:\"a\",secondField:\"b\"}) somethingElse(code: {firstField:\"c\",secondField:\"d\"}) }", new QueryMultipleDefinitions())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map) result.getData()).get("something"), "ab"); assertEquals(((Map) result.getData()).get("somethingElse"), "cd"); @@ -207,11 +207,11 @@ public void queryWithRecursion() { GraphQLSchema schema = newAnnotationsSchema().query(QueryRecursion.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ object { value(input:{key:\"test\"}) } }", new QueryRecursion()); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ object { value(input:{key:\"test\"}) } }", new QueryRecursion())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map>) result.getData()).get("object").get("value"), "testa"); - result = graphQL.execute("{ object { value(input:{rec:{key:\"test\"}}) } }", new QueryRecursion()); + result = graphQL.execute(GraphQLHelper.createExecutionInput("{ object { value(input:{rec:{key:\"test\"}}) } }", new QueryRecursion())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map>) result.getData()).get("object").get("value"), "rectesta"); } @@ -221,7 +221,7 @@ public void queryWithList() { GraphQLSchema schema = newAnnotationsSchema().query(QueryList.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ object { value(input:[[[{key:\"test\", complex:[{subKey:\"subtest\"},{subKey:\"subtest2\"}]}]]]) } }", new QueryList()); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ object { value(input:[[[{key:\"test\", complex:[{subKey:\"subtest\"},{subKey:\"subtest2\"}]}]]]) } }", new QueryList())); assertEquals(((Map>) result.getData()).get("object").get("value"), "test-subtest"); } @@ -230,7 +230,7 @@ public void queryWithInterface() { GraphQLSchema schema = newAnnotationsSchema().query(QueryIface.class).additionalType(TestObject.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ iface { value(input:{key:\"test\"}) } }", new QueryIface()); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ iface { value(input:{key:\"test\"}) } }", new QueryIface())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map>) result.getData()).get("iface").get("value"), "testa"); } diff --git a/src/test/java/graphql/annotations/GraphQLInterfaceTest.java b/src/test/java/graphql/annotations/GraphQLInterfaceTest.java index 00c0ae57..4dba806d 100644 --- a/src/test/java/graphql/annotations/GraphQLInterfaceTest.java +++ b/src/test/java/graphql/annotations/GraphQLInterfaceTest.java @@ -170,7 +170,7 @@ public void queryUnion() { GraphQLSchema schema = newAnnotationsSchema().query(UnionQuery.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ union { ... on TestObject1 { value } } }", new UnionQuery(new TestObject1())); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ union { ... on TestObject1 { value } } }", new UnionQuery(new TestObject1()))); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map>) result.getData()).get("union").get("value"), "a"); } diff --git a/src/test/java/graphql/annotations/GraphQLObjectTest.java b/src/test/java/graphql/annotations/GraphQLObjectTest.java index 246d3473..0f6f84de 100644 --- a/src/test/java/graphql/annotations/GraphQLObjectTest.java +++ b/src/test/java/graphql/annotations/GraphQLObjectTest.java @@ -333,10 +333,10 @@ public void methodInheritance() { GraphQLSchema schema = newAnnotationsSchema().query(TestObject.class).build(); GraphQLSchema schemaInherited = newAnnotationsSchema().query(TestObjectInherited.class).build(); - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{field0}", new TestObject()); + ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{field0}", new TestObject())); assertEquals(((Map) result.getData()).get("field0"), "test"); GraphQL graphQL = GraphQL.newGraphQL(schemaInherited).build(); - result = graphQL.execute("{field1}", new TestObjectInherited()); + result = graphQL.execute(GraphQLHelper.createExecutionInput("{field1}", new TestObjectInherited())); assertEquals(((Map) result.getData()).get("field1"), "inherited"); } @@ -369,7 +369,7 @@ public String id() { public void methodInheritanceWithGenerics() { GraphQLSchema schema = newAnnotationsSchema().query(TestObjectBridgMethod.class).build(); - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{id}", new TestObjectBridgMethod()); + ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{id}", new TestObjectBridgMethod())); assertEquals(((Map) result.getData()).get("id"), "1"); } @@ -517,7 +517,7 @@ public String someField() { public void dataFetcher() { GraphQLSchema schema = newAnnotationsSchema().query(TestDataFetcher.class).build(); - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{field someField}", new TestObject()); + ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{field someField}", new TestObject())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map) result.getData()).get("field"), "test"); assertEquals(((Map) result.getData()).get("someField"), "test"); @@ -527,15 +527,15 @@ public void dataFetcher() { public void query() { GraphQLSchema schema = newAnnotationsSchema().query(TestObject.class).build(); - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{field0}", new TestObject()); + ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{field0}", new TestObject())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map) result.getData()).get("field0"), "test"); - result = GraphQL.newGraphQL(schema).build().execute("{fieldWithArgs(a: \"test\", b: \"passed\")}", new TestObject()); + result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{fieldWithArgs(a: \"test\", b: \"passed\")}", new TestObject())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map) result.getData()).get("fieldWithArgs"), "passed"); - result = GraphQL.newGraphQL(schema).build().execute("{fieldWithArgsAndEnvironment(a: \"test\", b: \"passed\")}", new TestObject()); + result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{fieldWithArgsAndEnvironment(a: \"test\", b: \"passed\")}", new TestObject())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map) result.getData()).get("fieldWithArgsAndEnvironment"), "test"); @@ -545,7 +545,7 @@ public void query() { public void queryField() { GraphQLSchema schema = newAnnotationsSchema().query(TestField.class).build(); - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{field1}", new TestField()); + ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{field1}", new TestField())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map) result.getData()).get("field1"), "test"); } @@ -554,7 +554,7 @@ public void queryField() { public void queryPrivateField() { GraphQLSchema schema = newAnnotationsSchema().query(PrivateTestField.class).build(); - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{field1, field2, booleanField}", new PrivateTestField()); + ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{field1, field2, booleanField}", new PrivateTestField())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map) result.getData()).get("field1"), "test"); assertEquals(((Map) result.getData()).get("field2"), "test"); @@ -566,7 +566,7 @@ public void queryPrivateField() { public void defaultArg() { GraphQLSchema schema = newAnnotationsSchema().query(TestObject.class).build(); - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{fieldWithArgs(a: \"test\")}", new TestObject()); + ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{fieldWithArgs(a: \"test\")}", new TestObject())); assertTrue(result.getErrors().isEmpty()); assertEquals(((Map) result.getData()).get("fieldWithArgs"), "default"); } @@ -599,18 +599,18 @@ public void recursiveTypes() { class2.value = "hello"; class1.value = "bye"; - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{ class2 { value } }", class1); + ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput( "{ class2 { value } }", class1)); assertTrue(result.getErrors().isEmpty()); Map data = (Map) result.getData(); assertEquals(((Map) data.get("class2")).get("value"), "hello"); - result = GraphQL.newGraphQL(schema).build().execute("{ class2 { class1 { value } } }", class1); + result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{ class2 { class1 { value } } }", class1)); assertTrue(result.getErrors().isEmpty()); data = (Map) result.getData(); Map k1 = (Map) ((Map) data.get("class2")).get("class1"); assertEquals(k1.get("value"), "bye"); - result = GraphQL.newGraphQL(schema).build().execute("{ class2 { class1 { class2 { value } } } }", class1); + result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{ class2 { class1 { class2 { value } } } }", class1)); assertTrue(result.getErrors().isEmpty()); } @@ -698,7 +698,8 @@ public void inputObjectArgument() { assertEquals(argument.getName(), "arg"); GraphQLSchema schema = newAnnotationsSchema().query(TestObjectInput.class).build(); - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{ test( other:0,arg: { a:\"ok\", b:2 }) }", new TestObjectInput()); + ExecutionResult result = GraphQL.newGraphQL( schema ).build().execute( + GraphQLHelper.createExecutionInput( "{ test( other:0,arg: { a:\"ok\", b:2 }) }", new TestObjectInput() ) ); assertTrue(result.getErrors().isEmpty()); Map v = (Map) result.getData(); assertEquals(v.get("test"), "ok"); @@ -712,7 +713,7 @@ public void complexInputObjectArgument() { assertEquals(argument.getName(), "arg"); GraphQLSchema schema = newAnnotationsSchema().query(TestObjectInput.class).build(); - ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{ test2(arg: {inputs:[{ a:\"ok\", b:2 }]}, other:0) }", new TestObjectInput()); + ExecutionResult result = GraphQL.newGraphQL(schema).build().execute(GraphQLHelper.createExecutionInput("{ test2(arg: {inputs:[{ a:\"ok\", b:2 }]}, other:0) }", new TestObjectInput())); assertTrue(result.getErrors().isEmpty()); Map v = result.getData(); assertEquals(v.get("test2"), "ok"); @@ -795,7 +796,7 @@ public void queryOptional() { GraphQLSchema schema = newSchema().query(object).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{empty, nonempty}", new OptionalTest()); + ExecutionResult result = graphQL.execute( GraphQLHelper.createExecutionInput( "{empty, nonempty}", new OptionalTest() ) ); assertTrue(result.getErrors().isEmpty()); Map v = (Map) result.getData(); assertNull(v.get("empty")); @@ -818,7 +819,7 @@ public void optionalInput() { GraphQLSchema schema = newSchema().query(object).mutation(mutation).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("mutation {test(input: {empty: \"test\"}) { empty nonempty } }", new OptionalTest()); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput( "mutation {test(input: {empty: \"test\"}) { empty nonempty } }", new OptionalTest() )); assertTrue(result.getErrors().isEmpty()); Map v = (Map) ((Map) result.getData()).get("test"); assertEquals(v.get("empty"), "test"); @@ -850,7 +851,7 @@ public void queryEnum() { GraphQLSchema schema = newSchema().query(object).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{e}", new EnumTest(EnumTest.E.B)); + ExecutionResult result = graphQL.execute( GraphQLHelper.createExecutionInput( "{e}", new EnumTest( EnumTest.E.B ) ) ); assertTrue(result.getErrors().isEmpty()); Map v = (Map) result.getData(); assertEquals(v.get("e"), "B"); diff --git a/src/test/java/graphql/annotations/RelayTest.java b/src/test/java/graphql/annotations/RelayTest.java index 85874ab8..0d7a2057 100644 --- a/src/test/java/graphql/annotations/RelayTest.java +++ b/src/test/java/graphql/annotations/RelayTest.java @@ -133,7 +133,9 @@ public void noArgMutation() { GraphQL graphQL = GraphQL.newGraphQL(schema).queryExecutionStrategy(new EnhancedExecutionStrategy()).build(); - ExecutionResult result = graphQL.execute("mutation { doSomething(input: {clientMutationId: \"1\"}) { getI clientMutationId } }", new TestObject()); + ExecutionResult result = graphQL.execute( + GraphQLHelper.createExecutionInput( "mutation { doSomething(input: {clientMutationId: \"1\"}) { getI clientMutationId } }", + new TestObject() ) ); assertEquals(result.getErrors().size(), 0); @@ -155,7 +157,9 @@ public void interfaceReturningMutation() { GraphQL graphQL = GraphQL.newGraphQL(schema).queryExecutionStrategy(new EnhancedExecutionStrategy()).build(); - ExecutionResult result = graphQL.execute("mutation { doSomethingI(input: {clientMutationId: \"1\"}) { getI clientMutationId } }", new TestObject()); + ExecutionResult result = graphQL.execute( + GraphQLHelper.createExecutionInput( "mutation { doSomethingI(input: {clientMutationId: \"1\"}) { getI clientMutationId } }", + new TestObject() ) ); assertEquals(result.getErrors().size(), 0); @@ -194,7 +198,8 @@ public void argMutation() { GraphQL graphQL = GraphQL.newGraphQL(schema).queryExecutionStrategy(new EnhancedExecutionStrategy()).build(); - ExecutionResult result = graphQL.execute("mutation { doSomethingElse(input: {a: 0, b: 1, clientMutationId: \"1\"}) { getI clientMutationId } }", new TestObject()); + ExecutionResult result = graphQL.execute( GraphQLHelper.createExecutionInput( + "mutation { doSomethingElse(input: {a: 0, b: 1, clientMutationId: \"1\"}) { getI clientMutationId } }", new TestObject() ) ); assertEquals(result.getErrors().size(), 0); @@ -237,7 +242,10 @@ public void argVariableMutation() { inputVariables.put("b", 1); inputVariables.put("clientMutationId", "1"); variables.put("input", inputVariables); - ExecutionResult result = graphQL.execute("mutation VariableMutation($input:DoSomethingElseInput!) { doSomethingElse(input: $input) { getI clientMutationId } }", new TestObject(), variables); + + ExecutionResult result = graphQL.execute( GraphQLHelper.createExecutionInput( + "mutation VariableMutation($input:DoSomethingElseInput!) { doSomethingElse(input: $input) { getI clientMutationId } }", + new TestObject(), variables ) ); assertEquals(result.getErrors().size(), 0); diff --git a/src/test/java/graphql/annotations/connection/GraphQLConnectionTest.java b/src/test/java/graphql/annotations/connection/GraphQLConnectionTest.java index ec1ebd57..fe6ce274 100644 --- a/src/test/java/graphql/annotations/connection/GraphQLConnectionTest.java +++ b/src/test/java/graphql/annotations/connection/GraphQLConnectionTest.java @@ -14,6 +14,7 @@ import graphql.ExecutionResult; import graphql.GraphQL; +import graphql.annotations.GraphQLHelper; import graphql.annotations.annotationTypes.GraphQLField; import graphql.annotations.annotationTypes.GraphQLName; import graphql.annotations.annotationTypes.GraphQLNonNull; @@ -135,8 +136,9 @@ public void fieldList() { GraphQLSchema schema = newSchema().query(object).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ objs(first: 1) { edges { cursor node { id, val } } } }", - new TestListField(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world")))); + ExecutionResult result = graphQL.execute( + GraphQLHelper.createExecutionInput( "{ objs(first: 1) { edges { cursor node { id, val } } } }", + new TestListField(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world"))))); } @Test @@ -144,8 +146,8 @@ public void methodList() { GraphQLSchema schema = newAnnotationsSchema().query(TestConnections.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ getObjs(first: 1) { edges { cursor node { id, val } } } }", - new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world")))); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ getObjs(first: 1) { edges { cursor node { id, val } } } }", + new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world"))))); assertTrue(result.getErrors().isEmpty()); @@ -186,8 +188,8 @@ public void methodStream() { GraphQLSchema schema = newAnnotationsSchema().query(TestConnections.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ getObjStream(first: 1) { edges { cursor node { id, val } } } }", - new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world")))); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ getObjStream(first: 1) { edges { cursor node { id, val } } } }", + new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world"))))); assertTrue(result.getErrors().isEmpty()); @@ -199,8 +201,8 @@ public void methodNonNull() { GraphQLSchema schema = newAnnotationsSchema().query(TestConnections.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ getNonNullObjs(first: 1) { edges { cursor node { id, val } } } }", - new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world")))); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ getNonNullObjs(first: 1) { edges { cursor node { id, val } } } }", + new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world"))))); assertTrue(result.getErrors().isEmpty()); @@ -212,8 +214,8 @@ public void methodDoubleNonNull() { GraphQLSchema schema = newAnnotationsSchema().query(TestConnections.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ getDoubleNonNullObjs(first: 1) { edges { cursor node { id, val } } } }", - new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world")))); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ getDoubleNonNullObjs(first: 1) { edges { cursor node { id, val } } } }", + new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world"))))); assertTrue(result.getErrors().isEmpty()); @@ -225,8 +227,8 @@ public void methodNull() { GraphQLSchema schema = newAnnotationsSchema().query(TestConnections.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ getNullObj(first: 1) { edges { cursor node { id, val } } } }", - new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world")))); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ getNullObj(first: 1) { edges { cursor node { id, val } } } }", + new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world"))))); assertTrue(result.getErrors().isEmpty()); @@ -240,8 +242,8 @@ public void emptyListData() { GraphQLSchema schema = newAnnotationsSchema().query(TestConnections.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ getObjStreamWithParam(first: 1, filter:\"hel\") { edges { cursor node { id, val } } } }", - new TestConnections(emptyList())); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ getObjStreamWithParam(first: 1, filter:\"hel\") { edges { cursor node { id, val } } } }", + new TestConnections(emptyList()))); assertTrue(result.getErrors().isEmpty()); Map>>>> data = result.getData(); @@ -255,8 +257,8 @@ public void methodListWithParam() { GraphQLSchema schema = newAnnotationsSchema().query(TestConnections.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ getObjStreamWithParam(first: 2, filter:\"hel\") { edges { cursor node { id, val } } } }", - new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world"), new Obj("4", "hello world"), new Obj("5", "hello again")))); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ getObjStreamWithParam(first: 2, filter:\"hel\") { edges { cursor node { id, val } } } }", + new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world"), new Obj("4", "hello world"), new Obj("5", "hello again"))))); assertTrue(result.getErrors().isEmpty()); @@ -306,8 +308,8 @@ public void customConnection() { GraphQLSchema schema = newAnnotationsSchema().query(TestCustomConnection.class).build(); GraphQL graphQL = GraphQL.newGraphQL(schema).build(); - ExecutionResult result = graphQL.execute("{ getObjs(first: 1) { edges { cursor node { id, val } } } }", - new TestCustomConnection(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world")))); + ExecutionResult result = graphQL.execute(GraphQLHelper.createExecutionInput("{ getObjs(first: 1) { edges { cursor node { id, val } } } }", + new TestCustomConnection(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world"))))); assertTrue(result.getErrors().isEmpty()); Map data = result.getData(); From bdf9eb1e5a7042ba9d97b433b03446c4929ad699 Mon Sep 17 00:00:00 2001 From: em Date: Tue, 13 Jun 2023 22:37:20 +0200 Subject: [PATCH 07/17] Updated extended scalars to 20.2Add release readme --- README.release.md | 7 +++++++ build.gradle | 2 +- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 61608 -> 62076 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 7 ++++--- 6 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 README.release.md diff --git a/README.release.md b/README.release.md new file mode 100644 index 00000000..2aa7f194 --- /dev/null +++ b/README.release.md @@ -0,0 +1,7 @@ +## Release + +```bash +# adjust the version +vim gradle.properties +./gradlew publish +```` diff --git a/build.gradle b/build.gradle index ca451feb..d2bc9fdb 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,7 @@ gradle.projectsEvaluated { dependencies { implementation 'javax.validation:validation-api:2.0.1.Final' implementation 'com.graphql-java:graphql-java:20.3' - implementation 'com.graphql-java:graphql-java-extended-scalars:19.1' + implementation 'com.graphql-java:graphql-java-extended-scalars:20.2' implementation 'javax.xml.bind:jaxb-api:2.3.1' // OSGi diff --git a/gradle.properties b/gradle.properties index 3db03507..2c9646a0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ org.gradle.daemon=true org.gradle.parallel=true org.gradle.jvmargs=-Dfile.encoding=UTF-8 -version = 10.0 +version = 20.3.0-kw1 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index ccebba7710deaf9f98673a68957ea02138b60d0a..c1962a79e29d3e0ab67b14947c167a862655af9b 100644 GIT binary patch delta 8979 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 F{TFmrHLU;u delta 8469 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 Date: Tue, 13 Jun 2023 22:45:08 +0200 Subject: [PATCH 08/17] Update README --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb5d082c..7cc5c0e9 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,13 @@ syntax for GraphQL schema definition. If you would like to use a tool that creates a graphql spring boot server using graphql-java-annotations, you can view the [graphql-spring-annotations](https://github.com/yarinvak/graphql-spring-annotations) library. +## Forked to ... + +- Upgrade graphql java (20.3) +- Update build tools and dependencies in general +- Fix `id` to allow to be of any type, since this is the GraphQL specsq + +Yet this package is not published anywhere. Let us know if that is interesting to anybody. ## Table Of Contents - [Getting Started](#getting-started) @@ -37,7 +44,7 @@ If you would like to use a tool that creates a graphql spring boot server using ```groovy dependencies { - compile "io.github.graphql-java:graphql-java-annotations:9.1" + compile "io.github.graphql-java:graphql-java-annotations:20.3.0-kw1" } ``` @@ -47,7 +54,7 @@ dependencies { io.github.graphql-java graphql-java-annotations - 9.1 + 20.3.0-kw1 ``` From 5b81a0a6a3b69feab8f8d58698d1689c3415a5c2 Mon Sep 17 00:00:00 2001 From: em Date: Sun, 2 Jul 2023 12:31:28 +0200 Subject: [PATCH 09/17] Upgrade gql to 20.4 --- build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index d2bc9fdb..202de21e 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,9 @@ gradle.projectsEvaluated { dependencies { implementation 'javax.validation:validation-api:2.0.1.Final' - implementation 'com.graphql-java:graphql-java:20.3' + // @see https://mvnrepository.com/artifact/com.graphql-java/graphql-java + implementation 'com.graphql-java:graphql-java:20.4' + // @see https://mvnrepository.com/artifact/com.graphql-java/graphql-java-extended-scalars implementation 'com.graphql-java:graphql-java-extended-scalars:20.2' implementation 'javax.xml.bind:jaxb-api:2.3.1' From 8bc33752ca38eddc06df2db42c4698997c7675dd Mon Sep 17 00:00:00 2001 From: tm Date: Mon, 24 Jul 2023 10:38:12 +0200 Subject: [PATCH 10/17] Increase targets for GraphQLID --- .../java/graphql/annotations/annotationTypes/GraphQLID.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/graphql/annotations/annotationTypes/GraphQLID.java b/src/main/java/graphql/annotations/annotationTypes/GraphQLID.java index 99f3d3cc..de989164 100644 --- a/src/main/java/graphql/annotations/annotationTypes/GraphQLID.java +++ b/src/main/java/graphql/annotations/annotationTypes/GraphQLID.java @@ -19,7 +19,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target({ElementType.TYPE_USE}) +@Target({ElementType.FIELD, ElementType.TYPE_USE, ElementType.METHOD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface GraphQLID { boolean value() default true; From 2afb8415fe79bf33a7dc7b804359aa0a54299689 Mon Sep 17 00:00:00 2001 From: em Date: Mon, 24 Jul 2023 11:31:21 +0200 Subject: [PATCH 11/17] release 20.4.0-kw2 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2c9646a0..0595c729 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ org.gradle.daemon=true org.gradle.parallel=true org.gradle.jvmargs=-Dfile.encoding=UTF-8 -version = 20.3.0-kw1 +version = 20.4.0-kw2 From c6b33c6bf765c2e4f7762f430e7d0b5f60f7dc67 Mon Sep 17 00:00:00 2001 From: em Date: Mon, 24 Jul 2023 15:51:36 +0200 Subject: [PATCH 12/17] Revert "Increase targets for GraphQLID" This reverts commit 8bc33752ca38eddc06df2db42c4698997c7675dd. --- .../java/graphql/annotations/annotationTypes/GraphQLID.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/graphql/annotations/annotationTypes/GraphQLID.java b/src/main/java/graphql/annotations/annotationTypes/GraphQLID.java index de989164..99f3d3cc 100644 --- a/src/main/java/graphql/annotations/annotationTypes/GraphQLID.java +++ b/src/main/java/graphql/annotations/annotationTypes/GraphQLID.java @@ -19,7 +19,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target({ElementType.FIELD, ElementType.TYPE_USE, ElementType.METHOD, ElementType.PARAMETER}) +@Target({ElementType.TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) public @interface GraphQLID { boolean value() default true; From 7588317f8ba6ea5448587417b420b548e79442d3 Mon Sep 17 00:00:00 2001 From: em Date: Mon, 24 Jul 2023 15:57:07 +0200 Subject: [PATCH 13/17] Revert GraphqlId annotation target changes --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 0595c729..09f1d534 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ org.gradle.daemon=true org.gradle.parallel=true org.gradle.jvmargs=-Dfile.encoding=UTF-8 -version = 20.4.0-kw2 +version = 20.4.0-kw3 From 2b98e08635b734dbadea84e08492c58fbc1e7d74 Mon Sep 17 00:00:00 2001 From: Eugen Mayer <136934+EugenMayer@users.noreply.github.com> Date: Thu, 9 Nov 2023 11:47:17 +0100 Subject: [PATCH 14/17] Update to graphql-java 21.3 Also update gradle and fix builds --- .github/workflows/publish.yml | 30 ------------ .github/workflows/{build.yml => test.yml} | 4 +- build.gradle | 53 ++++++++-------------- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 62076 -> 63721 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 22 +++++---- 7 files changed, 37 insertions(+), 77 deletions(-) delete mode 100644 .github/workflows/publish.yml rename .github/workflows/{build.yml => test.yml} (93%) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 1c95dac5..00000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,30 +0,0 @@ -# This workflow will build a Java project with Gradle -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle - -name: Publish - -on: - workflow_dispatch: - branches: [ master ] - -jobs: - publish: - runs-on: ubuntu-latest - environment: prod - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 17 - uses: actions/setup-java@v2 - with: - java-version: '17' - distribution: 'temurin' - - name: Grant execute permission for gradlew - run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew build - - name: Publish with Gradle - run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository - env: - MAVEN_CENTRAL_USER: ${{ secrets.MAVEN_CENTRAL_USER }} - MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} - MAVEN_CENTRAL_PGP_KEY: ${{ secrets.MAVEN_CENTRAL_PGP_KEY }} diff --git a/.github/workflows/build.yml b/.github/workflows/test.yml similarity index 93% rename from .github/workflows/build.yml rename to .github/workflows/test.yml index eada7e4a..141f01d6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/test.yml @@ -3,7 +3,7 @@ name: Build -on: [push, pull_request] +on: push jobs: build: @@ -18,7 +18,7 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle - run: ./gradlew build + run: ./gradlew test - name: Publish Test Report uses: mikepenz/action-junit-report@v2 if: always() # always run even if the previous step fails diff --git a/build.gradle b/build.gradle index 202de21e..19edfc90 100644 --- a/build.gradle +++ b/build.gradle @@ -42,9 +42,9 @@ gradle.projectsEvaluated { dependencies { implementation 'javax.validation:validation-api:2.0.1.Final' // @see https://mvnrepository.com/artifact/com.graphql-java/graphql-java - implementation 'com.graphql-java:graphql-java:20.4' + implementation 'com.graphql-java:graphql-java:21.3' // @see https://mvnrepository.com/artifact/com.graphql-java/graphql-java-extended-scalars - implementation 'com.graphql-java:graphql-java-extended-scalars:20.2' + implementation 'com.graphql-java:graphql-java-extended-scalars:21.0' implementation 'javax.xml.bind:jaxb-api:2.3.1' // OSGi @@ -53,10 +53,10 @@ dependencies { compileOnly 'org.osgi:org.osgi.service.component:1.5.1' compileOnly 'biz.aQute.bnd:biz.aQute.bndlib:3.5.0' - testImplementation 'org.testng:testng:7.7.1' + testImplementation 'org.testng:testng:7.8.0' + // @see https://mvnrepository.com/artifact/org.hamcrest/hamcrest-all testImplementation 'org.hamcrest:hamcrest-all:1.3' - // FIXME: do not upgrade to 5.x yet, bytebuddy issues - testImplementation 'org.mockito:mockito-core:4.11.0' + testImplementation 'org.mockito:mockito-core:5.6.0' } test.useTestNG() @@ -78,13 +78,13 @@ publishing { resolveStrategy = Closure.DELEGATE_FIRST name 'graphql-java-annotations' description 'Annotations-based syntax for GraphQL schema definition' - url 'https://github.com/graphql-java/graphql-java-annotations' - inceptionYear '2016' + url 'https://github.com/KontextWork/graphql-java-annotations' + inceptionYear '2022' scm { - url 'https://github.com/graphql-java/graphql-java-annotations' - connection 'scm:https://yrashk@github.com/graphql-java/graphql-java-annotations.git' - developerConnection 'scm:git://github.com/graphql-java/graphql-java-annotations.git' + url 'https://github.com/KontextWork/graphql-java-annotations' + connection 'scm:https://github.com/KontextWork/graphql-java-annotations.git' + developerConnection 'scm:git://github.com/KontextWork/graphql-java-annotations.git' } licenses { @@ -97,32 +97,14 @@ publishing { developers { developer { - id 'yrashk' - name 'Yurii Rashkovskii' - email 'yrashk@gmail.com' + id 'tm' + name 'Thomas M.' + email 'tm@donotbugme.com' } developer { - id 'apottere' - name 'Andrew Potter' - email 'Andrew.Potter@coxautoinc.com' - } - developer { - id 'bbakerman' - name 'Brad Baker' - email 'bbakerman@gmail.com' - } - developer { - id 'yarinvak' - name 'Yarin Vaknin' - email 'yarinvak@gmail.com' - } - developer { - id 'guy120494' - name 'Guy Smorodinsky' - } - developer { - id 'osher-sade' - name 'Osher Sade' + id 'em' + name 'Eugen Mayer' + email 'em@donotbugme.com' } } } @@ -131,6 +113,9 @@ publishing { } } +def ourNexusAuthorUser = project.findProperty('ourNexusAuthorUser') ?: '' +def ourNexusAuthorPassword = project.findProperty('ourNexusAuthorPassword') ?: '' + publishing { repositories { maven { diff --git a/gradle.properties b/gradle.properties index 09f1d534..dc07fdc7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ org.gradle.daemon=true org.gradle.parallel=true org.gradle.jvmargs=-Dfile.encoding=UTF-8 -version = 20.4.0-kw3 +version = 21.3.0-kw1 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index c1962a79e29d3e0ab67b14947c167a862655af9b..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 37652 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 delta 36122 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 Ac-xW1# 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 Q>rd#Eb%7 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 37aef8d3..3fa8f862 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index aeb74cbb..1aa94a42 100755 --- a/gradlew +++ b/gradlew @@ -83,7 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -130,10 +131,13 @@ 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. + if ! command -v java >/dev/null 2>&1 + then + 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 fi # Increase the maximum file descriptors if we can. @@ -141,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -149,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -198,11 +202,11 @@ fi # 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"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ From 5e6403f1ab3356c275b041ddb302d7ad1a76a399 Mon Sep 17 00:00:00 2001 From: em Date: Thu, 9 Nov 2023 11:59:05 +0100 Subject: [PATCH 15/17] Fix publish variables --- build.gradle | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 19edfc90..f78a43c3 100644 --- a/build.gradle +++ b/build.gradle @@ -113,8 +113,6 @@ publishing { } } -def ourNexusAuthorUser = project.findProperty('ourNexusAuthorUser') ?: '' -def ourNexusAuthorPassword = project.findProperty('ourNexusAuthorPassword') ?: '' publishing { repositories { @@ -122,9 +120,11 @@ publishing { def releasesRepoUrl = "https://nexus.kw.kontextwork.com/repository/kw-maven-release" def snapshotsRepoUrl = "https://nexus.kw.kontextwork.com/repository/kw-maven-snapshots" url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - credentials(PasswordCredentials) { - username "$ourNexusAuthorUser" - password "$ourNexusAuthorPassword" + if(project.hasProperty("ourNexusAuthorUser") || ext.ourNexusAuthorUser != "") { + credentials(PasswordCredentials) { + username "$ourNexusAuthorUser" + password "$ourNexusAuthorPassword" + } } } } From 7b7d19f2b0e315ca14951d24c388510043e0ad9e Mon Sep 17 00:00:00 2001 From: em Date: Thu, 9 Nov 2023 11:59:54 +0100 Subject: [PATCH 16/17] Finalize release docs --- README.release.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.release.md b/README.release.md index 2aa7f194..3a0c8952 100644 --- a/README.release.md +++ b/README.release.md @@ -4,4 +4,6 @@ # adjust the version vim gradle.properties ./gradlew publish +git tag $youversion +git push --tags ```` From b24f7ac836b372bab0016c51545bb70b779c831a Mon Sep 17 00:00:00 2001 From: em Date: Thu, 9 Nov 2023 12:00:57 +0100 Subject: [PATCH 17/17] Use property only --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f78a43c3..b5b6d9e2 100644 --- a/build.gradle +++ b/build.gradle @@ -120,7 +120,7 @@ publishing { def releasesRepoUrl = "https://nexus.kw.kontextwork.com/repository/kw-maven-release" def snapshotsRepoUrl = "https://nexus.kw.kontextwork.com/repository/kw-maven-snapshots" url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - if(project.hasProperty("ourNexusAuthorUser") || ext.ourNexusAuthorUser != "") { + if(project.hasProperty("ourNexusAuthorUser")) { credentials(PasswordCredentials) { username "$ourNexusAuthorUser" password "$ourNexusAuthorPassword"