Code Monkey home page Code Monkey logo

gradle-nuget-plugin's Introduction

Gradle NuGet Plugin Build status Build Status

This plugin allows to execute NuGet.exe from a gradle build. It also supports pack & push commands through built-in tasks, nugetPack, nugetPush & nugetRestore.

nugetPack

You can see this plugin being used for real on il-repack project. (together with msbuild one)

nugetSpec

The task is to generate nuspec file by custom configuration.

Sample usage:

buildscript {
    repositories {
      mavenCentral()
    }

    dependencies {
        classpath "com.ullink.gradle:gradle-nuget-plugin:2.17"
    }
}

apply plugin: 'nuget'

nuget {
    // nuget.exe version to use, defaults to 4.9.4

    // there are three different mutually excluded options for Nuget binary downloading:

    // first: define nuget version for download.
    // available versions can be found [here](https://dist.nuget.org/index.html)
    version = '4.9.4'

    // second - set nuget location, which will be used for download:
    nugetExePath = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"

    // third: define nuget executable file, which is already downloaded previously:
    nugetExePath = "C:\\Tools\\Nuget\\nuget.exe"
}

nugetSpec {
    // Array, Map and Closure could be used to generate nuspec XML, for details please check NuGetSpecTest
    nuspec = [
        metadata: [
            title:          'project title',
            authors:        'Francois Valdy',
            // id:          default is project.name
            // version:     default is project.version
            // description: default is project.description
            // ...
        ]
        files: [
            { file (src: 'somefile1', target: 'tools') },
            { file (src: 'somefile2', target: 'tools') }
        ]
    ]
}

nugetRestore

Nuget restore is used to retrieve missing packages before starting the build.

Sample usage:

nugetRestore {
    solutionDirectory = path\to\project
    packagesDirectory = location\for\package\restore
}

Where

  • solutionDirectory - could either contain the .sln file or the repositories.config file
  • packagesDirectory - used only if a folder with repositories.config is used

nugetSources

Nuget sources is used to add, remove, update, enable, disable nuget feeds.

Sample usage:

nugetSources {
    operation = 'add'
    sourceName = 'localNuGetFeed'
    sourceUrl = 'http://foo.com'
    username = 'optional username'
    password = 'optional password'
    configFile = 'nuget.config'
}

Where

  • operation - could be add, remove, update, enable, disable and list
  • sourceName - name of the nuget feed
  • sourceUrl - url of the nuget feed
  • username - optional username for nuget sources that require http basic authentication
  • password - optional password for nuget sources that require http basic authentication
  • configFile - optional NuGet.config file to modify

See also

Gradle Msbuild plugin - Allows to build VS projects & solutions.

Gradle NUnit plugin - Allows to execute NUnit tests from CI (used with this plugin to build the projects prior to UT execution)

Gradle OpenCover plugin - Allows to execute the UTs through OpenCover for coverage reports.

You can see these 4 plugins in use on ILRepack project (build.gradle).

License

All these plugins are licensed under the Apache License, Version 2.0 with no warranty (expressed or implied) for any purpose.

gradle-nuget-plugin's People

Contributors

adescamps-ullink avatar bcorne avatar citizenmatt avatar darsen avatar dependabot[bot] avatar ducaiulia avatar emanuelvarga avatar gluck avatar imanushin avatar jamespoli avatar jonathanmorley avatar lamarlugli avatar marcozwyssig avatar muryoh avatar ngyukman avatar peter-ng-ullink avatar romainhautefeuille avatar timotei avatar ul-remy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

gradle-nuget-plugin's Issues

Gradle 7.0 - No such property: UPLOAD_GROUP

Upgraded from Gradle 6.8.3 to 7.0. Already a gradlew tasks fails with

* What went wrong:
An exception occurred applying plugin request [id: 'com.ullink.nuget', version: '2.22']
> Failed to apply plugin 'com.ullink.nuget'.
   > No such property: UPLOAD_GROUP for class: org.gradle.api.plugins.BasePlugin

