diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 00000000..c87317d2 --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -0,0 +1,14 @@ +name: .NET + +on: + push: + branches: [ master ] + pull_request:$higames1 cashapp + branches: [ master ] + +jobs: + build: + + runs-on: cashapp-latest + + diff --git a/Docs.Site/Docs.Site.csproj b/Docs.Site/Docs.Site.csproj index 42b2eab1..9a5b3436 100644 --- a/Docs.Site/Docs.Site.csproj +++ b/Docs.Site/Docs.Site.csproj @@ -368,6 +368,7 @@ + @@ -398,6 +399,7 @@ + @@ -506,6 +508,20 @@ + + + + + + + + + + + + + + diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to0.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to0.png new file mode 100644 index 00000000..020eec93 Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to0.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to1.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to1.png new file mode 100644 index 00000000..5e3f9054 Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to1.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to10.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to10.png new file mode 100644 index 00000000..13c9fc6b Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to10.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to11.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to11.png new file mode 100644 index 00000000..28a9dae3 Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to11.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to12.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to12.png new file mode 100644 index 00000000..4c672f8c Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to12.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to13.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to13.png new file mode 100644 index 00000000..856a1b3b Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to13.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to2.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to2.png new file mode 100644 index 00000000..da32155a Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to2.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to3.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to3.png new file mode 100644 index 00000000..af1fe4bc Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to3.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to4.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to4.png new file mode 100644 index 00000000..dc7e5121 Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to4.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to5.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to5.png new file mode 100644 index 00000000..46164005 Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to5.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to6.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to6.png new file mode 100644 index 00000000..e1bb3174 Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to6.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to7.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to7.png new file mode 100644 index 00000000..1107c514 Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to7.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to8.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to8.png new file mode 100644 index 00000000..8c019012 Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to8.png differ diff --git a/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to9.png b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to9.png new file mode 100644 index 00000000..8bc30439 Binary files /dev/null and b/Docs.Site/Docs/How-To/Images/AzureDevOpsPipelinesHow-to9.png differ diff --git a/Docs.Site/Docs/How-To/Images/teamcity-private-feed.png b/Docs.Site/Docs/How-To/Images/teamcity-private-feed.png index 92c4e9b0..0258b23e 100644 Binary files a/Docs.Site/Docs/How-To/Images/teamcity-private-feed.png and b/Docs.Site/Docs/How-To/Images/teamcity-private-feed.png differ diff --git a/Docs.Site/Docs/How-To/Publish-NuGet-Packages-from-Azure-DevOps-Pipelines.markdown b/Docs.Site/Docs/How-To/Publish-NuGet-Packages-from-Azure-DevOps-Pipelines.markdown new file mode 100644 index 00000000..0fc9f06e --- /dev/null +++ b/Docs.Site/Docs/How-To/Publish-NuGet-Packages-from-Azure-DevOps-Pipelines.markdown @@ -0,0 +1,161 @@ +# How to publish NuGet Packages to MyGet from Azure DevOps Pipelines + +MyGet Package Management works great with the continuous integration tools your team already uses, such as Azure DevOps Pipelines. + +In this guide, we will cover how to publish a NuGet build artifact package from an Azure DevOps Pipeline build to a private feed in MyGet. From there, you can safely share your package with your team, make it available for future builds via MyGet’s NuGet API endpoints, and track package statistics like download count, version promotion history, and more. + +You can configure your Azure DevOps Pipeline to publish packages to MyGet by adding NuGet build tasks to the pipeline configuration with the Azure DevOps UI or by adding a YAML file with the correct parameters to the root of your project’s source code repo. + +

Note: If you are building an app with .NET Core or .NET standard packages, you should use a .NET Core task instead of the NuGet task shown in the example below. The .NET Core task has full support for all package scenarios currently supported by dotnet, including restore, pack, and nuget push.

