Giter VIP home page Giter VIP logo

azure-gradle-plugins's Introduction

Azure Plugins for Gradle

This repository contains all Microsoft Azure plugins for Gradle.

Azure Plugin Gradle Plugin Portal Build Status
Azure Functions Plugin for Gradle Gradle Plugin Portal Build Status
Azure WebApp Plugin for Gradle Gradle Plugin Portal Build Status

Feedback and Questions

To report bugs or request new features, file issues on Issues. Or, ask questions on Stack Overflow with tag azure-java-tools.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once in all repositories using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Telemetry

This project collects usage data and sends it to Microsoft to help improve our products and services. Read Microsoft's privacy statement to learn more. If you would like to opt out of sending telemetry data to Microsoft, you can set allowTelemetry to false in the plugin configuration. Please read our document to find more details about allowTelemetry.

azure-gradle-plugins's People

Contributors

andxu avatar enaess avatar flanker32 avatar microsoft-github-operations[bot] avatar microsoftopensource avatar nilsjr avatar shenqianjin avatar wangmingliang-ms avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

azure-gradle-plugins's Issues

Support deployment slots

Motivation

Lacking the ability to deploy to slots (with auto-switch capabilities) complicates the production use of this plugin. Even more so in continuous delivery environments.

Proposed feature

Support deployment to slots, analogous to the deployment slot feature in the sister maven plugin.

azureFunctionsPackage task fails when using Azure Functions Plugin for Gradle 1.15.0

When updating to Azure Functions Plugin for Gradle 1.15.0, azureFunctionsPackage task now fails with the error below.

Execution failed for task ':azureFunctionsPackage'.
> generate configuration files and prepare staging directory

This does not occur before 1.14.0.

Here is a sample repository:
https://github.com/taisuke-fujimoto/azure-gradle-plugins-1.15.0-bug

Checked on my PC (Windows 10) and GitHub Actions (Ubuntu latest).

Add a Clean Way to Include Local Files

Current Behavior

I need to add local files to my Azure Function deployment which are not part of the Java build. To do so, I need to hack the azureFunctionsPackage task like so:

azureFunctionsPackage.doLast {
    copy {
        from "my_local_file.txt"
        into "${rootDir}\\build\\azure-functions\\my-project\\"
    }
}

Desired Behavior

I would like to specify all of the files I want included in the Azure Function deployment in the azurefunctions configuration block.

Plugin does not correctly report the issue when exception is thrown when find func cli path

I have already created a issue with the underling lib, however when you call FunctionCliResolver.resolveFunc() and have spaces in the PATH it returns an exception. And the issue being looking at the stack trace from the plugin, it says the func tools are not installed. (Do note in 1.8.0 the error was being shown but in 1.9+ you have to add gradle --stacktrace)

The plugin should correctly report what the problem is, in this case an exception was thrown when it was trying to find the path to the func cli tools.

Azure/azure-libraries-for-java#1437

Upgrade dependencies of azure toolkit to 0.36.1

Right now, build.gradle configures the sub-projects to use

ext {
   azureToolkitVersion 0.34.0
}

There is a newer version available that has one of my fixes in it. Would someone please have a look in upgrading it? Bumping the version cases a build breakage in DeployHandler and getting the right configuration.

Latest version is 0.36.1

Migrating func apps to version 3 on gradle

Plugin name and version

Azure FUNCTIONS_EXTENSIONS_VERSION ~3

Plugin configuration in your pom.xml

This is in my build.gradle:

task azureFunctions {
    appSettings {
        FUNCTIONS_EXTENSION_VERSION = '~3'
    }
}

Expected behavior

Upgrade azure functions apps to version 3.x from 2.x

Actual behavior

I am getting an compilation error:

Build file 'C:\git\edge_bootstrap_ms\build.gradle' line: 205

A problem occurred evaluating root project 'edge_bootstrap_ms'.
> Could not find method appSettings() for arguments [build_4uc6nd2k5o3jtxwlupu6m9lb5$_run_closure15$_closure34@5e05b3f8] on task ':azureFunctions' of type org.gradle.api.DefaultTask.

Steps to reproduce the problem

Add the code snippet I posted above in the build.gradle and you should get the same error.

Is there a way to upgrade the func apps on gradle easily? Do I need to nest the appSettings inside a different property?

When I cancel the `gradle azureFunctionsRun` command, gradle terminates, but `func` continues to run.

When I cancel the gradle azureFunctionsRun command, gradle terminates, but func continues to run, and the function continue running.

func -v
4.0.5413

build.gradle.kts

import com.microsoft.azure.gradle.configuration.GradleRuntimeConfig

group = "com.xxxxx"
version = "0.0.1-SNAPSHOT"

dependencyManagement {
    imports {
        mavenBom("org.springframework.boot:spring-boot-dependencies:3.1.3")
    }
}

dependencies {
    //implementation("org.projectlombok:lombok")
    implementation("ch.qos.logback:logback-classic")
    implementation("org.springframework.cloud:spring-cloud-function-adapter-azure:4.1.0-SNAPSHOT")
    implementation("com.azure:azure-ai-openai:1.0.0-beta.4")
    implementation("com.fasterxml.jackson.module:jackson-module-jsonSchema:2.15.3")
    implementation("com.fasterxml.jackson.module:jackson-modules-java8:2.15.3")
    implementation("io.github.cdimascio:dotenv-java:3.0.0")
    implementation("com.knuddels:jtokkit:0.6.1")
    implementation("org.scala-lang:scala3-library_3:3.3.1")

    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(mapOf("group" to "org.junit.vintage", "module" to "junit-vintage-engine"))
    }
    testRuntimeOnly("org.junit.platform:junit-platform-launcher")
    testImplementation("org.mockito:mockito-core:5.4.0")
    testImplementation("org.scalatestplus:junit-5-10_3:3.2.17.0")
    testImplementation("org.scalatest:scalatest_3:3.2.17")
}

plugins {
    id("idea")
    id("java")
    id("scala")
    id("io.freefair.lombok") version "8.4"
    id("org.springframework.boot") version "3.1.5"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    id("com.microsoft.azure.azurefunctions") version "1.13.1"
    id("org.springframework.boot.experimental.thin-launcher") version "1.0.31.RELEASE"
}

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

springBoot {
    mainClass = "com.xxxxx.infrastructure.ApplicationMain"
    buildInfo {
        properties {
            additional.set(mapOf(
                    "java.version" to JavaLanguageVersion.of(17)
            ))
        }
    }
}

azurefunctions {
    appName = "xxxx"
    resourceGroup = "xxxxx"
    region = "eastus"
    pricingTier = "Consumption"

    setRuntime(closureOf<GradleRuntimeConfig> {
        os("Linux")
        javaVersion("17")
    })
    setAppSettings(closureOf<MutableMap<String, String>> {
        put("FUNCTIONS_EXTENSION_VERSION", "~4")
    })
    //setAuth(closureOf<GradleAuthConfig> { type = "azure_cli" })
    //localDebug = "transport=dt_socket,server=y,suspend=n,address=5005"
}

tasks.named<Test>("test") {
    useJUnitPlatform()
}

tasks.register<Copy>("copyEnv") {
    from(".env")
    into("build/azure-functions/xxxxx/")
}

tasks.getByName("build").dependsOn("copyEnv")

repositories {
    mavenCentral()
    maven { url = uri("https://repo.spring.io/libs-snapshot-local") }
    maven { url = uri("https://repo.spring.io/libs-milestone-local") }
    maven { url = uri("https://repo.spring.io/libs-release-local") }
    //maven { url = uri("https://repo.spring.io/release") }
}

Question: Same Artifact for multiple stages (dev, qa, prod)?

Motivation

  • Reduce build time by running artifact creation (e.g. gradle azureFunctionsPackage/-Zip) only once
  • Have artifact consistency across stages

Approach

  • Build job
    • Run gradle azureFunctionsPackage/-Zip
    • Upload to GHA cache via upload-artifact action
  • Deploy Job (for each stage)
    • Download artifact from GHA cache via download-artifact action to gradle build folder
    • Run gradle azurefunctionsDeploy