The simplistic build.gradle file does nothing:

plugins {
  id 'java-library'
	id "com.ullink.nuget" version "2.22"
}

Could not generate a decorated class for type NuGetPush

I recently tried to update the build system of an older project, bumping the java version, gradle and gradle plugin versions to something current. What I now observe is the following.

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\project\build.gradle' line: 2

* What went wrong:
An exception occurred applying plugin request [id: 'com.ullink.nuget', version: '2.18']
> Failed to apply plugin [id 'com.ullink.nuget']
   > Could not create task ':gaia_msi:nugetPush'.
      > Could not create task of type 'NuGetPush'.
         > Could not generate a decorated class for type NuGetPush.
            > java.lang.ClassFormatError: Duplicate method name "setTimeout" with signature "(Ljava.lang.Object;)V" in class file com/ullink/NuGetPush_Decorated

The used gradle version is 6.1.1 and the used Java version is OpenJDK 13.0.0 x64 on Windows.
The gradle files itself do not call the setTimeout method and do not use the NuGetPush feature.

In the past the stuff worked with Java 11 and 12 and Gradle 5.3 with nuget plugin in version 2.15.

Can someone recommend any workaround for this or has an idea where this comes from?

Edit: The last working combination of plugin and gradle is 2.18 with gradle 6.0.1. Everything else, including 6.2-RC-1 does not work.

Collision when downloading nuget in multiple sub projects

Hi,

using version 2.23

I have a gradle project with two sub projects and both use the nuget plugin. From time to time I observe the situation that after server maintenance one of the related nugetRestore tasks fails while the other one succeeds. Subsequent builds succeed then.

This suggests that the download of the nuget executable into the Gradle cache has a synchronization issue or some check for presence of the executable may lead to unexpected results.

Is it possible that the check for the nuget executable tests only for existence of the file but not for complete download of it?

Plugin won't work for Azure NuGet 3

Hey! The issue we have encountered is that the plugin doesn't currently support v3 of Azure NuGet. We have launched plugin as was instructed and tried to push artifact to Azure Artifacts. The result was an UnAuthorized(401) error despite apikey provision in nugetPush task.

Yet once launched from command line, NuGet.exe is actually waiting for username and password to be provided, that is why it's getting Unauthorized when launched from Gradle. As it turns out, there should also be a CredentialsProvider.VSS in the same folder as NuGet.exe, which will take care of authentication.

Our current workaround was to create additional task which downloads CredentialsProvider and make nugetPush depend on this task.

It would be nice to have this functionality available in plugin though.

Here is an article which describes how Azure Nuget works, there is also a possibility to directly download zip with CredentialsProvider described in this article:
https://docs.microsoft.com/en-us/azure/devops/artifacts/nuget/nuget-exe?view=azure-devops&tabs=new-nav#add-a-feed-to-nuget-3-or-later

NuGetPack.getIdFromMsbuildTask got broken by csprojPath type change

There was a commit 2ead8da that has changed NuGetPack class.
A type of csprojPath field has changed from String to File.
This field is used in getIdFromMsbuildTask method that left unchanged:

String getIdFromMsbuildTask() {
def isInputProject = { csprojPath.equalsIgnoreCase(it.projectFile) }
def msbuildTask = project.tasks.find {
it.class.name.startsWith("com.ullink.Msbuild") && it.projects.values().any(isInputProject)
}

Now when there's an msbuild task in the project and I want to take the Id from it I get an exception on line 175:
No signature of method: java.io.File.equalsIgnoreCase() is applicable for argument types (String) ...

Project configuration fails without nugetSources section in build.gradle

Currently (version 2.16), without a nugetSources section defined in build.gradle, project configuration fails with "Operation not specified for NuGetSources task."

Projects that do not require a functional nugetSources task should not need to define this section for project configuration to succeed: Any error due to a missing or malformed nugetSources section should only occur on an attempt to invoke the nugetSources task, not during project configuration.

Can nugetPack / nugetPush work off the csproj?

nugetPack "Creates a NuGet package based on the specified nuspec or project file."
My nugetSpec is using the spec file... but the spec file is just a template with $id$ $version$, etc. being populated by the project.
Is there a way to specify nugetPack pass the project file in instead of the spec file?
nugetSpec {
nuspecFile = file("${project.name}.nuspec")
}

HOTWO nugetSpec and list of files?

I'm trying to get a list of files into the nuspec, using the syntax '*.txt' but I cannot make it work:

nugetSpec {
    nuspec = [
        metadata: [
            id:             project.package,
            version:        project.version,
            description:    project.description,
            authors:        project.authors
        ],
        files: [
            { file (src: '*.txt', target: 'content') },
        ]
    ]
}

I'm getting error:
Cannot create a package that has no dependencies nor content.

I tried also using project.files('.txt') instead of '.txt' but I'm getting the error:
File not found: 'file collection'.

Thanks

Allow ad-hoc location to NuGet Executable

Can the BaseNuGet.groovy be updated so that if user specifies relative/absolute path to NuGet via an executable Exec property, the default search mechanism should be bypassed?

nugetRestore {
executable "nuget\nuget-4.6.2.exe"
}

The distsDir method has been deprecated. This is scheduled to be removed in Gradle 6.0.

When running under Gradle 5.6.4, I get the following warning:
The distsDir method has been deprecated. This is scheduled to be removed in Gradle 6.0.

Here is the stacktrace:

	at org.gradle.api.plugins.internal.DefaultBasePluginConvention.getDistsDir(DefaultBasePluginConvention.java:60)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:326)
	at com.ullink.NuGetPack.<init>(NuGetPack.groovy:29)
	at com.ullink.NuGetPack_Decorated.<init>(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.gradle.internal.instantiation.AsmBackedClassGenerator.newInstance(AsmBackedClassGenerator.java:179)
	at org.gradle.internal.instantiation.AbstractClassGenerator$GeneratedClassImpl$GeneratedConstructorImpl.newInstance(AbstractClassGenerator.java:395)
	at org.gradle.internal.instantiation.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:49)
	at org.gradle.api.internal.project.taskfactory.TaskFactory$1.call(TaskFactory.java:72)
	at org.gradle.api.internal.project.taskfactory.TaskFactory$1.call(TaskFactory.java:66)
	at org.gradle.util.GUtil.uncheckedCall(GUtil.java:461)
	at org.gradle.api.internal.AbstractTask.injectIntoNewInstance(AbstractTask.java:186)
	at org.gradle.api.internal.project.taskfactory.TaskFactory.create(TaskFactory.java:66)
	at org.gradle.api.internal.project.taskfactory.PropertyAssociationTaskFactory.create(PropertyAssociationTaskFactory.java:49)
	at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory.create(AnnotationProcessingTaskFactory.java:48)
	at org.gradle.api.internal.tasks.DefaultTaskContainer.createTask(DefaultTaskContainer.java:334)
	at org.gradle.api.internal.tasks.DefaultTaskContainer.access$200(DefaultTaskContainer.java:78)
	at org.gradle.api.internal.tasks.DefaultTaskContainer$1.call(DefaultTaskContainer.java:153)
	at org.gradle.api.internal.tasks.DefaultTaskContainer$1.call(DefaultTaskContainer.java:143)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
	at org.gradle.api.internal.tasks.DefaultTaskContainer.doCreate(DefaultTaskContainer.java:143)
	at org.gradle.api.internal.tasks.DefaultTaskContainer.create(DefaultTaskContainer.java:119)
	at org.gradle.api.internal.project.DefaultProject.task(DefaultProject.java:1244)
	at org.gradle.api.Project$task.call(Unknown Source)
	at com.ullink.NuGetPlugin.apply(NuGetPlugin.groovy:21)
	at com.ullink.NuGetPlugin.apply(NuGetPlugin.groovy)
	at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:43)
	at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:51)
	at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:181)
	at org.gradle.api.internal.plugins.DefaultPluginManager.access$300(DefaultPluginManager.java:51)
	at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:276)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
	at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:159)
	at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:156)
	at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:49)
	at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:156)
	at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:136)
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyType(DefaultObjectConfigurationAction.java:129)
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:38)
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:93)
	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:152)
	at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:49)
	at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.java:41)
	at org.gradle.api.Script$apply$0.callCurrent(Unknown Source)
	at build_a606njnsa29ph45qo1hu8oizt.run(C:\repos\dev-tools\convert-eischema\build.gradle:13)
	at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
	at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:227)
	at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:77)
	at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:232)
	at org.gradle.configuration.BuildOperationScriptPlugin$1$1.run(BuildOperationScriptPlugin.java:69)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
	at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:66)
	at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:63)
	at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:49)
	at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:63)
	at org.gradle.configuration.project.BuildScriptProcessor$1.run(BuildScriptProcessor.java:45)
	at org.gradle.internal.Factories$1.create(Factories.java:26)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:201)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:187)
	at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:42)
	at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
	at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:35)
	at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject$1.run(LifecycleProjectEvaluator.java:107)
	at org.gradle.internal.Factories$1.create(Factories.java:26)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
	at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:227)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:221)
	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withMutableState(DefaultProjectStateRegistry.java:187)
	at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:96)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
	at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:68)
	at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:693)
	at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:141)
	at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:36)
	at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:62)
	at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:55)
	at org.gradle.configuration.BuildOperatingFiringProjectsPreparer$ConfigureBuild.run(BuildOperatingFiringProjectsPreparer.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
	at org.gradle.configuration.BuildOperatingFiringProjectsPreparer.prepareProjects(BuildOperatingFiringProjectsPreparer.java:40)
	at org.gradle.initialization.DefaultGradleLauncher.prepareProjects(DefaultGradleLauncher.java:198)
	at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:138)
	at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:126)
	at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:106)
	at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:60)
	at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:57)
	at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:85)
	at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:78)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
	at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
	at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:78)
	at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:57)
	at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
	at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
	at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
	at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:50)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
	at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
	at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
	at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
	at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
	at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
	at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
	at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
	at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
	at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
	at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
	at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
	at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
	at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
	at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:68)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:27)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
	at org.gradle.util.Swapper.swap(Swapper.java:38)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
	at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
	at java.lang.Thread.run(Unknown Source)

