diff --git a/Makefile b/Makefile index ad40b01..ea7d655 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,3 @@ - config ?= compileClasspath ifdef module @@ -53,7 +52,6 @@ assemble: # # generate build zips under build/plugins -# you can install the plugin copying manually these files to $HOME/.nextflow/plugins # buildPlugins: ./gradlew copyPluginZip @@ -70,3 +68,14 @@ upload-plugins: publish-index: ./gradlew plugins:publishIndex + +# +# Install plugin to ~/.nextflow/plugins using Gradle +# Usage: make install-plugin [plugin=nf-hello] +# +install-plugin: +ifdef plugin + ./gradlew :plugins:${plugin}:installPlugin +else + ./gradlew installPlugin +endif \ No newline at end of file diff --git a/README.md b/README.md index dc8bc09..822e749 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,30 @@ To build and test the plugin during development, configure a local Nextflow buil The plugin can be tested without using a local Nextflow build using the following steps: 1. Build the plugin: `make buildPlugins` -2. Copy `build/plugins/` to `$HOME/.nextflow/plugins` +2. Install the plugin using one of these methods: + + ```bash + # Install a specific plugin (if you have added new plugins to the plugins/ directory) + make install-plugin plugin=nf-hello + + # Install all available plugins + make install-plugin + ``` + + The plugins will be installed to one of these locations, in order of precedence: + - Directory specified by `NXF_PLUGINS_DIR` environment variable + - `$NXF_HOME/plugins` if `NXF_HOME` is set + - `$HOME/.nextflow/plugins` (default location) + + Alternatively, you can use Gradle commands directly: + ```bash + # Install a specific plugin + ./gradlew :plugins:nf-hello:installPlugin + + # Install all plugins + ./gradlew installPlugin + ``` + 3. Create a pipeline that uses your plugin and run it: `nextflow run ./my-pipeline-script.nf` ## Package, upload, and publish diff --git a/plugins/build.gradle b/plugins/build.gradle index ed5a617..3c92c2a 100644 --- a/plugins/build.gradle +++ b/plugins/build.gradle @@ -153,6 +153,44 @@ subprojects { } task upload(dependsOn: [uploadPlugin] ) { } + + /* + * Task to install plugin to the Nextflow plugins directory for local testing and development. + * For production deployment, see "Package, upload, and publish" section in README.md. + */ + task installPlugin(type: Copy, dependsOn: copyPluginZip) { + description = "Installs ${project.name} plugin to the Nextflow plugins directory" + group = 'Plugin Installation' + + def pluginsDir = System.getenv('NXF_PLUGINS_DIR') ?: + System.getenv('NXF_HOME') ? "${System.getenv('NXF_HOME')}/plugins" : + "${System.getProperty('user.home')}/.nextflow/plugins" + + // Use the subproject's name and version + def pluginZip = file("$rootProject.buildDir/plugins/${project.name}-${project.version}.zip") + def pluginDir = file("$pluginsDir/${project.name}-${project.version}") + + doFirst { + println "Installing plugin ${project.name} version ${project.version} to: $pluginDir" + pluginDir.mkdirs() + } + + from zipTree(pluginZip) + into pluginDir + + doLast { + println "Plugin ${project.name} installed successfully!" + println "Installation location: $pluginDir" + println "Installation location determined by:" + if (System.getenv('NXF_PLUGINS_DIR')) { + println " - NXF_PLUGINS_DIR environment variable" + } else if (System.getenv('NXF_HOME')) { + println " - NXF_HOME environment variable" + } else { + println " - Default location (~/.nextflow/plugins)" + } + } + } } /* @@ -176,3 +214,34 @@ task publishIndex( type: io.nextflow.gradle.tasks.GithubRepositoryPublisher ) { githubEmail = github_commit_email githubToken = github_access_token } + +/* + * Task to install all plugins to the Nextflow plugins directory + */ +task installPlugins() { + description = 'Installs all plugins to the Nextflow plugins directory' + group = 'Plugin Installation' + + dependsOn subprojects.installPlugin +} + +/* + * Task to install a specific plugin by name + * Usage: ./gradlew installPlugin -Pplugin=nf-hello + */ +task installSpecificPlugin { + description = 'Installs a specific plugin (specify with -Pplugin=plugin-name)' + group = 'Plugin Installation' + + doFirst { + if (!project.hasProperty('plugin')) { + throw new GradleException("Please specify a plugin name using -Pplugin=plugin-name") + } + def pluginName = project.property('plugin') + def pluginProject = project.findProject(":plugins:${pluginName}") + if (!pluginProject) { + throw new GradleException("Plugin '${pluginName}' not found") + } + dependsOn pluginProject.installPlugin + } +} diff --git a/plugins/nf-hello/build.gradle b/plugins/nf-hello/build.gradle index c051b00..0f1bec2 100644 --- a/plugins/nf-hello/build.gradle +++ b/plugins/nf-hello/build.gradle @@ -78,6 +78,9 @@ dependencies { modules { module("commons-logging:commons-logging") { replacedBy("org.slf4j:jcl-over-slf4j") } } + + // Add this line to explicitly declare the test framework launcher + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } // use JUnit 5 platform