Skip to content

Commit 03608ea

Browse files
committed
Merge branch 'main' of https://github.com/MicrosoftDocs/azure-devops-docs-pr into users/chcomley/test-plans-curation
2 parents 2201524 + 1c467d2 commit 03608ea

59 files changed

Lines changed: 1203 additions & 559 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.dockit/instructions/repo-structure.instructions.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ applyTo: "**"
55

66
## Docs repository
77

8-
- **Repo**: MicrosoftDocs/azure-devops-docs-pr (private), MicrosoftDocs/azure-devops-docs (public)
8+
- **Repo**: MicrosoftDocs/azure-devops-docs (public)
99
- **Docs path**: docs/
1010
- **TOC root**: docs/toc.yml
1111
- **Content areas**: docs/artifacts/, docs/boards/, docs/pipelines/, docs/repos/, docs/test/, docs/organizations/, docs/cli/
@@ -23,3 +23,4 @@ applyTo: "**"
2323
- Shared content (organizations, security, user guide) is in `docs/organizations/` and `docs/user-guide/`.
2424
- Includes are in `docs/includes/` — used for prerequisites, common steps, and shared notes.
2525
- Media files are colocated with their articles in `media/` subdirectories.
26+

.github/agents/azuredevops-standards-check.agent.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Microsoft Learn uses monikers to show different content for different Azure DevO
7878

7979
#### Docs Repository
8080

