Search code examples
nugetnuget-package-restoreappveyor

AppVeyor NuGet Restore failing to connect to private account repo


I am attempting to restore packages that I've uploaded to my AppVeyor account NuGet feed, yet it is failing to connect to the feed during the build.

In my appveyor.yml file I have:-

nuget:
  account_feed: true

And I have confirmed that the account feed mentioned in the logs is the correct URL for my account feed. I have also opened that feed by connecting to it using Visual Studio and entering my account credentials. When doing that, I have confirmed that the packages I'm trying to restore exist as expected.

However the build fails with this in the logs:-

    https://ci.appveyor.com/nuget/xxxxxxxxxx-yyyyyyyyyyyy: Unable to load the service index for source https://ci.appveyor.com/nuget/xxxxxxxxxx-yyyyyyyyyyyy.
      The HTTP request to 'GET https://ci.appveyor.com/nuget/xxxxxxxxxx-yyyyyyyyyyyy' has timed out after 100000ms.
NuGet Config files used:
    C:\projects\MyProjectName\Source\NuGet.Config
    C:\Users\appveyor\AppData\Roaming\NuGet\NuGet.Config
    C:\ProgramData\nuget\Config\Microsoft.VisualStudio.Offline.config
    C:\ProgramData\nuget\Config\ServiceFabricSDK.config
Feeds used:
    C:\Users\appveyor\.nuget\packages\
    https://www.nuget.org/api/v2
    https://A-CUSTOM-EXTERNAL-NUGET-FEED-I-ALSO-ACCESS/nuget
    https://ci.appveyor.com/nuget/xxxxxxxxxx-yyyyyyyyyyyy
    C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
    C:\Program Files\Microsoft SDKs\Service Fabric\packages\

Note: The custom external NuGet feed should be unrelated. I have other packages that successfully restore from there before my build breaks with the private account repo attempt.

Is there something I'm missing that will allow me to connect to my AppVeyor account NuGet repo for the restoring of a package? Could it have anything to do with the package itself?


Solution

  • AppVeyor has made some changes not allowing you to implicitly include your private account NuGet repository for public code respositories.

    As in @ilyaf's answer, the discussion here confirms this, and says the following is the reason.

    In previous implementation having this enabled and working for public project was a vulnerability rather than a feature because on your account feed you can have NuGet packages from both public and private projects and anyone submitting PR to public build would have been able to grab private packages from your account feed. It's fixed now.

    So to still get this working, as mentioned in @Feodor Fitsner's comment, you need to configure a new nuget source mentioning your account's NuGet repo.

    Here's what you need to do.

    Go to the Project in AppVeyor that you're trying to build and select the Settings for that project. On the 'Environments' settings tab, add two new Environment Variables:-

    • 'nuget_user'
    • 'nuget_password'

    ...placing your AppVeyor credentials in the values for each of those.

    In your appveyor.yml, add a new NuGet source under the install node.

    install:
      - nuget sources add -Name MyAccountFeed -Source <feed-url> -UserName %nuget_user% -Password %nuget_password%
    

    ...where <feed-url> is your NuGet feed URL.

    Note: These two steps are defined in steps 2 and 3 or this doc. https://www.appveyor.com/docs/nuget/#configuring-external-private-nuget-feed-for-your-builds

    Now, ensure that you have account_feed and project_feed off for your build (otherwise the build will complain that there are duplicate feeds). Do this by either deleting the following:-

    nuget: account_feed:
    

    OR ensure you have

    nuget:
      account_feed: false
      project_feed: false
    

    Your project should now build correctly, retrieving your NuGet packages from your NuGet account. This, however, may be a workaround to what AppVeyor were trying to initially block with their change.