Skip to content

Commit 3da58f8

Browse files
DOC Add security release review process (#2216)
Copilot-Session: 485d2633-734b-4ee0-a849-f9adeaf3a9bd
1 parent 262e291 commit 3da58f8

6 files changed

Lines changed: 96 additions & 12 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ identify risks in generative AI systems.
88

99
- Check out our [website](https://microsoft.github.io/PyRIT/) for more information
1010
about how to use, install, or contribute to PyRIT.
11+
- Review our [security policy](https://github.com/microsoft/PyRIT/security/policy)
12+
to report vulnerabilities privately through the Microsoft Security Response Center.
1113
- Visit our [Discord server](https://discord.gg/9fMpq3tc8u) to chat with the team and community.
1214

1315
## Trademarks and Citations

doc/contributing/10_release_process.md

Lines changed: 58 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,46 @@ Follow the instructions according to the order provided.
1111

1212
Before starting the release process, verify the codebase is in a healthy state.
1313

14+
### Customer-Facing Review
15+
16+
Use an existing release work item, or create one if none exists, to track release
17+
readiness. The release owner reviews the customer-facing release materials: draft
18+
GitHub release notes, changed public documentation, and changed CoPyRIT UI content.
19+
Review the changed documentation and UI content for technical accuracy, security and
20+
compatibility disclosures, content clarity, and usability. Ensure the release notes
21+
include:
22+
23+
- A summary of the important bug fixes and features being shipped.
24+
- Security fixes and known high-priority security issues, including affected versions
25+
and recommended actions. If there are none, write
26+
`No known high-priority security issues.`
27+
- Breaking changes and backward-compatibility issues, including clear migration or
28+
mitigation steps. If there are none, write
29+
`No known breaking changes or backward-compatibility issues.`
30+
31+
Link the draft release notes in the release work item. Record
32+
`Initial review completed by @owner on YYYY-MM-DD: no findings` or link the issues or
33+
pull requests that resolved the findings.
34+
35+
#### Before Publishing
36+
37+
A PyRIT maintainer other than the release owner reviews the final materials and:
38+
39+
1. Compares the final release notes with the changes included in the release and
40+
confirms that the required content is complete and accurate.
41+
2. Opens the changed documentation and applicable CoPyRIT UI to confirm that the
42+
content is clear, security information is accessible, and the final materials match
43+
the release notes.
44+
3. Confirms that high-priority security bugs and technical-review findings from the
45+
initial review are resolved.
46+
4. Records either
47+
`Approved by @reviewer on YYYY-MM-DD for development, security, content, and UX`
48+
or the remaining changes required before approval in the release work item.
49+
50+
Do not include details about security vulnerabilities that have not yet been publicly
51+
disclosed in the release work item. Follow [the security policy](../../SECURITY.md)
52+
for private vulnerability reporting.
53+
1454
- **Check for pending changes.** Ask other PyRIT maintainers whether they have any in-flight changes that should land before the release.
1555
- **Verify build pipelines.** Confirm that all integration tests and end-to-end tests are passing in the CI pipelines. If any tests are failing, fix them before proceeding.
1656
- **Partner integration tests.** Ensure the partner integration tests are also passing. These tests validate that we are not breaking contracts with partner teams (e.g., Foundry). If any are failing, coordinate with the affected partner teams before proceeding with the release.
@@ -229,6 +269,15 @@ since `downgrade()` risks data loss.
229269

230270
## 9. Publish to PyPI
231271

272+
Complete this checklist in the release work item:
273+
274+
- [ ] The initial review is recorded, and the draft release notes are linked.
275+
- [ ] High-priority security bugs and technical-review findings are resolved.
276+
- [ ] A maintainer other than the release owner has recorded final approval for development, security, content, and UX.
277+
- [ ] Release notes contain the required security and compatibility disclosures.
278+
279+
Do not publish the package until every item is complete.
280+
232281
Create an account on pypi.org if you don't have one yet.
233282
Ask one of the other maintainers to add you to the `pyrit` project on PyPI.
234283

@@ -287,18 +336,15 @@ and add an entry under `versions:` for `0.14.0` pointing at `releases/v0.14.0`.
287336

288337
## 11. Create GitHub Release
289338

290-
Finally, go to the [releases page](https://github.com/microsoft/PyRIT/releases), select "Draft a new release" and the "tag"
291-
for which you want to create the release notes. It should match the version that you just released
292-
to PyPI. Hit "Generate release notes". This will pre-populate the text field with all changes.
293-
Make sure that it starts where the last release left off.
294-
Sometimes this tool adds too many changes, or leaves a few out, so it's best to check.
295-
Be sure to check and update the new contributors as well.
296-
Add a header "## Full list of changes" below "## What's changed?".
297-
In addition to the full notes, we also want a shorter section with just the relevant
298-
changes that users should be aware of. The shorter section will be under "## What's changed"
299-
while the full list of changes will be right below.
300-
Maintenance changes, build pipeline updates, and documentation fixes are not really important for users.
301-
However, important bug fixes, new features, and breaking changes are good candidates to include.
339+
Finally, go to the [releases page](https://github.com/microsoft/PyRIT/releases), select
340+
"Draft a new release", and choose the tag that matches the version published to PyPI.
341+
Generate the release notes to produce the full change list. Verify that the list starts
342+
where the previous release ended and that the new-contributor list is accurate. Add
343+
"## Full list of changes" below "## What's changed" and place the generated list
344+
there. Use the approved release notes linked from the release work item for
345+
"## What's changed". Maintenance changes, build pipeline updates, and routine
346+
documentation fixes can remain in the full list only.
347+
302348
If you are unsure about whether to include certain changes please consult with your fellow
303349
maintainers.
304350
When you're done, hit "Publish release" and mark it as the latest release.

doc/myst.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ project:
3939
- "https://www.youtube.com/watch?v=jq9DcEL3cHE"
4040
toc:
4141
- file: index.md
42+
- file: security.md
4243
- file: getting_started/README.md
4344
children:
4445
- file: getting_started/install.md

doc/security.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Security
2+
3+
Microsoft takes the security of PyRIT seriously.
4+
5+
If you believe you have found a security vulnerability, **do not report it through a
6+
public GitHub issue**. Submit it privately to the
7+
[Microsoft Security Response Center](https://aka.ms/security.md/msrc/create-report).
8+
The repository's [security policy](https://github.com/microsoft/PyRIT/security/policy)
9+
describes alternative reporting methods, the information to include, and Microsoft's
10+
coordinated vulnerability disclosure policy.
11+
12+
Review the [PyRIT release notes](https://github.com/microsoft/PyRIT/releases) for
13+
customer-facing security notices, known high-priority security issues, breaking
14+
changes, and compatibility guidance for each release.

frontend/src/components/Sidebar/Navigation.test.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,15 @@ describe("Navigation", () => {
109109
expect(onOpenFeedback).toHaveBeenCalledTimes(1);
110110
});
111111

112+
it("links to the public security policy", () => {
113+
renderWithProvider(<Navigation {...defaultProps} />);
114+
115+
expect(screen.getByRole("link", { name: "Security" })).toHaveAttribute(
116+
"href",
117+
"https://github.com/microsoft/PyRIT/security/policy"
118+
);
119+
});
120+
112121
it("calls onNavigate with 'history' when history button is clicked", async () => {
113122
const user = userEvent.setup();
114123
const onNavigate = jest.fn();

frontend/src/components/Sidebar/Navigation.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
SettingsRegular,
1515
HistoryRegular,
1616
PersonFeedbackRegular,
17+
OpenRegular,
1718
WeatherMoonRegular,
1819
WeatherSunnyRegular,
1920
} from '@fluentui/react-icons'
@@ -115,6 +116,17 @@ export default function Navigation({ currentView, onNavigate, onOpenFeedback }:
115116
aria-label="Feedback"
116117
onClick={onOpenFeedback}
117118
/>
119+
<Button
120+
as="a"
121+
className={styles.navButton}
122+
appearance="subtle"
123+
icon={<OpenRegular />}
124+
title="Security"
125+
aria-label="Security"
126+
href="https://github.com/microsoft/PyRIT/security/policy"
127+
target="_blank"
128+
rel="noreferrer"
129+
/>
118130
<Menu
119131
checkedValues={{ [THEME_MENU_NAME]: [mode] }}
120132
onCheckedValueChange={handleThemeChange}

0 commit comments

Comments
 (0)