Question

  • Which artifacts would have to be stored and downloaded to prevent a build during azureFunctionsDeploy?

Please remove the message "default messager has already been registered"

In a multi-project build, we have several projects that applies the azure-functions plugin. Unfortunately, it seems like the following snippet

       try {
            AzureOperationAspect.aspectOf().beforeEnter(var8);
            AzureTaskManager.register(new GradleAzureTaskManager());
            AzureMessager.setDefaultMessager(new GradleAzureMessager(project.getLogger()));
            AzureFunctionsExtension extension = (AzureFunctionsExtension)project.getExtensions().create("azurefunctions", AzureFunctionsExtension.class, new Object[]{project});
            TelemetryAgent.getInstance().initTelemetry("azure-functions-gradle-plugin", (String)StringUtils.firstNonBlank(new String[]{AzureFunctionsPlugin.class.getPackage().getImplementationVersion(), "develop"}), BooleanUtils.isNotFalse(extension.getAllowTelemetry()));
            TelemetryAgent.getInstance().showPrivacyStatement();

Runs through the code:
AzureMessager.setDefaultMessager(new GradleAzureMessager(project.getLogger()));

Which checks against a static instance which is already populated in an previous application of the same plugin. This results in the code being executed in AzureMessager.java:

            AzureMessager.getMessager().warning("default messager has already been registered");

We'd like that message removed please.

Missing wiki info how to use env profiles (with Srping Boot)

The Azure Web App always runs the Spring Boot project without any env profile.

I already tried the following without success:

  • gradle parameter gradle azureWebAppDeploy -Dspring.profiles.active=prod
  • env variable in the web app and ci stage SPRING_PROFILES_ACTIVE=prod

azure-functions-gradle-plugin should not try to download ExtensionBundle.Preview

I'm working on Linux/Java8 setup with Azure Functions.

In order to use UAMI with Blob Trigger, I'm testing the latest ExtensionBundle.Preview as discussed on #6423 (it is under Azure organization).

When building the with azureFunctionsPackageZip task, the plugin is trying to install the extension with functions core tools. Per the current login in PackageHandler, it will not download with func core tools if host.json is declared with ExtensionBundle. IMO, the same logic should apply for ExtensionBundle.Preview as well.

Can we align the handling between ExtensionBundle and ExtensionBundle.Preview?

Deployment with success even if the build fails

Hi!

I'm working on a POC using Azure Functions, Micronaut and Gradle. I successfully run and test the application in my local environment, then when I am using gradlew azureFunctionsDeploy I'm receiving the following output:

Successfully created the function app: eab-micronaut-serverless-poc
Trying to deploy the function app...
Trying to deploy artifact to eab-micronaut-serverless-poc...

> Task :azureFunctionsDeploy FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':azureFunctionsDeploy'.
> okhttp3.Cookie.toString(Z)Ljava/lang/String;

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

Still, when checking into Azure portal, I see the function up and running and testing the exposed endpoints works well.

Azure Functions plugin requires Java 11

The latest release of azure functions gradle plugin requires Java 11 as the Jars compilation target is class file version 55.

Is there any specific reason for bumping the class version?

Conflicts between springframework.boot and azure.azurefunctions plugins

There appears to be some conflicts between Spring Boot Gradle plugin and Azure Function plugin.

If I have the below:
plugins {
id 'java'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id "com.microsoft.azure.azurefunctions" version "1.7.0"
id 'jacoco'
id 'nu.studer.credentials' version '2.1'
id 'org.sonarqube' version '2.7'
id 'org.springframework.boot' version '2.5.1'
}

When I run azureFunctionsPackage, I receive the following:

Task :azureFunctionsPackage FAILED

Step 1 of 8: Searching for Azure Functions entry points
could not get type for name com.fadv.xtdforce.eaxntransfer.azure.CaseNotificationInvoker from any class loader
org.reflections.ReflectionsException: could not get type for name com.fadv.xtdforce.eaxntransfer.azure.CaseNotificationInvoker
at org.reflections.ReflectionUtils.forName(ReflectionUtils.java:312)
at org.reflections.util.Utils.getMemberFromDescriptor(Utils.java:67)
at org.reflections.util.Utils.getMethodsFromDescriptors(Utils.java:88)
at org.reflections.Reflections.getMethodsAnnotatedWith(Reflections.java:478)
at com.microsoft.azure.toolkit.lib.legacy.function.handlers.AnnotationHandlerImpl.findFunctions(AnnotationHandlerImpl.java:52)
at com.microsoft.azure.plugin.functions.gradle.handler.PackageHandler.findAnnotatedMethods(PackageHandler.java:140)
at com.microsoft.azure.plugin.functions.gradle.handler.PackageHandler.execute(PackageHandler.java:102)
at com.microsoft.azure.plugin.functions.gradle.task.PackageTask.build(PackageTask.java:50)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:494)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:479)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:462)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$400(ExecuteActionsTaskExecuter.java:105)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:273)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:251)
at org.gradle.internal.execution.steps.ExecuteStep.lambda$executeOperation$1(ExecuteStep.java:66)
at java.base/java.util.Optional.orElseGet(Optional.java:362)
at org.gradle.internal.execution.steps.ExecuteStep.executeOperation(ExecuteStep.java:66)
at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:34)
at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:47)
at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:44)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)
at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:34)
at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:72)
at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:42)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:53)
at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:39)
at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:44)
at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:77)
at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:58)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:54)
at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:32)
at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:57)
at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:38)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:63)
at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:30)
at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:176)
at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:76)
at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:47)
at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:43)
at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:32)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:39)
at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:25)
at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:102)
at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:95)
at java.base/java.util.Optional.map(Optional.java:258)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:83)
at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:96)
at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:52)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:83)
at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:54)
at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:88)
at java.base/java.util.Optional.orElseGet(Optional.java:362)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:88)
at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:46)
at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:34)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:43)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$3.withWorkspace(ExecuteActionsTaskExecuter.java:286)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:43)
at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:33)
at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:40)
at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:30)
at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:54)
at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:40)
at org.gradle.internal.execution.impl.DefaultExecutionEngine.rebuild(DefaultExecutionEngine.java:46)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$0(ExecuteActionsTaskExecuter.java:182)
at java.base/java.util.Optional.map(Optional.java:258)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:182)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:411)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:398)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:391)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:377)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.ClassNotFoundException: com.fadv.xtdforce.eaxntransfer.azure.CaseNotificationInvoker
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:435)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at org.reflections.ReflectionUtils.forName(ReflectionUtils.java:310)
... 138 more

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':azureFunctionsPackage'.

Cannot package functions due to error: Can't resolve member named caseNotification for class com.fadv.xtdforce.eaxntransfer.azure.CaseNotificationInvoker

If I remove the Spring Boot plugin, without changing any code. The build works and I can run the application.

Can someone provide an explanation/direction?

Creating an azure http function project using mn results in a broken build

Description

Creating a azure http function project with mn (and gradle, groovy, and spock) results in a broken gradle build.

Steps to reproduce

โ”€โžค mn 
> create-app azure-function-context-path-issue --lang groovy --build gradle --java-version 8 --test spock --features azure-function --features 
> exit
โ”€โžค cd azure-function-context-path-issue
โ”€โžค ./gradlew build
... 
Starting a Gradle Daemon, 1 busy Daemon could not be reused, use --status for details

> Task :compileGroovy FAILED
startup failed:
General error during conversion: java.lang.NoClassDefFoundError: io.micronaut.servlet.http.ServletHttpHandler