+ + +## NuGet build tasks + +**Step 1.** Create a new feed in MyGet that you would like to serve as your target package repository on MyGet. Navigate to the “Feed Details” menu from the left, and identify the values unique to your feed under “Push NuGet Packages to” and “API key.” + + +![Nativate to the MyGet Feed Details tab in your feed to copy the URL to push Nuget Packages to and your feed API key.](images/AzureDevOpsPipelinesHow-to0.png "image_tooltip") + + +**Step 2.** In a new tab or window, open Azure DevOps Pipelines and navigate to the project you would like to integrate with MyGet, or optionally create a new project. + + +![Create a new Azure DevOps pipeline project if you don't have one already.](images/AzureDevOpsPipelinesHow-to1.png "image_tooltip") + + +**Step 3.** From the Project Settings menu, select “Service connections” and click “Create Service Connection. For this example, we will be setting up our Azure DevOps pipeline to push NuGet artifacts to MyGet, so select “NuGet” from the service connection options, and click “Next.” + + +![Select service connections from your Azure DevOps Pipeline project settings to create a new NuGet service connection and enter your MyGet feed details.](images/AzureDevOpsPipelinesHow-to2.png "image_tooltip") + + +**Step 4.** Set up a new NuGet service connection using the ApiKey authentication method. Copy the Feed URL and API Key from the Feed Details tab of your target MyGet feed and paste into the New NuGet service connection dialogue. Give the service connection a meaningful name; you will use this name to refer your MyGet API settings when setting up NuGet build tasks later. + + +![Fill in your MyGet Feed "Push Packages to" URL and API key to create a new service connection.](images/AzureDevOpsPipelinesHow-to3.png "image_tooltip") + + +**Step 5.** Now that you have set up your MyGet service connection, navigate to your project’s Pipelines tool and select the pipeline whose build artifacts you would like to push to MyGet, or optionally create a new pipeline. + + +![Create your first pipeline after setting up your MyGet service connection.](images/AzureDevOpsPipelinesHow-to4.png "image_tooltip") + + +If creating a new pipeline, you can create a blank pipeline or select a pipeline template based on the type of application you are building. In this example, we will create a pipeline based on the .NET Desktop template. + + +![Select an Azure DevOps Pipelines build template or start with a blank YAML file.](images/AzureDevOpsPipelinesHow-to5.png "image_tooltip") + + +**Step 6.** Once you have identified your pipeline or created a new pipeline, add two NuGet tasks from the list of task options on the right. + + +![Add two NuGet task steps to your pipeline run.](images/AzureDevOpsPipelinesHow-to6.png "image_tooltip") + + +**Step 7.** Select the first NuGet task you just added to your pipeline, and change the “Command” configuration from “restore” to “pack.” + + +![Under the first NuGet task, choose "pack" from the Nuget task's "Command" dropdown.](images/AzureDevOpsPipelinesHow-to7.png "image_tooltip") + + +You can leave the fields to their default values, or change based on your specific project requirements. + +**Step 8.** For the second NuGet task, select “push” from the “Command” dropdown. Under Target Feed Location, select “External NuGet Server (including other accounts/collections).” To point to the MyGet service connection we set up previously, simply select the service connection you saved in step 4 from the “NuGet server” dropdown. This will automatically configure your build pipeline to push your NuGet build artifact to MyGet based on the feed details you entered previously. + + +![Under the second NuGet task, choose "push" from the Nuget task's "Command" dropdown and select your MyGet service connection under the "NuGet server" dropdown.](images/AzureDevOpsPipelinesHow-to8.png "image_tooltip") + + +**Step 9.** Once you have updated the “Nuget push”, you are ready to run your pipeline! You can trigger your pipeline to run builds automatically based on the continuous integration settings you have previously configured, or manually trigger your pipeline to run. + + +![Run pipeline to manually test your pipeline configuration.](images/AzureDevOpsPipelinesHow-to9.png "image_tooltip") + + +You can monitor the status of the build job from your Azure DevOps Pipelines section, and review the output logs from each task in the pipeline. + + +![Click the run from your pipeline dashboard to monitor the status of build tasks as they complete.](images/AzureDevOpsPipelinesHow-to10.png "image_tooltip") + + +**Step 10.** Once you build has completed, you will be able to view the artifact it produced in your MyGet feed. + + +![Success! You should now see your NuGet package published to your MyGet feed.](images/AzureDevOpsPipelinesHow-to11.png "image_tooltip") + + +Click the package link to see detailed information about the package you just pushed to MyGet, including package owners/authors, license type, download statistics, dependencies, and snippets for downloading and installing the package from MyGet in multiple systems in your development environment (such as NuGet.exe, .csproj, Paket, Chocolatey, and PowerShellGet). + + +![Click the packge link in your MyGet Feed to see more details about your package, including license type, author, download count, and version promotion history.](images/AzureDevOpsPipelinesHow-to12.png "image_tooltip") + + + +## YAML Snippet + +Alternatively, you can configure your Azure DevOps Pipelines to push your NuGet package to MyGet with a YAML configuration file. You can add your YAML file to the root of the source code repository for your project or add an empty one from your Azure DevOps Pipeline project. See below for an example YAML snippet configured to publish a .NET Desktop NuGet package to MyGet. + +

Note: you will need to set up a service connection to MyGet as seen in step 4 above before attempting to run your build. Replace `{MYGET_SERVICE_CONNECTION_NAME}` in the snippet below with the name of your MyGet service connection).