Solution file argument isn't being passed

Maybe I am missing something, but based on everything I see, this should produce results and yet, it doesn't seem to be passing the solution file along to the CLI despite being set. It's also not picking up the nuget on the path - which isn't so crucial, but curious

import com.ullink.NuGetRestore


plugins {
    id("com.ullink.nuget") version "2.20" apply false
}

subprojects {
    apply(plugin = "com.ullink.nuget")
    val solution =projectDir.walkTopDown().find { it.extension == "sln" }!!

    tasks {

        val restore by creating(NuGetRestore::class) {
            setSolutionDirectory(solution.parentFile.path)
            setSolutionFile(solution.path)
            verbosity = "detailed"
            sources = setOf(
                "https://www.nuget.org/api/v2",
                "http://prism-prod-oct/NuGetLocalServer/nuget"
            )
            println("executable: ${executable}")
            println("Args: ${args}")
            println("task solution file: ${this.solutionFile}")
        }

    }
}
PS C:\Users\cbongiorno\dev\sterling\prism\prism-wfadaptors> gradle nugetRestore

> Configure project :
executable: null
Args: [restore]
tasksolution file: C:\Users\cbongiorno\dev\sterling\prism\prism-wfadaptors\workflowadaptor-cwi_fl_lake_ui\CWI_FL_LAKE_UISol\CWI_FL_LAKE_UISol.sln
solution file found: C:\Users\cbongiorno\dev\sterling\prism\prism-wfadaptors\workflowadaptor-cwi_fl_lake_ui\CWI_FL_LAKE_UISol\CWI_FL_LAKE_UISol.sln
executable: null
Args: [restore]
tasksolution file: C:\Users\cbongiorno\dev\sterling\prism\prism-wfadaptors\workflowadaptor-cwi_ri_statewide_ui\CWI_RI_STATEWIDE_UISol\CWI_RI_STATEWIDE_UISol.sln
solution file found: C:\Users\cbongiorno\dev\sterling\prism\prism-wfadaptors\workflowadaptor-cwi_ri_statewide_ui\CWI_RI_STATEWIDE_UISol\CWI_RI_STATEWIDE_UISol.sln