81-
- **Repo**: MicrosoftDocs/azure-devops-docs-pr (private), MicrosoftDocs/azure-devops-docs (public)
81+
- **Repo**: MicrosoftDocs/azure-devops-docs (public)
8282
- **Docs path**: docs/
8383
- **TOC root**: docs/toc.yml
8484
- **Content areas**: docs/artifacts/, docs/boards/, docs/pipelines/, docs/repos/, docs/test/, docs/organizations/, docs/cli/
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
description: "Generate and update Azure DevOps sprint release notes. Use when: creating release notes, sprint release notes, pull ADO work items for release notes, generate sprint update files, add feature to sprint, remove feature, refresh content from ADO, change sprint date."
3+
name: Release Notes
4+
tools: [read, edit, search, execute, todo]
5+
argument-hint: "Provide the ADO query path or ID, sprint number, year, and sprint title. Optionally include the release date for TOC and released timeline updates."
6+
---
7+
8+
You generate and update Azure DevOps sprint release notes for this repository.
9+
10+
Always follow the repo instruction in `.github/instructions/release-notes.instructions.md` for required files, TOC updates, timeline updates, area mapping, and validation. Do not duplicate or override that workflow.
11+
12+
## Inputs
13+
14+
Gather these from the user when they are not already provided:
15+
16+
- ADO query path or ID. If omitted, default to `Shared Queries/Sprint <N> Release Notes` when that pattern makes sense.
17+
- Sprint number.
18+
- Year. If omitted, default to the current year.
19+
- Sprint title when creating a new sprint.
20+
- Release date when it matters for TOC or timeline updates.
21+
22+
## Data retrieval
23+
24+
- Pull work items from the ADO query.
25+
- For each work item, prefer `Microsoft.DevDiv.ReleaseNotes` as the content source.
26+
- Fall back to `System.Description` when the release notes field is empty.
27+
- If those fields are empty, placeholder-only, or not customer-facing enough to publish, inspect linked child or related work items for usable release-note content before leaving a TODO.
28+
- Convert HTML to clean Markdown.
29+
- Do not invent feature content. If no usable content exists, use `<!-- TODO: Add description for this feature -->`.
30+
31+
## Images
32+
33+
- If release note content includes ADO attachment images, download them into `release-notes/<year>/media/` when feasible.
34+
- When media is needed, inspect attachment relations on the primary work item and on any child or related work items used as the content source.
35+
- Name files using the sprint and area pattern used by existing release notes.
36+
- Replace inline image URLs with Microsoft Docs image markup.
37+
- If an image cannot be downloaded, leave a TODO comment with the source URL and target path.
38+
39+
## Update behavior
40+
41+
- If the sprint files already exist, update them in place rather than regenerating unrelated content.
42+
- Keep the include files, area wrapper files, `release-notes/TOC.yml`, and `release-notes/features-timeline-released.md` in sync.
43+
- When adding or removing a feature, also update dependent link files, area wrappers, TOC entries, and timeline rows as needed.
44+
- Do not update `release-notes/features-timeline.md` unless the user explicitly asks for roadmap changes.
45+
46+
## Quality bar
47+
48+
- Use the latest sprint files in the repo as the formatting reference.
49+
- Preserve existing repo conventions and only make the minimal edits needed.
50+
- Validate touched Markdown and YAML files after editing.
51+
52+
## Output
53+
54+
After finishing, summarize the files created or updated and call out any missing source content or TODO placeholders that still need author follow-up.

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
.github/AGENTS.md
33
.github/agents/
44
!.github/agents/azuredevops-standards-check.agent.md
5+
!.github/agents/release-notes.agent.md
56
.github/instructions/
67
.github/prompts/
78
.github/skills/
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
---
2+
title: Set up an internal feed as an upstream source
3+
description: Learn how to set up an internal feed as an upstream source in Azure Artifacts.
4+
ms.service: azure-devops-artifacts
5+
ms.topic: tutorial
6+
ms.date: 02/26/2026
7+
monikerRange: "<=azure-devops"
8+
---
9+
10+
# Set up an internal feed as an upstream source
11+
12+
[!INCLUDE [version-lt-eq-azure-devops](../../includes/version-lt-eq-azure-devops.md)]
13+
14+
Azure Artifacts upstream sources simplify package management by enabling developers to store packages from multiple sources in a single feed.
15+
When a package is installed for the first time from an upstream source, Azure Artifacts automatically saves a copy to your feed to ensure continued access, even if the upstream source becomes temporarily unavailable. This tutorial walks you through how to set up an internal feed from the same organization as an upstream source in Azure Artifacts.
16+
17+
## Prerequisites
18+
19+
| **Product** | **Requirements** |
20+
|--------------------|---------------------------|
21+
| **Azure DevOps** | - An Azure DevOps [organization](../../organizations/accounts/create-organization.md).<br>- An Azure DevOps [project](../../organizations/projects/create-project.md). |
22+
23+
## Create a feed
24+
25+
If you don’t already have a feed, follow these steps to create one and add common public registries as upstream sources:
26+
27+
1. Sign in to Azure DevOps and go to your project.
28+
29+
1. Select **Artifacts**, then select **Create feed**.
30+
31+
1. Enter a **Name** for the feed and choose the appropriate **Visibility** and **Scope** settings.
32+
33+
1. Select **Include packages from common public sources** to add common public registries as upstream sources.
34+
35+
1. Select **Create** when you're done.
36+
37+
## Connect to your feed
38+
39+
Use the following steps to configure your project and authenticate with your feed. This example uses a Rust project. For other technologies, see the project setup links in the following section.
40+
41+
1. Sign in to Azure DevOps, and go to your project.
42+
43+
1. Select **Artifacts**, choose your feed from the dropdown menu, and then select **Connect to feed**.
44+
45+
:::image type="content" source="../media/select-feed-dropdown.png" alt-text="A screenshot displaying how to select a feed from the dropdown list in Azure Artifacts.":::
46+
47+
1. From the left navigation pane, select **Cargo**.
48+
49+
1. In the **Project setup** section, copy the first snippet and add it to the *cargo/config.toml* file in your source repository. Your *config.toml* file should resemble the following:
50+
51+
```
52+
[registries]
53+
FEED_NAME = { index = "sparse+https://pkgs.dev.azure.com/ORGANIZATION_NAME/PROJECT_NAME/_packaging/FEED_NAME/Cargo/index/" }
54+
```
55+
56+
1. [Configure a credential provider](../cargo/project-setup-cargo.md#configure-a-credential-provider)
57+
58+
1. [Log in to the registry](../cargo/project-setup-cargo.md#log-in-to-the-registry)
59+
60+
#### Project setup for other package types
61+
62+
If you’re using a different technology, use the links below to follow the appropriate project setup guidance to connect to your feed:
63+
64+
::: moniker range="azure-devops"
65+
66+
- [NuGet](../nuget/nuget-exe.md)
67+
- [Npm](../npm/npmrc.md)
68+
- [Maven](../maven/project-setup-maven.md)
69+
- [Python](../python/project-setup-python.md)
70+
- [Universal Packages](../universal-packages/project-setup-universal-packages.md)
71+
72+
::: moniker-end
73+
74+
::: moniker range="azure-devops-2022"
75+
76+
- [NuGet](../nuget/nuget-exe.md)
77+
- [Npm](../npm/npmrc.md)
78+
- [Maven](../maven/project-setup-maven.md)
79+
- [Python](../python/project-setup-python.md)
80+
81+
::: moniker-end
82+
83+
## Set up the upstream feed
84+
85+
Follow these steps to set up an internal feed from the same organization as an upstream source:
86+
87+
1. Sign in to Azure DevOps, then navigate to your project.
88+
89+
1. Select Artifacts, then select the feed you created earlier from the feed dropdown menu.
90+
91+
1. Select the gear icon button![gear icon](../../media/icons/gear-icon.png) to navigate to **Feed settings**.
92+
93+
1. Select **Upstream sources**, then select **Add Upstream**.
94+
95+
1. On the **Type** tab, select **Azure Artifacts feed in this organization**.
96+
97+
1. On the **Configuration** tab, from the **Feed** dropdown menu, select the feed you want to add as an upstream source. Select the desired **View**, then choose the **Package type(s)** to include, and optionally update the **Upstream source name**.
98+
99+
1. Select **Add** when you're done.
100+
101+
:::image type="content" source="../media/new-internal-feed-upstream-source.png" alt-text="A screenshot showing how to add a new internal feed as an upstream source in Azure Artifacts.":::
102+
103+
1. Select **Save** to apply your changes.
104+
105+
:::image type="content" source="../media/save-upstream-sources.png" alt-text="A screenshot showing how to save upstream sources in Azure Artifacts.":::
106+
107+
## Install packages from upstream
108+
109+
The following example illustrates a scenario where *Test_Feed* has *CargoDemoFeed* configured as an upstream source. For demonstration purposes *Test_Feed* is empty and contains no packages.
110+
111+
When a collaborator (or higher) installs a package from *Test_Feed* that is available in the upstream *CargoDemoFeed*, Azure Artifacts copies that package into the downstream *Test_Feed* and downloads it as part of the normal `cargo install` flow. After this first-time copy, all future downloads of that package from *Test_Feed* require only **Feed Reader** (or higher) permissions, because those later downloads don't modify the downstream feed. Only the first install copies the package from upstream to downstream, so only that initial action requires elevated permissions.
112+
113+
1. Sign in to Azure DevOps, then navigate to the project that hosts the upstream feed (in this example, *CargoDemoFeed*).
114+
115+
1. Select Artifacts, then from the dropdown menu, select the upstream feed (*CargoDemoFeed*).
116+
117+
1. Find the package you want to install and note its name. In this example, *atomic-waker* is the package name. You can also search upstream packages directly from your downstream feed in the Azure Artifacts UI. See [Search packages from upstream sources](search-upstream.md) for more details.
118+
119+
1. Navigate to the root of your project and open your *Cargo.toml*. Add the package under **[dependencies]**. Because this is a private crate dependency, you must specify the registry name in your *Cargo.toml* file. Cargo assumes *crates.io* as the default registry unless otherwise specified. Add the dependency as follows:
120+
121+
```
122+
CRATE_NAME = { version = "VERSION_NUMBER", registry = "FEED_NAME" }
123+
124+
# Example:
125+
# [dependencies]
126+
# atomic-waker = { version = "1.1.2", registry = "Test_Feed" }
127+
```
128+
129+
1. Open a local command prompt, navigate to the root of your project, and run the following command to build your project and download the crate:
130+
131+
```
132+
cargo build
133+
```
134+
135+
1. Once the build completes, return to **Azure DevOps** > **Artifacts** and select your consuming feed (in this example, *Test_Feed*).
136+
137+
1. Verify that the package you installed locally now appears in your downstream feed. Azure Artifacts automatically saves a copy of the package when it’s installed from an upstream source.
138+
139+
:::image type="content" source="../media/package-saved-from-internal-upstream.png" alt-text="A screenshot showing a package saved from an internal upstream in Azure Artifacts." lightbox="../media/package-saved-from-internal-upstream.png":::
140+
141+
## Related content
142+
143+
- [Safeguard against malicious public packages](../concepts/upstream-behavior.md)
144+
145+
- [Use packages from Maven Central](../maven/upstream-sources.md)
146+
147+
- [Manage permissions](../feeds/feed-permissions.md)
31.2 KB
Loading
20.2 KB
Loading
33.2 KB
Loading
26.3 KB
Loading
52.7 KB
Loading

0 commit comments

Comments
 (0)