java.lang.RuntimeException: java.lang.NoClassDefFoundError: io.micronaut.servlet.http.ServletHttpHandler
        at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:955)
        at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:650)
        at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:627)
        at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:606)
        at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:277)
        at org.gradle.api.internal.tasks.compile.ApiGroovyCompiler.execute(ApiGroovyCompiler.java:67)
        at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:98)
        at org.gradle.api.internal.tasks.compile.GroovyCompilerFactory$DaemonSideCompiler.execute(GroovyCompilerFactory.java:77)
        at org.gradle.api.internal.tasks.compile.daemon.AbstractDaemonCompiler$CompilerWorkAction.execute(AbstractDaemonCompiler.java:135)
        at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
        at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:49)
        at org.gradle.workers.internal.AbstractClassLoaderWorker$1.create(AbstractClassLoaderWorker.java:43)
        at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97)
        at org.gradle.workers.internal.AbstractClassLoaderWorker.executeInClassLoader(AbstractClassLoaderWorker.java:43)
        at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:49)
        at org.gradle.workers.internal.IsolatedClassloaderWorker.run(IsolatedClassloaderWorker.java:30)
        at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:85)
        at org.gradle.workers.internal.WorkerDaemonServer.run(WorkerDaemonServer.java:55)
        at org.gradle.process.internal.worker.request.WorkerAction$1.call(WorkerAction.java:138)
        at org.gradle.process.internal.worker.child.WorkerLogEventListener.withWorkerLoggingProtocol(WorkerLogEventListener.java:41)
        at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:135)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
        at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
        at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
        at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
        at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
        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(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: io.micronaut.servlet.http.ServletHttpHandler
        at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:46)
        at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveNonArrayType(AsmReferenceResolver.java:79)
        at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveType(AsmReferenceResolver.java:70)
        at org.codehaus.groovy.ast.decompiled.MemberSignatureParser.createFieldNode(MemberSignatureParser.java:160)
        at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lambda$createFieldNode$0(DecompiledClassNode.java:220)
        at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.createFieldNode(DecompiledClassNode.java:226)
        at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitMembers(DecompiledClassNode.java:210)
        at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getDeclaredMethods(DecompiledClassNode.java:122)
        at org.codehaus.groovy.ast.ClassNode.getMethods(ClassNode.java:866)
        at org.codehaus.groovy.ast.ClassNode.hasPossibleMethod(ClassNode.java:1260)
        at org.codehaus.groovy.control.StaticImportVisitor.transformMethodCallExpression(StaticImportVisitor.java:288)
        at org.codehaus.groovy.control.StaticImportVisitor.transform(StaticImportVisitor.java:131)
        at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitReturnStatement(ClassCodeExpressionTransformer.java:126)
        at org.codehaus.groovy.ast.stmt.ReturnStatement.visit(ReturnStatement.java:73)
        at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:86)
        at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:164)
        at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
        at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138)
        at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111)
        at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:66)
        at org.codehaus.groovy.control.StaticImportVisitor.visitConstructorOrMethod(StaticImportVisitor.java:106)
        at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:106)
        at org.codehaus.groovy.ast.ClassNode.visitMethods(ClassNode.java:1100)
        at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1093)
        at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52)
        at org.codehaus.groovy.control.CompilationUnit.lambda$addPhaseOperations$3(CompilationUnit.java:207)
        at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:921)
        ... 35 more

Expected behavior

A working project.

Actual behavior

A broken build.

Analysis and Potential Fix

The relevant class lives in the dependency io.micronaut.servlet:micronaut-servlet-core which in the newly created project is only defined for gradle configuration testImplementation and not for implementation. In other words, the application classes will not know about this class and the build fails.

Adding:

    implementation("io.micronaut.servlet:micronaut-servlet-core")

to the build.gradle file in the newly created project fixes the issue.

NOTE:

Quoting discussion on gitter with Graeme Rocher:

Graeme Rocher @graemerocher 15:53
it [adding a direct dependency] shouldnโ€™t be needed as that it a transitive dependency of micronaut-function-http
if that is happening it is probably another bug in the Azure plugins
similar to microsoft/azure-maven-plugins#1051

i.e. it seems that this should be handled by a transitive dependency and not by a direct one. Also Graeme informed me that this issue needs to move from:

https://github.com/micronaut-projects/micronaut-azure/issues

to

https://github.com/microsoft/azure-gradle-plugins/issues

which is where it now lives. I closed the original issue at micronaut-azure.

Environment Information

โ”€โžค mn --version 
Micronaut Version: 2.0.0
JVM Version: 1.8.0_252

โ”€โžค ./gradlew -version                                                                                              1 โ†ต

------------------------------------------------------------
Gradle 6.5
------------------------------------------------------------

Build time:   2020-06-02 20:46:21 UTC
Revision:     a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4

Kotlin:       1.3.72
Groovy:       2.5.11
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          1.8.0_252 (Amazon.com Inc. 25.252-b09)
OS:           Linux 5.4.0-39-generic amd64

Example Application

As this issue is about the templating done by mn, I don't think a sample repository is relevant. If you would still like to have one, I can create one.

Dependency Analysis

Test classpath:

โ”€โžค ./gradlew dependencyInsight --dependency 'micronaut-servlet-core' --configuration testCompileClasspath

> Task :dependencyInsight
io.micronaut.servlet:micronaut-servlet-core:1.0.0 (by constraint)
   variant "apiElements" [
      org.gradle.category            = library
      org.gradle.dependency.bundling = external
      org.gradle.jvm.version         = 8
      org.gradle.libraryelements     = jar (compatible with: classes+resources)
      org.gradle.usage               = java-api
      org.gradle.status              = release (not requested)
   ]

io.micronaut.servlet:micronaut-servlet-core:1.0.0
\--- io.micronaut:micronaut-bom:2.0.0
     \--- testCompileClasspath

io.micronaut.servlet:micronaut-servlet-core -> 1.0.0
\--- testCompileClasspath

A web-based, searchable dependency report is available by adding the --scan option.

app classpath:

โ”€โžค ./gradlew dependencyInsight --dependency 'micronaut-servlet-core' --configuration compileClasspath

> Task :dependencyInsight
No dependencies matching given input were found in configuration ':compileClasspath'

BUILD SUCCESSFUL in 442ms
1 actionable task: 1 executed

also adding an online build scan with a search for micronaut-servlet-core:

https://scans.gradle.com/s/jbtvkmkb7hxni/dependencies?dependencies=micronaut-servlet-core&expandAll

Contributor Function Deploy Failure

Not sure if this is a bug or not, looking forward to getting some feedback.

Summary

I have "Contributor" access to an Azure Function App but I am unable to deploy using gradlew.bat azureFunctionsDeploy.

Steps to Reproduce

Create a Function App, add a user as a "Contributor", and try to deploy as that user.

Expected Results

gradlew.bat azureFunctionsDeploy should be able to run successfully with those permissions (I have done so successfully with a Python Function App). I can also deploy the app as the user which created the Java Function App.

Actual Results:

I get the following error:

Status code 403, {"error":{"code":"AuthorizationFailed","message":"The client '<ME>' with object id '<MY-ID>' does not have authorization to perform action 'Microsoft.Web/serverfarms/read' over scope '/subscriptions/<APP-SUB>/resourceGroups/<APP-RG>/providers/Microsoft.Web/serverfarms/<APP-SERVICE-PLAN>' or the scope is invalid. If access was recently granted, please refresh your credentials."}}

Additional Info

  • I can deploy the app if I add the user as a "Contributor" to the App Service Plan
  • I can provide the code if that is useful

Why local.settings.json is needed for task azureFunctionsPackageZip?

If i get this correct, the zipped function package must not include the local.settings.json file to work.

If i try to run the task azureFunctionsPackageZip without having a local.settings.json file, i get this error:

Execution failed for task ':azureFunctionsPackage'.
> Cannot package functions due to error: Cannot find file: C:\Users\[...]\local.settings.json, please check the document at https://aka.ms/functions-local-settings

Our buildserver which will create the packaged zip as artifact must have a dummy local.settings.json file which will not included at the end if i understand this line of code correctly:

Why is this file mandatory than?

Background: The local.settings.json file is added to .gitignore but because of this gradle task it must generate a dummy local.settings.json, just to make the build work

Skip create AI when set <disableAppInsights> to false

Plugin name and version

azure-functions-gradle-plugin 1.3.0-SNAPSHOT

Plugin configuration in build.gradle

azurefunctions {
    resourceGroup = 'plfunc6302'
    appName = 'plfunc6309'
    pricingTier = 'S1'
    region = 'westus'
    disableAppInsights = 'false'
    runtime {
      os = 'windows'
    }
    localDebug = "transport=dt_socket,server=y,suspend=n,address=5005"
}