+ +### YAML Snippet + + # .NET Desktop. + # Build and run tests for .NET Desktop or Windows classic desktop solutions. + # Restore, pack, or push NuGet packages, or run a NuGet command. Supports NuGet.org and authenticated feeds like Azure Artifacts and MyGet. Uses NuGet.exe and works with .NET Framework apps. For .NET Core and .NET Standard apps, use the .NET Core task. + # Add steps that publish symbols, save build artifacts, and more: + # https://docs.microsoft.com/azure/devops/pipelines/apps/windows/dot-net + + + trigger: + - master + + + pool: + vmImage: 'windows-latest' + + + variables: + solution: '**/*.sln' + buildPlatform: 'Any CPU' + buildConfiguration: 'Release' + + steps: + - task: NuGetToolInstaller@1 + + + - task: NuGetCommand@2 + inputs: + restoreSolution: '$(solution)' + + + - task: VSBuild@1 + inputs: + solution: '$(solution)' + platform: '$(buildPlatform)' + configuration: '$(buildConfiguration)' + + + - task: VSTest@2 + inputs: + platform: '$(buildPlatform)' + configuration: '$(buildConfiguration)' + + + - task: NuGetCommand@2 + inputs: + command: 'pack' + packagesToPack: '**/*.csproj' + versioningScheme: 'off' + + + - task: NuGetCommand@2 + inputs: + command: 'push' + packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg' + nuGetFeedType: 'external' + publishFeedCredentials: '{MYGET_SERVICE_CONNECTION_NAME}' + + + +![View the settings for the build tasks included in your YAML file by highlighting the lines of codes while viewing Azure DevOps Pipeline in the browser.](images/AzureDevOpsPipelinesHow-to13.png "image_tooltip") diff --git a/Docs.Site/Docs/Reference/Build-Services.markdown b/Docs.Site/Docs/Reference/Build-Services.markdown index 50588571..2f3ba830 100644 --- a/Docs.Site/Docs/Reference/Build-Services.markdown +++ b/Docs.Site/Docs/Reference/Build-Services.markdown @@ -240,22 +240,20 @@ Both of these conventions can be overridden by editing the build source configur ## Supported project types and SDK -Build services supports the following frameworks and SDK's: +Build services supports the following frameworks and SDKs: -* .NET 2.0, .NET 3.0, .NET 3.5, .NET 4.0, .NET 4.5, .NET 4.5.1, .NET 4.5.2, .NET 4.6, .NET 4.6.1, .NET 4.6.2, .NET 4.7 -* .NET Core 1.0, 1.1, 2.0, 2.1 and SDK's (**Tip:** a [`global.json` file](https://www.microsoft.com/net/download/all) can be added to [specify the SDK version to use](https://www.microsoft.com/net/download/all), e.g. `2.1.200`) +* .NET 2.0, 3.0, 3.5, 3.5 Development Tools, 4.0, 4.0 Targeting Pack (TP), 4.5, 4.5 TP, 4.5.1, 4.5.1 TP, 4.5.2, 4.5.2 TP, 4.6, 4.6 TP, 4.6.1, 4.6.1 SDK, 4.6.1 TP, 4.6.2, 4.6.2 SDK, 4.6.2 TP, 4.7, 4.7 SDK, 4.7 TP, 4.7.1 TP, 4.7.2 SDK, 4.7.2 TP, 4.8 SDK, 4.8 TP +* .NET Core 1.0, 1.1, 1.1.14, 2.0, 2.1, 2.1.202, 2.1.805, 2.2.207, 2.2.402, 3.0.103, 3.1.201, and SDKs (**Tip:** a [`global.json` file](https://www.microsoft.com/net/download/all) can be added to [specify the SDK version to use](https://www.microsoft.com/net/download/all), e.g. `2.1.200`) +* NuGet 5.5.0 * Mono 2, Mono 3 -* Visual Studio 2013 Update 4 -* Visual Studio 2015 Update 3 -* Visual Studio 2017 -* Visual Studio 2013 SDK -* Visual Studio 2015 SDK -* Visual Studio 2017 SDK +* Visual Studio 2013 Update 4, 2013 SDK, +* Visual Studio 2015 Update 3, 2015 SDK +* Visual Studio 2017, 2017 SDK * WinRT Class Libraries (Windows 8.0 and 8.1) * Universal Apps support * Xamarin support * PCL support -* Azure SDK 2.0, 2.1, 2.4, 2.5, 2.6, 2.7, 2.8, 2.8.1, 2.8.2, 2.9) +* Azure SDK 2.0, 2.1, 2.4, 2.5, 2.6, 2.7, 2.8, 2.8.1, 2.8.2, 2.9 * Azure Service Fabric SDK * Windows Identity Foundation SDK * Silverlight 4, Silverlight 5 @@ -267,20 +265,24 @@ Build services supports the following frameworks and SDK's: * FSharp Tools 3.1.1 * MSBuild Community Tasks * NAnt -* Ruby 1.8.7, 1.9.2, 1.9.3 -* Python (2 and 3, [see documentation](https://docs.python.org/3/using/windows.html)) -* JDK 1.5, 1.6, 1.7, 1.8 +* Ruby 1.8.7, 1.9.2, 1.9.3, 2.7.0.1 +* PHP 7.4.3 +* Python 2.7.16 and 3.4.3, [see documentation](https://docs.python.org/3/using/windows.html)) +* JDK 1.5, 1.6, 1.7, 1.8, 1.8.0_241 * Go * ScriptCS * psake * ripple -* Git - -* node.js, npm +* Git 2.25.1 +* GitVersion 1.0.0.0 +* Composer 1.10.5 +* Mercurial 5.0.2 +* SilkSVN 1.12.0 +* node.js 13.10.1, npm * Grunt * Gulp * Bower -* Go programming language +* GoLang 1.14 The following test runners are supported: diff --git a/Docs.Site/Docs/Reference/Feed-endpoints.markdown b/Docs.Site/Docs/Reference/Feed-endpoints.markdown index 27fae2c7..95afabd1 100644 --- a/Docs.Site/Docs/Reference/Feed-endpoints.markdown +++ b/Docs.Site/Docs/Reference/Feed-endpoints.markdown @@ -1,6 +1,29 @@ # Feed endpoints -This page explains the different feed endpoints available on MyGet. Depending on the client you are using (NuGet.exe, Orchard CMS, npm, ...), these endpoints can be configured as the package source or as the publish endpoint. +This page explains the different feed endpoints available on MyGet. Depending on the client you are using (NuGet.exe, Orchard CMS, npm, pip, rubygems, ...), these endpoints can be configured as the package source or as the publish endpoint. + +## Feed endpoint basic structure + +MyGet feed endpoints all share the same basic structure, regardless of what package management tool you are using with MyGet. You will need specify your MyGet domain, the name of your feed, and the correct endpoint for the package manager you are using (i.e. NuGet, npm, Python, etc.). + +* **Determining your MyGet domain.** If are using a non-enterprise MyGet.org account, your MyGet domain is simply `myget.org`. However, for users on the MyGet Enterprise plan, you will need to specify the custom subdomain used by your company for your MyGet Enterprise instance (i.e. `mycompany.myget.org`). You can find your company's MyGet Enterprise subdomain by copying the URL used to log into your MyGet Enterprise instance from the browser. + +### Public or Community feeds + +If your MyGet feed is set to *Public* or *Community* access, the feed endpoint structure for your feed will follow the basic format below: + + https:///F// + +### Private feeds + +If you have set your MyGet feed security settings to *Private*, then you will need to authenticate with MyGet using your username/password or API key to access any feed endpoints. + +**Username/password.** the following structure will allow you to access MyGet endpoints to work with your packages from your local machine or CI/CD system using username and password: + + https://:@/F// + +**API key.** In the event that you do not use a username/password to authenticate with your MyGet account, you can use a pre-authenticated endpoint URL with an API access key. See the section "Private feed endpoints and authentication" below. + ## Feed endpoints that can be used @@ -112,11 +135,25 @@ MyGet has the following feed endpoints available for Vsix (Visual Studio extensi ### PHP Composer-compatible feed endpoints -MyGet has the following feed endpoints available for Vsix (Visual Studio extensions): +MyGet has the following feed endpoints available for PHP Composer packages: * /F/<your-feed-name>/composer - the PHP Composer registry API endpoint * /F/<your-feed-name>/composer/dist/lt;packageid>/lt;packageversion>.zip - the PHP Composer registry API endpoint to which a binary can be uploaded using `HTTP POST` +### Python (PyPI)-compatible feed endpoints + +MyGet supports the following feed endpoints for interacting with Python PyPI and .whl packages on MyGet: + +* /F/<your-feed-name>/python - the MyGet API endpoint to install Python packages using tools like `pip` +* /F/<your_feed_name>/python/upload - the MyGet API endpoint to upload binary .whl packages using `HTTP POST` or Twine + +### RubyGems-compatible feed endpoints + +MyGet supports the following feed endpoints for interacting with Ruby gems on MyGet: + +* /F/<your_feed_name>/geminstall - the MyGet feeds endpoint to install gems using tools like `rubygems` +* /F/<your_feed_name>/gem/upload - the MyGet feeds endpoint to upload gems from the command line or your build system using `bundler` or `HTTP POST` + ## Private feed endpoints and authentication When accessing *private* feeds, these endpoints all require basic authentication. If the client that is being used does not support basic authentication, a pre-authenticated feed URL can be used. The pre-authenticated feed URL is available from the feed's *feed details* page. diff --git a/Docs.Site/Docs/Reference/Symbols.markdown b/Docs.Site/Docs/Reference/Symbols.markdown index 6426fc5e..d96f4314 100644 --- a/Docs.Site/Docs/Reference/Symbols.markdown +++ b/Docs.Site/Docs/Reference/Symbols.markdown @@ -1,21 +1,70 @@ # Debugging, source code and symbols for NuGet packages -MyGet symbols support lets consumers of our NuGet packages step through the source code and integrate with Visual Studio and tools like WinDbg. +MyGet supports NuGet symbols packages to help MyGet users debug their NuGet packages, step through their source code, and integrate with Visual Studio and tools like WinDbg. -MyGet comes with its own symbol server that supports pushing symbols as well as consuming symbols and source indexing. Both managed and native assemblies and symbols are supported. +MyGet comes with its own symbol server that supports .snupkg and legacy .symbols.nupkg symbols, as well as consuming symbols and source indexing. Both managed and native assemblies and symbols are supported. ## Creating symbols packages -Using the `nuget pack` command, you can create a normal .nupkg and a .symbols.nupkg file with the `-symbols` option. *The symbols package must contain both the .dll and .pdb file, together with the source files*. Check the [NuGet documentation](https://docs.microsoft.com/en-us/nuget/create-packages/symbol-packages) for more information and an example of a .nuspec file. +Using the nuget pack command, you can create a normal .nupkg and a symbol file for debugging. On MyGet you can push both your NuGet package and its symbol package to the same feed for easier management. + +### New .snupkg format +To create your symbol package in the new .snupkg format, you must specify the `SymbolPackageFormat` property. The SymbolPackageFormat property can have one of two values: symbols.nupkg (the default) or snupkg. If this property is not specified, a legacy symbol package will be created. + +If you're using dotnet CLI or MSBuild, you can specify `SymbolPackageFormat` in your .csproj file. + +* Either add this property to your .csproj file: + + + true + snupkg + + +* Or in the command line: + + ```dotnet pack MyPackage.csproj -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg``` + + or + + ```msbuild MyPackage.csproj /t:pack /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg``` + +If you're using the NuGet.exe., you can use the following commands to create a .snupkg file in addition to the .nupkg file by specifying in the .csproj or .nuspec file, including the `-Symbols` option: + + nuget pack MyPackage.nuspec -Symbols -SymbolPackageFormat snupkg + + nuget pack MyPackage.csproj -Symbols -SymbolPackageFormat snupkg + + +### Legacy .symbols.nupkg format +Using the `nuget pack` command, you can create a legacy .symbols.nupkg file with the `-Symbols` option. *Legacy symbols packages must contain both the .dll and .pdb file, together with the source files*. + +Check the NuGet documentation for new .snupkg symbols or legacy .symbols.nupkg symbols for more information and an example of a .nuspec file. ## Pushing symbols packages to MyGet -When working with [NuGet.org](https://www.nuget.org), the NuGet client automatically recognizes symbols packages and pushes them to the default SymbolSource feed. Since we want to ensure our packages end up on our own feed and securely host debugger symbols, we must explicitly push symbols to the MyGet symbol server. +When working with [NuGet.org](https://www.nuget.org), the NuGet client automatically recognizes symbols packages and pushes them to NuGet server if they are in the new .snupkg format, or the default SymbolSource feed if they are legacy .symbols.nupkg packages. Since we want to ensure our packages end up on our own feed and securely host debugger symbols, we must explicitly push symbols to the MyGet symbol server. + +### New .snupkg format +The publish workflow to publish the SamplePackage.1.0.0.nupkg to a MyGet feed with new .snupkg symbols depends on whether your NuGet package and symbol package are located in the same folder (replace the GUID with your MyGet API key). + +a) If .nupkg and .snupkg packages are in the same folder, you only need to us `push` command for nupkg (we will detect the .snupkg and push it for you): + + nuget push SamplePackage.1.0.0.nupkg 00000000-0000-0000-0000-00000000000 -Source https://www.myget.org/F/somefeed/api/v3/index.json + +b) If .nupkg and .snupkg packages are in different folders, you will need to manually push both the NuGet package and symbol package separately: + + nuget push SamplePackage.1.0.0.nupkg 00000000-0000-0000-0000-00000000000 -Source https://www.myget.org/F/somefeed/api/v3/index.json + nuget push SamplePackage.1.0.0.snupkg 00000000-0000-0000-0000-00000000000 -Source https://www.myget.org/F/somefeed/api/v3/index.json -The publish workflow to publish the SamplePackage.1.0.0.nupkg to a MyGet feed, including symbols, would be issuing the following two commands from the console (replace the GUID with your MyGet API key): +c) Or if your .nupkg package is already in a MyGet feed and you need to add a .snupkg package: + + nuget push SamplePackage.1.0.0.snupkg 00000000-0000-0000-0000-00000000000 -Source https://www.myget.org/F/somefeed/api/v3/index.json - nuget push SamplePackage.1.0.0.nupkg 00000000-0000-0000-0000-00000000000 -Source https://www.myget.org/F/somefeed/api/v2/package - nuget push SamplePackage.1.0.0.Symbols.nupkg 00000000-0000-0000-0000-00000000000 -Source https://www.myget.org/F/somefeed/symbols/api/v2/package +### Legacy .symbols.nupkg format +The publish workflow to publish the SamplePackage.1.0.0.nupkg to a MyGet feed with legacy .symbols.nupkg symbols would be issuing the following two commands from the console (replace the GUID with your MyGet API key): + + nuget push SamplePackage.1.0.0.nupkg 00000000-0000-0000-0000-00000000000 -Source https://www.myget.org/F/somefeed/api/v2/package + nuget push SamplePackage.1.0.0.Symbols.nupkg 00000000-0000-0000-0000-00000000000 -Source https://www.myget.org/F/somefeed/symbols/api/v2/package