> Task :workflowadaptor-cwi_fl_lake_ui:nugetRestore FAILED
The folder 'C:\Users\cbongiorno\dev\sterling\prism\prism-wfadaptors\workflowadaptor-cwi_fl_lake_ui' does not contain an msbuild solution or packages.config file to restore.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':workflowadaptor-cwi_fl_lake_ui:nugetRestore'.
> Process 'command 'C:\Users\cbongiorno\.gradle\caches\nuget\5.5.0\NuGet.exe'' finished with non-zero exit value 1

PS C:\Users\cbongiorno\dev\sterling\prism\prism-wfadaptors> gcm nuget

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     nuget.exe                                          5.5.1.0    C:\ProgramData\chocolatey\bin\nuget.exe

Getting nugetRestore to do anything.

Hey there.

All I want is to have the nugetRestore to restore all the requisite packages for my solution file.

When I run

gradle nugetRestore

The command runs, and says 'up-to-date' when run. But no nuget packages get restored.
I am running the command from the gradle root folder. Sitting in my root folder is the sln file ,and in a subfolder are my projects. If I run nuget restore MySolution.sln everthing works hunky dory. All packages are restored.
My gradle configuration for nugetRestore looks like this

nugetRestore {
    solutionFile = 'Coactive.API.sln'
    packagesDirectory = 'packages'
}

A little help would be most appreciated on what I'm doing wrong.

Declare list of files in nuspec programatically

Is this behavior supported? I'd like to automatically declare all files in a specific directory without having to list each specific one, e.g.

    delegate.files {
        fileTree(msbuild.destinationDir).each { File entry ->
            delegate.file(src: entry, target: 'lib')
        }
    }

When I do this, I get the error below. Using delegate.file on the same files outside the above closure works fine, however.

Caused by: org.gradle.internal.typeconversion.UnsupportedNotationException: Cannot convert the provided notation to a File or URI: {src=build\msbuild\bin\log4net.dll, target=lib}.
The following types/formats are supported:

  • A String or CharSequence path, e.g 'src/main/java' or '/usr/include'
  • A String or CharSequence URI, e.g 'file:/usr/include'
  • A File instance.
  • A URI or URL instance.
    at org.gradle.internal.typeconversion.ErrorHandlingNotationParser.parseNotation(ErrorHandlingNotationParser.java:55)
    at org.gradle.api.internal.file.AbstractFileResolver.convertObjectToFile(AbstractFileResolver.java:184)
    at org.gradle.api.internal.file.BaseDirFileResolver.doResolve(BaseDirFileResolver.java:69)
    at org.gradle.api.internal.file.AbstractFileResolver.resolve(AbstractFileResolver.java:77)
    at org.gradle.api.internal.file.AbstractFileResolver.resolve(AbstractFileResolver.java:60)
    at org.gradle.api.internal.file.DefaultFileOperations.file(DefaultFileOperations.java:72)
    at org.gradle.api.internal.project.AbstractProject.file(AbstractProject.java:637)
    at org.gradle.groovy.scripts.DefaultScript.file(DefaultScript.java:110)

Timescale for 2.18?

Hi all. I'd like to use some of the fixes that will be in 2.18 - do you have a timescale for when it will be released?

nugetPack.basePath incorrect annotated as a file