Actual behavior

image

Unable to run Azure Functions plugin in Gradle multi-module build

Description
Trying to use the com.microsoft.azure.azurefunctions plugin in a Gradle project with multiple sub projects from a clean state will fail.

ben@ben-dev:~/git/azure-fn-bug$ ./gradlew :app:azureFunctionsPackage

> Configure project :app
default messager has already been registered

> Task :app:azureFunctionsPackage FAILED

Step 1 of 8: Searching for Azure Functions entry points

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:azureFunctionsPackage'.
> generate configuration files and prepare staging directory

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s
13 actionable tasks: 1 executed, 12 up-to-date

Full stacktrace is available at the bottom, but it hints at a classpath error with Caused by: java.lang.ClassNotFoundException: com.microsoft.azure.functions.annotation.FunctionName. Running the jar task first will allow the package to succeed.

ben@ben-dev:~/git/azure-fn-bug$ ./gradlew jar :app:azureFunctionsPackage

> Configure project :app
default messager has already been registered

> Task :app:azureFunctionsPackage

Step 1 of 8: Searching for Azure Functions entry points
1 Azure Functions entry point(s) found.

Step 2 of 8: Generating Azure Functions configurations
Generation done.

Step 3 of 8: Validating generated configurations
Validation done.

Step 4 of 8: Saving host.json
Successfully saved to /home/ben/git/azure-fn-bug/app/build/azure-functions/AzureFnapp/host.json

Step 5 of 8: Saving local.settings.json
Successfully saved to /home/ben/git/azure-fn-bug/app/build/azure-functions/AzureFnapp/local.settings.json

Step 6 of 8: Saving configurations to function.json
Starting processing function: main
Successfully saved to /home/ben/git/azure-fn-bug/app/build/azure-functions/AzureFnapp/main/function.json

Step 7 of 8: Copying JARs to staging directory: /home/ben/git/azure-fn-bug/app/build/azure-functions/AzureFnapp
Copied successfully.

Step 8 of 8: Installing function extensions if needed
Skip install Function extension for HTTP Trigger Functions
Successfully built Azure Functions.

BUILD SUCCESSFUL in 1s
14 actionable tasks: 2 executed, 12 up-to-date

I stepped through the plugin with a debugger, and it looks like if the project we depend on has had its' jar task ran, it will be added to the internal project representation, otherwise it won't -

This causes the annotated method finder to fail, which eventually causes the confusing stacktrace -

The workaround is to always run the jar task before trying to run any Azure function tasks, but that's not ideal.

Reproducer
Clone https://github.com/BenD10/azure-fnapp and run ./gradlew clean :app:azureFunctionsPackage and it will fail. Running ./gradlew jar :app:azureFunctionsPackage will work until the next clean.

Stacktrace

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:azureFunctionsPackage'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:142)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:140)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:128)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:69)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:322)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:309)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:302)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:288)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:462)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:379)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
Caused by: com.microsoft.azure.toolkit.lib.common.operation.OperationException: generate configuration files and prepare staging directory
        at com.microsoft.azure.toolkit.lib.common.operation.AzureOperationAspect.afterThrowing(AzureOperationAspect.java:88)
        at com.microsoft.azure.toolkit.lib.common.operation.AzureOperationAspect.afterThrowing(AzureOperationAspect.java:49)
        at com.microsoft.azure.plugin.functions.gradle.task.PackageTask.build(PackageTask.java:58)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:236)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:221)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:204)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:187)
        at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:165)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.executeDelegateBroadcastingChanges(CaptureStateAfterExecutionStep.java:124)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:80)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:58)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:181)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:71)
        at org.gradle.internal.Either$Right.fold(Either.java:175)
        at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:69)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:47)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:36)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:25)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:110)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:102)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNoEmptySources(SkipEmptyWorkStep.java:254)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:91)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:56)
        at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:32)
        at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:21)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
        at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:281)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:139)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:128)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:69)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:322)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:309)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:302)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:288)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:462)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:379)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
Caused by: org.gradle.api.GradleException: Cannot package functions due to error: null
        at com.microsoft.azure.plugin.functions.gradle.task.PackageTask.build(PackageTask.java:56)
        ... 116 more
Caused by: com.microsoft.azure.toolkit.lib.common.exception.AzureToolkitRuntimeException
        at com.microsoft.azure.toolkit.lib.legacy.function.handlers.AnnotationHandlerImpl.findFunctions(AnnotationHandlerImpl.java:58)
        at com.microsoft.azure.plugin.functions.gradle.handler.PackageHandler.findAnnotatedMethods(PackageHandler.java:153)
        at com.microsoft.azure.plugin.functions.gradle.handler.PackageHandler.execute(PackageHandler.java:111)
        at com.microsoft.azure.plugin.functions.gradle.task.PackageTask.build(PackageTask.java:52)
        ... 116 more
Caused by: java.lang.ClassNotFoundException: com.microsoft.azure.functions.annotation.FunctionName
        at org.apache.commons.lang3.ClassUtils.getClass(ClassUtils.java:1068)
        at org.apache.commons.lang3.ClassUtils.getClass(ClassUtils.java:1102)
        at com.microsoft.azure.toolkit.lib.legacy.function.handlers.AnnotationHandlerImpl.findFunctions(AnnotationHandlerImpl.java:54)

azure-functions-gradle-plugin v1.7.0 fails to find Azure Functions Core Tools

This issue is for a:

  • bug report
  • feature request
  • documentation issue or request
  • regression

Prerequisites / system info

$ func --version
3.0.3568

$ readlink -f $(which func)
/usr/lib/azure-functions-core-tools-3/func

$ uname -a
Linux ITEM-S94428 5.4.72-microsoft-standard-WSL2 #1 SMP Wed Oct 28 23:40:43 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

$ az --version
azure-cli                         2.27.2

core                              2.27.2
telemetry                          1.0.6
...
  • Azure Function Core Tools 3.0.3568
  • Java 11
  • OS: Ubuntu 20.04 on WSL2, host Windows 10 (20H2)
  • I am logged on Azure with az login

Steps to reproduce

I have a starter template for Azure Functions + Kotlin + Gradle, which works fine for version 1.5.* and 1.6.0 of azure-functions-gradle-plugin, but when upgrading to version 1.7.0 it fails with:

Execution failed for task ':azureFunctionsRun'.
> Cannot run functions locally due to error:Cannot run functions locally due to error: Azure Functions Core Tools can not be found.

And as I have shown above, Azure Function Core Tools v3 is installed.

My host.json is currently:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[2.*, 3.0.0)"
  }
}

But I have also tried with "version": "[1.*, 2.0.0)", with same result.

Azure Function Name Length Issue

I went to deploy a Functions App with 37 characters. Sadly, the build failed stating that app names may only be 40 characters long.

I changed the suffix from "prod" to "test" and it deployed without issue.

I changed "prod" to "pro" and it deployed fine.

xxxxxxxxx-xxxxxxxxxxx-xxxxxxxxxx-test <- worked (existing app)
xxxxxxxxx-xxxxxxxxxxx-xxxxxxxxxx-prod <- did not work (existing app)

yxxxxxxxx-xxxxxxxxxxx-xxxxxxxxxx-test <- did not work

These naming limitations are no doubt painful for all ๐Ÿ˜ฉ.