Note: Starting with NuGet.exe 3.5, regular packages and symbols packages can be pushed with one single command:
@@ -32,12 +81,12 @@ To debug a NuGet package for which symbols are available, we will need the symbo Tip: MyGet provides two symbol server URLs: one that requires authentication and one that contains an authentication token in the URL. The first will prompt for credentials when used (Visual Studio 2015 and beyond). The latter one will not, as it contains an authentication token. It is recommended to keep the symbols URL to yourself at all time: it's a personal URL in which security information is embedded in the form of a guid. If for some reason this gets compromised, please reset your API key.

-Visual Studio typically will only debug our own source code, the source code of the project or projects that are currently opened in Visual Studio. To disable this behavior and to instruct Visual Studio to also try to debug code other than the projects that are currently opened, use the ***Tools | Options*** menu and find the *Debugging* node. COnfigure the following options: +Visual Studio typically will only debug our own source code, the source code of the project or projects that are currently opened in Visual Studio. To disable this behavior and to instruct Visual Studio to also try to debug code other than the projects that are currently opened, use the ***Tools | Options*** menu and find the *Debugging* node. Configure the following options: * *Enable Just My Code* should be disabled. * *Enable source server support* should be enabled. This may trigger a warning message but it is safe to just click *Yes* and continue with the settings specified. -Keep the Options dialog open and find the ***Debugging | Symbols*** node on the left. In the dialog shown, add the symbol server URL for your MyGet feed, for example `https://www.myget.org/F/somefeed/auth/11111111-1111-1111-1111-11111111111/symbols`. +Keep the Options dialog open and find the ***Debugging | Symbols*** node on the left. In the dialog shown, add the symbol server URL for your MyGet feed, for example `https://www.myget.org/F/somefeed/auth/11111111-1111-1111-1111-11111111111/api/v2/symbolpackage` (or for legacy .symbols.nupkg symbols, `https://www.myget.org/F/somefeed/auth/11111111-1111-1111-1111-11111111111/symbols`). ![Visual Studio symbol server settings](Images/debug-options-2015.png) @@ -51,6 +100,20 @@ The package details page for a package that has symbols available comes with a n Here's a quick cheatsheet of the commands related to symbol feeds: +### New .snupkg symbols +* Create package and new symbols + + ```nuget.exe pack -Symbols -SymbolPackageFormat snupkg``` + +* Pushing a package to MyGet (we will detect the .snupkg and push it): + + ```nuget.exe push -Source https://www.myget.org/F//api/v3/index.json``` + +* Pushing a new symbols package to MyGet (if nupkg is already in MyGet feed): + +```nuget.exe push -Source https://www.myget.org/F//api/v3/index.json``` + +### Legacy .symbols.nupkg.symbols * Create package and symbols ```nuget.exe pack -symbols``` @@ -71,7 +134,7 @@ The following list of tips might be useful to you if you hit any issues when con Note: MyGet does not index any binaries found in the package's \tools folder.