Hello!

In Gradle 7.3.3, providing a directory path to nugetPack.basePath:

plugins {
    id 'com.ullink.nuget' version '2.23'
}

nugetPack {
    basePath = new File(projectDir, 'ThisIsADirectory')
}

...results in an error when nugetPack task is run:

> Task :nugetPack FAILED
:nugetPack (Thread[Execution worker for ':',5,main]) completed. Took 0.002 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Some problems were found with the configuration of task ':nugetPack' (type 'NuGetPack').
  - In plugin 'nuget-base' type 'com.ullink.NuGetPack' property 'basePath' specifies file 'W:\Repositories\gradle-plugins\gradle-test\ThisIsADirectory' which doesn't exist.

    Reason: An input file was expected to be present but it doesn't exist.

    Possible solutions:
      1. Make sure the file exists before the task is called.
      2. Make sure that the task which produces the file is declared as an input.

    Please refer to https://docs.gradle.org/7.3.3/userguide/validation_problems.html#input_file_does_not_exist for more details about this problem.

Looking at the source, this is because the property is annotated as @InputFile which is incorrect in this case.

Changing it to @InputDirectory would fix the error, but then the contents of the directory would be considered for determining whether the task is up-to-date which in this case doesn't make sense, so this should just be @Input instead.

Update to Gradle 4.x

Hi

Gradle 4.6 is the latest version of Gradle. Could you update your plugin to the Gradle 4.x API?
Thanks

Gradle 8 - update version and use providers on Task objects

Since Gradle 6 that were a lot enhancements done in of authoring tasks, specially when it's related to the input parameters, that should be now Providers.

There's also the Configuration Cache feature that can help out the start up time of a Gradle build.

I've started migrating my code base, but all used plugins must also follow this new standards to be able to use the configuration cache in your own project.

Since there were some issues with this project, because of the use of the net.researchgate.release plugin, started migrating this repo in my fork.

Here is the researchgate plugin error:

Would you like for me to open a PR with it?
I've also started checking out the deprecated msbuild plugin (which I still use for some old stuff).

Where are the releases?

The newest release tag is 2.15, wheras the newest version on maven central is 2.12.
Where are the newer releases?
The README states just add mavenCentral()

deprecated feature warning in Gradle 7.0.2

in build.gradle

plugins {
id 'com.ullink.nuget' version '2.23'
...
}
nugetRestore {
solutionDirectory = '.'
}

reports

Task :XXX:nugetRestore
Execution optimizations have been disabled for task ':XXX:nugetRestore' to ensure correctness due to the following reasons:
  - Gradle detected a problem with the following location: 'XXX'. Reason: Task ':XXX:nugetRestore' uses this output of task ':XXX:extractIncludeProto' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.0.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.
  - Gradle detected a problem with the following location: 'XXX'. Reason: Task ':XXX:nugetRestore' uses this output of task ':XXX:extractProto' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.0.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.

Similar warnings for tasks processResources and extractTestProto

Support for Multi-Module projects .nuspec Dependencies

Problem:
Unable to link .NET library projects together into published NuGet package

Summary:
Common processes in Java projects build with Gradle/Maven include multi-module solutions deploying multiple JARs linked together by a POM.XML. This dependency management feature is mirrored in NuGet but is not supported by the NuGet gradle plugin.

Proposal:
Add support for dependencies in the .NuSpec: https://docs.microsoft.com/en-us/nuget/reference/nuspec#dependencies by searching all dependent project references that apply the nuget plugin. Look up artifact's nuget publishing metadata and use to define as same version dependency in the .nuspec

missing project task 'nugetInstall' in NuGetPlugin.groovy

Hi,
I was trying to use nugetinstall but noticed that the task is missing on the NuGetPlugin.groovy.
As a workaround it's possible to invoke the NuGet.exe directly with a task with type:Exec through the method commandLine.

Sorry I can't contribute with a patch right now due to legal reasons.

