@@ -153,6 +153,44 @@ subprojects {
153153 }
154154
155155 task upload(dependsOn : [uploadPlugin] ) { }
156+
157+ /*
158+ * Task to install plugin to the Nextflow plugins directory for local testing and development.
159+ * For production deployment, see "Package, upload, and publish" section in README.md.
160+ */
161+ task installPlugin(type : Copy , dependsOn : copyPluginZip) {
162+ description = " Installs ${ project.name} plugin to the Nextflow plugins directory"
163+ group = ' Plugin Installation'
164+
165+ def pluginsDir = System . getenv(' NXF_PLUGINS_DIR' ) ?:
166+ System . getenv(' NXF_HOME' ) ? " ${ System.getenv('NXF_HOME')} /plugins" :
167+ " ${ System.getProperty('user.home')} /.nextflow/plugins"
168+
169+ // Use the subproject's name and version
170+ def pluginZip = file(" $rootProject . buildDir /plugins/${ project.name} -${ project.version} .zip" )
171+ def pluginDir = file(" $pluginsDir /${ project.name} -${ project.version} " )
172+
173+ doFirst {
174+ println " Installing plugin ${ project.name} version ${ project.version} to: $pluginDir "
175+ pluginDir. mkdirs()
176+ }
177+
178+ from zipTree(pluginZip)
179+ into pluginDir
180+
181+ doLast {
182+ println " Plugin ${ project.name} installed successfully!"
183+ println " Installation location: $pluginDir "
184+ println " Installation location determined by:"
185+ if (System . getenv(' NXF_PLUGINS_DIR' )) {
186+ println " - NXF_PLUGINS_DIR environment variable"
187+ } else if (System . getenv(' NXF_HOME' )) {
188+ println " - NXF_HOME environment variable"
189+ } else {
190+ println " - Default location (~/.nextflow/plugins)"
191+ }
192+ }
193+ }
156194}
157195
158196/*
@@ -176,3 +214,34 @@ task publishIndex( type: io.nextflow.gradle.tasks.GithubRepositoryPublisher ) {
176214 githubEmail = github_commit_email
177215 githubToken = github_access_token
178216}
217+
218+ /*
219+ * Task to install all plugins to the Nextflow plugins directory
220+ */
221+ task installPlugins () {
222+ description = ' Installs all plugins to the Nextflow plugins directory'
223+ group = ' Plugin Installation'
224+
225+ dependsOn subprojects. installPlugin
226+ }
227+
228+ /*
229+ * Task to install a specific plugin by name
230+ * Usage: ./gradlew installPlugin -Pplugin=nf-hello
231+ */
232+ task installSpecificPlugin {
233+ description = ' Installs a specific plugin (specify with -Pplugin=plugin-name)'
234+ group = ' Plugin Installation'
235+
236+ doFirst {
237+ if (! project. hasProperty(' plugin' )) {
238+ throw new GradleException (" Please specify a plugin name using -Pplugin=plugin-name" )
239+ }
240+ def pluginName = project. property(' plugin' )
241+ def pluginProject = project. findProject(" :plugins:${ pluginName} " )
242+ if (! pluginProject) {
243+ throw new GradleException (" Plugin '${ pluginName} ' not found" )
244+ }
245+ dependsOn pluginProject. installPlugin
246+ }
247+ }
0 commit comments