Failed to deploy to Function App with resource creation or updating, invalid parameters founded, please correct the value with messages below:
$.name: may only be 40 characters long.
com.microsoft.azure.toolkit.lib.common.exception.AzureToolkitRuntimeException: Invalid parameters founded, please correct the value with messages below:
$.name: may only be 40 characters long
        at com.microsoft.azure.toolkit.lib.common.validator.SchemaValidator.validateAndThrow(SchemaValidator.java:120)
        at com.microsoft.azure.toolkit.lib.common.validator.SchemaValidator.validateAndThrow(SchemaValidator.java:113)
        at com.microsoft.azure.toolkit.lib.common.validator.SchemaValidator.validateAndThrow(SchemaValidator.java:109)
        at com.microsoft.azure.toolkit.lib.appservice.plan.AppServicePlanDraft.createResourceInAzure(AppServicePlanDraft.java:89)
        at com.microsoft.azure.toolkit.lib.appservice.plan.AppServicePlanDraft.createResourceInAzure(AppServicePlanDraft.java:36)
        at com.microsoft.azure.toolkit.lib.common.cache.Cache1.update(Cache1.java:96)
        at com.microsoft.azure.toolkit.lib.common.cache.Cache1.lambda$update$6(Cache1.java:131)
        at com.github.benmanes.caffeine.cache.UnboundedLocalCache.lambda$computeIfAbsent$2(UnboundedLocalCache.java:239)
        at [email protected]/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
        at com.github.benmanes.caffeine.cache.UnboundedLocalCache.computeIfAbsent(UnboundedLocalCache.java:235)
        at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:108)
        at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:62)
        at com.microsoft.azure.toolkit.lib.common.cache.Cache1.update(Cache1.java:131)
        at com.microsoft.azure.toolkit.lib.common.model.AbstractAzResource.doModify(AbstractAzResource.java:269)
        at com.microsoft.azure.toolkit.lib.common.model.AbstractAzResourceModule.create(AbstractAzResourceModule.java:376)
        at com.microsoft.azure.toolkit.lib.common.model.AbstractAzResourceModule.create(AbstractAzResourceModule.java:47)
        at com.microsoft.azure.toolkit.lib.common.model.AzResource$Draft.commit(AzResource.java:260)
        at com.microsoft.azure.toolkit.lib.appservice.task.CreateOrUpdateFunctionAppTask.lambda$getServicePlanTask$15(CreateOrUpdateFunctionAppTask.java:244)
        at com.microsoft.azure.toolkit.lib.appservice.task.CreateOrUpdateFunctionAppTask.lambda$registerSubTask$5(CreateOrUpdateFunctionAppTask.java:106)
        at com.microsoft.azure.toolkit.lib.appservice.task.CreateOrUpdateFunctionAppTask.doExecute(CreateOrUpdateFunctionAppTask.java:271)
        at com.microsoft.azure.toolkit.lib.appservice.task.CreateOrUpdateFunctionAppTask.doExecute(CreateOrUpdateFunctionAppTask.java:44)
        at com.microsoft.azure.toolkit.lib.common.task.AzureTask.execute(AzureTask.java:158)
        at com.microsoft.azure.plugin.functions.gradle.handler.DeployHandler.createOrUpdateFunctionApp(DeployHandler.java:272)
        at com.microsoft.azure.plugin.functions.gradle.handler.DeployHandler.execute(DeployHandler.java:115)
        at com.microsoft.azure.plugin.functions.gradle.task.DeployTask.deploy(DeployTask.java:50)
        at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at [email protected]/java.lang.reflect.Method.invoke(Method.java:568)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:242)

Ref to 40 chars: https://github.com/microsoft/azure-maven-plugins/blob/833ffe5a39fcaa6afae372857e7bfe47120985bf/azure-toolkit-libs/azure-toolkit-common-lib/src/main/resources/schema/appservice/AppServicePlanName.json#L6
Ref to 32 chars in Spring Boot Applications: https://github.com/microsoft/azure-maven-plugins/blob/833ffe5a39fcaa6afae372857e7bfe47120985bf/azure-spring-apps-maven-plugin/src/main/resources/schema/App.json#L12

Screenshot 2023-08-03 at 21 13 03

CD/Github Action Integration

I am impressed by how well this plugin works in Gradle. The only problem i have now before i can fully integrate the function into my release pipeline is the authentication when i want to deploy the application. Everytime a browser window opens and i have to select the wanted account. How can i go around that and make it work in a pipeline?
Thanks for your Help :)

SignalR library is not available at runtime

The package plugin filters out dependencies matching azure-function-java-library from packaging -

However this also has the side effect of filtering out the SignalR runtime library for Azure functions which will cause those to fail since the artifact name is azure-functions-java-library-signalr.

Workaround
We're using the following workaround to ensure it gets packaged up.

tasks.withType<com.microsoft.azure.plugin.functions.gradle.task.PackageTask> {
        doLast {
            copy {
                from(configurations.runtimeClasspath) {
                    include("azure-functions-java-library-signalr*")
                }
                into(layout.buildDirectory.dir("azure-functions/$FNAPP/lib"))
            }
        }
}

Azure Functions - option to block automatic Azure resources creation (function app/plan/storage)

This request is similar to microsoft/azure-maven-plugins#1651, but for Azure Function Apps instead of web apps.

I'm creating the Azure resources stack in a different workflow/pipeline using a Bicep file. Ideally, I'd create/reuse Storage, AppInsights, App Service plans and even Function Apps from the IaC Bicep file, and deploy all functions using the Gradle plugin.

This may be obvious, but adding a skipCreateAzureResource parameter in the azurefunctions section in build.gradle triggers and error when running ./gradlew azureFunctionsDeploy --stacktrace

