diff --git a/.gradle/4.4/fileChanges/last-build.bin b/.gradle/4.4/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/.gradle/4.4/fileChanges/last-build.bin differ diff --git a/.gradle/4.4/fileHashes/fileHashes.bin b/.gradle/4.4/fileHashes/fileHashes.bin new file mode 100644 index 0000000..739f5d5 Binary files /dev/null and b/.gradle/4.4/fileHashes/fileHashes.bin differ diff --git a/.gradle/4.4/fileHashes/fileHashes.lock b/.gradle/4.4/fileHashes/fileHashes.lock new file mode 100644 index 0000000..bda7d79 Binary files /dev/null and b/.gradle/4.4/fileHashes/fileHashes.lock differ diff --git a/.gradle/4.4/fileHashes/resourceHashesCache.bin b/.gradle/4.4/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..6a5a20c Binary files /dev/null and b/.gradle/4.4/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/4.4/taskHistory/taskHistory.bin b/.gradle/4.4/taskHistory/taskHistory.bin new file mode 100644 index 0000000..a353e20 Binary files /dev/null and b/.gradle/4.4/taskHistory/taskHistory.bin differ diff --git a/.gradle/4.4/taskHistory/taskHistory.lock b/.gradle/4.4/taskHistory/taskHistory.lock new file mode 100644 index 0000000..c27cacf Binary files /dev/null and b/.gradle/4.4/taskHistory/taskHistory.lock differ diff --git a/.gradle/4.5.1/fileChanges/last-build.bin b/.gradle/4.5.1/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/.gradle/4.5.1/fileChanges/last-build.bin differ diff --git a/.gradle/4.5.1/fileContent/annotation-processors.bin b/.gradle/4.5.1/fileContent/annotation-processors.bin new file mode 100644 index 0000000..63776df Binary files /dev/null and b/.gradle/4.5.1/fileContent/annotation-processors.bin differ diff --git a/.gradle/4.5.1/fileContent/fileContent.lock b/.gradle/4.5.1/fileContent/fileContent.lock new file mode 100644 index 0000000..22930c8 Binary files /dev/null and b/.gradle/4.5.1/fileContent/fileContent.lock differ diff --git a/.gradle/4.5.1/fileHashes/fileHashes.bin b/.gradle/4.5.1/fileHashes/fileHashes.bin new file mode 100644 index 0000000..68d67ea Binary files /dev/null and b/.gradle/4.5.1/fileHashes/fileHashes.bin differ diff --git a/.gradle/4.5.1/fileHashes/fileHashes.lock b/.gradle/4.5.1/fileHashes/fileHashes.lock new file mode 100644 index 0000000..6cfcf33 Binary files /dev/null and b/.gradle/4.5.1/fileHashes/fileHashes.lock differ diff --git a/.gradle/4.5.1/fileHashes/resourceHashesCache.bin b/.gradle/4.5.1/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..0eb7643 Binary files /dev/null and b/.gradle/4.5.1/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/4.5.1/taskHistory/taskHistory.bin b/.gradle/4.5.1/taskHistory/taskHistory.bin new file mode 100644 index 0000000..fb1cae7 Binary files /dev/null and b/.gradle/4.5.1/taskHistory/taskHistory.bin differ diff --git a/.gradle/4.5.1/taskHistory/taskHistory.lock b/.gradle/4.5.1/taskHistory/taskHistory.lock new file mode 100644 index 0000000..cbfac9e Binary files /dev/null and b/.gradle/4.5.1/taskHistory/taskHistory.lock differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000..144ede6 Binary files /dev/null and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..97980f2 --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Thu Jun 21 16:37:18 IST 2018 +gradle.version=4.5.1 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000..7d8cf92 Binary files /dev/null and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/.gradle/vcsWorkingDirs/gc.properties b/.gradle/vcsWorkingDirs/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..e166d8b --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..5a53fe4 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4b661a5 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..18444a5 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,1139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1529591189043 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No facets are configured + + + + + + + + groovy-2.5.0 + + + + + + + + 1.8 + + + + + + + + swaggerhub-gradle-plugin + + + + + + + + 1.8 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..10b60ee --- /dev/null +++ b/build.gradle @@ -0,0 +1,151 @@ +// * * * * * * * * * * * * +// Plugins +// * * * * * * * * * * * * + +plugins { + id 'groovy' + id 'java-gradle-plugin' + + // Publishing publicly + id 'com.gradle.plugin-publish' version '0.9.10' + + // Publishing to Artifactory + id 'maven-publish' +} + +// * * * * * * * * * * * * +// Dependencies +// * * * * * * * * * * * * + +repositories { + jcenter() +} + +dependencies { + compile gradleApi() + compile group: 'com.squareup.okhttp', name: 'okhttp', version:'2.7.5' + compile group: 'org.apache.commons', name: 'commons-lang3', version:'3.7' + testCompile group: 'com.github.tomakehurst', name: 'wiremock', version:'2.14.0' + testCompile gradleTestKit() + testCompile 'junit:junit:4+' + testCompile group: 'io.swagger', name: 'swagger-parser', version:'1.0.34' + +} + +// * * * * * * * * * * * * +// Project configuration +// * * * * * * * * * * * * + +project.description = 'Gradle Plugin for SwaggerHub' +project.group = 'io.github.jsfrench' +project.version = '1.0.0-SNAPSHOT' + +project.ext.name = 'swaggerhub' +project.ext.pluginId = 'com.praqma.demo.DemoPlugin' +project.ext.scm = 'scm:git@github.com:jsfrench/swaggerhub-gradle-plugin.git' +project.ext.url = 'https://github.com/jsfrench/swaggerhub-gradle-plugin' + +// Configuration for: java-gradle-plugin +gradlePlugin { + plugins { + demoPlugin { + id = project.pluginId + implementationClass = 'com.praqma.demo.DemoPlugin' + } + } +} + +// Configuration for: java-gradle-plugin +//gradlePlugin { +// plugins { +// demoPlugin { +// id = project.pluginId +// implementationClass = 'io.github.jsfrench.swaggerhub.SwaggerHubPlugin' +// } +// } +//} + +// * * * * * * * * * * * * +// Publishing +// * * * * * * * * * * * * + +// Consult the accompanied blog post for information on publishing the plugin. +// https://www.praqma.com/stories/gradle-plugin-bootstrap/ + +// Publishing to plugins.gradle.org +// -------------------------------- + +// Configuration for: com.gradle.plugin-publish +pluginBundle { + website = project.url + vcsUrl = project.scm + tags = ['demo', 'example', 'quickstart'] + + plugins { + demoPlugin { + displayName = 'Demo Custom Gradle Plugin ' + description = project.description + id = project.pluginId + } + } +} + +// Publishing to Artifactory +// ------------------------- + +// Configures the publication to push, and the repository to push to +publishing { + publications { + pluginPublication (MavenPublication) { + from components.java + groupId project.group + artifactId project.name + version project.version + } + } + repositories { + maven { + url project.rtfUrl + credentials { + username project.rtfUser + password project.rtfSecret + } + } + } +} + + +// ##### ORIGINAL ####### +//apply plugin: 'idea' +//apply plugin: 'java' +//apply plugin: 'maven-publish' +//apply plugin: 'io.swagger.swaggerhub.plugin.SwaggerHubPlugin' +// +//group = 'io.github.jsfrench' +//version = '1.0.0-SNAPSHOT' + +//description = """SwaggerHub Gradle Plugin""" + +//sourceCompatibility = 1.8 +//targetCompatibility = 1.8 +//tasks.withType(JavaCompile) { +// options.encoding = 'UTF-8' +//} +// +//configurations.all { +//} +//repositories { +// mavenCentral() +//} + + + +//// https://docs.gradle.org/current/userguide/java_gradle_plugin.html#plugins-tutorials +//gradlePlugin { +// plugins { +// simplePlugin { +// id = 'org.gradle.sample.simple-plugin' +// implementationClass = 'org.gradle.sample.SimplePlugin' +// } +// } +//} \ No newline at end of file diff --git a/build/pluginDescriptors/com.praqma.demo.DemoPlugin.properties b/build/pluginDescriptors/com.praqma.demo.DemoPlugin.properties new file mode 100644 index 0000000..a3adfc0 --- /dev/null +++ b/build/pluginDescriptors/com.praqma.demo.DemoPlugin.properties @@ -0,0 +1 @@ +implementation-class=com.praqma.demo.DemoPlugin diff --git a/build/publications/demoPluginPluginMarkerMaven/pom-default.xml b/build/publications/demoPluginPluginMarkerMaven/pom-default.xml new file mode 100644 index 0000000..4bd53e6 --- /dev/null +++ b/build/publications/demoPluginPluginMarkerMaven/pom-default.xml @@ -0,0 +1,15 @@ + + + 4.0.0 + com.praqma.demo.DemoPlugin + com.praqma.demo.DemoPlugin.gradle.plugin + 1.0.0-SNAPSHOT + pom + + + io.github.jsfrench + demo + 1.0.0-SNAPSHOT + + + diff --git a/build/publications/pluginMaven/pom-default.xml b/build/publications/pluginMaven/pom-default.xml new file mode 100644 index 0000000..82f21ba --- /dev/null +++ b/build/publications/pluginMaven/pom-default.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + io.github.jsfrench + demo + 1.0.0-SNAPSHOT + + + com.squareup.okhttp + okhttp + 2.7.5 + compile + + + org.apache.commons + commons-lang3 + 3.7 + compile + + + diff --git a/build/publications/pluginPublication/pom-default.xml b/build/publications/pluginPublication/pom-default.xml new file mode 100644 index 0000000..82f21ba --- /dev/null +++ b/build/publications/pluginPublication/pom-default.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + io.github.jsfrench + demo + 1.0.0-SNAPSHOT + + + com.squareup.okhttp + okhttp + 2.7.5 + compile + + + org.apache.commons + commons-lang3 + 3.7 + compile + + + diff --git a/build/resources/main/META-INF/gradle-plugins/com.praqma.demo.DemoPlugin.properties b/build/resources/main/META-INF/gradle-plugins/com.praqma.demo.DemoPlugin.properties new file mode 100644 index 0000000..a3adfc0 --- /dev/null +++ b/build/resources/main/META-INF/gradle-plugins/com.praqma.demo.DemoPlugin.properties @@ -0,0 +1 @@ +implementation-class=com.praqma.demo.DemoPlugin diff --git a/build/resources/main/META-INF/gradle-plugins/io.swagger.swaggerhub.plugin.properties b/build/resources/main/META-INF/gradle-plugins/io.swagger.swaggerhub.plugin.properties new file mode 100644 index 0000000..957d224 --- /dev/null +++ b/build/resources/main/META-INF/gradle-plugins/io.swagger.swaggerhub.plugin.properties @@ -0,0 +1 @@ +implementation-class=io.github.jsfrench.swaggerhub.SwaggerHubUpload diff --git a/build/tmp/jar/MANIFEST.MF b/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..f898e0f --- /dev/null +++ b/gradle.properties @@ -0,0 +1,10 @@ +# Artifactory server and repository +# --------------------------------- +rtfUrl=http\://devops.acmeindustries.com\:8080/artifactory/plugins-release + +# Artifactory credential placeholders +# ----------------------------------- +# Please do not store credentials in the version controlled build.gradle file +# Inject them as environment variables or add them in your user Gradle properties (~/.gradle/gradle.properties) +rtfUser= +rtfSecret= \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..b426bfe --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Jun 21 16:50:21 IST 2018 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..cccdd3d --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## 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="" + +# 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 + ;; + 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, switch paths to Windows format before running java +if $cygwin ; 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=$((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" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..e95643d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@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 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= + +@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 init + +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 init + +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 + +: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% + +: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/out/production/classes/META-INF/gradle-plugins/io.swagger.swaggerhub.plugin.properties b/out/production/classes/META-INF/gradle-plugins/io.swagger.swaggerhub.plugin.properties new file mode 100644 index 0000000..957d224 --- /dev/null +++ b/out/production/classes/META-INF/gradle-plugins/io.swagger.swaggerhub.plugin.properties @@ -0,0 +1 @@ +implementation-class=io.github.jsfrench.swaggerhub.SwaggerHubUpload diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..0a383dd --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'demo' diff --git a/src/main/groovy/com/praqma/demo/DemoPlugin.groovy b/src/main/groovy/com/praqma/demo/DemoPlugin.groovy new file mode 100644 index 0000000..569652a --- /dev/null +++ b/src/main/groovy/com/praqma/demo/DemoPlugin.groovy @@ -0,0 +1,22 @@ +package com.praqma.demo + +import com.praqma.demo.greeting.GreetingModule +import org.gradle.api.Plugin +import org.gradle.api.Project + +/** + * The plugin's entry point. + * Reference: + * https://docs.gradle.org/4.6/userguide/custom_plugins.html#sec:writing_a_simple_plugin + */ +public class DemoPlugin implements Plugin{ + + /** + * Applies this plugin to the given Gradle project + * @param project The Gradle project + */ + void apply(Project project) { + // Apply all functionality from the GreetingModule + GreetingModule.load(project) + } +} diff --git a/src/main/groovy/com/praqma/demo/greeting/GreetingExtension.groovy b/src/main/groovy/com/praqma/demo/greeting/GreetingExtension.groovy new file mode 100644 index 0000000..7a022a1 --- /dev/null +++ b/src/main/groovy/com/praqma/demo/greeting/GreetingExtension.groovy @@ -0,0 +1,11 @@ +package com.praqma.demo.greeting + +/** + * An extension object for the Greeting module + * + * Reference: + * https://docs.gradle.org/4.6/userguide/custom_plugins.html#sec:getting_input_from_the_build + */ +class GreetingExtension { + String alternativeGreeting +} diff --git a/src/main/groovy/com/praqma/demo/greeting/GreetingModule.groovy b/src/main/groovy/com/praqma/demo/greeting/GreetingModule.groovy new file mode 100644 index 0000000..b4947b0 --- /dev/null +++ b/src/main/groovy/com/praqma/demo/greeting/GreetingModule.groovy @@ -0,0 +1,56 @@ +package com.praqma.demo.greeting + +import org.gradle.api.Project + +/** + * The "module" isn't anything Gradle specific. + * It's just a way of grouping tasks and configuration that share a certain theme. + * The module's "load" method is called in the plugin's entry point at {@link com.praqma.demo.DemoPlugin} + */ +class GreetingModule { + static void load(Project project) { + /* + * Register a 'greeting' extension, with the properties defined in GreetingExtension + * Reference: + * https://docs.gradle.org/4.6/userguide/custom_plugins.html#sec:getting_input_from_the_build + */ + project.extensions.create("greeting", GreetingExtension) + + /* + * Clever trick so users don't have to reference a custom task class by its fully qualified name. + * Reference: + * https://discuss.gradle.org/t/how-to-create-custom-gradle-task-type-and-not-have-to-specify-full-path-to-type-in-build-gradle/6059/4 + */ + project.ext.GreetingTask = GreetingTask + + /* + * A task that uses an extension for configuration. + * Reference: + * https://docs.gradle.org/4.6/userguide/custom_plugins.html#sec:getting_input_from_the_build + */ + project.task('helloWorld') { + group = "Greeting" + description = "Greets the world. Greeting configured in the 'greeting' extension." + + doLast { + String greeting = project.extensions.greeting.alternativeGreeting ?: "Hello" + println "$greeting, world!" + } + } + + /* + * A task using a project property for configuration. + * Reference: + * https://docs.gradle.org/4.6/userguide/build_environment.html#sec:gradle_configuration_properties + */ + project.task('helloTarget') { + group = "Greeting" + description = "Greets the user. Target configured through properties." + + doLast { + String target = project.findProperty("target") ?: "default-user" + println "Hello, $target!" + } + } + } +} diff --git a/src/main/groovy/com/praqma/demo/greeting/GreetingTask.groovy b/src/main/groovy/com/praqma/demo/greeting/GreetingTask.groovy new file mode 100644 index 0000000..3462e78 --- /dev/null +++ b/src/main/groovy/com/praqma/demo/greeting/GreetingTask.groovy @@ -0,0 +1,28 @@ +package com.praqma.demo.greeting + +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.TaskAction + +/** + * A custom task type, allows projects to create tasks of type 'GreetingTask' + * Reference: + * https://docs.gradle.org/4.6/userguide/more_about_tasks.html#sec:task_input_output_annotations + */ +class GreetingTask extends DefaultTask { + @Internal + String message = "Hello" + + @Internal + String target = "World" + + @TaskAction + void greet() { + if (message.toLowerCase(Locale.ROOT).contains("bye")) { + throw new GradleException("I can't let you do that, Starfox.") + } + + println "${message}, ${target}!" + } +} diff --git a/src/main/java/io/github/jsfrench/swaggerhub/Greeting.java b/src/main/java/io/github/jsfrench/swaggerhub/Greeting.java new file mode 100644 index 0000000..3a5f9c0 --- /dev/null +++ b/src/main/java/io/github/jsfrench/swaggerhub/Greeting.java @@ -0,0 +1,20 @@ +package io.github.jsfrench.swaggerhub; + +import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.TaskAction; + +public class Greeting extends DefaultTask { + private String message; + private String recipient; + + public String getMessage() { return message; } + public void setMessage(String message) { this.message = message; } + + public String getRecipient() { return recipient; } + public void setRecipient(String recipient) { this.recipient = recipient; } + + @TaskAction + void sayGreeting() { + System.out.printf("%s, %s!\n", getMessage(), getRecipient()); + } +} diff --git a/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubClient.java b/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubClient.java new file mode 100644 index 0000000..1a5e31b --- /dev/null +++ b/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubClient.java @@ -0,0 +1,113 @@ +package io.github.jsfrench.swaggerhub; + +import com.squareup.okhttp.HttpUrl; +import com.squareup.okhttp.MediaType; +import com.squareup.okhttp.OkHttpClient; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.RequestBody; +import com.squareup.okhttp.Response; + +import java.io.IOException; + +public class SwaggerHubClient { + private final OkHttpClient client; + private final String host; + private final int port; + private final String token; + private final String protocol; + private static final String APIS = "apis"; + + + public SwaggerHubClient(String host, int port, String protocol, String token) { + client = new OkHttpClient(); + this.host = host; + this.port = port; + this.protocol = protocol; + this.token = token; + } + + public String getDefinition(SwaggerHubRequest swaggerHubRequest) throws Exception { + HttpUrl httpUrl = getDownloadUrl(swaggerHubRequest); + MediaType mediaType = MediaType.parse("application/" + swaggerHubRequest.getFormat()); + + Request requestBuilder = buildGetRequest(httpUrl, mediaType); + + final String jsonResponse; + try { + final Response response = client.newCall(requestBuilder).execute(); + if (!response.isSuccessful()) { + throw new Exception( + String.format("Failed to download definition: %s", response.body().string()) + ); + } else { + jsonResponse = response.body().string(); + } + } catch (IOException e) { + throw new Exception("Failed to download definition", e); + } + return jsonResponse; + } + + private Request buildGetRequest(HttpUrl httpUrl, MediaType mediaType) { + Request.Builder requestBuilder = new Request.Builder() + .url(httpUrl) + .addHeader("Accept", mediaType.toString()) + .addHeader("User-Agent", "swaggerhub-maven-plugin"); + if (token != null) { + requestBuilder.addHeader("Authorization", token); + } + return requestBuilder.build(); + } + + public void saveDefinition(SwaggerHubRequest swaggerHubRequest) throws Exception { + HttpUrl httpUrl = getUploadUrl(swaggerHubRequest); + MediaType mediaType = MediaType.parse("application/" + swaggerHubRequest.getFormat()); + + final Request httpRequest = buildPostRequest(httpUrl, mediaType, swaggerHubRequest.getSwagger()); + + try { + Response response = client.newCall(httpRequest).execute(); + if (!response.isSuccessful()) { + throw new Exception( + String.format("Failed to upload definition: %s", response.body().string()) + ); + } + } catch (IOException e) { + throw new Exception("Failed to upload definition", e); + } + return; + } + + private Request buildPostRequest(HttpUrl httpUrl, MediaType mediaType, String content) { + return new Request.Builder() + .url(httpUrl) + .addHeader("Content-Type", mediaType.toString()) + .addHeader("Authorization", token) + .addHeader("User-Agent", "swaggerhub-maven-plugin") + .post(RequestBody.create(mediaType, content)) + .build(); + } + + private HttpUrl getDownloadUrl(SwaggerHubRequest swaggerHubRequest) { + return getBaseUrl(swaggerHubRequest.getOwner(), swaggerHubRequest.getApi()) + .addEncodedPathSegment(swaggerHubRequest.getVersion()) + .build(); + } + + private HttpUrl getUploadUrl(SwaggerHubRequest swaggerHubRequest) { + return getBaseUrl(swaggerHubRequest.getOwner(), swaggerHubRequest.getApi()) + .addEncodedQueryParameter("version", swaggerHubRequest.getVersion()) + .addEncodedQueryParameter("isPrivate", Boolean.toString(swaggerHubRequest.isPrivate())) + .build(); + } + + private HttpUrl.Builder getBaseUrl(String owner, String api) { + return new HttpUrl.Builder() + .scheme(protocol) + .host(host) + .port(port) + .addPathSegment(APIS) + .addEncodedPathSegment(owner) + .addEncodedPathSegment(api); + } +} diff --git a/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubDownload.java b/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubDownload.java new file mode 100644 index 0000000..662eaf8 --- /dev/null +++ b/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubDownload.java @@ -0,0 +1,56 @@ +package io.github.jsfrench.swaggerhub; + + +import org.gradle.api.Plugin; +import org.gradle.api.Project; + +import java.io.File; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; + + +/** + * Downloads API definition from SwaggerHub + */ +//@Mojo(name = "download") +public class SwaggerHubDownload implements Plugin { + private String owner; + private String api; + private String version; + private String format; + private String host; + private int port; + private String protocol; + private String token; + private String outputFile; + + @Override + public void apply(Project project) { + SwaggerHubClient swaggerHubClient = new SwaggerHubClient(host, port, protocol, token); +// getLog().info("Downloading from " + host +// + ": api-" + api +// + ", owner-" + owner +// + ", version-" + version +// + ", format-" + format +// + ", outputFile-" + outputFile); + + SwaggerHubRequest swaggerHubRequest = new SwaggerHubRequest.Builder(api, owner, version) + .format(format) + .build(); + + try { + String swaggerJson = swaggerHubClient.getDefinition(swaggerHubRequest); + File file = new File(outputFile); + + final File parentFile = file.getParentFile(); + if (parentFile != null) { + parentFile.mkdirs(); + } + Files.write(Paths.get(outputFile), swaggerJson.getBytes(Charset.forName("UTF-8"))); + } catch (Exception e) { +// throw new Exception("Failed to download API definition", e); + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubPlugin.java b/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubPlugin.java new file mode 100644 index 0000000..ccee4c2 --- /dev/null +++ b/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubPlugin.java @@ -0,0 +1,13 @@ +package io.github.jsfrench.swaggerhub; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; + +public class SwaggerHubPlugin implements Plugin { + public void apply(Project project) { +// project.getTasks().create("hello", Greeting.class, (task) -> { +// task.setMessage("Hello"); +// task.setRecipient("World"); +// }); + } +} \ No newline at end of file diff --git a/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubRequest.java b/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubRequest.java new file mode 100644 index 0000000..63a4ec4 --- /dev/null +++ b/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubRequest.java @@ -0,0 +1,79 @@ +package io.github.jsfrench.swaggerhub; + + +public class SwaggerHubRequest { + private final String api; + private final String owner; + private final String version; + private final String format; + private final String swagger; + private final boolean isPrivate; + + public String getApi() { + return api; + } + + public String getOwner() { + return owner; + } + + public String getVersion() { + return version; + } + + public String getFormat() { + return format; + } + + public String getSwagger() { + return swagger; + } + + public boolean isPrivate() { + return isPrivate; + } + + private SwaggerHubRequest(Builder builder) { + this.api = builder.api; + this.owner = builder.owner; + this.version = builder.version; + this.format = builder.format; + this.swagger = builder.swagger; + this.isPrivate = builder.isPrivate; + } + + public static class Builder { + private final String api; + private final String owner; + private final String version; + private String format; + private String swagger; + private boolean isPrivate; + + public Builder(String api, String owner, String version) { + this.api = api; + this.owner = owner; + this.version = version; + } + + public Builder format(String format) { + this.format = format; + return this; + } + + public Builder swagger(String swagger) { + this.swagger = swagger; + return this; + } + + public Builder isPrivate(boolean isPrivate) { + this.isPrivate = isPrivate; + return this; + } + + public SwaggerHubRequest build() { + return new SwaggerHubRequest(this); + } + + } +} diff --git a/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubUpload.java b/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubUpload.java new file mode 100644 index 0000000..c94a798 --- /dev/null +++ b/src/main/java/io/github/jsfrench/swaggerhub/SwaggerHubUpload.java @@ -0,0 +1,68 @@ +package io.github.jsfrench.swaggerhub; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; + +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; + + +/** + * Uploads API definition to SwaggerHub + */ +public class SwaggerHubUpload implements Plugin { +// @Parameter(property = "upload.owner", required = true) + private String owner; +// @Parameter(property = "upload.api", required = true) + private String api; +// @Parameter(property = "upload.version") + private String version; +// @Parameter(property = "upload.host", defaultValue = "api.swaggerhub.com") + private String host; +// @Parameter(property = "upload.port", defaultValue = "443") + private int port; +// @Parameter(property = "upload.protocol", defaultValue = "https") + private String protocol; +// @Parameter(property = "upload.format", defaultValue = "json") + private String format; +// @Parameter(property = "upload.token") + private String token; +// @Parameter(property = "upload.inputFile", required = true) + private String inputFile; +// @Parameter(property = "upload.isPrivate", defaultValue = "false") + private Boolean isPrivate; + + private SwaggerHubClient swaggerHubClient; + + @Override + public void apply(Project project) { + + project.task("hello") + .doLast(task -> System.out.println("HELLO FROM GRADLE")); + + swaggerHubClient = new SwaggerHubClient(host, port, protocol, token); + +// getLog().info("Uploading to " + host +// + ": api: " + api +// + ", owner: " + owner +// + ", version: " + version +// + ", inputFile: " + inputFile +// + ", format: " + format +// + ", isPrivate: " + isPrivate); + + try { + String content = new String(Files.readAllBytes(Paths.get(inputFile)), Charset.forName("UTF-8")); + + SwaggerHubRequest swaggerHubRequest = new SwaggerHubRequest.Builder(api, owner, version) + .swagger(content) + .format(format) + .isPrivate(isPrivate) + .build(); + + swaggerHubClient.saveDefinition(swaggerHubRequest); + } catch (Exception e) { +// getLog().Exception("Failed to upload API definition", e); + } + } +} \ No newline at end of file diff --git a/src/main/resources/META-INF/gradle-plugins/io.swagger.swaggerhub.plugin.properties b/src/main/resources/META-INF/gradle-plugins/io.swagger.swaggerhub.plugin.properties new file mode 100644 index 0000000..957d224 --- /dev/null +++ b/src/main/resources/META-INF/gradle-plugins/io.swagger.swaggerhub.plugin.properties @@ -0,0 +1 @@ +implementation-class=io.github.jsfrench.swaggerhub.SwaggerHubUpload diff --git a/src/test/java/io/github/jsfrench/swaggerhub/InitialTestClass.java b/src/test/java/io/github/jsfrench/swaggerhub/InitialTestClass.java new file mode 100644 index 0000000..f078811 --- /dev/null +++ b/src/test/java/io/github/jsfrench/swaggerhub/InitialTestClass.java @@ -0,0 +1,21 @@ +package io.github.jsfrench.swaggerhub; + +import org.gradle.api.Project; +import org.gradle.internal.impldep.org.testng.annotations.Test; +import org.gradle.testfixtures.ProjectBuilder; + +import static org.gradle.internal.impldep.org.testng.AssertJUnit.assertNotNull; +import static org.gradle.internal.impldep.org.testng.AssertJUnit.assertTrue; + +public class InitialTestClass { + + @Test + public void uploadTest() { + Project project = ProjectBuilder.builder().build(); + project.getPluginManager().apply("io.swagger.swaggerhub.plugin"); + + assertTrue(project.getPluginManager().hasPlugin("io.swagger.swaggerhub.plugin")); + + assertNotNull(project.getTasks().getByName("hello")); + } +} diff --git a/swaggerhub-gradle-plugin.ipr b/swaggerhub-gradle-plugin.ipr new file mode 100644 index 0000000..b9b1086 --- /dev/null +++ b/swaggerhub-gradle-plugin.ipr @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.6 + + + + + + + + + + + + + diff --git a/swaggerhub-gradle-plugin.iws b/swaggerhub-gradle-plugin.iws new file mode 100644 index 0000000..d5bc759 --- /dev/null +++ b/swaggerhub-gradle-plugin.iws @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + + + + + + + +