Basic pnpm preparation task

For cases where development is not done with pnpm, but rather just the usage of a specific tool from the ecosystem, there is a task to prepare such an environment.

build.gradle
import org.ysb33r.gradle.jse.pnpm.tasks.PnpmPrepareTask
import org.ysb33r.gradle.jse.pnpm.toolchains.JsePnpmToolchain
import org.ysb33r.gradle.jsecosystem.packages.PackageDescriptor

jsEcosystem {
  toolchains {
    pnpm(JsePnpmToolchain) {
        withPnpmNode()
    }
  }
}

tasks.register('pnpmPrepare', PnpmPrepareTask) {
  workdir = project.layout.buildDirectory.dir('myWorkdir') (1)
  toolchain = jsEcosystem.toolchains.named('pnpm', JsePnpmToolchain) (2)
  packages = project.provider { -> (3)
      [
          PackageDescriptor.of('downdoc', '1.2.3'), (4)
          PackageDescriptor.of('asciidoctor', 'cli', '4.5.6') (5)
      ]
  }
}
1 Provide the directory where work will be done within
2 Associate a toolchain with the task.
3 Provider a list of packages.
4 An example of a classic package without a scope, but with a version.
5 A package with a scope, name and version.

Example of running a package script

build.gradle
import org.ysb33r.gradle.jse.pnpm.tasks.PnpmPrepareTask
import org.ysb33r.gradle.jse.pnpm.toolchains.JsePnpmToolchain
import org.ysb33r.gradle.jsecosystem.packages.PackageDescriptor

plugins {
    id 'org.ysb33r.jsecosystem.pnpm.base'
}

jsEcosystem {
    toolchains {
        pnpm(JsePnpmToolchain) {
            withPnpmNode()
        }
    }
}

tasks.register('pnpmPrepare', PnpmPrepareTask) {
    workdir = project.layout.buildDirectory.dir('docs/antora')
    toolchain = jsEcosystem.toolchains.named('pnpm', JsePnpmToolchain)
    packages = project.provider { ->
        [
            PackageDescriptor.of('antora', 'cli', '3.1.14'),
            PackageDescriptor.of('antora', 'site-generator-default', '3.1.14')
        ]
    }
}

tasks.register('runGradleTest') {
    final execs = grolifantOps.execTools()
    final wd = project.layout.buildDirectory.dir('docs/antora')
    final execSpec = jsEcosystem.toolchains.named('pnpm', JsePnpmToolchain).get().createExecSpec { spec ->
        spec.entrypoint {
            workingDir = wd
        }
        spec.cmd {
            command = 'exec'
            args 'antora'
            args file('src/docs/antora/antora-playbook.yml')
        }
    }

    dependsOn 'pnpmPrepare'

    doLast {
        execs.exec { spec ->
            execSpec.copyTo(spec)
        }
    }
}