azurefunctions {
    resourceGroup = '...'
    appName = '...'
    pricingTier = 'Consumption'
    region = 'eastus'
    skipCreateAzureResource = true
...
org.gradle.api.GradleScriptException: A problem occurred evaluating root project '(redacted)'.
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
        ... 
Caused by: groovy.lang.MissingPropertyException: Could not set unknown property 'skipCreateAzureResource' for extension 'azurefunctions' of type com.microsoft.azure.plugin.functions.gradle.AzureFunctionsExtension.
        at org.gradle.internal.metaobject.AbstractDynamicObject.setMissingProperty(AbstractDynamicObject.java:118)
        at org.gradle.internal.metaobject.ConfigureDelegate.setProperty(ConfigureDelegate.java:104)
        at build_61eqnvyogxgq1hjothffjpz9e$_run_closure4.doCall(/home/jarrarte/work/gap/tfa/src/spikes/ADMISSIONS-12756/word-to-pdf/word-to-pdf-azure/build.gradle:54)
        ... 
        ... 159 more

Deploy throw expection when set <disableAppInsights> to false and set <appInsightsKey> or <appInsightsInstance>

Plugin name and version

azure-functions-gradle-plugin 1.3.0-SNAPSHOT

Plugin configuration in build.gradle

azurefunctions {
resourceGroup = 'plfunc6302'
appName = 'plfunc6309'
pricingTier = 'S1'
region = 'westus'
disableAppInsights = 'false'
appInsightsInstance = 'ai09'
runtime {
os = 'windows'
}
}

Actual behavior

com.microsoft.azure.common.exceptions.AzureExecutionException: Contradictory configurations for application insights, specify 'appInsightsKey' or 'appInsightsInstance' if you want to enable it, and specify 'disableAppInsights=true' if you want to disable it.      
        at com.microsoft.azure.plugin.functions.gradle.handler.DeployHandler.validateApplicationInsightsConfiguration(DeployHandler.java:357)
        at com.microsoft.azure.plugin.functions.gradle.handler.DeployHandler.updateFunctionApp(DeployHandler.java:158)
        at com.microsoft.azure.plugin.functions.gradle.handler.DeployHandler.createOrUpdateFunctionApp(DeployHandler.java:132)      
        at com.microsoft.azure.plugin.functions.gradle.handler.DeployHandler.execute(DeployHandler.java:115)
        at com.microsoft.azure.plugin.functions.gradle.task.DeployTask.deploy(DeployTask.java:47)
        at sun.reflect.GeneratedMethodAccessor429.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:49)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:42)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:727)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:694)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.run(ExecuteActionsTaskExecuter.java:568)
        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.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:553)    
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:536)   
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:109)       
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:276)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:265)
        at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$1(ExecuteStep.java:33)
        at java.util.Optional.orElseGet(Optional.java:267)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:33)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
        at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:67)
        at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:36)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:49)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:34)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:43)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
        at org.gradle.internal.execution.steps.CatchExceptionStep.execute(CatchExceptionStep.java:34)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:44)
        at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:54)
        at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:38)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:49)
        at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:153)
        at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:67)
        at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:41)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:44)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:33)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:92)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:85)
        at java.util.Optional.map(Optional.java:215)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:94)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:79)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:53)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78)
        at java.util.Optional.orElseGet(Optional.java:267)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:40)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:28)
        at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:192)   
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:184)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:114)        
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)   
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)     
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        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.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.execution.plan.DefaultPlanExecutor.process(DefaultPlanExecutor.java:72)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.executeWithServices(DefaultTaskExecutionGraph.java:189)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph.execute(DefaultTaskExecutionGraph.java:166)
        at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:41)
        at org.gradle.execution.DefaultBuildWorkExecutor.execute(DefaultBuildWorkExecutor.java:40)
        at org.gradle.execution.DefaultBuildWorkExecutor.access$000(DefaultBuildWorkExecutor.java:24)
        at org.gradle.execution.DefaultBuildWorkExecutor$1.proceed(DefaultBuildWorkExecutor.java:48)
        at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:49)
        at org.gradle.execution.DefaultBuildWorkExecutor.execute(DefaultBuildWorkExecutor.java:40)
        at org.gradle.execution.DefaultBuildWorkExecutor.execute(DefaultBuildWorkExecutor.java:33)
        at org.gradle.execution.IncludedBuildLifecycleBuildWorkExecutor.execute(IncludedBuildLifecycleBuildWorkExecutor.java:36)    
        at org.gradle.execution.DeprecateUndefinedBuildWorkExecutor.execute(DeprecateUndefinedBuildWorkExecutor.java:41)
        at org.gradle.execution.BuildOperationFiringBuildWorkerExecutor$ExecuteTasks.run(BuildOperationFiringBuildWorkerExecutor.java:57)
        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.execution.BuildOperationFiringBuildWorkerExecutor.execute(BuildOperationFiringBuildWorkerExecutor.java:42)    
        at org.gradle.initialization.DefaultGradleLauncher.runWork(DefaultGradleLauncher.java:255)
        at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:164)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:140)
        at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:120)
        at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:74)
        at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:67)
        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:67)
        at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:56)
        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:80)
        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:60)    
        at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:38)    
        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:29)
        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(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
        at java.lang.Thread.run(Thread.java:748)


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':azureFunctionsDeploy'.
> Cannot deploy functions due to error: Contradictory configurations for application insights, specify 'appInsightsKey' or 'appInsightsInstance' if you want to enable it, and specify 'disableAppInsights=true' if you want to disable it.

Caused by: com.networknt.schema.JsonSchemaException: Unknown MetaSchema: https://json-schema.org/draft-04/schema

Version๏ผš
id "com.microsoft.azure.azurewebapp" version "1.2.0"

Config:
azurewebapp {
subscription = 'xxxx'
resourceGroup = 'xxxxx'
appName = 'ixxxx'
runtime {
os = 'Linux'
webContainer = 'Java SE'
javaVersion = 'Java 11'
}
}

When I run 'gradle azureWebAppDeploy'. I got this error.
In the source code๏ผŒIt seems use the json-schema V7๏ผŒWhy I got this 04 errorใ€‚

Caused by: java.lang.ExceptionInInitializerError
at com.microsoft.azure.toolkit.lib.common.validator.SchemaValidator.getInstance(SchemaValidator.java:67)
at com.microsoft.azure.plugin.webapps.gradle.DeployTask.validateConfiguration(DeployTask.java:78)
at com.microsoft.azure.plugin.webapps.gradle.DeployTask.validate(DeployTask.java:103)
at com.microsoft.azure.plugin.webapps.gradle.DeployTask.deploy(DeployTask.java:70)
....
Caused by: com.networknt.schema.JsonSchemaException: Unknown MetaSchema: https://json-schema.org/draft-04/schema
at com.networknt.schema.JsonSchemaFactory.findMetaSchemaForSchema(JsonSchemaFactory.java:287)
at com.networknt.schema.JsonSchemaFactory.createValidationContext(JsonSchemaFactory.java:278)
at com.networknt.schema.JsonSchemaFactory.newJsonSchema(JsonSchemaFactory.java:272)
at com.networknt.schema.JsonSchemaFactory.getSchema(JsonSchemaFactory.java:391)
at com.microsoft.azure.toolkit.lib.common.validator.SchemaValidator.registerSchema(SchemaValidator.java:74)
at com.microsoft.azure.toolkit.lib.common.validator.SchemaValidator.registerSchema(SchemaValidator.java:80)

Missing region identifiers in Wiki

The Wiki currently documents 21 region identifiers. Yet there are plenty more to choose from.

Comparing the identifiers from the Wiki and the region names on Azure, it seems as if the identifiers can be derived by removing the spaces and changing everything to lowercase. So "Switzerland North" would be switzerlandnorth.
Is that correct? If yes, you should add that explanation to the Wiki. If no, what are the identifiers for other regions?

Azure Function Cloud Runtime hangs when a wrong target java runtime is configured

This issue is for a:

- [X ] bug report
- [ ] feature request
- [ ] documentation issue or request
- [ ] regression

Prerequisites

  • Java 11
  • You are logged on Azure with az login

Steps to reproduce

  • Unzip the sample and run gradlew azureFunctionDeploy on a valid Azure Subscription
  • Note the generated UUID
  • run curl https://spring-function-<UUID>-java-11.azurewebsites.net/api/hello -d "{\"name\":\"Azure\"}"

Expected behavior

  • Azure Functions console should notice user about wrong compiled target classes
    OR
  • Guess right targetCompatibility for Cloud Runtime Azure Function

Actual behavior

Azure Functions hangs, after some minutes functions api throw a 500 error after 5 minutes of timeout

Workaround

  • Use a variable to set both sourceCompatibility and azurefunctions.runtime.javaVersion to not forget to set a right target jdk as it's done in the provided sample (uncomment it)

Suggestion for a fix

  • Inside AzureFunctions extension, try to guess JavaVersion from sourceCompatibility or targetCompatibility to prevent a misconfiguration.

Notes

  • Azure Functions runtime is set to Java 8 by default
  • This issue is not reproducible with local azure runtime functions as it may use right local JDK version (have java 11 installed locally, didn't test it on a java 8 runtime)

appSettings doesn't recognize property substitution

Variables in the appSettings section are not replaced. they seem to evaluate to "null".

Consider this configuration:

azurefunctions {
    resourceGroup = "$azureResourceGroup"
    appName = "$azureFunctionsAppName"
    pricingTier = "$azurePricingTier"
    region = "$azureRegion"
    runtime {
      os = "$azureFunctionsOS"
    }
    appSettings {
      app_password = "$appPassword"
  	}
    localDebug = "transport=dt_socket,server=y,suspend=n,address=5005"
}

The variables in resourceGroup, appName and in nested element runtime->os are all correctly replaced by values in gradle.properties

However the $appPassword seems to evaluate to "null" - I tried re-using another property such as $azureFunctionsOS and this resulted in a null value in the Azure Portal as well.

image

Help for configuration in Kotlin DSL

I would like to configure this plugin in a Kotlin DSL way.

It seems the proper way is doing this

plugins {
    kotlin("jvm")
    id("com.microsoft.azure.azurefunctions") version "1.4.0"
}

azurefunctions {
    //subscription = <redacted>
    resourceGroup = "azure-functions-beeobs-rg"
    appName = "azure-functions-beeobs"
    pricingTier = "Consumption"
    localDebug = "transport=dt_socket,server=y,suspend=n,address=5005"
    allowTelemetry = false

   // It seems I can't declare any nested properties there
    appSettings["foo"] = "bar"
    runtime.os = "linux"
    authentication.type = "azure_cli"
    deployment.type = "run_from_blob"
     */
}

But when I'm trying to run azureFunctionsRun gradle task, I get the following error

(...)\api\build.gradle.kts:70:5: Unresolved reference: appSettings

Got the same with runtime.os authentication.type and deployment.type

Can anyone point me the right way to configure it in kts ?

Sample project : azure-function-kts-issue-68.zip

Thanks

Plugin Appears to Break Builds With Gradle 8.1, Causing `org.objectweb.asm.MethodTooLargeException`

With Gradle 8.1 and the following "minimal" project setup all Gradle targets fail with the same exception if the Azure Functions plugin is part of the configuration. Commenting out the Azure Functions plugin makes the build work again.

plugins {
    id("org.springframework.boot") version "3.0.6"
    id("io.spring.dependency-management") version "1.1.0"
    kotlin("jvm") version "1.7.22"
    kotlin("plugin.spring") version "1.7.22"
    kotlin("kapt") version "1.7.22"

    // The plugin will cause Gradle 8.1 to fail with an exception: Method too large
    id("com.microsoft.azure.azurefunctions") version "1.12.1"
}

Running a clean (or any other target) yields a org.objectweb.asm.MethodTooLargeException:

$ ./gradlew clean --stacktrace

FAILURE: Build failed with an exception.
[..]
* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'gradle-playgroud'.
        at org.gradle.configuration.project.LifecycleProjectEvaluator.wrapException(LifecycleProjectEvaluator.java:84)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:77)
[..]
Caused by: org.objectweb.asm.MethodTooLargeException: Method too large: com/azure/resourcemanager/appservice/implementation/WebAppsClientImpl.$deserializeLambda$ (Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object;
        at org.objectweb.asm.MethodWriter.computeMethodInfoSize(MethodWriter.java:2088)
        at org.objectweb.asm.ClassWriter.toByteArray(ClassWriter.java:511)
        at org.gradle.internal.classpath.InstrumentingClasspathFileTransformer.lambda$visitEntries$1(InstrumentingClasspathFileTransformer.java:211)
        ... 15 more

The same project setup works with Gradle 8.0.

The option "allowTelemetry" has no effect

It's great that you should be able to turn off the telemetry option via gradle extension

azureFunctions {
   allowTelemetry = false 
}

Though the option doesn't seem to work. When I specify this snippet in the my build.gradle file, it still sends requests to Microsoft:

This is the output for my squid cache:

1689197789.908    127 172.21.0.1 NONE_NONE/200 0 CONNECT dc.services.visualstudio.com:443 - HIER_DIRECT/40.78.253.199 -
1689197789.990    108 172.21.0.1 NONE_NONE/200 0 CONNECT dc.services.visualstudio.com:443 - HIER_DIRECT/40.78.253.199 -
1689197789.991     82 172.21.0.1 TCP_MISS/200 619 POST https://dc.services.visualstudio.com/v2/track - HIER_DIRECT/40.78.253.199 application/json
1689197790.077     85 172.21.0.1 TCP_MISS/200 619 POST https://dc.services.visualstudio.com/v2/track - HIER_DIRECT/40.78.253.199 application/json

Inspecting the AzureFunctionsPlugin.java, I find through code inspection that the option cannot possibly work (I've also stepped through the debugger to verify this).

   public void apply(Project project) {
        JoinPoint var8 = Factory.makeJP(ajc$tjp_0, this, this, project);

        try {
            AzureOperationAspect.aspectOf().beforeEnter(var8);
            AzureTaskManager.register(new GradleAzureTaskManager());
            AzureMessager.setDefaultMessager(new GradleAzureMessager(project.getLogger()));
            AzureFunctionsExtension extension = (AzureFunctionsExtension)project.getExtensions().create("azurefunctions", AzureFunctionsExtension.class, new Object[]{project});
            TelemetryAgent.getInstance().initTelemetry("azure-functions-gradle-plugin", (String)StringUtils.firstNonBlank(new String[]{AzureFunctionsPlugin.class.getPackage().getImplementationVersion(), "develop"}), BooleanUtils.isNotFalse(extension.getAllowTelemetry()));
            TelemetryAgent.getInstance().showPrivacyStatement();

            try {
                CacheManager.evictCache("<ALL>", "<ALL>");
            } catch (ExecutionException var11) {
            }

            Azure.az().config().setLogLevel(HttpLogDetailLevel.NONE.name());
            Azure.az().config().setUserAgent(TelemetryAgent.getInstance().getUserAgent());
            TaskContainer tasks = project.getTasks();
            TaskProvider packageTask = tasks.register("azureFunctionsPackage", PackageTask.class, (task) -> {
                task.setGroup("AzureFunctions");
                task.setDescription("Package current project to staging folder.");
                task.setFunctionsExtension(extension);
            });
...

While the extension is indeed registered, it is not populated with values until project is configured, e.g. project.afterEvaluate(), and the initialization of the TelemetryAgent occurs prior to any evaluation of the azureFunctions { } closure. At this point, the value of allowTelemetry in the extension object always evaluates to null, which the BooleanUtils.isNotFalse() evaluates to true (!isFalse(null) is true).

Anyhow, I'd like to be able to disable the telemetry option from my builds. Also, another aspect of this could be to embed (or allow a user to run ./gradlew -Pcom.microsoft.azure.allowTelemetry=false on the command line alternatively set it in gradle.properties).

Also, it maybe good to change the AzureFunctionExtension to use Property<> API with Gradle to allow for Lazy initialization. See here: https://docs.gradle.org/current/userguide/lazy_configuration.html

It would allow tasks you register to connect with the properties of the extension, but let the evaluation of these happen if the task is actually realized.

Deploy on docker runtime will always show trigger like first deploy

Environment

Os: windows
Gradle: 6.0.1

Excepted Behavior

image

Actual Behavior

image

Repro steps:

  1. Build a new docker image
  2. New a project and add all triggers
  3. Run gradle azureFunctionsDeploy with the image
  4. New a project and add one or no trigger
  5. Run gradle azureFunctionsDeploy with the image

Task azureFunctionsDeploy fails if runtime is not configured

Hi everyone,

with the following contents of my Gradle file:

plugins {
  id 'java'
  id 'maven-publish'
  id "com.microsoft.azure.azurefunctions" version "1.4.0"
}

repositories {
  mavenLocal()
  maven {
    url = 'https://repo.spring.io/libs-snapshot-local'
  }

  maven {
    url = 'https://repo.spring.io/libs-milestone-local'
  }

  maven {
    url = 'https://repo.spring.io/release'
  }

  maven {
    url = 'http://repo.maven.apache.org/maven2'
  }
  mavenCentral()
}

dependencies {
  implementation 'org.springframework.cloud:spring-cloud-function-adapter-azure:3.0.10.RELEASE'
  compileOnly 'org.springframework.cloud:spring-cloud-starter-function-web:3.0.10.RELEASE'
  implementation 'io.jsonwebtoken:jjwt-impl:0.11.2'
  implementation 'io.jsonwebtoken:jjwt-jackson:0.11.2'
  implementation 'org.springframework:spring-web:5.2.9.RELEASE'
  compileOnly 'org.projectlombok:lombok:1.18.12'
  annotationProcessor 'org.projectlombok:lombok:1.18.12'

  testImplementation 'org.springframework.boot:spring-boot-starter-test:2.3.4.RELEASE'
  testCompileOnly 'org.projectlombok:lombok:1.18.12'
  testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
}

group = 'my.company'
version = '0.0.1-SNAPSHOT'
description = 'my-app-name'
sourceCompatibility = '1.8'

publishing {
  publications {
    maven(MavenPublication) {
      from(components.java)
    }
  }
}

tasks.withType(JavaCompile) {
  options.encoding = 'UTF-8'
}

jar {
  manifest {
    attributes 'Main-Class': 'my.springboot.Application'
  }
}

azurefunctions {
  resourceGroup = 'my-resource-group'
  appName = 'my-app-name'
  region = 'westeurope'
  runtime {
    os = 'windows'
  }
  appSettings {
    WEBSITE_RUN_FROM_PACKAGE = '1'
    FUNCTIONS_EXTENSION_VERSION = '~3'
    FUNCTIONS_WORKER_RUNTIME = 'java'
    MAIN_CLASS = 'my.springboot.Application'
  }
}

The azureFunctionsDeploy task was always failing with

> Task :azureFunctionsDeploy FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':azureFunctionsDeploy'.
> java.lang.NullPointerException (no error message)

I had to use the --stacktrace argument to find out, that this happens when the runtime element of the context is accessed at com.microsoft.azure.plugin.functions.gradle.handler.DeployHandler.execute(DeployHandler.java:106). So adding a runtime element into the configuration fixed the problem. Nevertheless, runtime is marked as an optional configuration parameter.

Cheers
Patrick

isSessionsEnabled = true does not reflect in function.json

I set is SessionsEnabled = true, but the setting is not reflected in function.json generated after building with gradle azureFunctionsPackage.

  • target source
public class Function {

@FunctionName("FunctionApp")
public void run(
        @ServiceBusQueueTrigger(
               name = "TriggerName",
               queueName = "queueName",
               connection = "ConnectionString", 
               isSessionsEnabled = true
        ) String message,
        ExecutionContext context
) {
  }
}
  • function.json
{
  "scriptFile" : "../func.jar",
  "entryPoint" : "test.Function.run",
  "bindings" : [ {
    "type" : "serviceBusTrigger",
    "direction" : "in",
    "name" : "TriggerName",
    "queueName" : "queueName",
    "connection" : "ConnectionString"
  } ]
}

How to set isSessionsEnabled = true in function.json?

Exception okhttp3.Cookie.toString(Z)Ljava/lang/String; when running azureFunctionsDeploy

Execution failed for task ':azureFunctionsDeploy'.
> okhttp3.Cookie.toString(Z)Ljava/lang/String;

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':azureFunctionsDeploy'.
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:207)
	at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:263)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:205)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:186)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:114)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:409)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:399)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:242)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:150)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:94)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:356)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.NoSuchMethodError: okhttp3.Cookie.toString(Z)Ljava/lang/String;
	at okhttp3.JavaNetCookieJar.saveFromResponse(JavaNetCookieJar.java:45)
	at okhttp3.internal.http.HttpHeaders.receiveHeaders(HttpHeaders.kt:207)
	at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:86)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
	at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:71)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
	at com.microsoft.rest.retry.RetryHandler.intercept(RetryHandler.java:75)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
	at com.microsoft.rest.interceptors.CustomHeadersInterceptor.intercept(CustomHeadersInterceptor.java:140)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
	at com.microsoft.rest.interceptors.UserAgentInterceptor.intercept(UserAgentInterceptor.java:83)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
	at com.microsoft.azure.credentials.AzureTokenCredentialsInterceptor.intercept(AzureTokenCredentialsInterceptor.java:40)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
	at com.microsoft.azure.management.resources.fluentcore.utils.ResourceManagerThrottlingInterceptor.intercept(ResourceManagerThrottlingInterceptor.java:54)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
	at com.microsoft.azure.management.resources.fluentcore.utils.ProviderRegistrationInterceptor.intercept(ProviderRegistrationInterceptor.java:40)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
	at com.microsoft.rest.interceptors.BaseUrlHandler.intercept(BaseUrlHandler.java:43)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
	at com.microsoft.rest.interceptors.RequestIdHeaderInterceptor.intercept(RequestIdHeaderInterceptor.java:29)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
	at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.kt:194)
	at okhttp3.RealCall.execute(RealCall.kt:67)
	at retrofit2.OkHttpCall.execute(OkHttpCall.java:188)
	at retrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:40)
	at retrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:24)
	at retrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:36)
	at retrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:28)
	at rx.Observable.unsafeSubscribe(Observable.java:10327)
	at rx.Completable$10.call(Completable.java:588)
	at rx.Completable$10.call(Completable.java:567)
	at rx.Completable.unsafeSubscribe(Completable.java:2035)
	at rx.Completable.unsafeSubscribe(Completable.java:2083)
	at rx.Completable.unsafeSubscribe(Completable.java:2067)
	at rx.Completable$32.call(Completable.java:2253)
	at rx.Completable$32.call(Completable.java:2250)
	at rx.Observable.unsafeSubscribe(Observable.java:10327)
	at rx.internal.operators.OnSubscribeRedo$2.call(OnSubscribeRedo.java:273)
	at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73)
	at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52)
	at rx.internal.operators.OnSubscribeRedo$5.request(OnSubscribeRedo.java:361)
	at rx.Subscriber.setProducer(Subscriber.java:209)
	at rx.internal.operators.OnSubscribeRedo.call(OnSubscribeRedo.java:353)
	at rx.internal.operators.OnSubscribeRedo.call(OnSubscribeRedo.java:47)
	at rx.Observable.unsafeSubscribe(Observable.java:10327)
	at rx.Completable$10.call(Completable.java:588)
	at rx.Completable$10.call(Completable.java:567)
	at rx.Completable.unsafeSubscribe(Completable.java:2035)
	at rx.Completable.await(Completable.java:1034)
	at com.microsoft.azure.management.appservice.implementation.FunctionAppImpl.zipDeploy(FunctionAppImpl.java:625)
	at com.microsoft.azure.common.deploytarget.DeployTarget.zipDeploy(DeployTarget.java:49)
	at com.microsoft.azure.common.handlers.artifact.ZIPArtifactHandlerImpl.publish(ZIPArtifactHandlerImpl.java:50)
	at com.microsoft.azure.common.function.handlers.artifact.RunFromZipArtifactHandlerImpl.publish(RunFromZipArtifactHandlerImpl.java:38)
	at com.microsoft.azure.plugin.functions.gradle.handler.DeployHandler.execute(DeployHandler.java:116)
	at com.microsoft.azure.plugin.functions.gradle.task.DeployTask.deploy(DeployTask.java:46)