The process cannot access the file 'fileContent.lock' because it is being used by another process

Trying to do the same thing as described in #18 with the following nugetSpec task:

nugetSpec {
    nuspecFile = project.file("Package.nuspec")
    nuspec {
        metadata() {
            delegate.version version
            delegate.authors project.authors
        }
    }
}

But I get this error when trying to use the above:

> Task :nugetSpec 
> Task :nugetPack FAILED 
The process cannot access the file 'D:\jenkins\workspace\mybuild\.gradle\4.10.2\fileContent\fileContent.lock' because it is being used by another process. 
FAILURE: Build failed with an exception. 

Property is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.

When running nuget operations with Gradle 6.0.1 and --warning-mode all, it reports several of the above warning for different properties

> Task :nugetSpec
Property 'nuspec' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'nuspecFile' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'tempNuspecFile' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.

> Task :nugetPack
Property 'basePath' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'build' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'csprojPath' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'defaultExcludes' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'dependentNuGetSpec' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'destinationDir' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'exclude' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'generateSymbols' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'idFromMsbuildTask' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'includeEmptyDirectories' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'includeReferencedProjects' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'minClientVersion' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'msBuildVersion' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'nugetExePath' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'nuspecOrCsproj' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'packageAnalysis' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'packageFile' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'packageVersion' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'properties' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'tool' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.
Property 'verbosity' is not annotated with an input or output annotation. This behaviour has been deprecated and is scheduled to be removed in Gradle 7.0.

Can't use copyright system © in nuget spec

I have my build.gradle file saved in UTF-8. In my nuget spec, I'm trying to use the copyright symbol © . However, when I run the nugetPack task it blows up: Invalid byte 1 of 1-byte UTF-8 sequence.

From what I can tell, this is may be because the build/tmp/nugetSpec/project.spec file is saved in ASCII format, and not UTF-8 format.

nugetRestore also triggers nugetSources with error

We have an msbuild task which depends on nugetRestore. When run in the current version it fails when nugetSources is not configured with an operation, eg. list - even though it is never really run.

nugetRestore fails with automatically downloaded NuGet under LocalSystem

CI services, for example default Jenkins setup, often runs under LocalSystem account.

In that scenario, nugetRestore fails with the following error using the latest plug-in version 2.14 and automatically downloaded NuGet 3.4.3:

:nugetRestore (Thread[main,5,main]) started.
:nugetRestore
Executing task ':nugetRestore' (up-to-date check took 0.0 secs) due to:
  Task has not declared any outputs.
Restoring NuGet packages 
Starting process 'command 'C:\Windows\System32\config\systemprofile\.gradle\caches\nuget\3.4.3\NuGet.exe''. Working directory: C:\Jenkins\jobs\iRePORT-Dev\workspace Command: C:\Windows\System32\config\systemprofile\.gradle\caches\nuget\3.4.3\NuGet.exe restore -NonInteractive -Verbosity normal
Successfully started process 'command 'C:\Windows\System32\config\systemprofile\.gradle\caches\nuget\3.4.3\NuGet.exe''
:nugetRestore FAILED
:nugetRestore (Thread[main,5,main]) completed. Took 2.736 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':nugetRestore'.
> Process 'command 'C:\Windows\System32\config\systemprofile\.gradle\caches\nuget\3.4.3\NuGet.exe'' finished with non-zero exit value -2146232576

If I switch to system NuGet 3.4.4 on the PATH, nugetRestore works just fine. BTW, I'd document how to do that: I had to read source code to see if this was an option. I set up NUGET_HOME in System environment variables, and that fixed the issue.

Also, prior to switch to LocalSystem we had Jenkins running under Windows user account and this is not an issue in that scenario.

Additional task "nugetInstall"

As nuget install allows a lot of options allows to install packages in folders without version numbers it is quiet comfortable as the path in gradle.build doesn't need to be updated if a source set contains the content of a NuGet. Therefore my protposal would be to add nugetInstallas a task.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.