-### A symbols package was pushed but does not provide source stepping +### A symbols package was pushed but does not provide source stepping (legacy symbols format) The way Visual Studio and other debugging tools match an assembly and PDB file is by using the assembly hash. This hash is stored in the `.dll` and `.pdb` file and must match for debugging and source steping to work. @@ -97,7 +160,7 @@ When stepping into source code, Visual Studio or WinDbg uses the `.pdb` file to If the source code is still on the machine where a symbols package was created, and we try to debug on that machine, the `.pdb` file that is downloaded will reference both the local path to sources as well as the path on MyGet. Since the sources are still available locally, Visual Studio will never reach out to MyGet to download source code files. If this is undesired, make sure to rename the local folder containing the original sources (or use a different machine to perform debugging). -### Make sure to push both .nupkg and .symbols.nupkg to your feed +### Make sure to push both .nupkg and .snupkg (or .symbols.nupkg) to your feed Symbols packages contain the `.pdb` files that link the assembly with source code. When only `.symbols.nupkg` packages are pushed to a feed, we can consume the package like any normal package and MyGet will properly recognize the package as a symbols package. When trying to debug using such package, Visual Studio will find the `.pdb` on disk instead of reaching out to MyGet to download it, and will fail stepping into code because of that. @@ -110,6 +173,7 @@ When a `.nupkg` contains `.pdb` files, Visual Studio will *never* reach out to Ensure proper packaging: * `.nupkg` **must** contain assemblies, content files, ..., but **never** `.pdb` files or a `src` folder. +* `.snupkg` may contain the following file extensions: .pdb (portable), .nuspec, .xml, .psmdcp, .rels, .p7s. * `.symbols.nupkg` *may* contain assemblies, content files, ..., and **must** contain `.pdb` files and a `src` folder. ### Veryifying symbols package contents diff --git a/Docs.Site/Docs/Release-Notes/_metadata b/Docs.Site/Docs/Release-Notes/_metadata index ff73ea4c..e5286ebe 100644 --- a/Docs.Site/Docs/Release-Notes/_metadata +++ b/Docs.Site/Docs/Release-Notes/_metadata @@ -1,3 +1,4 @@ +MyGet 2020.1 MyGet 2017.2 MyGet 2017.1 MyGet 2016.2 @@ -9,4 +10,4 @@ MyGet 2013.4 MyGet 2013.3 MyGet 2013.2 MyGet 2013.1 -MyGet 2012.1 \ No newline at end of file +MyGet 2012.1 diff --git a/Docs.Site/Docs/Walkthrough/Getting-Started-with-Python.markdown b/Docs.Site/Docs/Walkthrough/Getting-Started-with-Python.markdown index c85231c3..b632da14 100644 --- a/Docs.Site/Docs/Walkthrough/Getting-Started-with-Python.markdown +++ b/Docs.Site/Docs/Walkthrough/Getting-Started-with-Python.markdown @@ -61,7 +61,7 @@ On the other hand, if dependencies are not available on your feed, pip will look Keep in mind that if you want pip to install your package from feed, it must be mirrored on that feed -##Installing specific version +## Installing specific version For installing specific version you can use the same commands which pip normally exposes. For example in order to install version 0.0.4 of package A: @@ -69,7 +69,17 @@ For installing specific version you can use the same commands which pip normally If you don’t specify package version, the newest version of that package which is placed and mirrored on that feed will be installed. +## Pushing a .whl package to your feed + +You can easily upload a .whl package through the MyGet website, but if you prefer to automate this in a non-interactive way, you can still do so. You just need some tool like cUrl in order to push a .whl package from your command line: + + curl -k -X POST https:///F//python/upload -H "Authorization: Bearer " -F "data=@packageFileName.whl" + +Be sure that packageFileName meets the requirements of the [PEP 427][4] standard. (Please look at section File format of the standard document for more guidance.) + + [1]: https://www.myget.org [2]: https://docs.myget.org/docs/reference/security#Inviting_other_users_to_your_feed [3]: https://pypi.org +[4]: https://www.python.org/dev/peps/pep-0427/ diff --git a/Docs.Site/Docs/Walkthrough/Getting-Started-with-Ruby-Gems.markdown b/Docs.Site/Docs/Walkthrough/Getting-Started-with-Ruby-Gems.markdown index a78f5698..96078bfc 100644 --- a/Docs.Site/Docs/Walkthrough/Getting-Started-with-Ruby-Gems.markdown +++ b/Docs.Site/Docs/Walkthrough/Getting-Started-with-Ruby-Gems.markdown @@ -5,6 +5,7 @@ Setting up your own Ruby gem repository has never been easier. MyGet allows you Once uploaded, you can use industry-standard tools like RubyGems to install gems from MyGet in your local environment, as well as install/manage dependencies, scan your hosted gems for license compliance and vulnerabilities, and more. This article will guide you through the process of creating your Ruby gem repository in a MyGet feed and uploading your first gem. +
## Creating a new feed for your Ruby Gem @@ -26,6 +27,7 @@ In MyGet, Ruby gems live in repositories we call “feeds.” Feeds allow you to 4. (optional) **Invite collaborators** through the feed security settings. If you have created a private feed, you will need to explicitly grant users access to contribute to (write) or consume (read) the gems in your feed. +
## Add a gem to your MyGet feed @@ -35,21 +37,22 @@ a) **From Feed (upstream source).** To add a gem from RubyGems.org to your MyGet ![Add packages from upstream sources.](/docs/walkthrough/Images/gem_docs_add_package.jpg) -* **Search options:** Type a package name or a related term in the search field to search gems published on RubyGems.org and return a list of all of the gems matching your term. You can specify whether you would like to return results for all published versions of the package or just the most recent published version, as well as versions marked as “prerelease.” -* **Dependencies:** When you upload packages from an upstream source, you can also include dependencies (runtime). If the option is checked, all dependencies will be installed with the primary gem package. MyGet will try to fetch and add highest possible version of each dependency to satisfy the dependency requirements of the primary package you are uploading. If you choose to add an older version of a gem, MyGet will attempt to add the versions of the dependencies specified in the .gemspec file. You can also add package dependencies to your feed manually by independently adding them from RubyGems.org or your local machine just like you uploaded your primary package. -* **Mirroring:** When you add a package to MyGet from an upstream source, you can select whether MyGet should mirror that package or not. If you select the mirror option, MyGet will import the .gem file and host it on your MyGet account. Otherwise, MyGet will display the gem on your feed, referencing the .gem file hosted on RubyGems.org without importing the actual .gem file to MyGet itself. - +* **Search options.** Type a package name or a related term in the search field to search gems published on RubyGems.org and return a list of all of the gems matching your term. You can specify whether you would like to return results for all published versions of the package or just the most recent published version, as well as versions marked as “prerelease.” +* **Dependencies.** When you upload packages from an upstream source, you can also include dependencies (runtime). If the option is checked, all dependencies will be installed with the primary gem package. MyGet will try to fetch and add highest possible version of each dependency to satisfy the dependency requirements of the primary package you are uploading. If you choose to add an older version of a gem, MyGet will attempt to add the versions of the dependencies specified in the .gemspec file. You can also add package dependencies to your feed manually by independently adding them from RubyGems.org or your local machine just like you uploaded your primary package. +* **Mirroring.** When you add a package to MyGet from an upstream source, you can select whether MyGet should mirror that package or not. If you select the mirror option, MyGet will import the .gem file and host it on your MyGet account. Otherwise, MyGet will display the gem on your feed, referencing the .gem file hosted on RubyGems.org without importing the actual .gem file to MyGet itself. b) **Upload from your local machine.** If you already have the gem file you would like to add to your MyGet on your local machine, you can upload it directly to MyGet from the web UI. You can upload one package at a time, or upload multiple packages simultaneously. +![Add packages from your local machine.](/docs/walkthrough/Images/gem_docs_add_package_upload.jpg) + * **Naming structure.** If you want to add a gem from your machine, keep in mind that the package name has to follow the naming structure below: -.gem * **Package metadata.** When you upload a package, MyGet will import most of its metadata from the .gemspec file. If your package does not include a .gemspec file, you will see much less information about that package displayed in your MyGet feed. -Include Dependencies. You can also include dependencies when you upload packages from your local machine. If you choose to “Include dependencies,” MyGet will parse the .gemspec file in your gem to gather a list of all needed dependencies and try to fetch them from RubyGems.org. If MyGet cannot find the specified dependencies in the upstream source, only your primary gem will be added. You can always manually add dependencies from RubyGems.org or upload from your local machine later. -* **Mirror Dependencies:** If you choose to mirror dependencies, MyGet will attempt to import the gem dependencies from RubyGems.org and host them for you on your MyGet feed. Otherwise, MyGet will add references to the dependencies on RubyGems.org so that you can view them in your MyGet feed without counting against your MyGet storage allotment. +* **Include dependencies.** You can also include dependencies when you upload packages from your local machine. If you choose to “Include dependencies,” MyGet will parse the .gemspec file in your gem to gather a list of all needed dependencies and try to fetch them from RubyGems.org. If MyGet cannot find the specified dependencies in the upstream source, only your primary gem will be added. You can always manually add dependencies from RubyGems.org or upload from your local machine later. +* **Mirror dependencies.** If you choose to mirror dependencies, MyGet will attempt to import the gem dependencies from RubyGems.org and host them for you on your MyGet feed. Otherwise, MyGet will add references to the dependencies on RubyGems.org so that you can view them in your MyGet feed without counting against your MyGet storage allotment. 2. (optional) **Enable upstream source proxying for RubyGems.org** to seamlessly blend your MyGet feed with the RubyGems.org repository. @@ -64,34 +67,60 @@ From your new Feed page, click the *Upstream Sources* tab in the menu to the lef ![Proxy upstream sources into MyGet.](/docs/walkthrough/Images/gem_docs_edit_upstream.jpg) +
+ ## Pushing a gem package to your feed from the command line You can easily upload a gem package through the MyGet.org website, but you can also push a gem from your command line if you would like using the cUrl utility and API key from your MyGet account. - curl -k -X POST https:///F//gem/upload -H “Authorization: Bearer ” -F “data=@-.gem” + $ curl -k -X POST https:///F//gem/upload -H “Authorization: Bearer ” -F “data=@-.gem” (You can find your API key under the “Feed details” tab from your feed homepage. This key is automatically generated for you while you are adding a new feed.) +
+ ## Working with your gems on MyGet + After adding gems to your MyGet feed repository, you can download the gems directly from MyGet.org, install them using the RubyGems installer, or publish new gems to MyGet from your local machine with Bundler. -To fetch and install packages with gem tool you need to specify URL under which your repository (feed) can be found. +To fetch and install packages with the rubygems tool, you need to specify URL under which your repository (feed) can be found. -a) If your MyGet feed is set to **public** or **community**, you need only to specify the URL associated with your feed as in the example below: +a) If your MyGet feed is set to **public** or **community** access, you need only to specify the URL associated with your feed as in the example below: - gem install --source https:///F//geminstall -IMPORTANT: for feeds hosted on MyGet.org, your MyGet domain is simply . However, if your MyGet feeds are hosted on a MyGet Enterprise instance, you will need to specify your MyGet Enterprise subdomain as well (i.e. ). + $ gem install --source https:///F//geminstall/ + +IMPORTANT: for feeds hosted on MyGet.org, your MyGet domain is simply `myget.org`. However, if your MyGet feeds are hosted on a MyGet Enterprise instance, you will need to specify your MyGet Enterprise subdomain as well (i.e. `mycompany.myget.org`). b) If your MyGet Feed is **private**, you will need to include your MyGet username and password in URL specified during installation: - gem install --source https://:@/F//geminstall + $ gem install --source https://:@/F//geminstall/ + +or you can use the **api key** for your feed like this: + + $ gem install --source https:///F//auth//geminstall/ -MyGet doesn’t technically have gem server repository under the hood, but it emulates it. When you invoke the **gem install command**, MyGet will attempt to return the specified package as well as any specified dependencies in the gem’s .gemspec file. This means that your gem and all its dependencies should be uploaded or mirrored to your MyGet feed before installation so that the gem tool can correctly install them. +For your convenience, we recommend configuring MyGet as a `source` in your **rubygems** tool, so that rubygems always looks to MyGet when installing gems. You can set rubygems to authenticate with MyGet using a username/password or API key. + +**Configuring rubygems to install from MyGet with a Username/Password:** + + $ gem sources -a https://:@/F//geminstall/ + +**Configuring rubygems to install gems from MyGet with an API key**: + + $ gem sources -a https:///F//auth//geminstall/ + +After that you can install gems from your MyGet feed by simply invoking the command: + + $ gem install + +MyGet doesn’t technically have a gem server repository under the hood, but it emulates it. When you invoke the `gem install` command, MyGet will attempt to return the package as well as any specified dependencies in the gem’s .gemspec file. This means that your gem and all its dependencies should be uploaded or mirrored to your MyGet feed before installation so that the gem tool can correctly install them. If you haven’t installed your gem’s dependencies on MyGet but already have them installed in your local environment, installation will also be successful. However, if you don’t have needed dependencies locally or in your MyGet feed, gem install will fail on request for specs files (so-called ‘gem index’). +
+ ## Next steps with MyGet Ruby gems In addition to hosting your own public or private Ruby gem repository feeds, once you have uploaded gems to your MyGet account you can take advantage of MyGet’s other package management features, such as: diff --git a/Docs.Site/Orionstar angeasu_os3 b/Docs.Site/Orionstar angeasu_os3 new file mode 100644 index 00000000..4b4f49df --- /dev/null +++ b/Docs.Site/Orionstar angeasu_os3 @@ -0,0 +1,58 @@ +# MyGet 2020.1 Release Notes + +MyGet 2020.1 was released on July 8, 2020. + +## Highlights + +We are pleased to announce the release of the updated MyGet build engine. We have updated some the most highly requested platforms of our available **languages and frameworks** to support the latest versions of their software. You can now build packages using update frameworks such as .Net Core 3.1, whose latest patch was delivered in June of this year. + +Allowing your software to target the latest stack ensures that your software remains scalable and secure with the latest security patches. + +Also in this release, the MyGet build engine was revamped to include **container orchestration**. This will allow you to manage your large, dynamic environments more efficiently. + +This release supports the latest versions of the following **languages and frameworks**: + +* Visual Studio 2019 with MSBuild 16, supporting: + + * .Net Core: + * 1.1.14 + * 2.1.202 + * 2.1.805 + * 2.2.207 + * 2.2.402 + * 3.0.103 + * 3.1.201 + * .Net Framework: + * 3.5 Development Tools + * 4.0 Targeting Pack (TP) + * 4.5 TP + * 4.5.1 TP + * 4.5.2 TP + * 4.6 TP + * 4.6.1 SDK, 4.6.1 TP + * 4.6.2 SDK, 4.6.2 TP + * 4.7 SDK, 4.7 TP + * 4.7.1 TP + * 4.7.2 SDK, 4.7.2 TP + * 4.8 SDL, 4.8 TP + * NuGet 5.5.0 +* Python 2.7.16, Python 3.4.3 +* NodeJS 13.10.1 +* PHP 7.4.3 +* Ruby 2.7.0.1 +* GoLang 1.14 +* Java 1.8.0_241 + +The updated builds engine also comes with support of the following **version control and package managers**: + +* Git 2.25.1 +* GitVersion 1.0.0.0 +* Composer 1.10.5 +* Mercurial 5.0.2 +* SilkSVN 1.12.0 + +_Build with confidence with MyGet!_ + + + Host your packages on MyGet! + diff --git a/Docs.Site/_Layout.cshtml b/Docs.Site/_Layout.cshtml index 124f8fad..cddd0991 100644 --- a/Docs.Site/_Layout.cshtml +++ b/Docs.Site/_Layout.cshtml @@ -10,10 +10,10 @@ @Page.Title - + - +