Workaround:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
       classpath("com.squareup.okhttp3:okhttp-urlconnection:4.9.0")
    }
}

JDK: 1.8
Plugin version: 1.4.0

Missing git tags and github releases for two years

It's difficult to observe what is happening between published versions. Even having this repo locally doesn't help with understanding version differences.
Please update your release management process to create git tags and to publish GitHub releases each time any new version is uploaded to Maven.

azureFunctionsPackage 1.12.1 generates "The following dependencies could not be found..."

The plugin Azure Gradle Plugin generates followin message

The following dependencies could not be found, please check whether related modules have been packaged 
[...\build\classes\java\main]   

A kotlin project does not have classes/java/main.
So when using Azure Gradle Plugin, the message appears.
I have not tested with other versions of the Azure Gradle Plugin.

Reproduce

I have done a project at https://github.com/alain-marcel/tutorial-alain-azure-function-kotlin-spring-cloud.git to reproduce the issue.
The project

  • is written in kotlin
  • is a multi-project with only one module called app
  • uses gradle 8.1.1, kotlin 1.8.21, plugin com.microsoft.azure.azurefunctions 1.12.1

The project has two branches:

  • main :
    - does not use spring-cloud
    - message is generated BUT gradle task azureFunctionsPackage is successful
  • spring-cloud-azure
    - uses spring cloud
    - message is generated BUT gradle task azureFunctionsPackage fails

More information : https://github.com/alain-marcel/tutorial-alain-azure-function-kotlin-spring-cloud/blob/main/README.md

Question

I would like to know if the gradle task azureFunctionsPackage executed in branch spring-cloud-azure fails

  • because of my code that is wrong (I am newby with kotlin and spring cloud azure)
  • or because of the Azure Gradle Plugin

Thanks for your response.

Plugin produces exception when used in a multi project build

When using the plugin as a subproject in a multi-project build the following error occurs:

java.io.IOException: Resource not found: /version.txt
        at org.apache.commons.io.IOUtils.resourceToURL(IOUtils.java:1372)
        at org.apache.commons.io.IOUtils.resourceToString(IOUtils.java:1293)
        at org.apache.commons.io.IOUtils.resourceToString(IOUtils.java:1272)
        at com.microsoft.azure.plugin.functions.gradle.telemetry.TelemetryAgent.<init>(TelemetryAgent.java:64)
        at com.microsoft.azure.plugin.functions.gradle.telemetry.TelemetryAgent.<clinit>(TelemetryAgent.java:60)
        at com.microsoft.azure.plugin.functions.gradle.AzureFunctionsPlugin.apply(AzureFunctionsPlugin.java:27)
        at com.microsoft.azure.plugin.functions.gradle.AzureFunctionsPlugin.apply(AzureFunctionsPlugin.java:19)
        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)

To reproduce checkout https://github.com/micronaut-projects/micronaut-starter

Then uncomment the plugin from starter-azure-function/build.gradle

Then run ./gradlew assemble you will see the exception

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.