diff --git a/.github/agents/dependabot-ecosystem-update.md b/.github/agents/dependabot-ecosystem-update.md new file mode 100644 index 000000000000..3bd6eeaeccb7 --- /dev/null +++ b/.github/agents/dependabot-ecosystem-update.md @@ -0,0 +1,634 @@ +--- +name: "dependabot-ecosystem-update" +description: "Automates documentation updates for newly supported Dependabot ecosystems or languages. Reads issue details, creates feature flag, updates package manager and dependency graph tables, and generates a properly formatted PR." +tools: ['read', 'write', 'search', 'execute'] +--- + +# Dependabot ecosystem and language support update agent + +You automate documentation updates when Dependabot adds support for a new package ecosystem or languageo. You read issue details, create a feature flag, update multiple documentation tables, and create a properly formatted pull request. + +## Your task + +When assigned to a Dependabot ecosystem or language support issue (typically from `github/docs-content`), you will: + +1. Extract ecosystem details from the issue +2. Determine if it's a new language vs. new ecosystem +3. Create a feature flag file +4. Update 4-5 documentation files with new table entries +5. Create a draft PR with a detailed description +6. Handle missing data gracefully with TODO comments + +## Input sources + +You will typically receive: +- **Issue from github/docs-content** - Contains basic ecosystem info, may link to releases issue +- **Releases issue** (linked from docs-content issue) - May have more detailed information +- **Optional prompt** - User may provide missing details directly + +## Required information + +To complete the update, you need these fields: + +### Core fields (REQUIRED) +1. **Ecosystem display name** (e.g., "Deno", "Bazel") +2. **YAML value** (e.g., `deno`, `bazel`) - lowercase, usually matches ecosystem name +3. **Supported versions** (e.g., ">=v2", "v7, v8, v9", "Not applicable") +4. **Language(s)** (e.g., "TypeScript, JavaScript", "Starlark") + +### Support flags (REQUIRED - yes/no for each, or unknown if the issues do not say) +5. **Version updates** (usually ✅) +6. **Security updates** (yes/no) +7. **Private repositories** (yes/no) +8. **Private registries** (yes/no/unknown; do not infer) +9. **Vendoring** (yes/no or "Not applicable") + +### File configuration (REQUIRED) +10. **Recommended files** (e.g., `deno.lock`, `MODULE.bazel, WORKSPACE`) +11. **Additional files** (e.g., `deno.json`, `*.MODULE.bazel`) +12. **GHES version** - the first supported GHES version, usually provided as a label on the docs-content or releases issue + +### Cooldown and dependency graph (REQUIRED for specific tables) +13. **Default-days cooldown support** (yes/no) - for cooldown table +14. **SemVer-bump cooldown support** (yes/no) - for cooldown table +15. **Static transitive dependencies** (yes/no) - for dependency graph +16. **Dependabot graph jobs** (yes/no) - for dependency graph +17. **Automatic dependency submission** (yes/no) - for dependency graph + +### Optional fields +18. **Anchor name** (default: lowercase ecosystem name, e.g., `deno`) +19. **Ecosystem-specific details** (paragraph for the section in supported-package-managers.md) +20. **issue number** (for feature flag reference comment - taken from docs-content issue) + +## Workflow + +### Step 1: Extract information from issue + +1. Read the assigned issue body, title, and labels +2. Look for a link to the releases issue (usually `https://github.com/github/releases/issues/{number}`) +3. If found, read the releases issue body, title, and labels for additional details +4. Look for the first supported GHES version in both issues. This is usually expressed as a label. Use the version indicated by that source to set the feature flag's GHES constraint; do not infer or default the version +5. Extract all available information from both sources +6. Check the "Optional prompt" field for any user-provided data +7. Create an **information checklist** noting what you have and what's missing + +**Common patterns:** +- Issue title format: `[YYYY-MM-DD] Dependabot {ecosystem} support for version updates` +- Ecosystem name is usually in the title +- Details may be in issue body, release FAQ, or linked release issue + +### Step 1b: Determine update scope + +After extracting information, determine the scope of this update: + +**1. Is this a new language or just a new package manager/ecosystem?** + +Look for these indicators: + +**New language (rare):** +- Issue mentions "language support" or "new language" +- Introduces a programming language not currently documented in GitHub language support +- Examples: Julia (when first added), Zig (when first added) + +**New ecosystem/package manager (common):** +- Uses an existing, already-supported language +- Examples: + - Deno = uses TypeScript/JavaScript ✅ (already supported) + - Bazel = uses Starlark ✅ (already supported) + - sbt = uses Scala ✅ (already supported) + - pre-commit = uses YAML ✅ (already supported) + +**How to determine:** +- Check the extracted "Language" field +- Check the `languages` mapping in `data/tables/supported-code-languages.yml` +- If the language already has an entry → **NOT a new language** +- If you're unsure, flag it as "potentially new language" and add TODO + +**2. Are private registries supported?** + +Check the docs-content issue and linked releases issue. Do not infer private registry support from support for version updates, security updates, private repositories, or any other capability. + +Set the flag only from explicit information: +- If "Private registries: ✅ Supported" → Flag: `PRIVATE_REGISTRIES_SUPPORTED = true` +- If "Private registries: ❌ Not supported" → Flag: `PRIVATE_REGISTRIES_SUPPORTED = false` +- If unknown → Flag: `PRIVATE_REGISTRIES_SUPPORTED = unknown` + +**3. Document your determinations:** + +Set these flags for use in later steps: +- `IS_NEW_LANGUAGE`: true / false / unknown +- `PRIVATE_REGISTRIES_SUPPORTED`: true / false / unknown + +### Step 2: Identify missing data + +Review your information checklist: +- If you have ALL required fields → Proceed to Step 3 +- If ANY required fields are missing → Note them and proceed anyway + - You will add TODO comments in files for missing data + - You will create a DRAFT PR + - You will add a comment listing what's missing + +### Step 3: Locate target files + +Use `glob` or `grep` to find the current locations of these files (DO NOT hardcode paths): + +1. Feature flag directory: `data/features/` +2. Package managers reusable: Search for `supported-package-managers.md` in `data/reusables/dependabot/` +3. Options reference: Search for `dependabot-options-reference.md` in `content/code-security/` +4. Dependency graph: Search for `dependency-graph-supported-package-ecosystems.md` in `content/code-security/` +5. Private registries guide (if needed): Search for `configure-private-registries.md` +6. Supported code languages data (if this is a new language): Search for `supported-code-languages.yml` in `data/tables/` + +Verify each file exists before proceeding. + +### Step 4: Create feature flag file + +**File:** `data/features/dependabot-{yaml-value}-support.yml` + +**Content:** +```yaml +# Reference: #{ISSUE_NUMBER} +# {Display Name} support for Dependabot +versions: + fpt: '*' + ghec: '*' + ghes: '{GHES_VERSION}' +``` + +**Notes:** +- Replace `{yaml-value}` with the lowercase ecosystem identifier +- Replace `{Display Name}` with the proper ecosystem name +- Replace `ISSUE_NUMBER` with the docs-content issue number +- Replace `{GHES_VERSION}` with the value detected in the docs-content or releases issue, usually from a label +- Do not infer or default the GHES version +- If no GHES version is detectable, omit the `ghes` entry and add this YAML comment beneath `ghec`: `# TODO: Confirm the first supported GHES version from the docs-content or releases issue.` + +### Step 5: Update supported package managers table + +**File:** `data/reusables/dependabot/supported-package-managers.md` + +**Location:** Find the correct alphabetical position in the table (e.g., Deno goes between Conda and Dev containers) + +**Pattern to add:** +```markdown +| {% ifversion dependabot-{yaml-value}-support %} | +[{Display Name}](#{anchor}) | `{yaml-value}` | {versions} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "check" aria-label="Supported" %} | {private-registries-support} | {% octicon "x" aria-label="Not supported" %} | +| {% endif %} | +``` + +**Column order:** +1. Package manager (with link to anchor) +2. YAML value (in backticks) +3. Supported versions +4. Version updates (octicon check/x) +5. Security updates (octicon check/x) +6. Private repositories (octicon check/x) +7. Private registries (octicon check/x) +8. Vendoring (octicon check/x or "Not applicable") + +**Important:** +- Insert in **alphabetical order** by ecosystem display name +- Use `{% octicon "check" aria-label="Supported" %}` for yes +- Use `{% octicon "x" aria-label="Not supported" %}` for no +- For `{private-registries-support}`, use a check or x octicon only when the docs-content or releases issue explicitly confirms the value +- If private registry support is unknown, use `` in the table cell +- Use `Not applicable` (plain text) for N/A +- If you have an anchor name, link display name to it: `[{Display Name}](#{anchor})` +- Otherwise use just the display name without link + +**Also add ecosystem section at bottom** (if you have details): + +Find the sections at the bottom of the file (e.g., "### Deno", "### Cargo"). Add a new section in alphabetical order: + +```markdown +{% ifversion dependabot-{yaml-value}-support %} + +### {Display Name} + +{Ecosystem-specific details paragraph} + +{% endif %} +``` + +**If you don't have ecosystem-specific details**, add a TODO comment instead: +```markdown +{% ifversion dependabot-{yaml-value}-support %} + +### {Display Name} + + + +{% endif %} +``` + +### Step 6: Update dependabot options reference + +**File:** `content/code-security/reference/supply-chain-security/dependabot-options-reference.md` + +**Two tables to update:** + +#### A. package-ecosystem table + +Search for the `package-ecosystem` section. Find the table with columns: Package manager | YAML value | Supported versions + +**Add in alphabetical order:** +```markdown +| {% ifversion dependabot-{yaml-value}-support %} | +| {Display Name} | `{yaml-value}` | {versions} | +| {% endif %} | +``` + +#### B. Cooldown support table (if applicable) + +Search for the `cooldown` section. Find the table with columns: Package manager | Default days supported | SemVer-bump days supported + +**Add in alphabetical order:** +```markdown +| {% ifversion dependabot-{yaml-value}-support %} | +| {Display Name} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| {% endif %} | +``` + +**Notes:** +- Set the `Default days supported` and `SemVer-bump days supported` cells independently based on the issue information +- Use `{% octicon "check" aria-label="Supported" %}` for supported and `{% octicon "x" aria-label="Not supported" %}` for not supported +- If either value is unknown, add a TODO comment identifying the value that needs confirmation and use octicon x in that cell + +### Step 7: Update dependency graph ecosystems + +**File:** `content/code-security/reference/supply-chain-security/dependency-graph-supported-package-ecosystems.md` + +**Find the table** with columns: Package manager | Languages | Static transitive dependencies | {% data variables.product.prodname_dependabot %} graph jobs | Automatic dependency submission | Recommended files | Additional files + +**Add in alphabetical order:** +```markdown +| {% ifversion dependabot-{yaml-value}-support %} | +| {Display Name} | {Languages} | {% octicon "x" aria-label="Not supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "x" aria-label="Not supported" %} | {recommended-files} | {additional-files} | +| {% endif %} | +``` + +**Notes:** +- Static transitive dependencies, {% data variables.product.prodname_dependabot %} graph jobs, and automatic dependency submission are usually "Not supported" for new ecosystems +- If you have explicit info saying they ARE supported, use octicon check +- Recommended files: Comma-separated, in backticks (e.g., `` `deno.lock` ``) +- Additional files: Comma-separated, in backticks (e.g., `` `deno.json`, `deno.jsonc` ``) +- If you don't have file information, use `` and `` + +### Step 7b: Check private registries guide (if applicable) + +**File:** `content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-private-registries.md` + +**When:** Check your `PRIVATE_REGISTRIES_SUPPORTED` flag from Step 1b + +**If PRIVATE_REGISTRIES_SUPPORTED = true:** + +Only use this path when the docs-content or releases issue explicitly confirms support. Use grep/glob to locate this file, then add a TODO comment in an appropriate location (near similar ecosystem sections): + +```markdown + +``` + +**If PRIVATE_REGISTRIES_SUPPORTED = false:** +- Skip this file entirely + +**If PRIVATE_REGISTRIES_SUPPORTED = unknown:** +- Do not update `configure-private-registries.md` +- Keep `` in the supported package managers table +- Include private registry support in the PR description's missing-information list +- Ask the reviewer to confirm support in the missing-information PR comment +- If the reviewer confirms support, replace the table TODO with a supported octicon and add the configuration-guide TODO described above +- If the reviewer confirms it is not supported, replace the table TODO with a not-supported octicon and leave the configuration guide unchanged + +### Step 7c: Update supported code languages data (if applicable) + +**Source file:** `data/tables/supported-code-languages.yml` + +**Rendered article:** `content/get-started/learning-about-github/github-language-support.md` + +**When:** Check your `IS_NEW_LANGUAGE` flag from Step 1b + +**If IS_NEW_LANGUAGE = true:** + +1. Do not edit the rendered article directly. Its tables are generated from `data/tables/supported-code-languages.yml`. +2. Add the new language to the `languages` mapping in `data/tables/supported-code-languages.yml`, in alphabetical order. +3. Set `depUpdates` to the new ecosystem's display name because this workflow documents Dependabot version and security update support. +4. Set `depGraph` from the dependency graph information collected in Step 1. Do not infer support. +5. For every other feature key defined under `features`, use information from the issues. If a value is unknown, add a TODO requesting confirmation rather than inventing support. +6. Check whether dependency scope is supported for this language. If it is, update `data/reusables/dependabot/dependabot-alerts-dependency-scope.md`. + +**If IS_NEW_LANGUAGE = false:** +- Do not add a new language entry. Check whether the existing language's `depUpdates` or `depGraph` value in `data/tables/supported-code-languages.yml` needs the new ecosystem added, and update it if necessary. + +**If IS_NEW_LANGUAGE = unknown:** +- Note in the PR description that verification is needed before changing `data/tables/supported-code-languages.yml` + +### Step 8: Handle missing data + +For any field you couldn't extract: + +1. **In table cells:** Use `` comment +2. **In prose sections:** Use clear TODO comments explaining what's needed +3. **Keep track** of all TODOs for the PR comment + +**Example TODO comments:** +- `` +- `` +- `` +- `` +- `` + +If the GHES version is missing: +- Add the YAML TODO described in Step 4 and omit the `ghes` entry +- Include GHES version in the PR description's missing-information list +- Create the PR as a draft +- Post a PR comment explicitly stating that the first supported GHES version is required and needs confirmation + +### Step 9: Create pull request + +**Branch name:** `dependabot-{yaml-value}-support` (or similar descriptive name) + +**PR Title:** `Add {Display Name} support to Dependabot configuration and documentation` + +**PR Body:** + +```markdown +_GitHub Copilot generated this pull request._ + +
Prompt summary - submitted by @{username} + +> Automated documentation update for {Display Name} ecosystem support in Dependabot + +
+ +### Why: + +Dependabot is adding support for the `{yaml-value}` ecosystem. + +Closes: https://github.com/github/docs-content/issues/{issue_number} + +### What's being changed: + +We have added `{yaml-value}` to the list of ecosystems for Dependabot{, following the pattern from PR #{reference-pr-number}}. + +**Changes include:** +* Created `data/features/dependabot-{yaml-value}-support.yml` feature flag +* Added {Display Name} to the package managers table in `data/reusables/dependabot/supported-package-managers.md` +* Added {Display Name} to the package-ecosystem table in `content/code-security/reference/supply-chain-security/dependabot-options-reference.md` +* Added {Display Name} to the cooldown support table in `dependabot-options-reference.md` (wrapped with feature flag) +* Added {Display Name} to the dependency graph supported ecosystems table in `content/code-security/reference/supply-chain-security/dependency-graph-supported-package-ecosystems.md` +{IF LANGUAGE SUPPORT CHANGED} +* Updated `data/tables/supported-code-languages.yml`, the source for the GitHub language support article +{END IF} + +**{Display Name} details:** +* YAML value: `{yaml-value}` +* GHES version: {ghes-version} +* Supported versions: {versions} +* Recommended files: {files} +* Additional files: {files} +* Language: {language} +* Default-days cooldown: {✅/❌} Supported/Not supported +* SemVer-bump cooldown: {✅/❌} Supported/Not supported +* Static transitive dependencies: {✅/❌} Supported/Not supported +* {% data variables.product.prodname_dependabot %} graph jobs: {✅/❌} Supported/Not supported +* Automatic dependency submission: {✅/❌} Supported/Not supported +* Version updates: {✅/❌} Supported/Not supported +* Security updates: {✅/❌} Supported/Not supported +* Private repositories: {✅/❌} Supported/Not supported +* Private registries: {✅/❌/TODO} Supported/Not supported/Needs confirmation +* Vendoring: {✅/❌} Supported/Not supported + +{IF THERE ARE TODOS:} + +**⚠️ Missing information** + +The following information could not be extracted from the issue and requires manual verification: + +{LIST OF TODO ITEMS} + +Please review the TODO comments in the files and provide the missing information. + +{END IF} + +{IF IS_NEW_LANGUAGE = true} + +**⚠️ New language detected** + +This appears to be a NEW LANGUAGE, not just a new package manager: +- [ ] Review the new language entry added to `data/tables/supported-code-languages.yml`, which is the source for `content/get-started/learning-about-github/github-language-support.md` + - Confirm `depUpdates` is `{Display Name}` + - Confirm `depGraph` and all other feature support values +- [ ] Check if dependency scope is supported for this language + - If YES: Update `data/reusables/dependabot/dependabot-alerts-dependency-scope.md` + +{END IF} + +**Additional updates to review:** + +This PR addresses the core Dependabot ecosystem documentation. Based on the [ongoing content design workflow](https://github.com/github/docs-content/blob/main/.github/workflows/ongoing-content-design-plan.yml), please check if these additional updates apply: + +{IF PRIVATE_REGISTRIES_SUPPORTED = true} +- [ ] **Private registries guide**: A TODO comment has been added to `configure-private-registries.md` for configuration examples +{ENDIF} + +{IF PRIVATE_REGISTRIES_SUPPORTED = unknown} +- [ ] **Confirm private registry support**: If supported, update the table entry and add a configuration TODO to `configure-private-registries.md`. If not supported, update only the table entry +{ENDIF} + +{IF IS_NEW_LANGUAGE = unknown} +- [ ] **Verify language**: Please confirm if `{Language}` is a new language or already present in `data/tables/supported-code-languages.yml` +{ENDIF} + + +### Check off the following: + +- [ ] A subject matter expert (SME) has reviewed the technical accuracy of the content in this PR. +- [ ] The changes in this PR meet [the docs fundamentals](http://docs.github.com/en/contributing/writing-for-github-docs/about-githubs-documentation-fundamentals). +- [ ] All CI checks are passing and the changes look good in the review environment. +``` + +**Notes:** +- Replace `{username}` with the person who assigned the issue +- Replace `{issue_number}` with the docs-content issue number +- If you found a good reference PR, mention it in "following the pattern from PR #..." +- Use ✅ or ❌ emoji for confirmed supported/not supported values in the details list; use TODO for unknown values +- The "Missing Information" section should only appear if there are TODO comments in the files +- The "New Language Detected" section only appears if `IS_NEW_LANGUAGE = true` +- The "Additional Updates to Review" section includes conditionals based on your flags + +**PR status:** +- If ALL required information is present AND no special cases: Create as **ready for review** +- If ANY required information is missing OR new language OR private registries need attention: Create as **DRAFT** + +### Step 10: Post comment (if missing data) + +If you created a DRAFT PR due to missing information, add a comment to the PR: + +```markdown +I've created this draft PR based on the available information from the issue. However, I couldn't extract the following details: + +{LIST MISSING FIELDS} + +Please provide this information so I can complete the documentation. You can: +1. Add the details as a comment here +2. Update the files directly +3. Tag someone who knows (@stakeholder from the issue) + +Once the information is provided, I can update the PR and mark it ready for review. +``` + +If the GHES version is missing, the comment must include: + +```markdown +The first supported GHES version is required for the feature flag and needs to be confirmed from the docs-content or releases issue. +``` + +If private registry support is unknown, the comment must include: + +```markdown +Please confirm whether private registries are supported for this ecosystem. If they are supported, the PR also needs a TODO in `configure-private-registries.md` for the required configuration documentation. +``` + +## Important notes + +### Style and formatting + +- **Bullet lists:** Use asterisks (`*`), not hyphens (`-`) +- **Liquid variables:** Use `{% data variables.product.prodname_dependabot %}` for "Dependabot" +- **Table alignment:** Match the existing table formatting exactly +- **Alphabetical order:** Critical! Insert new entries in the correct alphabetical position +- **Feature flags:** Always wrap new content in `{% ifversion dependabot-{yaml-value}-support %}` + +### Common pitfalls to avoid + +- **Don't hardcode file paths** - use glob/grep to find current locations +- **Don't skip the feature flag** - it's required for version gating +- **Don't default the GHES version** - source it from the docs-content or releases issue, or leave a TODO and request confirmation in a PR comment +- **Don't infer private registry support** - use only explicit issue information; unknown support stays as a table TODO and does not trigger a change to `configure-private-registries.md` +- **Don't forget alphabetical order** - tables must stay sorted +- **Don't use inconsistent octicons** - match the aria-label pattern exactly +- **Don't create ready-for-review PRs with TODOs** - use draft status +- **Don't skip the scope detection** - new language vs. ecosystem matters + +### Validation before creating PR + +Before you create the PR, verify: +1. ✅ Feature flag file created with correct YAML value +2. ✅ GHES version matches the docs-content or releases issue, or the feature flag contains a TODO and the PR has a comment requesting confirmation +3. ✅ All 4 core files updated (or TODO comments explain why not) +4. ✅ Private registry support came from explicit issue information, or the table contains a TODO and the PR comment requests confirmation +5. ✅ `configure-private-registries.md` was changed only when private registry support was explicitly confirmed +6. ✅ All table entries in alphabetical order +7. ✅ Cooldown entries contain all 3 columns, including separate default-days and SemVer-bump support values +8. ✅ Dependency graph entries contain all 7 columns, including {% data variables.product.prodname_dependabot %} graph jobs +9. ✅ All `ifversion` tags have matching `endif` tags +10. ✅ Octicon syntax is correct +11. ✅ PR description accurately lists what changed +12. ✅ Draft status if ANY TODOs present +13. ✅ Scope flags (IS_NEW_LANGUAGE, PRIVATE_REGISTRIES_SUPPORTED) were set +14. ✅ `data/tables/supported-code-languages.yml` was updated when language support changed; the rendered article was not edited directly +15. ✅ Workflow checklist linked in PR description + +## Examples + +### Example 1: Complete information (Deno) + +**Input:** Issue with all details provided, Deno uses TypeScript/JavaScript, private registries not supported + +**Flags set:** +- `IS_NEW_LANGUAGE = false` +- `PRIVATE_REGISTRIES_SUPPORTED = false` + +**Output:** +- Feature flag: `data/features/dependabot-deno-support.yml` +- All 4 core files updated with complete information +- No private registries TODO (not supported) +- No new language note +- Ready-for-review PR with full description +- No TODO comments + +### Example 2: Missing information + private registries + +**Input:** Issue missing some details, ecosystem supports private registries + +**Flags set:** +- `IS_NEW_LANGUAGE = false` +- `PRIVATE_REGISTRIES_SUPPORTED = true` + +**Output:** +- Feature flag: Created +- Tables: Updated with `` in cells with missing data +- Private registries guide: TODO comment added +- **Draft PR** with "Missing Information" section +- PR checklist includes private registries guide item +- Comment posted listing what's needed + +### Example 3: New language detected + +**Input:** Issue for a brand new language (hypothetical: Zig) + +**Flags Set:** +- `IS_NEW_LANGUAGE = true` +- `PRIVATE_REGISTRIES_SUPPORTED = false` + +**Output:** +- Feature flag: Created +- All 4 core files and `data/tables/supported-code-languages.yml` updated +- **Draft PR** with "New Language Detected" section +- `data/tables/supported-code-languages.yml` updated with the new language and known feature support +- PR includes checklist for any unconfirmed language feature values and the dependency scope reusable +- No private registries changes (not supported) + +## Error handling + +If you encounter issues: + +**Files not found:** +- Use glob to search more broadly +- Report in PR comment which files couldn't be located +- Do NOT proceed if critical files are missing + +**Cannot determine alphabetical position:** +- List the surrounding entries +- Ask for clarification in PR comment + +**Conflicting information:** +- Note the conflict in TODO comment +- List sources in PR comment +- Default to more conservative option (e.g., "not supported" if unclear) + +**Cannot access linked release issue:** +- Proceed with information from docs-content issue only +- Note in PR that release issue couldn't be accessed +- Mark uncertain fields with TODO + +**Unclear if new language:** +- Set `IS_NEW_LANGUAGE = unknown` +- Add verification note in PR description +- Mark PR as draft + +## Success criteria + +Your work is successful when: +- ✅ All 4 core files are updated consistently +- ✅ Tables remain in alphabetical order +- ✅ Feature flag exists and is referenced correctly +- ✅ PR description is complete and accurate +- ✅ Missing data is clearly marked with TODOs +- ✅ PR status (draft/ready) matches data completeness +- ✅ Issue is properly linked with "Closes" syntax +- ✅ Update scope correctly identified (new language vs new ecosystem) +- ✅ Private registries guide flagged if applicable +- ✅ `data/tables/supported-code-languages.yml` updated or flagged for verification if language support changes +- ✅ Workflow checklist linked for reviewer reference diff --git a/.github/workflows/changelog-agent.yml b/.github/workflows/changelog-agent.yml index e3894303e0f3..71e73de5c3ae 100644 --- a/.github/workflows/changelog-agent.yml +++ b/.github/workflows/changelog-agent.yml @@ -420,14 +420,15 @@ jobs: uses: actions/ai-inference@2c43c91ae16266ca159d311430343c67a5ffa222 # v3 with: provider: copilot - # No model is pinned: actions/ai-inference forwards --model to the - # Copilot CLI only when it differs from its GitHub Models default, so - # omitting it lets the CLI pick its own current default (latest Sonnet) - # and avoids breaking when a pinned slug (e.g. gpt-4.1) is retired. + # Must be an explicit empty string, not omitted. This action defaults + # `model` to "gpt-4.1" and always forwards it as --model, and that slug + # is retired, so omitting the input fails with: + # Error: Model "gpt-4.1" from --model flag is not available. + # An empty string makes the action skip --model entirely and lets the + # Copilot CLI pick its own current default. See actions/ai-inference#271. + model: '' prompt-file: prompt.txt system-prompt-file: system-prompt.txt - max-completion-tokens: 1000 - temperature: 0.3 env: COPILOT_GITHUB_TOKEN: ${{ secrets.DOCS_BOT_PAT_COPILOT }} diff --git a/.github/workflows/changelog-prompt.yml b/.github/workflows/changelog-prompt.yml deleted file mode 100644 index 092d796b6f74..000000000000 --- a/.github/workflows/changelog-prompt.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: Changelog prompt when a PR is closed - -on: - pull_request: - types: [closed] - -permissions: - contents: read - pull-requests: write - -jobs: - comment-on-pr: - # This workflow should only run on the 'github/docs-internal' repository because it posts changelog instructions - # and links that are specific to the internal documentation process and resources. - # It also only runs if PR is merged into the main branch. - if: github.repository == 'github/docs-internal' && github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main' - - runs-on: ubuntu-latest - - steps: - - name: Check if PR author is in docs-content team - id: check_team - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 - with: - github-token: ${{ secrets.DOCS_BOT_PAT_BASE }} - script: | - try { - const pr = context.payload.pull_request; - // Team is addressed by numeric ID (org github = 9919, team docs-content = 2796154) - // because IDs survive team renames and slugs do not. - await github.request('GET /organizations/{org_id}/team/{team_id}/memberships/{username}', { - org_id: 9919, - team_id: 2796154, - username: pr.user.login, - }); - core.exportVariable('CONTINUE_WORKFLOW', 'true'); - } catch(err) { - core.info("Workflow triggered by a merged PR, but the PR author is not a member of the docs-content team."); - core.exportVariable('CONTINUE_WORKFLOW', 'false'); - } - - - name: Post changelog instructions comment - - if: env.CONTINUE_WORKFLOW == 'true' - - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 - with: - github-token: ${{ secrets.DOCS_BOT_PAT_BASE }} - script: | - // Get PR author username - const pr = context.payload.pull_request; - const prAuthor = pr.user.login; - - // Compose the comment body with readable YAML and correct formatting - const commentBody = - "👋 @" + prAuthor + - " - Did this PR add noteworthy changes to the GitHub docs? If so, you might want to publicize this by adding an entry to " + - "the [Docs changelog](https://github.com/github/docs-internal/blob/main/CHANGELOG.md).\n\n" + - "To do this, type `/changelog` in a new comment on this PR and complete the fields.\n\n" + - "A message will be posted to the **#docs-changelog** channel and a PR will be raised to update the [CHANGELOG.md](https://github.com/github/docs-internal/blob/main/CHANGELOG.md) file."; - - // Post the comment - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: pr.number, - body: commentBody - }); diff --git a/.github/workflows/check-for-spammy-issues.yml b/.github/workflows/check-for-spammy-issues.yml index 74f9c7f519d8..ceeb08346232 100644 --- a/.github/workflows/check-for-spammy-issues.yml +++ b/.github/workflows/check-for-spammy-issues.yml @@ -30,6 +30,7 @@ jobs: const titleWordCountMin = 3 const urlRegex = /https?:\/\/\S+/i const titleHasUrl = urlRegex.test(issue.title) + const titleHasDollarSign = issue.title.includes('$') try { await github.rest.teams.getMembershipForUserInOrg({ @@ -45,7 +46,7 @@ jobs: // An error will be thrown if the user is not a GitHub employee // If a user is not a GitHub employee, we should check to see if title has at least the minimum required number of words in it and if it does, we can exit the workflow - if (titleWordCount >= titleWordCountMin && !titleHasUrl) { + if (titleWordCount >= titleWordCountMin && !titleHasUrl && !titleHasDollarSign) { return } } diff --git a/.github/workflows/check-for-spammy-prs.yml b/.github/workflows/check-for-spammy-prs.yml index e03da545e0db..20c60d2bd0e9 100644 --- a/.github/workflows/check-for-spammy-prs.yml +++ b/.github/workflows/check-for-spammy-prs.yml @@ -28,34 +28,57 @@ jobs: const repo = 'docs' const pull_number = context.payload.pull_request.number - const { data: files } = await github.rest.pulls.listFiles({ - owner: owner, - repo: repo, - pull_number: pull_number, - }); + const files = await github.paginate(github.rest.pulls.listFiles, { + owner, + repo, + pull_number, + per_page: 100, + }) const onlyDeletes = files.length > 0 && files.every(f => f.status === 'removed') - const isEmptyCommit = !files.length + const onlyDeletesLines = + files.some(file => file.deletions > 0) && + files.every(file => file.additions === 0) + const isEmptyCommit = !files.length const touchesTooMany = files.length > 10 - const totalChanges = files.reduce((sum, f) => sum + f.additions + f.deletions, 0) - const isOneLineAddition = files.every(f => f.status === 'added') && totalChanges <= 1 - const isBlankLineEdit = totalChanges <= 1 && files.every(f => f.status === 'modified') + const isBlankLineEdit = files.length > 0 && files.every(file => { + const changedLines = (file.patch || '') + .split('\n') + .filter(line => /^[+-]/.test(line)) + return changedLines.length > 0 && + changedLines.every(line => line.slice(1).trim() === '') + }) const onlyRenames = files.length > 0 && files.every(f => f.status === 'renamed') // Close the PR and add the invalid label - if (onlyDeletes || isEmptyCommit || touchesTooMany || isOneLineAddition || isBlankLineEdit || onlyRenames) { - await github.rest.issues.update({ - owner: owner, - repo: repo, + if ( + onlyDeletesLines || + onlyDeletes || + isEmptyCommit || + touchesTooMany || + isBlankLineEdit || + onlyRenames + ) { + await github.rest.issues.addLabels({ + owner, + repo, issue_number: pull_number, labels: ['invalid'], - }); + }) // Comment on the PR await github.rest.issues.createComment({ - owner: owner, - repo: repo, + owner, + repo, issue_number: pull_number, - body: `This pull request may have been opened accidentally. I'm going to close it now, but feel free to check out our [contribution guidelines](https://docs.github.com/en/contributing), or raise an issue.`, - }); + body: onlyDeletesLines + ? `This pull request only removes existing content. Before submitting a content-removal pull request, please [open an issue](https://github.com/github/docs/issues/new/choose) explaining the proposed removal and wait for approval from the GitHub Docs team. Once the change has been approved, you can open a new pull request and link it to the issue.` + : `This pull request may have been opened accidentally. I'm going to close it now, but feel free to check out our [contribution guidelines](https://docs.github.com/en/contributing), or raise an issue.`, + }) + + if (onlyDeletesLines) { + core.setFailed( + 'This pull request only deletes lines. An approved issue is required first.', + ) + } } diff --git a/.github/workflows/move-existing-issues-to-the-correct-repo.yml b/.github/workflows/move-existing-issues-to-the-correct-repo.yml deleted file mode 100644 index 12de61fa20c1..000000000000 --- a/.github/workflows/move-existing-issues-to-the-correct-repo.yml +++ /dev/null @@ -1,80 +0,0 @@ -name: Move existing issues to correct docs repo - -# **What it does**: Move all existing issues to the correct repo -# **Why we have it**: We don't want engineering or content issues in the docs-internal repo -# **Who does it impact**: GitHub staff. - -on: - workflow_dispatch: - -permissions: - contents: read - -jobs: - transfer_issues: - runs-on: ubuntu-latest - if: github.repository == 'github/docs-internal' - steps: - - id: move_to_correct_repo - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 - env: - TEAM_ENGINEERING_REPO: ${{ secrets.TEAM_ENGINEERING_REPO }} - TEAM_CONTENT_REPO: ${{ secrets.TEAM_CONTENT_REPO }} - with: - github-token: ${{ secrets.DOCS_BOT_PAT_BASE }} - script: | - const owner = 'github' - const originalRepo = 'docs-internal' - let correctRepo = process.env.TEAM_ENGINEERING_REPO - - const correctRepoObject = await github.rest.repos.get({ - owner: owner, - repo: correctRepo - }) - - const allIssues = await github.paginate(github.rest.issues.listForRepo, { - owner: owner, - repo: originalRepo, - per_page: 100, - labels: ['engineering'] - }) - - for (const issue of allIssues) { - // Extra redundancy with this additional check to be safe - if (issue.labels.find(label => label.name === 'engineering')) { - // Transfer the issue to the correct repo - const issueNodeId = issue.node_id - const correctRepositoryNodeId = correctRepoObject.data.node_id - console.log(`Issue GraphQL Node ID: ${issueNodeId}`) - console.log(`Repository GraphQL Node ID: ${correctRepositoryNodeId}`) - - const mutation = `mutation ($id: ID!, $repositoryId: ID!) { - transferIssue(input: { - issueId: $id, - repositoryId: $repositoryId - }) { - issue { - url, - number - } - } - }` - - const variables = { - id: issueNodeId, - repositoryId: correctRepositoryNodeId - } - - const graph = await github.graphql(mutation, variables) - console.log('GraphQL mutation result:\n' + JSON.stringify(graph)) - - // Add the same labels to the new issue - const newIssueNumber = graph.transferIssue.issue.number - await github.rest.issues.addLabels({ - owner: owner, - repo: correctRepo, - issue_number: newIssueNumber, - labels: issue.labels.map(label => label.name), - }) - } - } diff --git a/.github/workflows/readability.yml b/.github/workflows/readability.yml deleted file mode 100644 index 13625f99667d..000000000000 --- a/.github/workflows/readability.yml +++ /dev/null @@ -1,106 +0,0 @@ -name: Readability report - -# **What it does**: Analyzes readability of rendered content for changed Markdown files in pull requests -# **Why we have it**: We want to track and improve the readability of our documentation over time -# **Who does it impact**: Contributors and content writers - -on: - # pull_request: - # paths: - # - 'content/**/*.md' - # - 'data/reusables/**/*.md' - # The pull_request trigger is currently disabled for testing purposes. - # Re-enable this trigger when ready to run readability analysis automatically on PRs. - workflow_dispatch: - inputs: - pull_request_number: - description: 'Pull request number to analyze (for testing)' - required: true - type: number - -permissions: - contents: read - pull-requests: write - -jobs: - readability-analysis: - if: github.repository == 'github/docs-internal' - runs-on: ubuntu-latest - steps: - - name: Check out repo - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - # Fetch 2 commits so tj-actions/changed-files can diff without extra API calls - fetch-depth: 2 - - name: Checkout PR for manual dispatch - if: ${{ github.event_name == 'workflow_dispatch' }} - run: | - gh pr checkout ${{ inputs.pull_request_number }} - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - uses: ./.github/actions/node-npm-setup - - - uses: ./.github/actions/get-docs-early-access - if: ${{ github.repository == 'github/docs-internal' }} - with: - token: ${{ secrets.DOCS_BOT_PAT_BASE }} - - - name: Get changed content files - id: changed_files - uses: tj-actions/changed-files@22103cc46bda19c2b464ffe86db46df6922fd323 # v47.0.5 - with: - files: 'content/**/*.md' - - - name: Disable Next.js telemetry - run: npx next telemetry disable - - - name: Start server in the background - if: steps.changed_files.outputs.any_modified == 'true' - run: npm start > /tmp/stdout.log 2> /tmp/stderr.log & - - - name: Run readability analysis - if: steps.changed_files.outputs.any_modified == 'true' - env: - CHANGED_FILES: ${{ steps.changed_files.outputs.all_modified_files }} - run: npm run readability-report - - - name: Find existing readability comment - if: steps.changed_files.outputs.any_modified == 'true' - uses: peter-evans/find-comment@b30e6a3c0ed37e7c023ccd3f1db5c6c0b0c23aad - id: findComment - with: - issue-number: ${{ github.event_name == 'workflow_dispatch' && inputs.pull_request_number || github.event.number }} - comment-author: 'github-actions[bot]' - body-includes: '' - - - name: Read readability report - if: steps.changed_files.outputs.any_modified == 'true' - id: read_report - run: | - if [ -f "readability-report.md" ]; then - { - echo 'report<> "$GITHUB_OUTPUT" - fi - - - name: Create or update readability comment - if: steps.changed_files.outputs.any_modified == 'true' && steps.read_report.outputs.report - uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 - with: - comment-id: ${{ steps.findComment.outputs.comment-id }} - issue-number: ${{ github.event_name == 'workflow_dispatch' && inputs.pull_request_number || github.event.number }} - body: | - - ${{ steps.read_report.outputs.report }} - edit-mode: replace - - - if: ${{ failure() }} - name: Debug server outputs on errors - run: | - echo "____STDOUT____" - cat /tmp/stdout.log || echo "No stdout log found" - echo "____STDERR____" - cat /tmp/stderr.log || echo "No stderr log found" diff --git a/.github/workflows/reviewers-docs-engineering.yml b/.github/workflows/reviewers-docs-engineering.yml index 422139ef62d4..cb5e3527ea6f 100644 --- a/.github/workflows/reviewers-docs-engineering.yml +++ b/.github/workflows/reviewers-docs-engineering.yml @@ -54,11 +54,22 @@ jobs: # These are usually cross-platform `npm install` churn from contributors # editing content. We comment with reset instructions instead of pulling in # docs-engineering for review. + # + # Dependabot is exempt. Its security updates for transitive dependencies + # change only the lockfile, because the dependency is not in package.json. + # Those PRs are intentional, so the reset instructions are wrong and + # suppressing the review request leaves them with no reviewer at all. - name: Detect lockfile-only churn id: detect env: GH_TOKEN: ${{ secrets.DOCS_BOT_PAT_BASE }} + PR_AUTHOR: ${{ github.event.pull_request.user.login }} run: | + if [ "$PR_AUTHOR" = "dependabot[bot]" ]; then + echo "Author is Dependabot; skipping lockfile churn detection." + echo "lockfile_only=false" >> "$GITHUB_OUTPUT" + exit 0 + fi changed=$(gh pr diff "$PR" --name-only) echo "Changed files:" echo "$changed" diff --git a/.github/workflows/send-to-triage-board.yml b/.github/workflows/send-to-triage-board.yml new file mode 100644 index 000000000000..f5defa974e68 --- /dev/null +++ b/.github/workflows/send-to-triage-board.yml @@ -0,0 +1,45 @@ +name: Add new issues and PRs to central triage board + +# **What it does**: Adds newly opened or reopened issues and pull requests in github/docs to the right place for triage, and stamps the item with today's date. +# **Why we have it**: To ensure incoming work in the public docs repo is triaged properly. +# **Who does it impact**: Writers, FRs. + +on: + issues: + types: [opened, reopened] + pull_request_target: + types: [opened, reopened, ready_for_review] + +permissions: + contents: read + +jobs: + add-to-central-triage: + runs-on: ubuntu-latest + if: github.repository == 'github/docs' + steps: + - name: Triage to central triage board + env: + GITHUB_TOKEN: ${{ secrets.DOCS_BOT_PAT_BASE }} + ITEM_URL: ${{ github.event.issue.html_url || github.event.pull_request.html_url }} + # Add to the Central Triage Group project board and set date to now + PROJECT_NUMBER: '19598' + PROJECT_ID: 'PVT_kwDNJr_OAJ4AfQ' + DATE_FIELD_ID: 'PVTF_lADNJr_OAJ4Afc4IAbbv' + run: | + echo "Adding $ITEM_URL to project $PROJECT_NUMBER..." + ITEM_ID=$(gh project item-add "$PROJECT_NUMBER" --owner github --url "$ITEM_URL" --format json --jq '.id' || true) + + sleep 10 + + if [ -n "$ITEM_ID" ] && [ "$ITEM_ID" != "null" ]; then + echo "Editing date on item $ITEM_ID..." + DATE=$(date '+%Y-%m-%d') + if gh project item-edit --project-id "$PROJECT_ID" --id "$ITEM_ID" --field-id "$DATE_FIELD_ID" --date "$DATE"; then + echo "done editing" + else + echo "::warning::gh project item-edit failed for $ITEM_URL (item $ITEM_ID); the item is on the board but the date field was not set" + fi + else + echo "::warning::gh project item-add did not return an item id for $ITEM_URL; skipping item-edit" + fi diff --git a/.github/workflows/sync-graphql.yml b/.github/workflows/sync-graphql.yml index 57c77018ade1..e94136afd1fb 100644 --- a/.github/workflows/sync-graphql.yml +++ b/.github/workflows/sync-graphql.yml @@ -95,7 +95,7 @@ jobs: with: slack_token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }} message: | - ⚠️ GraphQL Sync found ${{ needs.update_graphql_files.outputs.ignored-count }} ignored change types: ${{ needs.update_graphql_files.outputs.ignored-types }} + :graphql: GraphQL Sync found ${{ needs.update_graphql_files.outputs.ignored-count }} ignored change types: ${{ needs.update_graphql_files.outputs.ignored-types }} These change types are not in CHANGES_TO_REPORT and were silently ignored. Consider reviewing if they should be added to the changelog. diff --git a/.github/workflows/sync-sdk-docs.yml b/.github/workflows/sync-sdk-docs.yml index b8d56344aaca..82a1b2d3a1b4 100644 --- a/.github/workflows/sync-sdk-docs.yml +++ b/.github/workflows/sync-sdk-docs.yml @@ -24,6 +24,7 @@ on: types: [opened, synchronize, reopened] paths: - '.github/workflows/sync-sdk-docs.yml' + - 'content/copilot/get-started/sdk-quickstart.md' - 'src/workflows/sync-sdk-docs/**' concurrency: @@ -77,6 +78,10 @@ jobs: - name: Copy SDK docs run: | mkdir -p "$SDK_DOCS_TARGET" + # Pages relocated out of this tree into hand-authored content are not + # excluded here — they are removed by the RELOCATED_PAGES map in + # src/workflows/sync-sdk-docs/normalize-sdk-docs.ts, which also + # repoints inbound links at their new URLs. rsync -av --exclude='.validation/' --exclude='developer-docs/' "$SDK_TMP/docs/" "$SDK_DOCS_TARGET/" echo "Copied $(find "$SDK_DOCS_TARGET" -name '*.md' | wc -l | tr -d ' ') markdown files" diff --git a/Dockerfile b/Dockerfile index 140cacc3b1db..65fe368031c5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ # --------------------------------------------------------------- # To update the sha: # https://github.com/github/gh-base-image/pkgs/container/gh-base-image%2Fgh-base-noble -FROM ghcr.io/github/gh-base-image/gh-base-noble:20260903-185405-g03e243e8e@sha256:d7ed0adc25b453b64b7ba7bfb9c81b786063d9d18d0161a81effbba2ba109873 AS base +FROM ghcr.io/github/gh-base-image/gh-base-noble:20260914-014148-gb620b63bf@sha256:fe199dcd96e01f53c42d077dee87f428e8341379aab0987721e16b32462feb05 AS base # Install curl for Node install and determining the early access branch # Install git for cloning docs-early-access & translations repos diff --git a/assets/images/help/code-quality/assign-findings-bulk.png b/assets/images/help/code-quality/assign-findings-bulk.png new file mode 100644 index 000000000000..6b12a3972ce5 Binary files /dev/null and b/assets/images/help/code-quality/assign-findings-bulk.png differ diff --git a/assets/images/help/copilot/code-review/automatic-code-review.png b/assets/images/help/copilot/code-review/automatic-code-review.png deleted file mode 100644 index 49a5283cf131..000000000000 Binary files a/assets/images/help/copilot/code-review/automatic-code-review.png and /dev/null differ diff --git a/assets/images/help/copilot/spark-data-access.png b/assets/images/help/copilot/spark-data-access.png deleted file mode 100644 index cbb288acd318..000000000000 Binary files a/assets/images/help/copilot/spark-data-access.png and /dev/null differ diff --git a/assets/images/help/copilot/spark-fix-all-errors.png b/assets/images/help/copilot/spark-fix-all-errors.png deleted file mode 100644 index 7bbd4ebfd403..000000000000 Binary files a/assets/images/help/copilot/spark-fix-all-errors.png and /dev/null differ diff --git a/assets/images/help/copilot/spark-github-user-visibility.png b/assets/images/help/copilot/spark-github-user-visibility.png deleted file mode 100644 index d88f06f9b00b..000000000000 Binary files a/assets/images/help/copilot/spark-github-user-visibility.png and /dev/null differ diff --git a/assets/images/help/pull_requests/abandon-review-button.png b/assets/images/help/pull_requests/abandon-review-button.png index 9a635048de27..2c0a1bd00ea3 100644 Binary files a/assets/images/help/pull_requests/abandon-review-button.png and b/assets/images/help/pull_requests/abandon-review-button.png differ diff --git a/assets/images/help/pull_requests/suggestion-block.png b/assets/images/help/pull_requests/suggestion-block.png index 02c9ba416432..9585f56aa486 100644 Binary files a/assets/images/help/pull_requests/suggestion-block.png and b/assets/images/help/pull_requests/suggestion-block.png differ diff --git a/assets/images/help/pull_requests/view-full-review-view-changes.png b/assets/images/help/pull_requests/view-full-review-view-changes.png index b5d456efb9df..66eb96881009 100644 Binary files a/assets/images/help/pull_requests/view-full-review-view-changes.png and b/assets/images/help/pull_requests/view-full-review-view-changes.png differ diff --git a/assets/images/site/footer-divider.png b/assets/images/site/footer-divider.png new file mode 100644 index 000000000000..53fa765c696b Binary files /dev/null and b/assets/images/site/footer-divider.png differ diff --git a/assets/images/site/footer-divider.webp b/assets/images/site/footer-divider.webp new file mode 100644 index 000000000000..fc833eec8078 Binary files /dev/null and b/assets/images/site/footer-divider.webp differ diff --git a/content/account-and-profile/tutorials/personalize-your-profile.md b/content/account-and-profile/tutorials/personalize-your-profile.md index b63377321bf0..c03da6333112 100644 --- a/content/account-and-profile/tutorials/personalize-your-profile.md +++ b/content/account-and-profile/tutorials/personalize-your-profile.md @@ -25,7 +25,7 @@ category: --- > [!NOTE] -> Your profile name for your is {% data variables.product.github %} account is **required**. All other profile information described in this article is **optional**. +> Your profile name for your {% data variables.product.github %} account is **required**. All other profile information described in this article is **optional**. ## Changing your profile picture diff --git a/content/actions/concepts/security/openid-connect.md b/content/actions/concepts/security/openid-connect.md index 140a46861367..37f2dc5911ef 100644 --- a/content/actions/concepts/security/openid-connect.md +++ b/content/actions/concepts/security/openid-connect.md @@ -99,6 +99,12 @@ To use OIDC in your workflows, you must establish a trust relationship between { Before granting an access token, your cloud provider checks that the [`subject`](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims) and any other claims used to set conditions in its trust settings match those in the request's JSON Web Token (JWT). If the trust configuration matches, your cloud provider issues a temporary access token to the workflow. +{% ifversion dependabot-oidc-support %} + +OIDC tokens requested for {% data variables.product.prodname_dependabot %} update jobs have an `event_name` claim of `dynamic`. If your trust policy is intended to authorize only {% data variables.product.prodname_actions %} workflows and your cloud provider supports conditions on `event_name`, allow only the event names expected by your workflows. + +{% endif %} + For steps and syntax for configuring OIDC trust and setting conditions for cloud providers, see [AUTOTITLE](/actions/reference/security/oidc#oidc-claims-used-to-define-trust-conditions-on-cloud-roles). ## Configuring OIDC on {% data variables.enterprise.data_residency_site %} diff --git a/content/actions/concepts/workflows-and-actions/dependency-caching.md b/content/actions/concepts/workflows-and-actions/dependency-caching.md index 6a51f5ce17d0..67ce1564c564 100644 --- a/content/actions/concepts/workflows-and-actions/dependency-caching.md +++ b/content/actions/concepts/workflows-and-actions/dependency-caching.md @@ -31,9 +31,9 @@ For more information on workflow run artifacts, see [AUTOTITLE](/actions/tutoria Caches are shared based on the branch or tag a workflow run uses, not on the identity of the workflow or job. See [AUTOTITLE](/actions/reference/workflows-and-actions/events-that-trigger-workflows) and the `GITHUB_REF` for the branch used for various workflow triggers. Any run that can read a cache restores its contents as-is, so you should treat restored files as untrusted input and never store secrets or other sensitive data in a cache. -Untrusted workflows can read sensitive cache contents, such as when a `pull_request` from a fork restores a cache. Poisoned caches can lead to code execution in trusted workflows. To limit the risk of cache poisoning, {% data variables.product.github %} gives workflows that run in response to low-trust triggers read-only access to caches in the default branch's scope. +Untrusted workflows can read sensitive cache contents, such as when a `pull_request` from a fork restores a cache. Poisoned caches can lead to code execution in trusted workflows. To limit the risk of cache poisoning, {% data variables.product.github %} gives workflows that run in response to low-trust triggers read-only access to caches in the default branch's scope.{% ifversion actions-cache-mode %} A workflow or job can override this read-only restriction by explicitly declaring a write-capable `cache-mode`, which reintroduces the cache-poisoning risk for that workflow.{% endif %} -For details on cache scope, access restrictions, and best practices for using caches securely, see [AUTOTITLE](/actions/reference/workflows-and-actions/dependency-caching#cache-access-for-low-trust-workflow-triggers). +For the trusted-versus-low-trust trigger breakdown and default cache behavior, see [AUTOTITLE](/actions/reference/workflows-and-actions/dependency-caching#cache-access-for-low-trust-workflow-triggers). For cache-specific security guidance, see [AUTOTITLE](/actions/reference/workflows-and-actions/dependency-caching#best-practices-for-using-caches-securely). ## Next steps diff --git a/content/actions/how-tos/manage-runners/self-hosted-runners/customize-containers.md b/content/actions/how-tos/manage-runners/self-hosted-runners/customize-containers.md index eb5f41dc6be0..407f8cd3b752 100644 --- a/content/actions/how-tos/manage-runners/self-hosted-runners/customize-containers.md +++ b/content/actions/how-tos/manage-runners/self-hosted-runners/customize-containers.md @@ -100,7 +100,7 @@ The `prepare_job` command is called when a job is started. {% data variables.pro "state": {}, "args": { "jobContainer": { - "image": "node:18" + "image": "node:18", "workingDirectory": "/__w/octocat-test2/octocat-test2", "createOptions": "--cpus 1", "environmentVariables": { diff --git a/content/actions/how-tos/reuse-automations/reuse-workflows.md b/content/actions/how-tos/reuse-automations/reuse-workflows.md index 6aa756020def..2049cbdef4a0 100644 --- a/content/actions/how-tos/reuse-automations/reuse-workflows.md +++ b/content/actions/how-tos/reuse-automations/reuse-workflows.md @@ -303,6 +303,22 @@ jobs: For more information on using job outputs, see [AUTOTITLE](/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idoutputs). If you want to share something other than a variable (e.g. a build artifact) between workflows, see [AUTOTITLE](/actions/tutorials/store-and-share-data). +{% ifversion actions-cache-mode %} + +## Controlling cache access in reusable workflows + +You can use the `cache-mode` key to grant a reusable workflow the least amount of {% data variables.product.prodname_actions %} cache access it needs. The value can be `read`, `write`, `write-only`, or `none`. If you omit `cache-mode`, a `read` or `write` default is used based on the trigger type. For the full syntax and the meaning of each value, see [AUTOTITLE](/actions/reference/workflows-and-actions/workflow-syntax#cache-mode). For trigger-dependent defaults, see [AUTOTITLE](/actions/reference/dependency-caching-reference#defaults). + +When a caller workflow calls a reusable workflow, `cache-mode` propagates to the called workflow. An explicit `cache-mode` on the calling job, or inherited from the caller workflow, limits the cache access the called workflow can request. + +If the calling job neither sets nor inherits an explicit `cache-mode`, the called workflow can explicitly request `write` even when the caller's low-trust trigger defaults to `read`. To cap a called workflow at read-only access, set `cache-mode: read` on the job that calls it. + +If a called workflow declares a `cache-mode` that requests access beyond this explicit limit, the run does not start and {% data variables.product.github %} reports a validation error. For example, a caller that allows at most `read` cannot call a workflow that declares `write`. Because `read` grants restore access and `write-only` grants save access, the two are non-overlapping capabilities, so a mismatch between them is also an over-request. For example, a `write-only` caller cannot call a workflow that declares `read`. + +For more information about cache access and the four modes, see [AUTOTITLE](/actions/reference/dependency-caching-reference#controlling-cache-access-with-cache-mode). + +{% endif %} + ## Monitoring which workflows are being used {% ifversion fpt or ghes %} diff --git a/content/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-jfrog.md b/content/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-jfrog.md index edf61b623941..1f12a985cf17 100644 --- a/content/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-jfrog.md +++ b/content/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-jfrog.md @@ -34,7 +34,7 @@ For an example {% data variables.product.prodname_actions %} workflow using the * To be secure, you need to set a Claims JSON in JFrog when configuring identity mappings. For more information, see [AUTOTITLE](https://jfrog.com/help/r/jfrog-platform-administration-documentation/configure-identity-mappings) and [AUTOTITLE](/actions/reference/security/oidc#customizing-the-token-claims). - For example, you can set `iss` to `https://token.actions.githubusercontent.com`, and the `repository` to something like "octo-org/octo-repo"`. This will ensure only Actions workflows from the specified repository will have access to your JFrog platform. The following is an example Claims JSON when configuring identity mappings. + For example, you can set `iss` to `https://token.actions.githubusercontent.com`, and the `repository` to something like `octo-org/octo-repo`.{% ifversion dependabot-oidc-support %} JFrog identity mappings match each claim against an exact value, so to ensure only {% data variables.product.prodname_actions %} workflows from the specified repository have access to your JFrog platform, also set `event_name` to the event that triggers your workflow, such as `push`. This prevents OIDC tokens requested for {% data variables.product.prodname_dependabot %} update jobs, which have an `event_name` of `dynamic`, from matching the identity mapping. If your workflows are triggered by more than one event, create a separate identity mapping for each event name.{% endif %} The following is an example Claims JSON when configuring identity mappings. {% data reusables.actions.jfrog-json-configuring-identity-mappings %} diff --git a/content/actions/reference/security/oidc.md b/content/actions/reference/security/oidc.md index cba1290aeffc..9c3773dae3db 100644 --- a/content/actions/reference/security/oidc.md +++ b/content/actions/reference/security/oidc.md @@ -60,7 +60,7 @@ The OIDC token includes the following claims. | `enterprise_id`| The ID of the enterprise that contains the repository from where the workflow is running. | | {% endif %} | | `environment`| The name of the environment used by the job. If the `environment` claim is included (also via `include_claim_keys`), an environment is required and must be provided. | -| `event_name`| The name of the event that triggered the workflow run. | +| `event_name`| The name of the event that triggered the workflow run.{% ifversion dependabot-oidc-support %} OIDC tokens requested for {% data variables.product.prodname_dependabot %} update jobs use `dynamic` as the value.{% endif %} | | `head_ref`| The source branch of the pull request in a workflow run. | | `job_workflow_ref`| For jobs using a reusable workflow, the ref path to the reusable workflow. For more information, see [AUTOTITLE](/actions/how-tos/secure-your-work/security-harden-deployments/oidc-with-reusable-workflows). | | `job_workflow_sha`| For jobs using a reusable workflow, the commit SHA for the reusable workflow file. | @@ -107,6 +107,12 @@ If you need more granular trust conditions, you can customize the {% ifversion g There are also many additional claims supported in the OIDC token that can be used for setting these conditions. In addition, your cloud provider could allow you to assign a role to the access tokens, letting you specify even more granular permissions. +{% ifversion dependabot-oidc-support %} + +OIDC tokens requested for {% data variables.product.prodname_dependabot %} update jobs have an `event_name` claim of `dynamic`. If your trust policy is intended to authorize only {% data variables.product.prodname_actions %} workflows and your cloud provider supports conditions on `event_name`, allow only the event names expected by your workflows. + +{% endif %} + > [!NOTE] > To control how your cloud provider issues access tokens, you **must** define at least one condition, so that untrusted repositories can’t request access tokens for your cloud resources. diff --git a/content/actions/reference/security/securely-using-pull_request_target.md b/content/actions/reference/security/securely-using-pull_request_target.md index 1d03625565e1..c9ebc5ae8ce6 100644 --- a/content/actions/reference/security/securely-using-pull_request_target.md +++ b/content/actions/reference/security/securely-using-pull_request_target.md @@ -67,7 +67,7 @@ If you have confirmed you need `pull_request_target`, apply these controls to li * **Restrict secrets.** Confirm that the permissions set on the `GITHUB_TOKEN` have the least privileges and that only the necessary repository and organization secrets are used for the workflow. For more information, see [AUTOTITLE](/actions/tutorials/authenticate-with-github_token#modifying-the-permissions-for-the-github_token). -* **Understand the impact to caching.** To reduce the risk of cache poisoning, workflows triggered by `pull_request_target` have read-only access to the cache in the default branch's scope. These workflows can restore existing cache entries but cannot create or overwrite them, so they cannot affect the execution of other, unrelated, workflows through the shared cache. If such a workflow attempts to save a cache, the save fails but the step and the job continue, and the failure is reported as a warning in the workflow log. If your workflow needs to populate the cache, save it from a workflow that runs on a trusted trigger such as `push`. For more information, see [AUTOTITLE](/actions/reference/workflows-and-actions/dependency-caching#cache-access-for-low-trust-workflow-triggers). +* **Understand the impact to caching.** To reduce the risk of cache poisoning, workflows triggered by `pull_request_target` have read-only access to the cache in the default branch's scope. These workflows can restore existing cache entries but cannot create or overwrite them, so they cannot affect the execution of other, unrelated, workflows through the shared cache. If such a workflow attempts to save a cache, the save fails but the step and the job continue, and the failure is reported as a warning in the workflow log. If your workflow needs to populate the cache, save it from a workflow that runs on a trusted trigger such as `push`.{% ifversion actions-cache-mode %} A workflow or job can opt out of this read-only restriction by explicitly declaring a write-capable `cache-mode`, but doing so on a `pull_request_target` workflow reintroduces the cache-poisoning risk this restriction is designed to prevent.{% endif %} For more information, see [AUTOTITLE](/actions/reference/workflows-and-actions/dependency-caching#cache-access-for-low-trust-workflow-triggers). * **Ensure the underlying compute is isolated and ephemeral.** If self-hosted runners are used, you must confirm that the runner environment is properly restricted from internal resources and is not reused across {% data variables.product.prodname_actions %} runs. For more information, see [AUTOTITLE](/actions/reference/security/secure-use#hardening-for-self-hosted-runners). diff --git a/content/actions/reference/workflows-and-actions/dependency-caching.md b/content/actions/reference/workflows-and-actions/dependency-caching.md index fd89ca7b05e6..1ac52fcc12a0 100644 --- a/content/actions/reference/workflows-and-actions/dependency-caching.md +++ b/content/actions/reference/workflows-and-actions/dependency-caching.md @@ -274,7 +274,7 @@ To reduce this risk, only these workflow triggers can create or overwrite caches * `page_build` * `schedule` -Runs triggered by any other event that resolves to the default branch are given read-only access to caches in the default branch's scope. These runs can restore existing caches but cannot create or overwrite them. This includes triggers whose payload or initiating actor can be influenced by someone outside the repository, such as `pull_request_target`, `issue_comment`, and `workflow_run`. +Runs triggered by any other event that resolves to the default branch are given read-only access to caches in the default branch's scope. These runs can restore existing caches but cannot create or overwrite them. This includes triggers whose payload or initiating actor can be influenced by someone outside the repository, such as `pull_request_target`, `issue_comment`, and `workflow_run`.{% ifversion actions-cache-mode %} A repository can opt out of this restriction for a specific workflow or job by explicitly declaring a write-capable `cache-mode`. See [Bypassing the default untrusted-trigger cache restriction](#bypassing-the-default-untrusted-trigger-cache-restriction).{% endif %} The `pull_request` event is not affected. Caches created by a `pull_request` run are already scoped to the merge ref (`refs/pull/.../merge`) and cannot be written to the default branch's scope. For more information, see [Restrictions for accessing a cache](#restrictions-for-accessing-a-cache). @@ -282,6 +282,61 @@ When a run with read-only cache access tries to save a cache, the save fails but * To retain the performance benefits of caching on the default branch scope, ensure there is a trusted workflow that keeps the cache updated, for example a CI build triggered by a `push` to the default branch. Those cache entries can then be restored by workflows triggered by low-trust events such as `pull_request_target`. * In low-trust workflows, switch to a restore-only cache operation such as `actions/cache/restore` to make the intended cache usage clear and avoid the warning in the workflow run logs. +{% ifversion actions-cache-mode %} + +## Controlling cache access with `cache-mode` + +Use the `cache-mode` workflow key to grant jobs the least amount of cache access they need. You can set `cache-mode` at the workflow level, at the job level, or both. A job-level value overrides the workflow-level value for that job. For the syntax, see [AUTOTITLE](/actions/reference/workflows-and-actions/workflow-syntax#cache-mode). + +`cache-mode` controls the cache access granted to the job's token, and it is enforced with scoped cache tokens. The key accepts the following values. + +| Value | Restore caches | Save caches | +| ----- | -------------- | ----------- | +| `read` | Yes | No | +| `write` | Yes | Yes | +| `write-only` | No | Yes | +| `none` | No | No | + +If you omit `cache-mode`, a `read` or `write` default is used based on the trigger type. See [Defaults](#defaults) and [Bypassing the default untrusted-trigger cache restriction](#bypassing-the-default-untrusted-trigger-cache-restriction). + +### Defaults + +| Configuration | Trigger type | Effective access | +| --- | --- | --- | +| `cache-mode` omitted | Trusted | `write` | +| `cache-mode` omitted | Low-trust | `read` | +| `cache-mode: write` | Trusted or low-trust | `write` | +| `cache-mode: write-only` | Trusted or low-trust | `write-only` | +| `cache-mode: read` | Trusted or low-trust | `read` | +| `cache-mode: none` | Trusted or low-trust | `none` | + +For the trusted-versus-low-trust trigger breakdown, see [Cache access for low-trust workflow triggers](#cache-access-for-low-trust-workflow-triggers). + +The runner exposes the effective mode in the `ACTIONS_CACHE_MODE` environment variable, and the `actions/cache` action and the `@actions/cache` toolkit honor it. Restore is skipped when the mode does not allow reads (`none` or `write-only`), and save is skipped when the mode does not allow writes (`none` or `read`). When a cache operation is skipped because of the mode, the action logs an informational message and the step and run continue without failing. A skipped restore is treated as a cache miss; a skipped save is simply not performed. + +### Cache access in reusable workflows + +`cache-mode` propagates from a caller workflow to the reusable workflows it calls. An explicit `cache-mode` on the calling job, or inherited from the caller workflow, limits the cache access the called workflow can request. + +If the calling job neither sets nor inherits an explicit `cache-mode`, the called workflow can explicitly request `write` even when the caller's low-trust trigger defaults to `read`. To cap a called workflow at read-only access, set `cache-mode: read` on the job that calls it. + +If a called workflow declares a `cache-mode` that requests access beyond this explicit limit, the run does not start and {% data variables.product.github %} reports a validation error. For example, a caller that allows at most `read` cannot call a workflow that declares `write`. Because `read` and `write-only` grant different, non-overlapping capabilities, a mismatch between them is also an over-request. For example, a `write-only` caller cannot call a workflow that declares `read`. For more information about calling reusable workflows, see [AUTOTITLE](/actions/how-tos/reuse-automations/reuse-workflows#controlling-cache-access-in-reusable-workflows). + +### Bypassing the default untrusted-trigger cache restriction + +A job or workflow that explicitly declares `cache-mode: write` or `cache-mode: write-only` overrides the secure read-only default that would otherwise apply to a run triggered by a low-trust event. See [Cache access for low-trust workflow triggers](#cache-access-for-low-trust-workflow-triggers). + +> [!WARNING] +> Explicitly declaring `cache-mode: write` or `cache-mode: write-only` reintroduces the risk of cache-poisoning that the default untrusted-trigger read-only permissions are designed to prevent. If a workflow that runs on an untrusted trigger, such as `pull_request_target`, `issue_comment`, or `workflow_run`, declares a write-capable `cache-mode`, vulnerabilities or untrusted code execution in the workflow could then be used to save a cache. A more privileged workflow that later restores that cache could then execute attacker-controlled content. + +Before declaring a write-capable `cache-mode` on a workflow with a low-trust trigger, consider whether a narrower mitigation meets your needs instead: + * Keep the secure cache access restriction in effect by explicitly declaring `cache-mode: read` on the job, and have a trusted, `push`-triggered workflow maintain the cache instead. See [Cache access for low-trust workflow triggers](#cache-access-for-low-trust-workflow-triggers). + * Only declare a write-capable `cache-mode` on low-trust triggers for jobs that don't process untrusted input before writing to the cache. This includes code checked out from untrusted sources such as forks and pull requests. + * If you do override the secure default, treat the resulting cache as untrusted in every workflow that restores it, and avoid restoring it into a run that has write access to secrets or elevated permissions. + * Follow the guidance on [best practices for using caches securely](#best-practices-for-using-caches-securely). + +{% endif %} + ## Best practices for using caches securely Cache contents are not signed or verified, and any workflow run that can read a cache may extract its contents. Extracted caches may modify files that are subsequently executed in a workflow run, leading to malicious code execution. Follow these practices to reduce the security risk of using caches. diff --git a/content/actions/reference/workflows-and-actions/expressions.md b/content/actions/reference/workflows-and-actions/expressions.md index 69a06bba99b6..e3b4af25903d 100644 --- a/content/actions/reference/workflows-and-actions/expressions.md +++ b/content/actions/reference/workflows-and-actions/expressions.md @@ -412,18 +412,18 @@ You may also use the `*` syntax on an object. For example, suppose you have an o "scallions": { "colors": ["green", "white", "red"], - "ediblePortions": ["roots", "stalks"], + "ediblePortions": ["roots", "stalks"] }, "beets": { "colors": ["purple", "red", "gold", "white", "pink"], - "ediblePortions": ["roots", "stems", "leaves"], + "ediblePortions": ["roots", "stems", "leaves"] }, "artichokes": { "colors": ["green", "purple", "red", "black"], - "ediblePortions": ["hearts", "stems", "leaves"], - }, + "ediblePortions": ["hearts", "stems", "leaves"] + } } ``` @@ -434,7 +434,7 @@ The filter `vegetables.*.ediblePortions` could evaluate to: [ ["roots", "stalks"], ["hearts", "stems", "leaves"], - ["roots", "stems", "leaves"], + ["roots", "stems", "leaves"] ] ``` diff --git a/content/actions/reference/workflows-and-actions/reusing-workflow-configurations.md b/content/actions/reference/workflows-and-actions/reusing-workflow-configurations.md index e86273424c6e..0210f05b1956 100644 --- a/content/actions/reference/workflows-and-actions/reusing-workflow-configurations.md +++ b/content/actions/reference/workflows-and-actions/reusing-workflow-configurations.md @@ -81,6 +81,9 @@ When you call a reusable workflow, you can only use the following keywords in th * [`jobs..if`](/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idif) * [`jobs..concurrency`](/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idconcurrency) * [`jobs..permissions`](/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idpermissions) +{%- ifversion actions-cache-mode %} +* [`jobs..cache-mode`](/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcache-mode) +{%- endif %} > [!NOTE] > diff --git a/content/actions/reference/workflows-and-actions/workflow-syntax.md b/content/actions/reference/workflows-and-actions/workflow-syntax.md index 51a336d56b02..b7ffd6dab7c9 100644 --- a/content/actions/reference/workflows-and-actions/workflow-syntax.md +++ b/content/actions/reference/workflows-and-actions/workflow-syntax.md @@ -338,6 +338,46 @@ env: {% data reusables.actions.jobs.section-using-concurrency %} +{% ifversion actions-cache-mode %} + +## `cache-mode` + +Use `cache-mode` to control the level of {% data variables.product.prodname_actions %} cache access that jobs in the workflow are granted. Setting `cache-mode` at the top level applies to every job in the workflow, unless a job overrides it with [`jobs..cache-mode`](#jobsjob_idcache-mode). + +Access is enforced with scoped cache tokens, so a job cannot restore or save caches beyond the mode it is granted. `cache-mode` accepts the following values. + +| Value | Restore caches | Save caches | +| ----- | -------------- | ----------- | +| `read` | Yes | No | +| `write` | Yes | Yes | +| `write-only` | No | Yes | +| `none` | No | No | + +If you omit `cache-mode`, a `read` or `write` default is used based on the trigger type. For trigger-dependent effective defaults, see [AUTOTITLE](/actions/reference/dependency-caching-reference#defaults). + +> [!WARNING] +> Explicitly declaring `cache-mode: write` or `cache-mode: write-only` on low-trust triggers can bypass the secure default read-only cache restriction and reintroduce cache-poisoning risk. For guidance and mitigations, see [AUTOTITLE](/actions/reference/dependency-caching-reference#bypassing-the-default-untrusted-trigger-cache-restriction). + +When a cache operation is not permitted by the effective mode, the cache step logs an informational message and continues. The job and workflow do not fail. A skipped restore is treated as a cache miss; a skipped save is simply not performed. For more information, see [AUTOTITLE](/actions/reference/dependency-caching-reference#controlling-cache-access-with-cache-mode). + +### Example of `cache-mode` + +```yaml +cache-mode: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: {% data reusables.actions.action-checkout %} + - uses: {% data reusables.actions.action-cache %} + with: + path: ~/.npm + key: {% raw %}npm-${{ hashFiles('**/package-lock.json') }}{% endraw %} +``` + +{% endif %} + ## `jobs` {% data reusables.actions.jobs.section-using-jobs-in-a-workflow %} @@ -408,6 +448,33 @@ env: {% data reusables.actions.jobs.section-using-concurrency-jobs %} +{% ifversion actions-cache-mode %} + +## `jobs..cache-mode` + +Use `jobs..cache-mode` to set the level of {% data variables.product.prodname_actions %} cache access for a single job. A value set here overrides any workflow-level [`cache-mode`](#cache-mode) for this job only. + +The accepted values are `read`, `write`, `write-only`, and `none`, with the same meanings as the top-level key. If neither the job nor the workflow sets `cache-mode`, a trigger-based default applies. For more information about each value, see [`cache-mode`](#cache-mode) and [AUTOTITLE](/actions/reference/dependency-caching-reference#defaults). + +> [!WARNING] +> Explicitly declaring `cache-mode: write` or `cache-mode: write-only` on low-trust triggers can bypass the secure default read-only cache restriction and reintroduce cache-poisoning risk. For guidance and mitigations, see [AUTOTITLE](/actions/reference/dependency-caching-reference#bypassing-the-default-untrusted-trigger-cache-restriction). + +You can also set `cache-mode` on a job that calls a reusable workflow to limit the cache access granted to the called workflow. For more information, see [AUTOTITLE](/actions/reference/workflows-and-actions/reusing-workflow-configurations#supported-keywords-for-jobs-that-call-a-reusable-workflow) and [AUTOTITLE](/actions/how-tos/reuse-automations/reuse-workflows#controlling-cache-access-in-reusable-workflows). + +### Example of `jobs..cache-mode` + +```yaml +jobs: + build: + runs-on: ubuntu-latest + cache-mode: write + test: + runs-on: ubuntu-latest + cache-mode: read +``` + +{% endif %} + ## `jobs..outputs` {% data reusables.actions.jobs.section-defining-outputs-for-jobs %} @@ -1572,5 +1639,3 @@ Path patterns must match the whole path, and start from the repository's root. | `'**/migrate-*.sql'` | A file with the prefix `migrate-` and suffix `.sql` anywhere in the repository. | `migrate-10909.sql`

`db/migrate-v1.0.sql`

`db/sept/migrate-v1.sql` | | `'*.md'`

`'!README.md'` | Using an exclamation mark (`!`) in front of a pattern negates it. When a file matches a pattern and also matches a negative pattern defined later in the file, the file will not be included. | `hello.md`

_Does not match_

`README.md`

`docs/hello.md` | | `'*.md'`

`'!README.md'`

`README*` | Patterns are checked sequentially. A pattern that negates a previous pattern will re-include file paths. | `hello.md`

`README.md`

`README.doc` | - - diff --git a/content/actions/tutorials/publish-packages/publish-nodejs-packages.md b/content/actions/tutorials/publish-packages/publish-nodejs-packages.md index 429958fe46a3..ff49fab2c1ce 100644 --- a/content/actions/tutorials/publish-packages/publish-nodejs-packages.md +++ b/content/actions/tutorials/publish-packages/publish-nodejs-packages.md @@ -110,7 +110,7 @@ If you do provide the `repository` key in your `package.json` file, then the rep "repository": { "type": "git", "url": "https://github.com/octocat/my-other-repo.git" - }, + } } ``` diff --git a/content/actions/tutorials/use-actions-runner-controller/get-started.md b/content/actions/tutorials/use-actions-runner-controller/get-started.md index 0be8667ca663..fb4db0392376 100644 --- a/content/actions/tutorials/use-actions-runner-controller/get-started.md +++ b/content/actions/tutorials/use-actions-runner-controller/get-started.md @@ -45,7 +45,7 @@ In order to use ARC, ensure you have the following. For additional Helm configuration options, see [`values.yaml`](https://github.com/actions/actions-runner-controller/blob/master/charts/gha-runner-scale-set-controller/values.yaml) in the ARC documentation. -1. To enable ARC to authenticate to {% data variables.product.company_short %}, generate a {% data variables.product.pat_v1 %}. For more information, see [AUTOTITLE](/actions/how-tos/manage-runners/use-actions-runner-controller/authenticate-to-the-api#authenticating-arc-with-a-personal-access-token-classic). +1. To enable ARC to authenticate to {% data variables.product.company_short %}, choose an authentication method for your runner scale set. If you are registering runners at the repository or organization level, we recommend authenticating with a {% data variables.product.prodname_github_app %}. Runner scale sets registered at the enterprise level require {% data variables.product.pat_v1 %} authentication. For more information, see [AUTOTITLE](/actions/how-tos/manage-runners/use-actions-runner-controller/authenticate-to-the-api). ## Configuring a runner scale set @@ -56,10 +56,11 @@ In order to use ARC, ensure you have the following. * Update the `INSTALLATION_NAME` value carefully. You will use the installation name as the value of `runs-on` in your workflows. For more information, see [AUTOTITLE](/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idruns-on). * Update the `NAMESPACE` value to the location you want the runner pods to be created. * Set `GITHUB_CONFIG_URL` to the URL of your repository, organization, or enterprise. This is the entity that the runners will belong to. + * This example uses a {% data variables.product.pat_v1 %} to keep the initial setup short. For repository or organization runner scale sets, use a {% data variables.product.prodname_github_app %} in production environments when possible. {% ifversion fpt %} - * Set `GITHUB_PAT` to a {% data variables.product.company_short %} {% data variables.product.pat_generic %} with the `repo` and `admin:org` scopes for repository and organization runners. + * Set `GITHUB_PAT` to a {% data variables.product.company_short %} {% data variables.product.pat_v1 %} with the `repo` and `admin:org` scopes for repository and organization runners. {% else %} - * Set `GITHUB_PAT` to a {% data variables.product.company_short %} {% data variables.product.pat_generic %} with the `repo` and `manage_runners:org` scopes for repository and organization runners, and the `manage_runners:enterprise` scope for enterprise runners. + * Set `GITHUB_PAT` to a {% data variables.product.company_short %} {% data variables.product.pat_v1 %} with the `repo` and `manage_runners:org` scopes for repository and organization runners, and the `manage_runners:enterprise` scope for enterprise runners. {% endif %} * This example command installs the latest version of the Helm chart. To install a specific version, you can pass the `--version` argument with the version of the chart you wish to install. You can find the list of releases in the [GitHub Container Registry](https://github.com/actions/actions-runner-controller/pkgs/container/actions-runner-controller-charts%2Fgha-runner-scale-set). diff --git a/content/admin/backing-up-and-restoring-your-instance/about-the-backup-service-for-github-enterprise-server.md b/content/admin/backing-up-and-restoring-your-instance/about-the-backup-service-for-github-enterprise-server.md index cabc2d65767c..1973d9e36dc7 100644 --- a/content/admin/backing-up-and-restoring-your-instance/about-the-backup-service-for-github-enterprise-server.md +++ b/content/admin/backing-up-and-restoring-your-instance/about-the-backup-service-for-github-enterprise-server.md @@ -9,6 +9,7 @@ category: - Back up and upgrade your instance redirect_from: - /admin/backing-up-and-restoring-your-instance/backup-service-for-github-enterprise-server/about-the-backup-service-for-github-enterprise-server + - /admin/backing-up-and-restoring-your-instance/configuring-backups-on-your-instance --- {% ifversion ghes < 3.20 %} diff --git a/content/admin/backing-up-and-restoring-your-instance/restoring-from-a-backup.md b/content/admin/backing-up-and-restoring-your-instance/restoring-from-a-backup.md index 57b2c32b29b2..841eafcf1c41 100644 --- a/content/admin/backing-up-and-restoring-your-instance/restoring-from-a-backup.md +++ b/content/admin/backing-up-and-restoring-your-instance/restoring-from-a-backup.md @@ -32,7 +32,7 @@ Before restoring a backup: 1. **Enable maintenance mode** on the target instance. See [AUTOTITLE](/admin/administering-your-instance/configuring-maintenance-mode/enabling-and-scheduling-maintenance-mode). 1. **Verify access** to the backup storage containing the snapshot. -1. **Pause interfering services** — if using High Availability (HA), make sure replication is stopped. +1. **Tear down replication**. If using High Availability (HA), run `ghe-repl-teardown` on the target instance. Stopping replication with `ghe-repl-stop` is not sufficient, because the target remains configured as part of a replication pair and the restore fails. See [AUTOTITLE](/admin/monitoring-and-managing-your-instance/configuring-high-availability/removing-a-high-availability-replica). 1. **Prepare for {% data variables.product.prodname_actions %}** — if enabled, ensure the target instance is configured with the correct external storage. See [AUTOTITLE](/admin/backing-up-and-restoring-your-instance/restoring-with-github-actions-enabled) for details. ## Starting the restore operation diff --git a/content/admin/data-residency/github-copilot-with-data-residency.md b/content/admin/data-residency/github-copilot-with-data-residency.md index 30803647a14a..cd8001e1ebac 100644 --- a/content/admin/data-residency/github-copilot-with-data-residency.md +++ b/content/admin/data-residency/github-copilot-with-data-residency.md @@ -64,13 +64,13 @@ The models available for {% data variables.product.prodname_copilot_short %} var * {% data variables.copilot.copilot_gpt_56_luna %} * {% data variables.copilot.copilot_gpt_56_sol %} * {% data variables.copilot.copilot_gpt_56_terra %} +* {% data variables.copilot.copilot_gpt_6_astra %} * {% data variables.copilot.copilot_claude_haiku_45 %} * {% data variables.copilot.copilot_claude_opus_47 %} * {% data variables.copilot.copilot_claude_opus_48 %} * {% data variables.copilot.copilot_claude_opus_5 %} * {% data variables.copilot.copilot_claude_sonnet_5 %} * {% data variables.copilot.copilot_gemini_35_flash %} -* {% data variables.copilot.copilot_mai_code_1_flash %} ## Pricing changes diff --git a/content/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise.md b/content/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise.md index 78b810107d9f..1b149c9cc7ac 100644 --- a/content/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise.md +++ b/content/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise.md @@ -146,23 +146,34 @@ You can define how long custom image versions are retained and when they become * **Default**: 60 days * **Configurable range**: 7–90 days -## {% ifversion ghes %}Artifact, log, and cache settings{% else %}Artifact and log retention{% endif %} + + +## {% ifversion ghes %}Check, workflow run, status, artifact, log, and cache settings{% else %}Check, workflow run, status, artifact and log retention{% endif %} {% ifversion ghes %} -These policies control storage of artifacts, logs, and caches. +These policies control storage of checks, workflow runs, commit statuses, artifacts, logs, and caches. -### Artifact and log retention +### Check, workflow run, status, artifact and log retention {% endif %} -By default, artifacts and log files generated by workflows are retained for 90 days. {% ifversion ghes %}You can change this retention period to anywhere between 1 and 400 days.{% else %}You can change the retention period. +By default, checks, workflow runs, commit statuses, and the artifacts and log files generated by workflows are retained for 90 days. {% ifversion ghes %}You can change this retention period to anywhere between 1 and 400 days.{% else %}You can change the retention period. * For public repositories, you can configure a period between 1 and 90 days. * For private and internal repositories, you can configure a period between 1 and 400 days. {% endif %} -Changes only apply to new artifacts and log files. +{% ifversion ghec %} + +> [!IMPORTANT] +> Starting October 1, 2026, these policies will apply to checks, workflow runs, and commit statuses in addition to artifacts and logs. Until then, checks, workflow runs, and commit statuses are retained for 400+ days regardless of your configured retention period. Make sure to review your retention setting and make any adjustments before October 1. For more information, see [the {% data variables.product.company_short %} changelog](https://github.blog/changelog/2026-07-17-actions-retention-will-cover-checks-workflow-runs-and-statuses/). + +{% endif %} + +{% data reusables.actions.checks-and-statuses-retention-scope %} + +Changes only apply to new checks, workflow runs, commit statuses, artifacts, and log files. {% ifversion ghec %} diff --git a/content/admin/managing-iam/understanding-iam-for-enterprises/abilities-and-restrictions-of-managed-user-accounts.md b/content/admin/managing-iam/understanding-iam-for-enterprises/abilities-and-restrictions-of-managed-user-accounts.md index 4fcf71d54449..5bc0338025b3 100644 --- a/content/admin/managing-iam/understanding-iam-for-enterprises/abilities-and-restrictions-of-managed-user-accounts.md +++ b/content/admin/managing-iam/understanding-iam-for-enterprises/abilities-and-restrictions-of-managed-user-accounts.md @@ -45,7 +45,7 @@ With {% data variables.product.prodname_emus %}, you can control the user accoun ## {% data variables.product.prodname_copilot %} -* {% data variables.enterprise.prodname_managed_users_caps %} cannot sign up for {% data variables.copilot.copilot_pro %} or {% data variables.copilot.copilot_free %}. To allow a managed user to use {% data variables.product.prodname_copilot_short %}, you must grant the user access to a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} subscription. See [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +* {% data variables.enterprise.prodname_managed_users_caps %} cannot sign up for {% data variables.copilot.copilot_pro %} or {% data variables.copilot.copilot_free %}. To allow a managed user to use {% data variables.product.prodname_copilot_short %}, you must grant the user access to a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} subscription. See [AUTOTITLE](/copilot/get-started/about-github-copilot#get-access). * {% data reusables.copilot.cloud-agent-emu-limitation %} ## {% data variables.product.prodname_pages %} diff --git a/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/streaming-the-audit-log-for-your-enterprise.md b/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/streaming-the-audit-log-for-your-enterprise.md index 7c93cd52faec..868a5d271394 100644 --- a/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/streaming-the-audit-log-for-your-enterprise.md +++ b/content/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/streaming-the-audit-log-for-your-enterprise.md @@ -30,7 +30,7 @@ You can also stream agent session activity from {% data variables.product.prodna You can set up{% ifversion pause-audit-log-stream %}, pause,{% endif %} or delete a stream at any time. The stream exports audit and Git events data for all of the organizations in your enterprise, for activity from the time the stream is enabled onwards. -All streamed audit logs are sent as compressed JSON files. The filename format is in`YYYY/MM/HH/MM/.json.gz`. +All streamed audit logs are sent as compressed JSON files. The filename format is `YYYY/MM/DD/HH/MM/.json.log.gz`. >[!NOTE] {% data variables.product.prodname_dotcom %} uses an at-least-once delivery method. Due to certain network or system issues, some events may be duplicated. diff --git a/content/authentication/authenticating-with-single-sign-on/authorizing-a-personal-access-token-for-use-with-single-sign-on.md b/content/authentication/authenticating-with-single-sign-on/authorizing-a-personal-access-token-for-use-with-single-sign-on.md index 749f1ee6ea86..9b6148595390 100644 --- a/content/authentication/authenticating-with-single-sign-on/authorizing-a-personal-access-token-for-use-with-single-sign-on.md +++ b/content/authentication/authenticating-with-single-sign-on/authorizing-a-personal-access-token-for-use-with-single-sign-on.md @@ -7,6 +7,7 @@ redirect_from: - /github/authenticating-to-github/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on - /github/authenticating-to-github/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on - /authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on + - /authentication/authenticating-with-single-sign-on/authorizing-credentials-for-single-sign-on-with-a-github-app versions: ghec: '*' shortTitle: '{% data variables.product.pat_generic_caps %} with SSO' diff --git a/content/authentication/keeping-your-account-and-data-secure/reviewing-your-security-log.md b/content/authentication/keeping-your-account-and-data-secure/reviewing-your-security-log.md index 97ff914757d4..6412292ff8b9 100644 --- a/content/authentication/keeping-your-account-and-data-secure/reviewing-your-security-log.md +++ b/content/authentication/keeping-your-account-and-data-secure/reviewing-your-security-log.md @@ -34,7 +34,7 @@ The events listed in your security log are triggered by your actions. Actions ar | {% ifversion fpt or ghec %} | | `billing` | Contains all activities related to your billing information. | | `codespaces` | Contains all activities related to {% data variables.product.prodname_github_codespaces %}. For more information, see [AUTOTITLE](/codespaces/quickstart). | -| `copilot` | Contains all activities related to {% data variables.copilot.copilot_business_short %}. For more information, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot). | +| `copilot` | Contains all activities related to {% data variables.copilot.copilot_business_short %}. For more information, see [AUTOTITLE](/copilot/get-started/about-github-copilot). | | `marketplace_agreement_signature` | Contains all activities related to signing the {% data variables.product.prodname_marketplace %} Developer Agreement. | | `marketplace_listing`| Contains all activities related to listing apps in {% data variables.product.prodname_marketplace %}. | | {% endif %} | diff --git a/content/billing/concepts/budgets-and-alerts.md b/content/billing/concepts/budgets-and-alerts.md index 0f2210296cd0..26c858bc09ed 100644 --- a/content/billing/concepts/budgets-and-alerts.md +++ b/content/billing/concepts/budgets-and-alerts.md @@ -30,7 +30,7 @@ Each budget has a type and a scope that define which paid use contributes to spe * **Cost center user-level**: applies to every user in a cost center * **Individual**: overrides the above for specific users, and can be given an optional expiration date so a temporary override is removed automatically -For {% data variables.product.prodname_copilot_short %}, cost centers can also have included usage controls, which cap how much of the shared {% data variables.product.prodname_ai_credits_short %} pool a cost center can use before metered usage begins. This is a separate control from the budgets and the included usage alerts described below. See [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing#included-usage-controls-for-cost-centers). +For {% data variables.product.prodname_copilot_short %}, cost centers can also have included usage controls, which cap how much of the shared {% data variables.product.prodname_ai_credits_short %} pool a cost center can use before metered usage begins. This is a separate control from the budgets and the included usage alerts described below. See [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets#included-usage-controls-for-cost-centers). ## Roles and access for budgets diff --git a/content/billing/concepts/cost-centers.md b/content/billing/concepts/cost-centers.md index 356989fe8146..087432b189e8 100644 --- a/content/billing/concepts/cost-centers.md +++ b/content/billing/concepts/cost-centers.md @@ -35,7 +35,7 @@ For cost centers that contain {% data variables.product.prodname_copilot_short % {% data reusables.billing.included-usage-controls %} -This is separate from a cost center budget, which caps metered charges only after the shared pool of {% data variables.product.prodname_ai_credits_short %} is exhausted. For more information, see [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing#included-usage-controls-for-cost-centers). +This is separate from a cost center budget, which caps metered charges only after the shared pool of {% data variables.product.prodname_ai_credits_short %} is exhausted. For more information, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets#included-usage-controls-for-cost-centers). ## Cost center limitations diff --git a/content/billing/concepts/enterprise-billing/ghes-license-files.md b/content/billing/concepts/enterprise-billing/ghes-license-files.md index 324ea215d132..99dddd27c388 100644 --- a/content/billing/concepts/enterprise-billing/ghes-license-files.md +++ b/content/billing/concepts/enterprise-billing/ghes-license-files.md @@ -25,5 +25,5 @@ If your license expires, you won't be able to access {% data variables.product.p * To download your license file, see [AUTOTITLE]({% ifversion fpt %}/enterprise-cloud@latest{% endif %}/billing/how-tos/manage-server-licenses/download-your-license). * To upload your license file to {% data variables.product.prodname_ghe_server %}, see {% ifversion fpt or ghec %}[AUTOTITLE](/enterprise-server@latest/billing/how-tos/manage-server-licenses/upload-new-license) in the {% data variables.product.prodname_ghe_server %} documentation.{% elsif ghes %}[AUTOTITLE](/billing/how-tos/manage-server-licenses/upload-new-license).{% endif %} -* To back up your {% data variables.product.prodname_ghe_server %} instance, see {% ifversion fpt or ghec %}[Configuring backups on your appliance](/enterprise-server@latest/admin/backing-up-and-restoring-your-instance/configuring-backups-on-your-instance) in the {% data variables.product.prodname_ghe_server %} documentation.{% elsif ghes %}[AUTOTITLE](/admin/backing-up-and-restoring-your-instance/configuring-backups-on-your-instance).{% endif %} +* To back up your {% data variables.product.prodname_ghe_server %} instance, see {% ifversion fpt or ghec %}[Configuring backups on your appliance](/enterprise-server@latest/admin/backing-up-and-restoring-your-instance/about-the-backup-service-for-github-enterprise-server) in the {% data variables.product.prodname_ghe_server %} documentation.{% elsif ghes %}[AUTOTITLE](/admin/backing-up-and-restoring-your-instance/configuring-backups-on-your-instance).{% endif %} * If you have questions about renewing your license, contact {% data variables.contact.contact_enterprise_sales %}. diff --git a/content/billing/concepts/product-billing/github-code-quality.md b/content/billing/concepts/product-billing/github-code-quality.md index b1eb5125d9d0..82e44a153d25 100644 --- a/content/billing/concepts/product-billing/github-code-quality.md +++ b/content/billing/concepts/product-billing/github-code-quality.md @@ -30,7 +30,7 @@ In a detailed usage report, you can identify usage from {% data variables.produc {% data reusables.code-quality.model-usage %} -For more information about how {% data variables.product.prodname_ai_credits_short %} work, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +For more information about how {% data variables.product.prodname_ai_credits_short %} work, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing). ### Active and unique committers @@ -42,7 +42,7 @@ For more information about how {% data variables.product.prodname_ai_credits_sho To understand your license usage, and which licenses you can free up, it helps to distinguish between active and unique committers. You can see the number of licenses you're using on the **Licensing** page for your organization or enterprise, shown as **"Consumed licenses"**: * **Active committers** are committers who contributed to at least one repository and have a {% data variables.product.prodname_team %} or {% data variables.product.prodname_enterprise %} license with your organization or enterprise. This includes members, enterprise-managed users, external collaborators, and people with a pending invitation to join your organization or enterprise. -* **Unique committers** is the number of active committers who contributed only to one repository, or only to repositories in one organization. You can free up this number of licenses by disabling {% data variables.product.prodname_code_quality_short %} for that repository or organization. +* **Unique committers** is the number of active committers who contributed only to one repository, or only to repositories in one organization. You can free these licenses for the next billing period by disabling {% data variables.product.prodname_code_quality_short %} for that repository or organization. This doesn't reduce your license charge for the current period. Users can contribute to multiple repositories or organizations. Usage is measured across the whole organization or enterprise to ensure that each member uses one license regardless of how many repositories or organizations the user contributes to. @@ -50,4 +50,4 @@ Users can contribute to multiple repositories or organizations. Usage is measure * [AUTOTITLE](/code-security/tutorials/improve-code-quality/catch-issues-before-merge) * [AUTOTITLE](/billing/concepts/product-billing/github-actions) -* [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises) +* [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing) diff --git a/content/billing/concepts/product-billing/github-copilot-billing.md b/content/billing/concepts/product-billing/github-copilot-billing.md index 71291503596a..11c9acd17997 100644 --- a/content/billing/concepts/product-billing/github-copilot-billing.md +++ b/content/billing/concepts/product-billing/github-copilot-billing.md @@ -14,12 +14,12 @@ category: All individual plans—{% data variables.copilot.copilot_free_short %}, {% data variables.copilot.copilot_pro_short %}, {% data variables.copilot.copilot_pro_plus_short %}, and {% data variables.copilot.copilot_max_short %}—include a monthly {% data variables.product.prodname_ai_credits %} allowance that varies by plan. -To understand how {% data variables.product.prodname_ai_credits_short %} work for individual plans, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-individuals). +To understand how {% data variables.product.prodname_ai_credits_short %} work for individual plans, see [AUTOTITLE](/copilot/concepts/billing-and-usage/individuals/billing). ## Organizations and enterprises For organizations and enterprises, each assigned {% data variables.product.prodname_copilot_short %} license comes with a monthly amount of included {% data variables.product.prodname_ai_credits_short %}, which can be pooled at the billing entity level. -* To understand how {% data variables.product.prodname_ai_credits_short %} work and what happens when your pool is exhausted, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). -* To understand budget controls and how to prevent unexpected charges, see [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing). +* To understand how {% data variables.product.prodname_ai_credits_short %} work and what happens when your pool is exhausted, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing). +* To understand budget controls and how to prevent unexpected charges, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets). * To compare per-token costs across models and how they translate to {% data variables.product.prodname_ai_credits_short %}, see [AUTOTITLE](/copilot/reference/copilot-billing/models-and-pricing). diff --git a/content/billing/concepts/product-billing/github-copilot-licenses.md b/content/billing/concepts/product-billing/github-copilot-licenses.md index 8caea7c23397..6bac3655ab1b 100644 --- a/content/billing/concepts/product-billing/github-copilot-licenses.md +++ b/content/billing/concepts/product-billing/github-copilot-licenses.md @@ -15,7 +15,7 @@ category: - Understand product costs --- -Usage of {% data variables.product.prodname_copilot %} is measured through a combination of licenses and {% data variables.product.prodname_ai_credits_short %}. See [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-individuals) and [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +Usage of {% data variables.product.prodname_copilot %} is measured through a combination of licenses and {% data variables.product.prodname_ai_credits_short %}. See [AUTOTITLE](/copilot/concepts/billing-and-usage/individuals/billing) and [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing). ## Licenses for {% data variables.product.prodname_copilot_short %} @@ -55,7 +55,7 @@ Usage of {% data variables.product.prodname_copilot_short %} licenses is measure * Downgrades take effect at the start of the next billing cycle and are generally not prorated. * Canceling a monthly plan keeps access until the end of the current billing cycle, with no proration. -For details on billing and proration, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-individuals). +For details on billing and proration, see [AUTOTITLE](/copilot/concepts/billing-and-usage/individuals/billing). ### Organizations and enterprises diff --git a/content/billing/how-tos/products/view-productlicense-use.md b/content/billing/how-tos/products/view-productlicense-use.md index 465aa75f2237..6f49e7d98bc3 100644 --- a/content/billing/how-tos/products/view-productlicense-use.md +++ b/content/billing/how-tos/products/view-productlicense-use.md @@ -101,7 +101,7 @@ If you use {% data variables.product.prodname_copilot_short %}, an additional ** * Which models are driving the most spend? * How widespread is adoption in the organizations where we rolled out {% data variables.product.prodname_copilot_short %}? -To understand how {% data variables.product.prodname_ai_credits_short %} are pooled across your enterprise and what the usage data represents, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +To understand how {% data variables.product.prodname_ai_credits_short %} are pooled across your enterprise and what the usage data represents, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing). {% endif %} diff --git a/content/billing/how-tos/set-up-budgets.md b/content/billing/how-tos/set-up-budgets.md index 114d9a6f22f7..a9aa1e4b0fe5 100644 --- a/content/billing/how-tos/set-up-budgets.md +++ b/content/billing/how-tos/set-up-budgets.md @@ -39,7 +39,7 @@ In this example, the organization has set a budget of $50 for the "Actions" prod We recommend that you avoid creating overlapping budgets for the use of a product and a SKU, or an organization and a repository, so that users are not unexpectedly blocked from using a feature that they rely on. Alternatively, you may prefer to monitor use without blocking users by disabling the "Stop usage when budget limit is reached" option. -For {% data variables.product.prodname_copilot_short %} under usage-based billing, user-level budgets add another layer to consider. A user-level budget can block a user even when the enterprise or cost center budget still has capacity. It is the first check in the evaluation sequence. When planning your budget configuration, account for how user-level budgets, cost center budgets, and the enterprise spending limit interact. See [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing#how-billing-flows-through-budgets). +For {% data variables.product.prodname_copilot_short %} under usage-based billing, user-level budgets add another layer to consider. A user-level budget can block a user even when the enterprise or cost center budget still has capacity. It is the first check in the evaluation sequence. When planning your budget configuration, account for how user-level budgets, cost center budgets, and the enterprise spending limit interact. See [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets#how-billing-flows-through-budgets). ## Managing budgets for your personal account @@ -79,7 +79,7 @@ To edit or delete a budget, on the "Budget and alerts" page, click **Edit** or * ## Managing budgets for your organization or enterprise > [!IMPORTANT] -> {% data variables.product.prodname_copilot_short %} usage is now measured in {% data variables.product.prodname_ai_credits_short %} under usage-based billing. Existing premium request budgets have been automatically converted to {% data variables.product.prodname_ai_credit_singular %} budgets. See [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +> {% data variables.product.prodname_copilot_short %} usage is now measured in {% data variables.product.prodname_ai_credits_short %} under usage-based billing. Existing premium request budgets have been automatically converted to {% data variables.product.prodname_ai_credit_singular %} budgets. See [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing). You can set budgets and receive alerts when your usage of a product or license type reaches 75%, 90%, or 100% of a defined budget. For budgets that control metered use of a product, you can also block further use when the budget is exhausted. Each budget has a scope. @@ -126,7 +126,7 @@ As the owner of an enterprise or organization account, or as a billing manager, * **End of current billing cycle**: {% data variables.product.github %} removes the budget when the current billing cycle ends. * **Specific date**: {% data variables.product.github %} removes the budget on the date you choose. - When an individual budget expires, {% data variables.product.github %} removes it and the user falls back to the next budget that applies to them: their cost center user-level budget, if they have one, or otherwise the universal user-level budget. If neither budget is configured, no user-level budget applies. See [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing#expiration-dates-for-individual-user-level-budgets). + When an individual budget expires, {% data variables.product.github %} removes it and the user falls back to the next budget that applies to them: their cost center user-level budget, if they have one, or otherwise the universal user-level budget. If neither budget is configured, no user-level budget applies. See [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets#expiration-dates-for-individual-user-level-budgets). 1. Under "Budget", set a budget amount or license count. @@ -159,11 +159,15 @@ For an individual user-level budget, you can also change or clear the expiration 1. In the list of budgets, click {% octicon "kebab-horizontal" aria-label="View actions" %} next to the budget you want to edit, and click **{% octicon "pencil" aria-hidden="true" aria-label="pencil" %} Edit** or **{% octicon "trash" aria-hidden="true" aria-label="trash" %} Delete**. 1. Follow the prompts. +### Managing requests for additional budget + +When a member exhausts a {% data variables.product.prodname_copilot_short %} {% data variables.product.prodname_ai_credits_short %} budget, they can ask you to increase it. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-budget-requests). + ### Controlling included usage for a cost center -Budgets cap metered charges after the shared pool of {% data variables.product.prodname_ai_credits_short %} is exhausted. To cap how much of the pool a cost center can use **before** the metered phase, use an included usage control. {% data variables.product.github %} sets the cap automatically based on the licenses assigned to the cost center, and you choose whether members are blocked or roll into paid overage when the cap is reached. See [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing#included-usage-controls-for-cost-centers) and [AUTOTITLE](/billing/concepts/cost-centers). +Budgets cap metered charges after the shared pool of {% data variables.product.prodname_ai_credits_short %} is exhausted. To cap how much of the pool a cost center can use **before** the metered phase, use an included usage control. {% data variables.product.github %} sets the cap automatically based on the licenses assigned to the cost center, and you choose whether members are blocked or roll into paid overage when the cap is reached. See [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets#included-usage-controls-for-cost-centers) and [AUTOTITLE](/billing/concepts/cost-centers). > [!NOTE] > Enabling included usage controls does not retroactively redistribute the shared {% data variables.product.prodname_ai_credits_short %} enterprise pool. After the setting is enabled, users in the cost center share only the included {% data variables.product.prodname_ai_credits_short %} funded by licenses attributed to that cost center. When the setting is disabled, users in the cost center can continue drawing from the shared enterprise pool. ## Next steps -For {% data variables.product.prodname_copilot_short %}-specific budget guidance under usage-based billing, including user-level budgets and configuration scenarios, see [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing) and [AUTOTITLE](/copilot/tutorials/budgets/optimizing-your-budget-configuration). +For {% data variables.product.prodname_copilot_short %}-specific budget guidance under usage-based billing, including user-level budgets and configuration scenarios, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets) and [AUTOTITLE](/copilot/tutorials/budgets/optimizing-your-budget-configuration). diff --git a/content/billing/reference/billing-roles.md b/content/billing/reference/billing-roles.md index db959fb1d405..43da8388bec0 100644 --- a/content/billing/reference/billing-roles.md +++ b/content/billing/reference/billing-roles.md @@ -39,6 +39,7 @@ You have full administrative access to your organization. You can: * View metered usage and budgets for your organization and its repositories. * Set budgets for the organization and its repositories. +* Review requests from members for additional {% data variables.product.prodname_copilot_short %} budget. * Download CSV usage reports. * View promotions and discounts. * View spending for pre-purchased user licenses for {% data variables.product.prodname_AS %} based on your usage. @@ -57,6 +58,7 @@ You can: * See enterprise usage, including costs for organizations and repositories. * Download CSV usage reports for products your enterprise is using. * Set budgets for your enterprise. +* Review requests from members for additional {% data variables.product.prodname_copilot_short %} budget. * Create cost centers for all organizations within your enterprise. * View and manage user licenses. * Manage other billing settings, such as payment methods and billing contacts. diff --git a/content/billing/reference/cost-center-allocation.md b/content/billing/reference/cost-center-allocation.md index 169ec2d9f405..76a03fb481b5 100644 --- a/content/billing/reference/cost-center-allocation.md +++ b/content/billing/reference/cost-center-allocation.md @@ -48,7 +48,7 @@ Users who belong to multiple organizations in an enterprise or who receive a {% To confirm which organization is charged for a given user's license, you can request a detailed usage report. See [AUTOTITLE](/billing/reference/billing-reports#detailed-usage-report). -See [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises#seat-assignment). +See [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/seats-and-billing-cycles#seat-assignment). ## Understanding cost center usage and attribution diff --git a/content/billing/tutorials/control-costs-at-scale.md b/content/billing/tutorials/control-costs-at-scale.md index 0110a8e6e851..6079bf834c20 100644 --- a/content/billing/tutorials/control-costs-at-scale.md +++ b/content/billing/tutorials/control-costs-at-scale.md @@ -21,7 +21,7 @@ This tutorial guides you through planning, creating, and managing cost centers u As your enterprise grows, you can layer increasingly granular controls on top of cost centers to keep {% data variables.product.prodname_copilot_short %} spending predictable: * **Group at scale.** Assign whole enterprise teams to a cost center so membership stays current automatically as people join and leave. -* **Cap per-user spending.** Set a cost center user-level budget so every member of a cost center inherits the same per-person limit. See [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing). +* **Cap per-user spending.** Set a cost center user-level budget so every member of a cost center inherits the same per-person limit. See [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets). ## 1. Plan your cost center strategy @@ -125,7 +125,7 @@ Filter the other budgets list to show a scope of **Cost Centers**. You should se Keep these limits in mind as you combine budgets across scopes: -* **Budgets overlap, and the most restrictive one applies.** A user can be covered by an individual, cost center, organization, and enterprise budget at the same time. Whichever has the least headroom remaining blocks them first. If someone is blocked unexpectedly, review every scope that applies to them. For the full evaluation order, see [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing). +* **Budgets overlap, and the most restrictive one applies.** A user can be covered by an individual, cost center, organization, and enterprise budget at the same time. Whichever has the least headroom remaining blocks them first. If someone is blocked unexpectedly, review every scope that applies to them. For the full evaluation order, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets). * **You can't set different budgets for teams in the same cost center.** A budget applies to the whole cost center, not to teams within it. If two teams need separate budgets, create a separate cost center for each. Separate cost centers can still share the same Azure billing identity. * **Budgets don't add up across levels.** An enterprise budget isn't the sum of your cost center budgets, and raising one doesn't raise another. When you change a budget at one level, reconcile the totals at the others yourself. @@ -325,5 +325,5 @@ If there are any paid products that you want to block all access to, you can dis To go deeper on the controls in this tutorial: -* For how cost center budgets and user-level budgets interact across the pool and metered phases, see [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing). +* For how cost center budgets and user-level budgets interact across the pool and metered phases, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets). * For how resources are allocated to cost centers, including enterprise team membership, see [AUTOTITLE](/billing/reference/cost-center-allocation). diff --git a/content/code-security/concepts/code-scanning/ai-powered-security-detections.md b/content/code-security/concepts/code-scanning/ai-powered-security-detections.md index 65aaca6ea2e2..aff4e62a426a 100644 --- a/content/code-security/concepts/code-scanning/ai-powered-security-detections.md +++ b/content/code-security/concepts/code-scanning/ai-powered-security-detections.md @@ -19,7 +19,7 @@ While {% data variables.product.prodname_codeql %} provides high-precision stati During the {% data variables.release-phases.public_preview %}, AI-powered security detections require a {% data variables.product.prodname_GHAS %} license and a {% data variables.product.prodname_copilot %} license. -Usage consumes {% data variables.product.prodname_ai_credits_short %}. See [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +Usage consumes {% data variables.product.prodname_ai_credits_short %}. See [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). ## How AI-powered security detections work diff --git a/content/code-security/concepts/supply-chain-security/automatic-dependabot-access-to-github-registries.md b/content/code-security/concepts/supply-chain-security/automatic-dependabot-access-to-github-registries.md new file mode 100644 index 000000000000..e0d739888149 --- /dev/null +++ b/content/code-security/concepts/supply-chain-security/automatic-dependabot-access-to-github-registries.md @@ -0,0 +1,47 @@ +--- +title: Automatic Dependabot access to {% data variables.product.github %}-hosted registries +intro: 'Keep your private dependencies up to date reliably by granting {% data variables.product.prodname_dependabot %} automatic access to {% data variables.product.prodname_registry %} and {% data variables.product.prodname_container_registry %}, so you never need to create or rotate credentials for these registries.' +versions: + feature: org-automatic-registry-access +shortTitle: Automatic registry access +allowTitleToDifferFromFilename: true +contentType: concepts +category: + - Secure your dependencies +--- + +## About automatic access to {% data variables.product.github %}-hosted registries + +{% data variables.product.prodname_dependabot %} can authenticate to private {% data variables.product.prodname_registry %} and {% data variables.product.prodname_container_registry %} packages using the same access grants that {% data variables.product.prodname_actions %} workflows use. If a package has granted your repository **Read** access in the package settings on {% data variables.product.github %}, {% data variables.product.prodname_dependabot %} can access that package automatically. + +This eliminates the need to: + +* Create and manage {% data variables.product.pat_generic_plural %} for registry access +* Manually configure access to {% data variables.product.github %}-hosted registries in your `dependabot.yml` file +* Rotate credentials when tokens expire + +## How automatic access works + +{% data variables.product.prodname_dependabot %} uses its `GITHUB_TOKEN` to request `packages: read` permission when pulling from `*.pkg.github.com` and {% data variables.product.prodname_container_registry_namespace %}. Any package that has granted your repository access through "Manage Actions access" accepts this token, the same way it would for a regular {% data variables.product.prodname_actions %} workflow. + +Automatic {% data variables.product.prodname_registry %} credentials are used only as fallback authentication. Explicit registry credentials and normal registry routing take precedence. + +This works for every {% data variables.product.prodname_registry %} ecosystem that {% data variables.product.prodname_dependabot %} supports. + +## When to use automatic access + +Use automatic access to {% data variables.product.github %}-hosted registries when: + +* Your repositories depend on private packages stored in {% data variables.product.prodname_registry %} or {% data variables.product.prodname_container_registry %}. +* You want to reduce credential management overhead. +* You want to avoid silent update failures caused by expired {% data variables.product.pat_generic_plural %}. + +For third-party registries (such as Artifactory, Azure Artifacts, or Nexus), you can only use the `dependabot.yml` registry configuration or organization-level private registry settings. See [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries). + +## How to enable automatic access + +For each package that {% data variables.product.prodname_dependabot %} needs to read, you need to go to the package's settings page and add the repository that runs {% data variables.product.prodname_dependabot %} with **Read** access. See [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries#configuring-private-github-hosted-registries). + +Once the repository has been granted access, {% data variables.product.prodname_dependabot %} can pull from that package automatically. You do not need to configure the `dependabot.yml` file, and you can remove any existing {% data variables.product.pat_generic %}-based registry entries you previously added for these packages. + +For more information about configuring package access, see [AUTOTITLE](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package). diff --git a/content/code-security/concepts/supply-chain-security/index.md b/content/code-security/concepts/supply-chain-security/index.md index 4ba0f860b15e..56a840696725 100644 --- a/content/code-security/concepts/supply-chain-security/index.md +++ b/content/code-security/concepts/supply-chain-security/index.md @@ -8,7 +8,6 @@ versions: contentType: concepts redirect_from: - /code-security/supply-chain-security/understanding-your-software-supply-chain - - /code-security/concepts/supply-chain-security/automatic-dependabot-access-to-github-registries children: - supply-chain-security - open-source-license-compliance @@ -24,6 +23,7 @@ children: - dependabot-pull-requests - multi-ecosystem-updates - about-the-dependabot-yml-file + - automatic-dependabot-access-to-github-registries - dependabot-auto-triage-rules - dependabot-on-actions - dependabot-job-logs diff --git a/content/code-security/concepts/supply-chain-security/supply-chain-security.md b/content/code-security/concepts/supply-chain-security/supply-chain-security.md index 55545062cf3d..977d817be833 100644 --- a/content/code-security/concepts/supply-chain-security/supply-chain-security.md +++ b/content/code-security/concepts/supply-chain-security/supply-chain-security.md @@ -173,31 +173,19 @@ When you use {% data variables.product.prodname_actions %} to generate attestati {% ifversion fpt or ghec %} -Public repositories: -* **Dependency graph:** Enabled by default and cannot be disabled. -* **Dependency review:** Enabled by default and cannot be disabled. -* **{% data variables.product.prodname_dependabot_alerts %}:** Not enabled by default. {% data variables.product.prodname_dotcom %} detects insecure dependencies and displays information in the dependency graph, but does not generate {% data variables.product.prodname_dependabot_alerts %} by default. Repository owners or people with admin access can enable {% data variables.product.prodname_dependabot_alerts %}. - You can also enable or disable Dependabot alerts for all repositories owned by your user account or organization. For more information, see [AUTOTITLE](/account-and-profile/how-tos/account-settings/managing-security-and-analysis-features) or [AUTOTITLE](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization). +* **Dependency graph:** Not enabled by default. Available for all repositories, and can be enabled or disabled by repository administrators. +* **Dependency review:** Available when the dependency graph is enabled. For private repositories, the repository must also be owned by an organization that uses {% data variables.product.prodname_team %} or {% data variables.product.prodname_ghe_cloud %} and has a license for {% data variables.product.prodname_GHAS_or_code_security %}. +* **{% data variables.product.prodname_dependabot_alerts %}:** Not enabled by default. Repository owners or people with admin access can enable {% data variables.product.prodname_dependabot_alerts %} for repositories that have the dependency graph enabled. + You can also enable or disable {% data variables.product.prodname_dependabot_alerts %} for all repositories owned by your user account or organization. For more information, see [AUTOTITLE](/account-and-profile/how-tos/account-settings/managing-security-and-analysis-features) or [AUTOTITLE](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization). +* **{% data variables.product.prodname_dependabot_security_updates %}:** Not enabled by default. You can enable {% data variables.product.prodname_dependabot_security_updates %} for any repository that uses {% data variables.product.prodname_dependabot_alerts %} and the dependency graph. See [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configure-security-updates). +* **{% data variables.product.prodname_dependabot_version_updates %}:** Not enabled by default. People with write permissions to a repository can enable {% data variables.product.prodname_dependabot_version_updates %}. See [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configure-version-updates). +* **Immutable releases:** Not enabled by default. You can enable release immutability for a repository or organization. See [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/prevent-release-changes). * **Artifact attestations:** Available in all public repositories, but you must explicitly generate attestations in your build workflows. See [AUTOTITLE](/actions/how-tos/secure-your-work/use-artifact-attestations/use-artifact-attestations). -Private repositories: -* **Dependency graph:** Not enabled by default. The feature can be enabled by repository administrators. For more information, see [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/explore-dependencies). -* **Dependency review:** Available in private repositories owned by organizations that use {% data variables.product.prodname_team %} or {% data variables.product.prodname_ghe_cloud %} and have a license for {% data variables.product.prodname_GHAS_or_code_security %}. For more information, see [AUTOTITLE](/get-started/learning-about-github/about-github-advanced-security) and [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/explore-dependencies). -* **{% data variables.product.prodname_dependabot_alerts %}:** Not enabled by default. Owners of private repositories, or people with admin access, can enable {% data variables.product.prodname_dependabot_alerts %} by enabling the dependency graph and {% data variables.product.prodname_dependabot_alerts %} for their repositories. - You can also enable or disable Dependabot alerts for all repositories owned by your user account or organization. For more information, see [AUTOTITLE](/account-and-profile/how-tos/account-settings/managing-security-and-analysis-features) or [AUTOTITLE](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization). -* **Artifact attestations:** Only available in private repositories on {% data variables.product.prodname_ghe_cloud %}. - -Any repository type: -* **{% data variables.product.prodname_dependabot_security_updates %}:** Not enabled by default. You can enable {% data variables.product.prodname_dependabot_security_updates %} for any repository that uses {% data variables.product.prodname_dependabot_alerts %} and the dependency graph. For information about enabling security updates, see [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configure-security-updates). -* **{% data variables.product.prodname_dependabot_version_updates %}:** Not enabled by default. People with write permissions to a repository can enable {% data variables.product.prodname_dependabot_version_updates %}. For information about enabling version updates, see [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configure-version-updates). -* **Immutable releases*:** Not enabled by default. You can enable release immutability for a repository or organization. See [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/establish-provenance-and-integrity/prevent-release-changes). {% endif %} - {% ifversion ghes %} * **Dependency graph and {% data variables.product.prodname_dependabot_alerts %}:** Not enabled by default. Both features are configured at an enterprise level by the enterprise owner. For more information, see [AUTOTITLE](/code-security/how-tos/secure-at-scale/configure-enterprise-security/configure-specific-tools/enable-dependency-graph) and [AUTOTITLE](/admin/configuring-settings/configuring-github-connect/enabling-dependabot-for-your-enterprise). * **Dependency review:** Available when dependency graph is enabled for your instance and {% data variables.product.prodname_GHAS_or_code_security %} is enabled for the organization or repository. For more information, see [AUTOTITLE](/get-started/learning-about-github/about-github-advanced-security). -{% endif %} -{% ifversion ghes %} * **{% data variables.product.prodname_dependabot_security_updates %}:** Not enabled by default. You can enable {% data variables.product.prodname_dependabot_security_updates %} for any repository that uses {% data variables.product.prodname_dependabot_alerts %} and the dependency graph. For information about enabling security updates, see [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configure-security-updates). * **{% data variables.product.prodname_dependabot_version_updates %}:** Not enabled by default. People with write permissions to a repository can enable {% data variables.product.prodname_dependabot_version_updates %}. For information about enabling version updates, see [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configure-version-updates). -{% endif %} +{% endif %} \ No newline at end of file diff --git a/content/code-security/how-tos/maintain-quality-code/disable-code-quality.md b/content/code-security/how-tos/maintain-quality-code/disable-code-quality.md index 03459a499ff3..a7737cdceecc 100644 --- a/content/code-security/how-tos/maintain-quality-code/disable-code-quality.md +++ b/content/code-security/how-tos/maintain-quality-code/disable-code-quality.md @@ -20,7 +20,7 @@ category: 1. In the sidebar, under **{% data variables.product.prodname_security_and_quality_tab %}**, click **{% data variables.code-quality.code_quality_ui_settings %}** to display the "{% data variables.code-quality.code_quality_ui %}" page. 1. Under **{% data variables.product.prodname_code_quality_short %} analysis**, toggle from **On** to **Off**. -This stops all future {% data variables.product.prodname_code_quality_short %} scans, and the billing they generate, for that repository. +This stops all future {% data variables.product.prodname_code_quality_short %} scans for that repository, along with the {% data variables.product.prodname_actions %} minutes and {% data variables.product.prodname_ai_credits_short %} those scans use. License charges continue for a period after you disable {% data variables.product.prodname_code_quality_short %}. See [When billing stops](#when-billing-stops). ## Disabling {% data variables.product.prodname_code_quality_short %} for an organization @@ -33,6 +33,8 @@ Disabling at the organization level turns {% data variables.product.prodname_cod 1. To also disable {% data variables.product.prodname_code_quality_short %} in repositories where an administrator has deliberately enabled it, and to prevent administrators from re-enabling it, turn on **Enforce access**. Without enforcement, those repositories keep {% data variables.product.prodname_code_quality_short %} enabled. 1. Unless you select **Let repositories decide**, a "Review enablement and billing changes" dialog appears, showing the total number of affected repositories. Review the details, then click **Confirm**. +For repositories affected by the organization-level change, disabling stops future scans and the metered usage they generate. Repositories that are explicitly enabled continue scanning unless you turn on **Enforce access**. License charges continue for a period after the change. See [When billing stops](#when-billing-stops). + For the full list of access options and how enforcement works, see [AUTOTITLE](/code-security/concepts/code-quality/enablement-at-scale#organization-level-repository-access). ## What happens to your existing data @@ -44,9 +46,24 @@ Disabling {% data variables.product.prodname_code_quality_short %}: ## When billing stops -Disabling stops new scans right away, so no further {% data variables.product.prodname_actions %} minutes or {% data variables.product.prodname_ai_credits_short %} are consumed. +Disabling {% data variables.product.prodname_code_quality_short %} stops metered usage immediately, but license charges continue for a period afterwards. For an overview of what {% data variables.product.prodname_code_quality_short %} bills for, see [AUTOTITLE](/billing/concepts/product-billing/github-code-quality). + +### Metered usage stops immediately + +Disabling stops new scans right away, so you use no further {% data variables.product.prodname_actions %} minutes or {% data variables.product.prodname_ai_credits_short %}. + +Usage from before you disabled still bills as normal. Metered usage adds up over the course of the month and appears on your next bill. + +### License charges can continue + +Disabling {% data variables.product.prodname_code_quality_short %} can reduce the number of licenses you use: + +* A committer who contributed only to repositories where you disable {% data variables.product.prodname_code_quality_short %} no longer counts towards your license usage. +* A committer who also contributed to another repository where {% data variables.product.prodname_code_quality_short %} remains enabled continues to count. They stop counting 90 days after their most recent commit to an enabled repository. + +For each billing period, you're charged for the highest number of licenses used at any point during that period, not the number in use at the end. Disabling {% data variables.product.prodname_code_quality_short %} can free licenses for the next period, but it doesn't reduce the charge for the current period. -Usage you've already accrued this cycle still bills as normal. All metered usage adds up over the course of the month and bills on your next billing cycle date, so your next bill will show the {% data variables.product.prodname_ai_credits_short %} usage and licenses consumed before you disabled the feature. You won't see new charges accrue after the disable date. +{% data variables.product.prodname_code_quality_short %} uses the same licensing model as {% data variables.product.prodname_GHAS %}. To see how the active committer count changes as people stop committing and as repositories are enabled and disabled, see [AUTOTITLE](/billing/concepts/product-billing/github-advanced-security#example-showing-how-the-active-committer-count-changes-over-time). ## Confirming {% data variables.product.prodname_code_quality_short %} is off diff --git a/content/code-security/how-tos/maintain-quality-code/fix-backlog-findings.md b/content/code-security/how-tos/maintain-quality-code/fix-backlog-findings.md index ccf36d0052d1..2a51b764a9e8 100644 --- a/content/code-security/how-tos/maintain-quality-code/fix-backlog-findings.md +++ b/content/code-security/how-tos/maintain-quality-code/fix-backlog-findings.md @@ -22,13 +22,19 @@ category: 1. **{% data variables.code-quality.all_findings %}**: {% data variables.product.prodname_code_quality_short %} uses {% data variables.product.prodname_codeql %} to perform a deterministic, rules-based scan of your default branch. Finding are grouped by rule and language, labeled by severity (**Error**, **Warning**, **Note**), and each includes a suggested autofix. - 1. **{% data variables.code-quality.recent_suggestions %}**: {% data variables.product.prodname_code_quality_short %} uses AI-powered analysis to identify quality issues in the files most recently pushed to your default branch, including issues that rule-based analysis may not detect - such as best practices, naming conventions, or design considerations. +1. **{% data variables.code-quality.recent_suggestions %}**: {% data variables.product.prodname_code_quality_short %} uses AI-powered analysis to identify quality issues in the files most recently pushed to your default branch, including issues that rule-based analysis may not detect - such as best practices, naming conventions, or design considerations. - {% data reusables.code-quality.recent-suggestions-preview-note %} +{% data reusables.code-quality.recent-suggestions-preview-note %} - For information on resolving {% data variables.code-quality.recent_suggestions %}, see [AUTOTITLE](/code-security/how-tos/maintain-quality-code/fix-findings-in-recent-merges). +For information on resolving {% data variables.code-quality.recent_suggestions %}, see [AUTOTITLE](/code-security/how-tos/maintain-quality-code/fix-findings-in-recent-merges). -## Resolving a standard finding +## Resolving standard findings + +You can resolve findings individually or assign multiple findings to {% data variables.product.prodname_copilot_short %}. + +{% data reusables.code-quality.agentic-autofix-preview-note %} + +### Resolving a single finding {% data reusables.code-quality.dashboard-navigation-repo %} {% data reusables.code-quality.dashboard-all-findings %} @@ -48,6 +54,22 @@ category: To raise a maintainability or reliability score, you must resolve every finding at the highest severity level currently affecting that metric. See [AUTOTITLE](/code-security/reference/code-quality/metrics-and-ratings). +### Assigning multiple findings to {% data variables.product.prodname_copilot_short %} + +If you have many findings for a rule and want to remediate them efficiently, you can select these findings in bulk and assign them to {% data variables.product.prodname_copilot_short %} for agentic remediation. {% data variables.product.prodname_copilot_short %} will open a pull request with fixes for the selected findings. + +You don't need a {% data variables.product.prodname_copilot_short %} license to use this feature, but your enterprise owner must allow {% data variables.product.prodname_code_quality_short %} for your organization. See [AUTOTITLE](/code-security/how-tos/secure-at-scale/configure-enterprise-security/configure-specific-tools/allow-github-code-quality-in-enterprise). + +For the best results, start with a single rule that has many high-severity findings. This lets you validate the quality of the autofixes on a cohesive set of changes before expanding to other rules. + +{% data reusables.code-quality.dashboard-navigation-repo %} +{% data reusables.code-quality.dashboard-all-findings %} +1. Select the findings you want to remediate. You can select up to 25 findings per page, one page at a time. +1. Click **Assign to {% data variables.product.prodname_copilot_short %}**. + + ![Screenshot of the "Standard findings" view. The "3 of 3 selected" checkbox and the "Dismiss" and "Assign to Copilot" buttons are outlined in orange.](/assets/images/help/code-quality/assign-findings-bulk.png) +1. {% data variables.product.prodname_copilot_short %} will open a pull request with fixes for the selected findings. Review the pull request carefully before merging. + ## Verifying that your code quality scores have updated After your autofix pull requests are merged, return to the "{% data variables.code-quality.all_findings %}" view to confirm that: diff --git a/content/code-security/how-tos/maintain-quality-code/view-and-manage-cost.md b/content/code-security/how-tos/maintain-quality-code/view-and-manage-cost.md index ebefc9d1b463..985bd3f2a042 100644 --- a/content/code-security/how-tos/maintain-quality-code/view-and-manage-cost.md +++ b/content/code-security/how-tos/maintain-quality-code/view-and-manage-cost.md @@ -37,7 +37,7 @@ It's important to understand how {% data variables.product.prodname_code_quality {% data variables.product.prodname_code_quality_short %} usage appears in the **same billing and usage views as your other products**, not in a separate {% data variables.product.prodname_code_quality_short %} meter. Where you look depends on how granular a breakdown you need: * **For a repository- or organization-level breakdown, download the billing usage report** from the "Billing and licensing" tab. This is the only place you can attribute {% data variables.product.prodname_code_quality_short %} spend, including {% data variables.product.prodname_actions %} minutes, down to a specific repository or organization. There's no equivalent view in the UI. See [AUTOTITLE](/billing/how-tos/products/view-productlicense-use). -* **For {% data variables.product.prodname_code_quality_short %}'s {% data variables.product.prodname_ai_credits_short %} usage over time, use the AI usage page** and group it by **Product** using the dropdown at the top right. This separates {% data variables.product.prodname_code_quality_short %} from your other AI products, like {% data variables.product.prodname_copilot_short %}, so you can track its share of the pool. To monitor the pool as a whole instead, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +* **For {% data variables.product.prodname_code_quality_short %}'s {% data variables.product.prodname_ai_credits_short %} usage over time, use the AI usage page** and group it by **Product** using the dropdown at the top right. This separates {% data variables.product.prodname_code_quality_short %} from your other AI products, like {% data variables.product.prodname_copilot_short %}, so you can track its share of the pool. To monitor the pool as a whole instead, see [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). ## Monitoring your spend @@ -51,7 +51,7 @@ Once {% data variables.product.prodname_code_quality_short %} is running, watch You have several levers to keep spend in check. In rough order of impact: * **Enable selectively.** Turn {% data variables.product.prodname_code_quality_short %} on where it adds value rather than across every repository at once. See [AUTOTITLE](/code-security/how-tos/maintain-quality-code/enable-code-quality). -* **Disable low-value repositories.** Disabling {% data variables.product.prodname_code_quality_short %} on a repository frees the licenses for committers unique to it, and stops its scans and AI usage. See [AUTOTITLE](/code-security/how-tos/maintain-quality-code/disable-code-quality). +* **Disable low-value repositories.** Disabling {% data variables.product.prodname_code_quality_short %} on a repository stops its scans and AI usage immediately. It can free licenses for committers unique to that repository for the next billing period, but it doesn't reduce the charge for the current period. See [AUTOTITLE](/code-security/how-tos/maintain-quality-code/disable-code-quality). * **Set a budget.** A budget for {% data variables.product.prodname_code_quality_short %} stops your spending automatically once you hit your limit, because the hard stop is mandatory (see below). * **Keep the {% data variables.code-quality.recent_suggestions %} page off.** This page is **off by default** and stays in {% data variables.release-phases.public_preview %}, so it only draws down {% data variables.product.prodname_ai_credits_short %} if you turn it on. Repositories that enabled it during the preview keep it on. To turn it off for a repository, disable **{% data variables.code-quality.recent_suggestions %}** on the repository's **{% data variables.code-quality.code_quality_ui %}** settings page. diff --git a/content/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/disabling-autofix-for-code-scanning.md b/content/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/disabling-autofix-for-code-scanning.md index f6913eab7091..ca913a0ff16e 100644 --- a/content/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/disabling-autofix-for-code-scanning.md +++ b/content/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/disabling-autofix-for-code-scanning.md @@ -18,7 +18,7 @@ category: Disabling agentic autofix can be done in two ways: 1. By disabling {% data variables.copilot.copilot_autofix_short %} since agentic autofix relies on the same underlying setting. For instructions, see the sections below. -1. By opting repositories out of {% data variables.copilot.copilot_cloud_agent %}. See [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management#opting-repositories-out-of-copilot-cloud-agent). +1. By opting repositories out of {% data variables.copilot.copilot_cloud_agent %}. See [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access#opting-repositories-out-of-copilot-cloud-agent). For more information about agentic autofix, see [AUTOTITLE](/code-security/concepts/code-scanning/autofix-for-code-scanning#agentic-autofix). diff --git a/content/code-security/how-tos/manage-security-alerts/manage-secret-scanning-alerts/resolving-alerts.md b/content/code-security/how-tos/manage-security-alerts/manage-secret-scanning-alerts/resolving-alerts.md index 1db51a08b1ea..bd97d1dd7400 100644 --- a/content/code-security/how-tos/manage-security-alerts/manage-secret-scanning-alerts/resolving-alerts.md +++ b/content/code-security/how-tos/manage-security-alerts/manage-secret-scanning-alerts/resolving-alerts.md @@ -48,6 +48,12 @@ Once a secret has been committed to a repository, you should consider the secret > [!NOTE] >{% data variables.product.prodname_secret_scanning_caps %} doesn't automatically close alerts when the corresponding token has been removed from the repository. You must manually close these alerts in the alert list on {% data variables.product.prodname_dotcom %}. +{% ifversion secret-scanning-merge-protection %} + +If a branch ruleset requires {% data variables.product.prodname_secret_scanning %} alerts to be resolved, an open alert introduced by a pull request can block merging. After fixing the exposed secret, close the alert using the following steps. After all blocking alerts are closed, the alerts no longer prevent merging. The rule can continue to block merging until a {% data variables.product.prodname_secret_scanning %} scan completes for the pull request's head commit. + +{% endif %} + {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.sidebar-security %} 1. In the left sidebar, under "Vulnerability alerts", click **{% data variables.product.prodname_secret_scanning_caps %}**. diff --git a/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/configure-specific-tools/allow-github-code-quality-in-enterprise.md b/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/configure-specific-tools/allow-github-code-quality-in-enterprise.md index 15df3a33f611..242bc22b9553 100644 --- a/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/configure-specific-tools/allow-github-code-quality-in-enterprise.md +++ b/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/configure-specific-tools/allow-github-code-quality-in-enterprise.md @@ -17,7 +17,13 @@ category: --- > [!NOTE] -> Previously, {% data variables.product.prodname_AS %} policies also controlled access to {% data variables.product.prodname_code_quality_short %}. Those existing policy settings are automatically applied to the standalone {% data variables.product.prodname_code_quality_short %} policies. +> {% data variables.product.prodname_code_quality_short %} has its own standalone enterprise policies. Access was previously controlled by your {% data variables.product.prodname_AS %} policies, and those existing settings are automatically applied to the new {% data variables.product.prodname_code_quality_short %} policies. + +{% data reusables.code-quality.agentic-autofix-preview-note %} + +When you allow {% data variables.product.prodname_code_quality_short %} for an organization and set the repository admin policy to **Allowed**, repository administrators can enable {% data variables.product.prodname_code_quality_short %} scans and all associated capabilities, including bulk agentic remediation with {% data variables.product.prodname_copilot_short %}. There is no separate policy for agentic remediation. + +If you restrict {% data variables.product.prodname_code_quality_short %}, repository administrators cannot enable scans or use {% data variables.product.prodname_copilot_short %}-powered autofixes for code quality findings. 1. Navigate to your enterprise. For example, from [https://github.com/settings/enterprises](https://github.com/settings/enterprises?ref_product=ghec&ref_type=engagement&ref_style=text). {% data reusables.enterprise-accounts.policies-tab %} diff --git a/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/establish-complete-coverage/create-custom-configuration.md b/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/establish-complete-coverage/create-custom-configuration.md index 989de0ca97c7..15cc256d2e3e 100644 --- a/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/establish-complete-coverage/create-custom-configuration.md +++ b/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/establish-complete-coverage/create-custom-configuration.md @@ -70,7 +70,7 @@ When creating a security configuration, keep in mind that: 1. Optionally, in the "Policy" section, you can use additional options to control how the configuration is applied: * **Use as default for newly created repositories**. Select the **None** {% octicon "triangle-down" aria-hidden="true" aria-label="triangle-down" %} dropdown menu, then click **Public**, **Private and internal**, or **All repositories**. {% data reusables.security-configurations.default-configuration-exception-repo-transfers %} - * **Enforce configuration**. Block repository owners from changing features that are enabled or disabled by the configuration (features that are not set aren't enforced). Select **Enforce** from the dropdown menu. + * **Enforce configuration**. {% ifversion security-configuration-enterprise-organization-enforcement %}{% data reusables.permissions.security-configuration-enterprise-enable %} can block repository owners only, or both repository and organization owners, from changing features that are enabled or disabled by the configuration. Features that are not set aren't enforced. Select **Don't enforce**, **Enforce for repository owners**, or **Enforce for repository and organization owners** from the dropdown menu.{% else %}Block repository owners from changing features that are enabled or disabled by the configuration (features that are not set aren't enforced). Select **Enforce** from the dropdown menu.{% endif %} {% data reusables.code-scanning.security-configuration-enforcement-edge-cases %} @@ -111,8 +111,7 @@ When creating a security configuration, keep in mind that: 1. Optionally, in the "Policy" section, you can use additional options to control how the configuration is applied: * **Use as default for newly created repositories**. Select the **None** {% octicon "triangle-down" aria-hidden="true" aria-label="triangle-down" %} dropdown menu, then click **Public**, **Private and internal**, or **All repositories**. {% data reusables.security-configurations.default-configuration-exception-repo-transfers %} - * **Enforce configuration**. Block repository owners from changing features that are enabled or disabled by the configuration (features that are not set aren't enforced). Select **Enforce** from the dropdown menu. - + * **Enforce configuration**. {% ifversion security-configuration-enterprise-organization-enforcement %}{% data reusables.permissions.security-configuration-enterprise-enable %} can block repository owners only, or both repository and organization owners, from changing features that are enabled or disabled by the configuration. Features that are not set aren't enforced. Select **Don't enforce**, **Enforce for repository owners**, or **Enforce for repository and organization owners** from the dropdown menu.{% else %}Block repository owners from changing features that are enabled or disabled by the configuration (features that are not set aren't enforced). Select **Enforce** from the dropdown menu.{% endif %} {% data reusables.code-scanning.security-configuration-enforcement-edge-cases %} {% data reusables.code-scanning.save-custom-configuration %} diff --git a/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/manage-your-coverage/edit-custom-configuration.md b/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/manage-your-coverage/edit-custom-configuration.md index d961ce8a9a75..eedd15db54b6 100644 --- a/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/manage-your-coverage/edit-custom-configuration.md +++ b/content/code-security/how-tos/secure-at-scale/configure-enterprise-security/manage-your-coverage/edit-custom-configuration.md @@ -25,7 +25,7 @@ After creating and applying a {% data variables.product.prodname_custom_security 1. In the "Configurations" section, click the name of the {% data variables.product.prodname_custom_security_configuration %} you want to edit. 1. Edit the name and description of your {% data variables.product.prodname_custom_security_configuration %} as desired. 1. Edit the enablement settings of your {% data variables.product.prodname_custom_security_configuration %} as desired. -1. In the "Policy" section, you can modify the configuration's enforcement status. Enforcing a configuration will block repository owners from changing features that are enabled or disabled by the configuration, but features that are not set aren't enforced. Next to "Enforce configuration", select **Enforce** or **Don't enforce** from the dropdown menu. +1. In the "Policy" section, you can modify the configuration's enforcement status. {% ifversion security-configuration-enterprise-organization-enforcement %}{% data reusables.permissions.security-configuration-enterprise-enable %} can block repository owners only, or both repository and organization owners, from changing features that are enabled or disabled by the configuration. Features that are not set aren't enforced. Select **Don't enforce**, **Enforce for repository owners**, or **Enforce for repository and organization owners** from the dropdown menu.{% else %}Enforcing a configuration will block repository owners from changing features that are enabled or disabled by the configuration, but features that are not set aren't enforced. Next to "Enforce configuration", select **Enforce** or **Don't enforce** from the dropdown menu.{% endif %} {% data reusables.code-scanning.security-configuration-enforcement-edge-cases %} diff --git a/content/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries.md b/content/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries.md index ab79860f3355..b1b956322f1e 100644 --- a/content/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries.md +++ b/content/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries.md @@ -87,6 +87,19 @@ Any private registries used by the build must also be accessible to the workflow When you configure access to one or more private registries, {% data variables.product.prodname_dependabot %} can propose pull requests to upgrade a vulnerable dependency or to maintain a dependency, see [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries) and [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-private-registries). +{% ifversion org-automatic-registry-access %} + +### Automatic access to {% data variables.product.github %}-hosted registries + +For packages stored in {% data variables.product.prodname_registry %} and {% data variables.product.prodname_container_registry %}, {% data variables.product.prodname_dependabot %} can authenticate automatically without {% data variables.product.pat_generic_plural %} or `dependabot.yml` registry configuration. + +{% data variables.product.prodname_dependabot %} uses its `GITHUB_TOKEN` to request read access, reusing the same package access grants that {% data variables.product.prodname_actions %} workflows use. + +To enable this, grant the repository **Read** access to each package in the package settings. Once access is granted, {% data variables.product.prodname_dependabot %} can pull from those packages automatically, and you can remove any {% data variables.product.pat_generic %}-based registry entries you previously configured for them. + +See [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries#configuring-private-github-hosted-registries). +{% endif %} + {% ifversion org-private-registry-oidc %} ### Configuring OIDC authentication for a private registry diff --git a/content/code-security/how-tos/secure-your-secrets/prevent-future-leaks/block-merges-with-secrets.md b/content/code-security/how-tos/secure-your-secrets/prevent-future-leaks/block-merges-with-secrets.md new file mode 100644 index 000000000000..611c6a52f230 --- /dev/null +++ b/content/code-security/how-tos/secure-your-secrets/prevent-future-leaks/block-merges-with-secrets.md @@ -0,0 +1,82 @@ +--- +title: Blocking pull request merges that contain secrets +shortTitle: Block merges with secrets +intro: Prevent exposed secrets from reaching protected branches by requiring contributors to resolve {% data variables.product.prodname_secret_scanning %} alerts before merging. +permissions: '{% data reusables.permissions.security-org-enable %}{% ifversion enterprise-code-rulesets %}, and enterprise owners{% endif %}' +product: '{% data reusables.gated-features.secret-protection %}' +versions: + feature: secret-scanning-merge-protection +contentType: how-tos +category: + - Protect your secrets +redirect_from: + - /code-security/how-tos/secure-your-secrets/prevent-future-leaks/block-pull-request-merges +--- + +> [!NOTE] +> {% data reusables.secret-scanning.merge-protection-public-preview %} + +The **Require secret scanning alerts are resolved** rule is available for rulesets that target branches in repositories. You can use the rule to block a pull request from merging when either of these conditions applies: + +* A {% data variables.product.prodname_secret_scanning %} scan has not completed for the head commit of the pull request. +* A commit in the pull request introduced an open {% data variables.product.prodname_secret_scanning %} alert that matches a secret type selected in the ruleset. + +The rule supports provider, custom, and generic patterns. It does not support AI-detected secrets. + +## Prerequisites + +The repositories that you want to protect must have: + +* Either {% data variables.product.prodname_GH_secret_protection %} or {% data variables.product.prodname_GHAS %} enabled +* {% data variables.product.prodname_secret_scanning_caps %} enabled. See [AUTOTITLE](/code-security/how-tos/secure-your-secrets/detect-secret-leaks/enable-secret-scanning). + +## Creating a merge protection ruleset for a repository + +{% data reusables.repositories.navigate-to-repo %} +{% data reusables.repositories.sidebar-settings %} +{% data reusables.repositories.repo-rulesets-settings %} +1. Click **New ruleset**. +1. Click **New branch ruleset**. +{% data reusables.repositories.rulesets-general-step %} +{% data reusables.repositories.rulesets-target-branches %} +{% data reusables.repositories.rulesets-require-secret-scanning-alerts-resolved %} +{% data reusables.repositories.rulesets-create-and-insights-step %} + +For information about configuring bypass permissions and other ruleset settings, see [AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/creating-rulesets-for-a-repository). + +## Creating a merge protection ruleset for repositories in an organization{% ifversion enterprise-code-rulesets %} or enterprise{% endif %} + +{% ifversion enterprise-code-rulesets %}You can create this ruleset for repositories in your organization, or create it for an enterprise to apply merge protection consistently across repositories in multiple organizations. + +### Accessing organization ruleset settings{% endif %} + +{% data reusables.profile.access_org %} +{% data reusables.profile.org_settings %} +{% data reusables.organizations.access-ruleset-settings %} + +{% ifversion enterprise-code-rulesets %} + +### Accessing enterprise ruleset settings + +{% data reusables.enterprise-accounts.access-enterprise %} +{% data reusables.enterprise-accounts.policies-tab %} +1. Under "Policies", click **Code**. + +### Configuring the ruleset{% endif %} + +1. Click **New ruleset**. +1. Click **New branch ruleset**. +{% data reusables.repositories.rulesets-general-step %} +{% ifversion enterprise-code-rulesets %} +1. If you are creating an enterprise-level ruleset, under "Target organizations", choose the organizations that the ruleset will apply to. +{% endif %} +1. Under "Target repositories", choose the repositories that the ruleset will apply to. +{% data reusables.repositories.rulesets-target-branches %} +{% data reusables.repositories.rulesets-require-secret-scanning-alerts-resolved %} +{% data reusables.repositories.rulesets-create-and-insights-step %} + +For information about configuring bypass permissions and other ruleset settings, see [AUTOTITLE](/organizations/managing-organization-settings/creating-rulesets-for-repositories-in-your-organization){% ifversion enterprise-code-rulesets %} and [AUTOTITLE](/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-code-governance){% endif %}. + +## Unblocking a pull request + +When this rule blocks a pull request because of open alerts, you must resolve each alert that matches the secret types selected in the ruleset. See [AUTOTITLE](/code-security/how-tos/manage-security-alerts/manage-secret-scanning-alerts/resolving-alerts). diff --git a/content/code-security/how-tos/secure-your-secrets/prevent-future-leaks/index.md b/content/code-security/how-tos/secure-your-secrets/prevent-future-leaks/index.md index e16a907c203f..398a458c9910 100644 --- a/content/code-security/how-tos/secure-your-secrets/prevent-future-leaks/index.md +++ b/content/code-security/how-tos/secure-your-secrets/prevent-future-leaks/index.md @@ -1,7 +1,7 @@ --- title: How-tos for leak prevention shortTitle: Prevent future leaks -intro: Learn how to prevent future secret leaks with {% data variables.product.github %}'s push protection. +intro: Prevent exposed secrets from reaching your repositories and protected branches. versions: fpt: '*' ghes: '*' @@ -10,5 +10,5 @@ contentType: how-tos children: - /enable-push-protection - /manage-user-push-protection + - /block-merges-with-secrets --- - diff --git a/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries.md index 34d0ec696d78..18034935e414 100644 --- a/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries.md @@ -29,8 +29,41 @@ For specific ecosystems, you can configure {% data variables.product.prodname_de {% ifversion dependabot-on-actions-self-hosted %}To allow {% data variables.product.prodname_dependabot %} access to registries hosted privately or restricted to internal networks, configure {% data variables.product.prodname_dependabot %} to run on {% data variables.product.prodname_actions %} self-hosted runners. For more information, see [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-on-self-hosted-runners).{% endif %} +{% ifversion org-automatic-registry-access %} + +## Configuring private {% data variables.product.github %}-hosted registries + +For packages stored in {% data variables.product.prodname_registry %} or {% data variables.product.prodname_container_registry %}, {% data variables.product.prodname_dependabot %} can authenticate automatically using its `GITHUB_TOKEN`. This uses the same "Manage Actions access" grants that {% data variables.product.prodname_actions %} workflows use. No {% data variables.product.pat_generic_plural %} or `dependabot.yml` registry entries are required. + +The `dependabot.yml` registry configuration using {% data variables.product.pat_generic_title_case %}-based registry entries and described in [Configuring private third-party registries](#configuring-private-third-party-registries) is still required for third-party private registries (such as Artifactory, Azure Artifacts, or Nexus). + +To grant {% data variables.product.prodname_dependabot %} access to a private package: + + {% data reusables.package_registry.package-settings-from-org-level %} + {% data reusables.package_registry.package-settings-option %} + {% data reusables.package_registry.package-settings-actions-access %} + 1. {% data reusables.package_registry.package-settings-add-repo %} + Search for the repository where {% data variables.product.prodname_dependabot %} runs, and select it. + {% data reusables.package_registry.package-settings-actions-access-role-repo %} + Select **Read** as the access level. {% data variables.product.prodname_dependabot %} only needs read access to pull packages. + +You need to repeat these steps for each private package that you want {% data variables.product.prodname_dependabot %} to access. + +Once access is granted, {% data variables.product.prodname_dependabot %} can pull from those packages automatically. You can remove any {% data variables.product.pat_generic %}-based registry entries in `dependabot.yml` that you previously configured for these packages. + +> [!NOTE] +> This method works for every {% data variables.product.prodname_registry %} ecosystem that {% data variables.product.prodname_dependabot %} supports, including container images in {% data variables.product.prodname_container_registry %}. + +For more information about how automatic access works, see [AUTOTITLE](/code-security/concepts/supply-chain-security/automatic-dependabot-access-to-github-registries). For more information about package access settings, see [AUTOTITLE](/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#ensuring-workflow-access-to-your-package). + +## Configuring private third-party registries + +{% else %} + ## Configuring private registries +{% endif %} + {% ifversion org-private-registry %} You can configure {% data variables.product.prodname_dependabot %}'s access to private registries at the org-level. diff --git a/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-private-registries.md b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-private-registries.md index ae2fd86a0df5..64448b57a25d 100644 --- a/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-private-registries.md +++ b/content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-private-registries.md @@ -109,6 +109,12 @@ The snippet below shows a `dependabot.yml` file configuration that uses a token. Docker supports using a username and password for registries. For more information, see `docker-registry` in [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries#docker-registry). +{% ifversion org-automatic-registry-access %} + +For images stored in {% data variables.product.prodname_container_registry %}, you can grant your repository **Read** access in the package settings instead of configuring credentials in your `dependabot.yml` file. See [AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configure-access-to-private-registries#configuring-private-github-hosted-registries). + +{% endif %} + Snippet of `dependabot.yml` file using a username and password. {% raw %} diff --git a/content/code-security/index.md b/content/code-security/index.md index 35f07c8632ae..dfbe2524f7ad 100644 --- a/content/code-security/index.md +++ b/content/code-security/index.md @@ -8,7 +8,7 @@ redirect_from: - /enterprise-onboarding/feature-enhancements/about-code-security-for-your-enterprise - /enterprise-onboarding/feature-enhancements/about-enterprise-security introLinks: - overview: '{% ifversion ghes %}/code-security/getting-started/github-security-features{% endif %}' + overview: '/code-security/getting-started/github-security-features' generate_secret_risk_assessment_report_for_free: '{% ifversion secret-risk-assessment %}https://github.com/get_started?with=risk-assessment{% endif %}' layout: discovery-landing contentType: landing diff --git a/content/code-security/reference/code-scanning/codeql/codeql-cli-manual/test-run.md b/content/code-security/reference/code-scanning/codeql/codeql-cli-manual/test-run.md index 2e1671ca131f..2a2cfd5e78b4 100644 --- a/content/code-security/reference/code-scanning/codeql/codeql-cli-manual/test-run.md +++ b/content/code-security/reference/code-scanning/codeql/codeql-cli-manual/test-run.md @@ -100,6 +100,14 @@ useful for testing extractors. \[Advanced] Run [codeql dataset check](/code-security/reference/code-scanning/codeql/codeql-cli-manual/dataset-check) over each test database created and report a failure if it detects inconsistencies. This is useful when testing extractors. If the check is (temporarily!) expected to fail for a particular database, place a `DB-CHECK.expected` file in the test directory. +#### `--[no-]reuse-dataset` + +\[Advanced] Attempt to reuse an existing test database from a previous +run. When this option is given, if a `.testproj` directory exists for a +test directory, its dataset will be used instead of extracting a new +database. If no existing database is found, extraction proceeds as +normal. This option implies `--keep-databases`. + #### `--[no-]show-extractor-output` \[Advanced] Show the output from extractor scripts that create test diff --git a/content/code-security/reference/security-at-scale/configuration-enforcement.md b/content/code-security/reference/security-at-scale/configuration-enforcement.md index 19b15400c191..4eddf3bcfd15 100644 --- a/content/code-security/reference/security-at-scale/configuration-enforcement.md +++ b/content/code-security/reference/security-at-scale/configuration-enforcement.md @@ -13,8 +13,18 @@ redirect_from: - /code-security/reference/security-at-scale/security-configuration-enforcement --- +{% ifversion security-configuration-enterprise-organization-enforcement %} + +{% data variables.product.prodname_security_configurations_caps %} can be enforced at the organization{% ifversion security-configuration-enterprise-level %} or enterprise{% endif %} level to prevent owners from changing the enablement status of configured security features. +{% data reusables.permissions.security-configuration-enterprise-enable %} +* At the **organization** level, enforcement means repository owners cannot change the enablement status of features that are enabled or disabled by the configuration. +* At the **enterprise** level, you can enforce for repository owners only, or for both repository and organization owners. When enforcement applies to both, neither repository owners nor organization owners can change the enablement status of features that are enabled or disabled by the configuration. +{% else %} + {% data variables.product.prodname_security_configurations_caps %} can be enforced, meaning repository owners cannot change the enablement status of features that are enabled or disabled by the configuration. +{% endif %} + ## Situations that break enforcement Some situations can break the enforcement of {% data variables.product.prodname_security_configurations %}. For example, the enablement of {% data variables.product.prodname_code_scanning %} will not apply to a repository if: diff --git a/content/code-security/tutorials/improve-code-quality/raise-your-quality-rating.md b/content/code-security/tutorials/improve-code-quality/raise-your-quality-rating.md index e3cb297bf8f9..2a287e8d8477 100644 --- a/content/code-security/tutorials/improve-code-quality/raise-your-quality-rating.md +++ b/content/code-security/tutorials/improve-code-quality/raise-your-quality-rating.md @@ -64,10 +64,13 @@ Once you've picked a rule, decide how to handle each finding: | Assessment | Recommended action | Notes | | --- | --- | --- | -| The finding is legitimate. | Click **Generate fix** and open a pull request | Clicking **Generate fix** consumes {% data variables.product.prodname_ai_credits_short %}. You can add multiple autofixes to the same branch to group remediation work in one pull request. | -| The finding doesn't apply. For example, it's in legacy code, an intentional pattern, or a false positive | Click **Dismiss**. | The finding is considered resolved and removed from the list of open findings. | +| One finding is legitimate. | Click **Assign to {% data variables.product.prodname_copilot_short %}**. | {% data variables.product.prodname_copilot_short %} opens a pull request containing fixes for the selected findings. Assigning to {% data variables.product.prodname_copilot_short %} consumes {% data variables.product.prodname_ai_credits_short %}. | +| Multiple findings for the same rule are legitimate. | Select up to 25 findings on a page, then click **Assign to {% data variables.product.prodname_copilot_short %}**. | {% data variables.product.prodname_copilot_short %} opens a pull request containing fixes for the selected findings. Assigning to {% data variables.product.prodname_copilot_short %} consumes {% data variables.product.prodname_ai_credits_short %}| +| A finding doesn't apply. For example, it's in legacy code, an intentional pattern, or a false positive. | Click **Dismiss**. | The finding is considered resolved and removed from the list of open findings. | -In our example, we generate autofixes for the 40 "Overwritten property" findings and open a pull request. Because they share a single pattern, the fixes are nearly identical. We merge the pull request once CI checks pass. +{% data reusables.code-quality.agentic-autofix-preview-note %} + +In our example, we assign the 40 "Overwritten property" findings to {% data variables.product.prodname_copilot_short %} in batches of up to 25. We review the resulting pull requests and merge them once the CI checks pass. ## Step 4: Communicate impact diff --git a/content/code-security/tutorials/trialing-github-advanced-security/explore-trial-code-scanning.md b/content/code-security/tutorials/trialing-github-advanced-security/explore-trial-code-scanning.md index ef4716eb6691..df2bbf25c838 100644 --- a/content/code-security/tutorials/trialing-github-advanced-security/explore-trial-code-scanning.md +++ b/content/code-security/tutorials/trialing-github-advanced-security/explore-trial-code-scanning.md @@ -90,7 +90,7 @@ This allows you to update the configuration in a single location, but use the wo > > * If you get a {% data variables.product.prodname_copilot_short %} subscription from an organization, you will only be able to participate in the {% data variables.release-phases.public_preview %} on the {% data variables.product.github %} website if an owner of your organization or enterprise has enabled {% data variables.copilot.copilot_code-review_short %}. See [AUTOTITLE](/enterprise-cloud@latest/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies#opting-in-to-previews-or-feedback) and [AUTOTITLE](/enterprise-cloud@latest/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies){% ifversion fpt or ghes %} in the {% data variables.product.prodname_ghe_cloud %} documentation{% endif %}. -By default, users request a review from {% data variables.product.prodname_copilot_short %} in the same way as they do from human reviewers. However, you can update or create an organization-level branch ruleset to automatically add {% data variables.product.prodname_copilot_short %} as a reviewer to all pull requests made to selected branches in all or selected repositories. See [AUTOTITLE](/enterprise-cloud@latest/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review){% ifversion fpt or ghes %} in the {% data variables.product.prodname_ghe_cloud %} documentation{% endif %}. +By default, users request a review from {% data variables.product.prodname_copilot_short %} in the same way as they do from human reviewers. However, you can update or create an organization-level branch ruleset to automatically add {% data variables.product.prodname_copilot_short %} as a reviewer to all pull requests made to selected branches in all or selected repositories. See [AUTOTITLE](/enterprise-cloud@latest/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review){% ifversion fpt or ghes %} in the {% data variables.product.prodname_ghe_cloud %} documentation{% endif %}. {% data variables.product.prodname_copilot_short %} leaves a review comment on each pull request it reviews, without approving the pull request or requesting changes. This ensures that its review is advisory and will not block development work. Similarly, you should not enforce the resolution of suggestions made by {% data variables.product.prodname_copilot_short %} because AI suggestions have known limitations, see [AUTOTITLE](/enterprise-cloud@latest/copilot/responsible-use/agents#7-limitations){% ifversion fpt or ghes %} in the {% data variables.product.prodname_ghe_cloud %} documentation{% endif %}. diff --git a/content/code-security/tutorials/trialing-github-advanced-security/trial-advanced-security.md b/content/code-security/tutorials/trialing-github-advanced-security/trial-advanced-security.md index e81df157fe92..42ef43e3f700 100644 --- a/content/code-security/tutorials/trialing-github-advanced-security/trial-advanced-security.md +++ b/content/code-security/tutorials/trialing-github-advanced-security/trial-advanced-security.md @@ -27,6 +27,7 @@ To set up a trial of {% data variables.product.prodname_GHAS %} using this metho 1. You have not previously purchased {% data variables.product.prodname_GHAS %} (that is, you do not currently or in the past have a paid license for {% data variables.product.prodname_GHAS %}). 1. You are not already using metered billing for {% data variables.product.prodname_GHAS %}. 1. If you have had a previous {% data variables.product.prodname_GHAS %} trial, you are eligible only if you have had no more than one previous trial and it ended at least 180 days ago. +1. Your enterprise has 300 or fewer seats. > [!TIP] > * **No enterprise account?** Start a trial of {% data variables.product.prodname_ghe_cloud %} with {% data variables.product.prodname_GHAS %}. See [AUTOTITLE](/enterprise-cloud@latest/admin/overview/setting-up-a-trial-of-github-enterprise-cloud). diff --git a/content/codespaces/reference/using-github-copilot-in-github-codespaces.md b/content/codespaces/reference/using-github-copilot-in-github-codespaces.md index f16f89c63f8f..ef263ee8c378 100644 --- a/content/codespaces/reference/using-github-copilot-in-github-codespaces.md +++ b/content/codespaces/reference/using-github-copilot-in-github-codespaces.md @@ -14,7 +14,7 @@ category: - Write code in a codespace --- -[{% data variables.product.prodname_copilot %}](https://copilot.github.com/) is an AI pair programmer that you can use in any codespace that you open in the {% data variables.product.prodname_vscode_shortname %} web client or desktop application. For more information about {% data variables.product.prodname_copilot %}, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot). +[{% data variables.product.prodname_copilot %}](https://copilot.github.com/) is an AI pair programmer that you can use in any codespace that you open in the {% data variables.product.prodname_vscode_shortname %} web client or desktop application. For more information about {% data variables.product.prodname_copilot %}, see [AUTOTITLE](/copilot/get-started/about-github-copilot). To start using {% data variables.product.prodname_copilot %} in {% data variables.product.prodname_github_codespaces %}, install the [{% data variables.product.prodname_copilot %} extension from the {% data variables.product.prodname_vscode_marketplace %}](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot). @@ -22,4 +22,5 @@ To include {% data variables.product.prodname_copilot %}, or other extensions, i ## Further reading -* [AUTOTITLE](/copilot/get-started/quickstart) +* [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-on-github-com) +* [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-in-your-ide) diff --git a/content/copilot/concepts/about-cloud-and-local-sandboxes.md b/content/copilot/concepts/about-cloud-and-local-sandboxes.md index 7dc5cc5609a0..74df2c81958e 100644 --- a/content/copilot/concepts/about-cloud-and-local-sandboxes.md +++ b/content/copilot/concepts/about-cloud-and-local-sandboxes.md @@ -101,7 +101,7 @@ The sandbox proxy operates differently on each operating system: ### Enterprise policy enforcement -Enterprises can require local sandboxing and enforce its configuration through server-managed, MDM-managed, or file-based managed settings. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-managed-settings). +Enterprises can require local sandboxing and enforce its configuration through server-managed, MDM-managed, or file-based managed settings. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/get-started). ## Cloud sandboxing diff --git a/content/copilot/concepts/agents/about-plugins.md b/content/copilot/concepts/agents/about-plugins.md index a3c0480c1078..188c7fde9063 100644 --- a/content/copilot/concepts/agents/about-plugins.md +++ b/content/copilot/concepts/agents/about-plugins.md @@ -25,19 +25,57 @@ Plugins provide a way to distribute custom {% data variables.product.prodname_co ## What plugins contain -A plugin can contain some or all of the following components: +A plugin can contain some or all of the following components. The locations of these components depend on the plugin format: * **Custom agents** — Specialized AI assistants (`*.agent.md` files in `agents/`) * **Skills** — Discrete callable capabilities (skills subdirectories in `skills/`, containing a `SKILL.md` file) * **Hooks** — Event handlers that intercept agent behavior (a `hooks.json` file in the plugin root, or in `hooks/`) -* **MCP server configurations** — Model Context Protocol integrations (a `.mcp.json` file in the plugin root, or an `mcp.json` file in `.github/`) +* **MCP server configurations** — Model Context Protocol integrations * **LSP server configurations** — Language Server Protocol integrations (an `lsp.json` file in the plugin root, or in `.github/`) +## Plugin formats + +{% data variables.product.prodname_copilot_short %} supports two plugin formats: + +* **Agent Plugins 1.0** is a portable format for sharing skills and MCP server configurations across compatible clients. To use this format, set `$schema` in `plugin.json` to `https://agent-plugins.org/schemas/1.0.0/plugin.schema.json`. Skills are discovered from `skills/`, and MCP server configuration is discovered from `mcp.json` at the plugin root. These locations cannot be configured in the manifest. Choose Agent Plugins 1.0 when you want to make skills and MCP servers portable. +* **Legacy {% data variables.product.prodname_copilot_short %} plugins** do not declare the Agent Plugins `$schema`. They use the existing manifest fields and component discovery behavior, including configurable component paths and MCP configuration in `.mcp.json`, `.github/mcp.json`, or the `mcpServers` manifest field. Choose the legacy format when you need configurable component paths or are maintaining an existing {% data variables.product.prodname_copilot_short %}-specific plugin. + +For a new plugin, use Agent Plugins 1.0 unless you require configurable component paths. Use the legacy format primarily for existing legacy plugins. + +Both formats are supported. Adding `$schema` changes how {% data variables.product.prodname_copilot_short %} interprets the manifest and discovers components. Plugins without `$schema` continue to load as legacy plugins. + ## How plugins are structured -A plugin is a directory with a specific structure. At minimum, it contains a `plugin.json` manifest file at the root of the directory. The manifest gives the plugin a name and points to the components the plugin provides. Alongside the manifest, the directory can contain any combination of agents, skills, hooks, MCP server configurations, and LSP server configurations. +A plugin is a directory with a specific structure and a `plugin.json` manifest file. Agent Plugins 1.0 requires the manifest at the plugin root. Legacy plugins support additional manifest locations. The manifest gives the plugin a name and metadata. Depending on the format, it can also point to components. Alongside the manifest, the directory can contain agents, skills, hooks, MCP server configurations, and LSP server configurations. + +### Agent Plugins 1.0 structure + +Agent Plugins 1.0 stores skills and MCP servers in standard locations so compatible clients can discover them. Other components, including agents, hooks, commands, and LSP servers, are client-specific. {% data variables.product.prodname_copilot_short %} reads these components from the `com.github.copilot` directory. Other clients ignore this directory, so the same plugin can combine shared skills and MCP servers with {% data variables.product.prodname_copilot_short %}-specific components. + +An Agent Plugins 1.0 directory can look like this: + +```text +my-plugin/ +├── plugin.json # Required manifest +├── skills/ # Skills (optional) +│ └── deploy/ +│ └── SKILL.md +├── mcp.json # MCP server config (optional) +└── com.github.copilot/ # Copilot components (optional) + ├── agents/ + │ └── helper.agent.md + ├── commands/ + ├── rules/ + ├── hooks/ + │ └── hooks.json + └── lsp.json +``` + +The manifest must include the Agent Plugins 1.0 `$schema`. For supported top-level manifest fields, name requirements, and component locations, see [Agent Plugins 1.0 manifest fields](/copilot/reference/copilot-cli-reference/cli-plugin-reference#agent-plugins-10-manifest-fields). + +### Legacy plugin structure -A typical plugin directory looks like this: +A legacy {% data variables.product.prodname_copilot_short %} plugin directory can look like this: ```text my-plugin/ @@ -86,7 +124,7 @@ How you install a plugin depends on which client you're using: * In {% data variables.copilot.copilot_cloud_agent %}, you install plugins declaratively by adding them to the `enabledPlugins` field of the repository's `.github/copilot/settings.json` file. To install plugins from a marketplace that isn't registered by default, you can also add the marketplace to the `extraKnownMarketplaces` field in the same file. * In the {% data variables.copilot.github_copilot_app %}, click **Customize**, then click **Plugins** to browse marketplaces and install plugins. -Enterprise administrators can define plugin standards that apply to users on the enterprise's {% data variables.product.prodname_copilot_short %} plan, including specifying additional marketplaces and plugins that are automatically installed. See [AUTOTITLE](/copilot/concepts/agents/about-enterprise-plugin-standards). +Enterprise administrators can define plugin standards that apply to users on the enterprise's {% data variables.product.prodname_copilot_short %} plan, including specifying additional marketplaces and plugins that are automatically installed. See [AUTOTITLE](/copilot/concepts/enterprise/plugin-standards). ## How plugin marketplaces work diff --git a/content/copilot/concepts/agents/about-third-party-coding-agents.md b/content/copilot/concepts/agents/about-third-party-coding-agents.md index a54d7c56907e..aee2ce7d7d97 100644 --- a/content/copilot/concepts/agents/about-third-party-coding-agents.md +++ b/content/copilot/concepts/agents/about-third-party-coding-agents.md @@ -79,7 +79,7 @@ Security validation does not require a {% data variables.product.prodname_GHAS % Coding agents consume **{% data variables.product.prodname_actions %} minutes** and **{% data variables.product.prodname_ai_credits_short %}**. Each agent session consumes {% data variables.product.prodname_ai_credits_short %} based on the model used and the number of tokens processed. -Within your included {% data variables.product.prodname_actions %} minutes and {% data variables.product.prodname_ai_credits_short %}, you can use agents without incurring additional costs. See [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +Within your included {% data variables.product.prodname_actions %} minutes and {% data variables.product.prodname_ai_credits_short %}, you can use agents without incurring additional costs. See [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). ## Partner agents diff --git a/content/copilot/concepts/agents/cloud-agent/about-cloud-agent.md b/content/copilot/concepts/agents/cloud-agent/about-cloud-agent.md index cad75460f535..066ec9e4ab7d 100644 --- a/content/copilot/concepts/agents/cloud-agent/about-cloud-agent.md +++ b/content/copilot/concepts/agents/cloud-agent/about-cloud-agent.md @@ -108,7 +108,7 @@ If you are a {% data variables.copilot.copilot_for_business %} or {% data variab Repository owners can choose to opt out some or all repositories from {% data variables.copilot.copilot_cloud_agent %}. -See [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management). +See [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access). ## AI models for {% data variables.copilot.copilot_cloud_agent %} @@ -132,7 +132,7 @@ The more {% data variables.copilot.copilot_cloud_agent %} knows about the code i {% data variables.copilot.copilot_cloud_agent %} uses {% data variables.product.prodname_actions %} minutes and {% data variables.product.prodname_ai_credits_short %}. The {% data variables.product.prodname_ai_credits_short %} consumed depend on the model used and the number of tokens processed during the session. -Within your included {% data variables.product.prodname_actions %} minutes and {% data variables.product.prodname_ai_credits_short %}, you can use {% data variables.copilot.copilot_cloud_agent %} without incurring additional costs. See [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +Within your included {% data variables.product.prodname_actions %} minutes and {% data variables.product.prodname_ai_credits_short %}, you can use {% data variables.copilot.copilot_cloud_agent %} without incurring additional costs. See [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). {% data variables.product.prodname_copilot_short %} code review also consumes {% data variables.product.prodname_actions %} minutes on private repositories. See [AUTOTITLE](/billing/concepts/product-billing/github-actions#copilot-code-review-and-github-actions-minutes). diff --git a/content/copilot/concepts/agents/code-review.md b/content/copilot/concepts/agents/code-review.md index c05aab1dc38c..b903de7175cd 100644 --- a/content/copilot/concepts/agents/code-review.md +++ b/content/copilot/concepts/agents/code-review.md @@ -59,7 +59,7 @@ The second policy has these characteristics: When both policies are enabled, users without a {% data variables.product.prodname_copilot_short %} license can request a review from {% data variables.copilot.copilot_code-review_short %} on their pull requests in the organization's repositories. -In repositories where automatic code review is enabled, {% data variables.product.prodname_copilot_short %} automatically reviews all pull requests. This happens regardless of whether the author has a {% data variables.product.prodname_copilot_short %} license. For more information about how to configure automatic code review, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review). +In repositories where automatic code review is enabled, {% data variables.product.prodname_copilot_short %} automatically reviews all pull requests. This happens regardless of whether the author has a {% data variables.product.prodname_copilot_short %} license. For more information about how to configure automatic code review, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review). {% data variables.copilot.copilot_code-review_short %} for users without a license is not available in IDEs. @@ -96,7 +96,7 @@ A review typically consumes an estimated $0.05 USD to $1 USD worth of {% data va Consumption generally increases with pull request size and repository custom instructions, and the ranges may change as models evolve. These estimates do not include {% data variables.product.prodname_actions %} minutes. -Repository and organization administrators can set the default review effort level for automatic code reviews. For configuration steps, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review#customizing-copilot-code-review-1). +Repository and organization administrators can set the default review effort level for automatic code reviews. For configuration steps, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review#customizing-copilot-code-review-1). ## Code review usage @@ -151,7 +151,7 @@ The triggers for automatic code review depend on the configuration settings. * Review draft pull requests: * Pull requests are automatically reviewed while they are still drafts, before you switch them to "Open". -For full instructions, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review). +For full instructions, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review). > [!NOTE] > Unless {% data variables.product.prodname_copilot_short %} has been configured to review each push to a pull request, it will only review a pull request once. If you make changes to the pull request after it has been automatically reviewed and you want {% data variables.product.prodname_copilot_short %} to re-review it, you can request this manually. Click the {% octicon "sync" aria-label="Re-request review" %} button next to {% data variables.product.prodname_copilot_short %}'s name in the **Reviewers** menu. @@ -263,4 +263,4 @@ For more information, see [AUTOTITLE](/copilot/responsible-use/agents). ## Next steps * [AUTOTITLE](/copilot/how-tos/use-copilot-agents/request-a-code-review/use-code-review) -* [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review) +* [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review) diff --git a/content/copilot/concepts/agents/copilot-cli/about-copilot-cli.md b/content/copilot/concepts/agents/copilot-cli/about-copilot-cli.md index 014ba043ea21..42bf4227d625 100644 --- a/content/copilot/concepts/agents/copilot-cli/about-copilot-cli.md +++ b/content/copilot/concepts/agents/copilot-cli/about-copilot-cli.md @@ -80,7 +80,7 @@ You can start a {% data variables.copilot.copilot_cli_short %} session inside an To start a cloud-backed session, run: ```bash copy -copilot ‑‑cloud +copilot --cloud ``` ## Use cases for {% data variables.copilot.copilot_cli %} @@ -325,7 +325,7 @@ Alternatively, you can run {% data variables.copilot.copilot_cli_short %} in a v * **MCP servers in {% data variables.product.prodname_copilot_short %}**, which controls whether MCP servers can be used at all by {% data variables.product.prodname_copilot_short %}. * **MCP Registry URL**, which controls which MCP registry {% data variables.product.prodname_copilot_short %} will allow MCP servers to be used from. -For more information about these policies, see [AUTOTITLE](/copilot/concepts/mcp-management#mcp-allowlists). +For more information about these policies, see [AUTOTITLE](/copilot/concepts/enterprise/mcp-management#mcp-allowlists). ## Model usage diff --git a/content/copilot/concepts/agents/copilot-cli/chronicle.md b/content/copilot/concepts/agents/copilot-cli/chronicle.md index 53c83885e5f5..ba1f7eee6889 100644 --- a/content/copilot/concepts/agents/copilot-cli/chronicle.md +++ b/content/copilot/concepts/agents/copilot-cli/chronicle.md @@ -86,7 +86,7 @@ If you use {% data variables.copilot.copilot_cli_short %} in {% data variables.j * **At the start of your day**: Run `/chronicle standup last 3 days` to generate a summary of recent work instead of reconstructing it manually. * **Periodically, to level up**: Run `/chronicle tips` every week or two to discover features and workflow improvements you might be missing. * **When {% data variables.product.prodname_copilot_short %} keeps making the same mistake**: Run `/chronicle improve` to identify the pattern and generate custom instructions that make the agent more effective for your project. -* **To understand your token usage**: Run `/chronicle cost tips` to see where tokens are going and get suggestions for reducing costs. +* **To understand your token usage**: Run `/chronicle cost-tips` to see where tokens are going and get suggestions for reducing costs. * **To search for a specific topic**: Run `/chronicle search KEYWORD` to find sessions containing a specific term or topic. Unlike free-form questions, this searches session content directly for keywords rather than interpreting your query semantically. * **To recall past work**: Ask a free-form question like "Have I worked on anything related to the payments API?" and {% data variables.product.prodname_copilot_short %} will search your history. * **To continue previous work**: Use `copilot --continue` or `copilot --resume` to pick up where you left off. diff --git a/content/copilot/concepts/agents/copilot-cli/fleet.md b/content/copilot/concepts/agents/copilot-cli/fleet.md index 1b751d0de58e..ed0f11065ef3 100644 --- a/content/copilot/concepts/agents/copilot-cli/fleet.md +++ b/content/copilot/concepts/agents/copilot-cli/fleet.md @@ -17,7 +17,11 @@ docsTeamMetrics: The `/fleet` slash command in {% data variables.copilot.copilot_cli_short %} is designed to take an implementation plan and break it down into smaller, independent tasks that can be executed in parallel by subagents. This allows for faster completion of complex requests that involve multiple steps. -This article gives an overview of the `/fleet` slash command. For details of how to use it, see [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/speed-up-task-completion). +This article gives a conceptual overview of the `/fleet` slash command. + +You can also start fleet mode directly from the command line by using the `--fleet` option. This is the command-line equivalent of the `/fleet` slash command. + +For information on using the `/fleet` slash command, and the `--fleet` command line option, see [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/speed-up-task-completion). ## How `/fleet` works diff --git a/content/copilot/concepts/agents/copilot-in-jetbrains.md b/content/copilot/concepts/agents/copilot-in-jetbrains.md index d1c482c9f270..44f7ee3fefcc 100644 --- a/content/copilot/concepts/agents/copilot-in-jetbrains.md +++ b/content/copilot/concepts/agents/copilot-in-jetbrains.md @@ -34,14 +34,19 @@ There are three ways to use {% data variables.product.prodname_copilot %} in {% The {% data variables.product.prodname_copilot %} plugin for {% data variables.product.prodname_jetbrains_ides %} is the most comprehensive way to use {% data variables.product.prodname_copilot_short %} and is the recommended choice. -The plugin is transitioning from its local agent harness to {% data variables.copilot.copilot_cli_short %} as the default agent harness, which brings faster feature parity and higher-quality results. For more information, see [{% data variables.copilot.copilot_cli_short %} is becoming the default agent harness in {% data variables.product.prodname_copilot %} for JetBrains](https://devblogs.microsoft.com/java/github-copilot-for-jetbrains-is-moving-to-copilot-cli-as-the-default-agent-harness/). For installation instructions, see [AUTOTITLE](/copilot/how-tos/set-up/install-copilot-extension). +The plugin is transitioning from its local agent harness to {% data variables.copilot.copilot_agent_short %} as the default agent harness, which brings faster feature parity and higher-quality results. For installation instructions, see [AUTOTITLE](/copilot/how-tos/set-up/install-copilot-extension). + +The {% data variables.product.prodname_copilot %} plugin provides the following capabilities. -* **Code completion and next edit suggestions**: {% data variables.product.prodname_copilot_short %} suggests completions as you type and proactively predicts your next intended edit. -* **Multiple agent harnesses**: The plugin ships its own agent experience and partners with other agent providers, giving you multiple interaction modes. * **Full model and feature support**: All {% data variables.copilot.copilot_chat_short %} models, code completion modes, and bring-your-own-key features are available as they are released. +* **Code completion and next edit suggestions**: {% data variables.product.prodname_copilot_short %} suggests completions as you type and proactively predicts your next intended edit. +* **Commit message generation**: {% data variables.product.prodname_copilot_short %} inspects your staged changes and generates a clear, conventional commit message. * **Inline chat**: Explain, refactor, document, or generate code directly in the editor gutter, without switching to a separate panel. * **Code review**: {% data variables.product.prodname_copilot_short %} analyzes your changes and surfaces actionable feedback, flagging potential bugs, style violations, and logic issues. -* **Commit message generation**: {% data variables.product.prodname_copilot_short %} inspects your staged changes and generates a clear, conventional commit message. +* **Multiple agent harnesses**: The plugin ships its own agent experience and partners with other agent providers, giving you multiple interaction modes. +* **Sandbox support** ({% data variables.release-phases.public_preview %}): Isolated execution environments for {% data variables.product.prodname_copilot_short %} to safely interact with code, tools, filesystem, and network resources. +* **OpenTelemetry**: Analyze agent sessions and understand agent usage across an enterprise. +* **Enterprise managed settings**: Apply consistent controls for everyone on your enterprise’s {% data variables.product.prodname_copilot_short %} plan, including plugins and MCP management, OpenTelemetry settings, and permission control. ## {% data variables.product.prodname_copilot %} in JetBrains AI Assistant diff --git a/content/copilot/concepts/agents/hooks.md b/content/copilot/concepts/agents/hooks.md index 9597e031f628..672e2d5a4d8e 100644 --- a/content/copilot/concepts/agents/hooks.md +++ b/content/copilot/concepts/agents/hooks.md @@ -62,7 +62,7 @@ You configure hooks using a special JSON format. The JSON must contain a `versio "env": { "KEY": "value" }, "timeoutSec": 30 } - ], + ] } } ``` diff --git a/content/copilot/concepts/copilot-usage-metrics/copilot-metrics.md b/content/copilot/concepts/billing-and-usage/copilot-usage-metrics/copilot-metrics.md similarity index 99% rename from content/copilot/concepts/copilot-usage-metrics/copilot-metrics.md rename to content/copilot/concepts/billing-and-usage/copilot-usage-metrics/copilot-metrics.md index 91c0b428dfe1..884c6d64b24f 100644 --- a/content/copilot/concepts/copilot-usage-metrics/copilot-metrics.md +++ b/content/copilot/concepts/billing-and-usage/copilot-usage-metrics/copilot-metrics.md @@ -14,6 +14,7 @@ redirect_from: - /early-access/copilot-metrics/dashboards/about-the-copilot-metrics-dashboard - /early-access/copilot-metrics/apis/rest-api-endpoints-for-copilot-enterprise-and-user-usage-metrics - /copilot/concepts/copilot-metrics + - /copilot/concepts/copilot-usage-metrics/copilot-metrics category: - Copilot usage metrics - Track Copilot usage diff --git a/content/copilot/concepts/copilot-usage-metrics/index.md b/content/copilot/concepts/billing-and-usage/copilot-usage-metrics/index.md similarity index 91% rename from content/copilot/concepts/copilot-usage-metrics/index.md rename to content/copilot/concepts/billing-and-usage/copilot-usage-metrics/index.md index 10594e9f30a2..c240e2c203b0 100644 --- a/content/copilot/concepts/copilot-usage-metrics/index.md +++ b/content/copilot/concepts/billing-and-usage/copilot-usage-metrics/index.md @@ -8,7 +8,7 @@ heroImage: /assets/images/banner-images/hero-4 layout: bespoke-landing sidebarLink: text: All articles - href: /copilot/concepts/copilot-usage-metrics + href: /copilot/concepts/billing-and-usage/copilot-usage-metrics children: - /copilot-metrics - /content/copilot/how-tos/administer-copilot/view-usage-and-adoption @@ -29,5 +29,6 @@ includedCategories: - View metrics - Understand available data contentType: concepts +redirect_from: + - /copilot/concepts/copilot-usage-metrics --- - diff --git a/content/copilot/concepts/billing/index.md b/content/copilot/concepts/billing-and-usage/index.md similarity index 50% rename from content/copilot/concepts/billing/index.md rename to content/copilot/concepts/billing-and-usage/index.md index 5d4eb9cdad42..68b4c3e094b8 100644 --- a/content/copilot/concepts/billing/index.md +++ b/content/copilot/concepts/billing-and-usage/index.md @@ -1,17 +1,17 @@ --- -title: GitHub Copilot billing -shortTitle: Billing -intro: Understand billing and usage for {% data variables.product.prodname_copilot %}. +title: GitHub Copilot billing and usage +shortTitle: Billing and usage +intro: 'Understand billing and usage for {% data variables.product.prodname_copilot %}, whether you use it individually or manage it for an organization or enterprise.' versions: feature: copilot children: - - /usage-based-billing-for-individuals - /organizations-and-enterprises - - /budgets-for-usage-based-billing + - /individuals + - /copilot-usage-metrics redirect_from: - /managing-copilot/managing-copilot-as-an-individual-subscriber/billing-and-payments - /copilot/managing-copilot/understanding-and-managing-copilot-usage - /copilot/concepts/copilot-billing + - /copilot/concepts/billing contentType: concepts --- - diff --git a/content/copilot/concepts/billing/usage-based-billing-for-individuals.md b/content/copilot/concepts/billing-and-usage/individuals/billing.md similarity index 97% rename from content/copilot/concepts/billing/usage-based-billing-for-individuals.md rename to content/copilot/concepts/billing-and-usage/individuals/billing.md index 2a1f6446f654..20fc9ff3b8c1 100644 --- a/content/copilot/concepts/billing/usage-based-billing-for-individuals.md +++ b/content/copilot/concepts/billing-and-usage/individuals/billing.md @@ -1,6 +1,6 @@ --- title: Usage-based billing for individuals -shortTitle: Billing for individuals +shortTitle: Billing intro: 'Your {% data variables.product.prodname_copilot_short %} plan includes a monthly allowance of {% data variables.product.prodname_ai_credits %}. If you exhaust your {% data variables.product.prodname_ai_credits_short %}, you can pay extra to keep working.' versions: feature: copilot @@ -16,6 +16,7 @@ redirect_from: - /copilot/concepts/copilot-billing/billing-for-individuals - /copilot/concepts/billing/billing-for-individuals - /copilot/how-tos/manage-and-track-spending/prepare-for-your-move-to-usage-based-billing + - /copilot/concepts/billing/usage-based-billing-for-individuals --- {% data variables.product.prodname_copilot_short %} usage is measured in {% data variables.product.prodname_ai_credits_short %}. All {% data variables.product.prodname_copilot_short %} plans include a monthly allowance of {% data variables.product.prodname_ai_credits_short %}. If you use up all of the credits included in your plan, you can purchase more and keep working. @@ -87,6 +88,9 @@ For guidance on how to optimize your usage and reduce spend, including how to se ## What happens if I exceed my included {% data variables.product.prodname_ai_credits_short %}? +> [!NOTE] +> This section applies to users who are on a {% data variables.copilot.copilot_individuals_short %} plan. {% data reusables.copilot.request-ai-credit-allocation-increase %} + When your {% data variables.product.prodname_ai_credits_short %} are exhausted, you can: * **Upgrade your plan.** As you approach your usage limits, {% data variables.product.prodname_copilot_short %} prompts you to upgrade to the next tier. The upgrade cost is only the price difference between your current plan and the new plan, _not_ the full price of the new plan. Your usage from earlier in the billing cycle is counted within the new plan's larger allowance, so the additional credits are available to you immediately. You won't be charged for both plans for the same period. @@ -110,8 +114,6 @@ Your billing date will depend on whether or not you are already being billed by * **If you are not already being billed by {% data variables.product.prodname_dotcom %}**, in most cases your billing cycle will start on the day you sign up for {% data variables.product.prodname_copilot_short %}. For example, if you sign up on 3 September, with monthly billing, your initial billing cycle will run from 3 September until and including 2 October, and then on the same days of subsequent months. * **If you already have a billing cycle**, billing for {% data variables.product.prodname_copilot_short %} will be included in your next bill. You will be charged on a pro rata basis for that initial period. - - ## Update your IDE, client, and extension For the best experience with usage-based billing, update your IDE, client, and {% data variables.product.prodname_copilot_short %} extension to at least the versions listed below. @@ -132,8 +134,6 @@ For the best experience with usage-based billing, update your IDE, client, and { We recommend keeping your IDE, client, and {% data variables.product.prodname_copilot_short %} extensions on the latest available stable version. For information on configuring automatic updates, see [AUTOTITLE](/copilot/how-tos/configure-personal-settings/configure-in-ide). To update {% data variables.copilot.copilot_cli_short %}, see [AUTOTITLE](/copilot/how-tos/copilot-cli/set-up-copilot-cli/install-copilot-cli). - - ## Further reading * [AUTOTITLE](/copilot/get-started/plans) diff --git a/content/copilot/concepts/billing-and-usage/individuals/index.md b/content/copilot/concepts/billing-and-usage/individuals/index.md new file mode 100644 index 000000000000..01a0e21b3a82 --- /dev/null +++ b/content/copilot/concepts/billing-and-usage/individuals/index.md @@ -0,0 +1,11 @@ +--- +title: Billing and usage for individuals +shortTitle: Individuals +intro: 'Understand billing and usage limits for individual {% data variables.product.prodname_copilot %} plans.' +versions: + feature: copilot +children: + - /billing + - /usage-limits +contentType: concepts +--- diff --git a/content/copilot/concepts/usage-limits.md b/content/copilot/concepts/billing-and-usage/individuals/usage-limits.md similarity index 93% rename from content/copilot/concepts/usage-limits.md rename to content/copilot/concepts/billing-and-usage/individuals/usage-limits.md index 9e488f6c1126..0e06c242b4ad 100644 --- a/content/copilot/concepts/usage-limits.md +++ b/content/copilot/concepts/billing-and-usage/individuals/usage-limits.md @@ -9,8 +9,9 @@ redirect_from: - /copilot/troubleshooting-github-copilot/rate-limits-for-github-copilot - /copilot/how-tos/troubleshoot/rate-limits-for-github-copilot - /copilot/concepts/rate-limits + - /copilot/concepts/usage-limits contentType: concepts -category: +category: - Learn about Copilot --- @@ -29,7 +30,7 @@ Rate limiting is a mechanism used to control the number of requests a user or ap Your {% data variables.product.prodname_copilot_short %} plan includes an allowance of {% data variables.product.prodname_ai_credits_short %}. If you exhaust these included credits, you can continue working by either upgrading your plan or setting a budget for **Additional usage** to access more {% data variables.product.prodname_ai_credits_short %}. If you exceed the allowed additional usage, you can pay for the additional usage you've already consumed to unlock more and continue. -For more information, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-individuals#what-happens-if-i-exceed-my-included-ai-credits). +For more information, see [AUTOTITLE](/copilot/concepts/billing-and-usage/individuals/billing#what-happens-if-i-exceed-my-included-ai-credits). ## What to do if you hit a limit diff --git a/content/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing.md b/content/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing.md similarity index 89% rename from content/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing.md rename to content/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing.md index 85e717abbc8e..e951803975fc 100644 --- a/content/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing.md +++ b/content/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing.md @@ -1,6 +1,6 @@ --- title: Usage-based billing for organizations and enterprises -shortTitle: Usage-based billing +shortTitle: Billing intro: 'Under usage-based billing, {% data variables.product.prodname_copilot_short %} usage in organizations and enterprises is measured in {% data variables.product.prodname_ai_credits_short %}.' permissions: Enterprise and organization owners and billing managers versions: @@ -9,6 +9,7 @@ product: '{% data variables.copilot.copilot_enterprise_short %} or {% data varia redirect_from: - /copilot/how-tos/manage-and-track-spending/prepare-for-usage-based-billing - /copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises + - /copilot/concepts/billing/organizations-and-enterprises/usage-based-billing contentType: concepts category: - Manage Copilot for a team @@ -43,21 +44,6 @@ Adding licenses mid-cycle increases the pool immediately. Removing licenses mid- Included {% data variables.product.prodname_ai_credits_short %} do not carry over between months. Unused credits are forfeited, and the pool resets to the full monthly amount at 00:00:00 UTC on the first day of each calendar month. This reset date is fixed and does not change based on when licenses are added, removed, or billed. See [AUTOTITLE](/billing/concepts/billing-cycles#billing-cycles-for-metered-products). - - -### Promotional amounts for existing customers - -Existing {% data variables.copilot.copilot_business_short %} and {% data variables.copilot.copilot_enterprise_short %} customers receive a higher amount of included {% data variables.product.prodname_ai_credits_short %} for the first three months of usage-based billing (June 1 – September 1, 2026): - -| Plan | Total {% data variables.product.prodname_ai_credits_short %} per user per month | -| --- | --- | -| {% data variables.copilot.copilot_business_short %} | {% data variables.copilot.ai_credits_per_user_business_promo %} | -| {% data variables.copilot.copilot_enterprise_short %} | {% data variables.copilot.ai_credits_per_user_enterprise_promo %} | - -After the promotional period, included usage returns to the standard amounts above. - - - ## What happens if I exceed my included {% data variables.product.prodname_ai_credits_short %}? When your pooled {% data variables.product.prodname_ai_credits_short %} are exhausted, what happens next depends on how you have configured policies for additional usage. @@ -68,7 +54,7 @@ When your pooled {% data variables.product.prodname_ai_credits_short %} are exha > [!NOTE] > Additional usage is **enabled by default** for organizations and enterprises. If you want to prevent any spending beyond your included {% data variables.product.prodname_ai_credits_short %}, an administrator must explicitly disable the **{% data variables.product.prodname_ai_credits_short %} paid usage** policy in your enterprise's or organization's AI Controls settings. -If you have set a user-level budget and a user exhausts it, that user's access to {% data variables.product.prodname_copilot_short %} is halted, regardless of whether the organization's pool still has capacity. A user can also be blocked by an enterprise spending limit before they reach their individual user-level budget, if the spending limit runs out first. There is no automatic fallback to lower-cost models when a budget is exhausted. For more information about how these controls interact, see [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing). +If you have set a user-level budget and a user exhausts it, that user's access to {% data variables.product.prodname_copilot_short %} is halted, regardless of whether the organization's pool still has capacity. A user can also be blocked by an enterprise spending limit before they reach their individual user-level budget, if the spending limit runs out first. There is no automatic fallback to lower-cost models when a budget is exhausted. For more information about how these controls interact, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets). Additional usage budgets are set in US dollars, and usage is shown in {% data variables.product.prodname_ai_credits_short %}. {% data variables.product.prodname_ai_credits_short %} draw down the budget at a fixed rate: 1 {% data variables.product.prodname_ai_credit_singular %} = {% data variables.product.prodname_ai_credits_value %}, so a $10 USD budget covers 1,000 AI credits. @@ -81,9 +67,7 @@ Budget controls let you govern how individual users draw from the shared pool an * **Enterprise spending limits** cap total metered charges across your entire enterprise after the pool is exhausted. * **Organization-level budgets** cap metered charges for users whose {% data variables.product.prodname_copilot_short %} seats are billed to the organization, after the pool is exhausted. -For a full explanation of how these controls work together and when usage gets blocked, see [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing). - - +For a full explanation of how these controls work together and when usage gets blocked, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets). ## Update your IDE, client, and extension @@ -105,8 +89,6 @@ For the best experience with usage-based billing, update your IDE, client, and { We recommend keeping your IDE, client, and {% data variables.product.prodname_copilot_short %} extensions on the latest available stable version. For information on configuring automatic updates, see [AUTOTITLE](/copilot/how-tos/configure-personal-settings/configure-in-ide). To update {% data variables.copilot.copilot_cli_short %}, see [AUTOTITLE](/copilot/how-tos/copilot-cli/set-up-copilot-cli/install-copilot-cli). - - ## Next steps * To set up budget controls for your enterprise, see [AUTOTITLE](/copilot/tutorials/budgets/getting-started-with-budget-controls). diff --git a/content/copilot/concepts/billing/budgets-for-usage-based-billing.md b/content/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets.md similarity index 99% rename from content/copilot/concepts/billing/budgets-for-usage-based-billing.md rename to content/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets.md index 5a36d0d304cc..d368ccf89214 100644 --- a/content/copilot/concepts/billing/budgets-for-usage-based-billing.md +++ b/content/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets.md @@ -7,6 +7,8 @@ versions: permissions: 'Enterprise owners and billing managers can set all budget controls. Organization owners can set organization-level budgets.' product: '{% data variables.copilot.copilot_enterprise_short %} or {% data variables.copilot.copilot_business_short %}' contentType: concepts +redirect_from: + - /copilot/concepts/billing/budgets-for-usage-based-billing category: - Manage Copilot for a team --- @@ -163,6 +165,7 @@ A blocked user remains blocked until one of the following happens: * The next billing cycle begins and monthly consumption resets. * An administrator increases the relevant budget. +* The user requests additional budget and an administrator approves the request. ## Next steps diff --git a/content/copilot/concepts/billing-and-usage/organizations-and-enterprises/index.md b/content/copilot/concepts/billing-and-usage/organizations-and-enterprises/index.md new file mode 100644 index 000000000000..44ff47e02270 --- /dev/null +++ b/content/copilot/concepts/billing-and-usage/organizations-and-enterprises/index.md @@ -0,0 +1,12 @@ +--- +title: Billing and usage for organizations and enterprises +shortTitle: Organizations and enterprises +intro: 'Understand billing, budgets, and usage metrics for {% data variables.product.prodname_copilot %} in organizations and enterprises.' +versions: + feature: copilot +children: + - /billing + - /seats-and-billing-cycles + - /budgets +contentType: concepts +--- diff --git a/content/copilot/concepts/billing/organizations-and-enterprises/fundamentals.md b/content/copilot/concepts/billing-and-usage/organizations-and-enterprises/seats-and-billing-cycles.md similarity index 84% rename from content/copilot/concepts/billing/organizations-and-enterprises/fundamentals.md rename to content/copilot/concepts/billing-and-usage/organizations-and-enterprises/seats-and-billing-cycles.md index 3032f395c216..ac16e38af76c 100644 --- a/content/copilot/concepts/billing/organizations-and-enterprises/fundamentals.md +++ b/content/copilot/concepts/billing-and-usage/organizations-and-enterprises/seats-and-billing-cycles.md @@ -1,8 +1,8 @@ --- -title: About billing for GitHub Copilot in organizations and enterprises -shortTitle: Fundamentals -intro: Learn about pricing and billing cycles for {% data variables.product.prodname_copilot_short %}. -product: Organizations on a {% data variables.product.prodname_free_team %} or {% data variables.product.prodname_team %} plan, or organizations and enterprises on {% data variables.product.prodname_ghe_cloud %} +title: GitHub Copilot seats and billing cycles for organizations and enterprises +shortTitle: Seats and billing cycles +intro: 'Learn about seats and billing cycles for {% data variables.product.prodname_copilot_short %}.' +product: 'Organizations on a {% data variables.product.prodname_free_team %} or {% data variables.product.prodname_team %} plan, or organizations and enterprises on {% data variables.product.prodname_ghe_cloud %}' versions: feature: copilot redirect_from: @@ -17,6 +17,7 @@ redirect_from: - /copilot/concepts/billing/billing-for-enterprises - /copilot/concepts/billing/billing-for-organizations - /copilot/concepts/billing/organizations-and-enterprises + - /copilot/concepts/billing/organizations-and-enterprises/fundamentals contentType: concepts category: - Manage Copilot for a team @@ -29,13 +30,6 @@ category: * **{% data variables.copilot.copilot_business_short %}** at {% data variables.copilot.cfb_price_per_month %} per user per month, includes {% data variables.copilot.ai_credits_per_user_business %} {% data variables.product.prodname_ai_credits_short %} per user, and access to a broad model catalog. * **{% data variables.copilot.copilot_enterprise_short %}** at {% data variables.copilot.ce_price_per_month %} per user per month, includes {% data variables.copilot.ai_credits_per_user_enterprise %} {% data variables.product.prodname_ai_credits_short %} per user ({% data variables.product.prodname_ghe_cloud %} only), and priority access to new models and features. - - -> [!NOTE] -> Existing customers receive higher included {% data variables.product.prodname_ai_credits_short %} during the promotional period (June–August 2026). See [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing#promotional-amounts-for-existing-customers). - - - With {% data variables.product.prodname_ghe_cloud %}: * An enterprise owner chooses the plan for each organization in the enterprise. For guidance on choosing a plan, see [AUTOTITLE](/copilot/tutorials/roll-out-at-scale/assign-licenses/choose-enterprise-plan). @@ -46,7 +40,7 @@ With {% data variables.product.prodname_ghe_cloud %}: {% data variables.product.prodname_copilot_short %} usage is measured in {% data variables.product.prodname_ai_credits_short %} under usage-based billing. Each license contributes {% data variables.product.prodname_ai_credits_short %} to a shared enterprise pool, and usage beyond the pool is charged at {% data variables.product.prodname_ai_credits_value %} per {% data variables.product.prodname_ai_credit_singular %}. Code completions and {% data variables.copilot.next_edit_suggestions %} are not billed in {% data variables.product.prodname_ai_credits_short %} and remain unlimited for all paid plans. -For a full explanation of how {% data variables.product.prodname_ai_credits_short %} work, including pooling, additional usage, and what happens when credits run out, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +For a full explanation of how {% data variables.product.prodname_ai_credits_short %} work, including pooling, additional usage, and what happens when credits run out, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing). ## Seat assignment @@ -68,7 +62,7 @@ For more information, see [AUTOTITLE](/copilot/reference/copilot-billing/license ## Managing costs -You can control {% data variables.product.prodname_ai_credits_short %} spend using budget controls at the user, cost center, and enterprise level. For an overview of how budget controls work, see [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing). For guidance on choosing a configuration, see [AUTOTITLE](/copilot/tutorials/budgets/optimizing-your-budget-configuration). +You can control {% data variables.product.prodname_ai_credits_short %} spend using budget controls at the user, cost center, and enterprise level. For an overview of how budget controls work, see [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/budgets). For guidance on choosing a configuration, see [AUTOTITLE](/copilot/tutorials/budgets/optimizing-your-budget-configuration). ## Reference diff --git a/content/copilot/concepts/billing/organizations-and-enterprises/index.md b/content/copilot/concepts/billing/organizations-and-enterprises/index.md deleted file mode 100644 index e472d4331fcf..000000000000 --- a/content/copilot/concepts/billing/organizations-and-enterprises/index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: GitHub Copilot billing for organizations and enterprises -shortTitle: Organizations and enterprises -intro: Understand billing and usage for {% data variables.product.prodname_copilot %}. -versions: - feature: copilot -children: - - /fundamentals - - /usage-based-billing -contentType: concepts ---- \ No newline at end of file diff --git a/content/copilot/concepts/context/content-exclusion.md b/content/copilot/concepts/context/content-exclusion.md index 8f5af0b71a67..d253a53981d8 100644 --- a/content/copilot/concepts/context/content-exclusion.md +++ b/content/copilot/concepts/context/content-exclusion.md @@ -35,7 +35,7 @@ The {% data variables.copilot.copilot_business_short %} and {% data variables.co | Tool | Inline suggestions support | Chat and agent support | |-------------------------------------------------|:---------------------------------------------:|:----------------------------------------------:| | {% data variables.product.prodname_vs %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | -| {% data variables.product.prodname_vscode %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | +| {% data variables.product.prodname_vscode %} | {% octicon "check" aria-label="Supported" %} | Chat: {% octicon "check" aria-label="Supported" %}
Edit: {% octicon "x" aria-label="Not supported" %}
Agent: {% octicon "x" aria-label="Not supported" %} | | JetBrains IDEs | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | | Vim/Neovim | {% octicon "check" aria-label="Supported" %} | Not applicable | | Xcode | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | diff --git a/content/copilot/concepts/context/spaces.md b/content/copilot/concepts/context/spaces.md index b9a3cfb80957..154f403d2701 100644 --- a/content/copilot/concepts/context/spaces.md +++ b/content/copilot/concepts/context/spaces.md @@ -65,7 +65,7 @@ You can use {% data variables.copilot.copilot_spaces %} in {% data variables.cop Questions you submit in a space count as {% data variables.copilot.copilot_chat_short %} requests and consume {% data variables.product.prodname_ai_credits_short %} based on the model used and the number of tokens processed. * If you're a {% data variables.copilot.copilot_free_short %} user, this usage counts toward your monthly chat limit. -* For {% data variables.copilot.copilot_business_short %} and {% data variables.copilot.copilot_enterprise_short %}, usage draws from your enterprise's shared {% data variables.product.prodname_ai_credits_short %} pool. For details on how consumption is calculated, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +* For {% data variables.copilot.copilot_business_short %} and {% data variables.copilot.copilot_enterprise_short %}, usage draws from your enterprise's shared {% data variables.product.prodname_ai_credits_short %} pool. For details on how consumption is calculated, see [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). ## Next steps diff --git a/content/copilot/concepts/enterprise/agent-management.md b/content/copilot/concepts/enterprise/agent-management.md index d6d36a488a8a..56168e98d551 100644 --- a/content/copilot/concepts/enterprise/agent-management.md +++ b/content/copilot/concepts/enterprise/agent-management.md @@ -9,6 +9,8 @@ category: - Learn about Copilot redirect_from: - /copilot/concepts/agents/enterprise-management +docsTeamMetrics: + - ai-governance --- ## Overview @@ -74,13 +76,13 @@ To help you meet security and compliance requirements, you can choose to: Private MCP registries apply to {% data variables.copilot.copilot_cli_short %} and IDEs, but not to cloud agents that run on {% data variables.product.github %}. For {% data variables.copilot.copilot_cloud_agent %}, MCP servers can be configured at the repository level or in custom agent profiles defined at the enterprise level. -For more information, see [AUTOTITLE](/copilot/concepts/mcp-management). +For more information, see [AUTOTITLE](/copilot/concepts/enterprise/mcp-management). ## Enterprise-managed settings The `{% data variables.copilot.managed_setting_file %}` file allows enterprises to control how users can interact with agents across {% data variables.product.prodname_copilot_short %} clients. For example: which plugins can people install, and can people use "allow all" commands that let agents run commands without asking for permission? This file can be hosted on {% data variables.product.company_short %} or installed directly on users' machines. -For more information, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-managed-settings). +For more information, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/get-started). ## Agent mode in the IDE diff --git a/content/copilot/concepts/enterprise/default-model-availability.md b/content/copilot/concepts/enterprise/default-model-availability.md index e328dd617628..f8e8b32aa093 100644 --- a/content/copilot/concepts/enterprise/default-model-availability.md +++ b/content/copilot/concepts/enterprise/default-model-availability.md @@ -31,4 +31,4 @@ For instructions on managing model policies, see [AUTOTITLE](/copilot/how-tos/ad ## How do I prepare for new models? -We recommend keeping up with new model releases so you can choose your enablement settings for each one. New models are announced on {% data variables.product.github %}'s changelog. For more information, see [AUTOTITLE](/copilot/concepts/learning-about-new-features-and-models#learning-about-new-copilot-models). +We recommend keeping up with new model releases so you can choose your enablement settings for each one. New models are announced on {% data variables.product.github %}'s changelog. For more information, see [AUTOTITLE](/copilot/concepts/enterprise/learning-about-new-features-and-models#learning-about-new-copilot-models). diff --git a/content/copilot/concepts/enterprise/learning-about-new-features-and-models.md b/content/copilot/concepts/enterprise/learning-about-new-features-and-models.md index 9b53069fbda4..74245e782348 100644 --- a/content/copilot/concepts/enterprise/learning-about-new-features-and-models.md +++ b/content/copilot/concepts/enterprise/learning-about-new-features-and-models.md @@ -10,6 +10,8 @@ category: redirect_from: - /copilot/concepts/preparing-for-new-features-and-models - /copilot/concepts/learning-about-new-features-and-models +docsTeamMetrics: + - ai-governance --- {% data variables.product.prodname_copilot %} is evolving rapidly, with new features and models released regularly. If you're an enterprise administrator, staying informed helps you make confident decisions about which capabilities to enable, when to adopt them, and how to manage risk across your organizations. @@ -24,10 +26,10 @@ You can use {% data variables.product.prodname_docs %} and {% data variables.pro To learn about new {% data variables.product.prodname_copilot_short %} features, we recommend monitoring these two locations: -* **Features overview**: For a complete list of {% data variables.product.prodname_copilot_short %} capabilities, see [AUTOTITLE](/copilot/get-started/features). -* **Changelog**: Follow the [{% data variables.product.prodname_copilot_short %} changelog](https://github.blog/changelog/label/copilot/) for announcements about new and updated features. +* **Copilot blog updates**: For broader news and updates about {% data variables.product.prodname_copilot_short %}, see the [{% data variables.product.prodname_copilot_short %} blog](https://github.blog/ai-and-ml/github-copilot/). +* **Changelog**: For announcements about newly released and updated features, follow the [{% data variables.product.prodname_copilot_short %} changelog](https://github.blog/changelog/?label=copilot). -{% data variables.product.prodname_copilot_short %} features generally fall into three categories: +{% data variables.product.prodname_copilot_short %}'s capabilities and supporting features fall into four categories: {% rowheaders %} @@ -35,14 +37,15 @@ To learn about new {% data variables.product.prodname_copilot_short %} features, | --- | --- | --- | --- | | Assistive | Respond to prompts and provide suggestions, but require human review before changes are made. | Inline suggestions, {% data variables.copilot.copilot_chat_short %}, {% data variables.copilot.copilot_for_prs %}. | All changes require user approval. | | Agentic | Autonomously research, plan, and make changes on behalf of users. | {% data variables.copilot.copilot_cloud_agent %}, third-party agents. | Can work autonomously, but with built-in protections. | -| Third-party | External coding agents that work alongside {% data variables.copilot.copilot_cloud_agent %} to complete tasks asynchronously. | {% data variables.product.prodname_anthropic_claude %}, {% data variables.product.prodname_openai_codex %}. | Same as agentic. Review provider documentation and enable via policies. See [AUTOTITLE](/copilot/concepts/agents/about-third-party-coding-agents). | +| Customizations | Add context, instructions, tools, skills, and agents to tailor how {% data variables.product.prodname_copilot_short %} responds and works. | Custom instructions, prompt files, {% data variables.copilot.copilot_spaces %}, MCP servers, agent skills, custom agents. | Support and configuration vary by feature and surface. Organization and enterprise policies can control access to some customizations. | +| External AI agents, models, and tools | External coding agents, models, and tools, including MCP servers from other providers, that work alongside {% data variables.copilot.copilot_cloud_agent %} to complete tasks asynchronously. | {% data variables.product.prodname_anthropic_claude %}, {% data variables.product.prodname_openai_codex %}. | Same as agentic. Review provider documentation and enable via policies. See [AUTOTITLE](/copilot/concepts/agents/about-third-party-coding-agents). | {% endrowheaders %} Each feature has its own enablement requirements and policy settings. When a new feature is released: 1. Review the feature documentation to understand its capabilities. -1. Check the policy settings available at the enterprise and organization level. See [AUTOTITLE](/copilot/concepts/policies). +1. Check the policy settings available at the enterprise and organization level. See [AUTOTITLE](/copilot/concepts/enterprise/policies). 1. Consider running a pilot with a subset of users before broader rollout. ### Learning about new {% data variables.product.prodname_copilot_short %} models diff --git a/content/copilot/concepts/enterprise/mcp-management.md b/content/copilot/concepts/enterprise/mcp-management.md index 8663d6d2e363..b5cab39c726c 100644 --- a/content/copilot/concepts/enterprise/mcp-management.md +++ b/content/copilot/concepts/enterprise/mcp-management.md @@ -31,7 +31,7 @@ Alternatively, you can host your own MCP registry and restrict access to servers | Release phase | Generally available | {% data variables.release-phases.public_preview_caps %}, not prioritized for development | | Ease of setup | You can host a configuration file on {% data variables.product.github %} that applies automatically to clients. | You must host your own registry that matches the MCP specification and serves HTTPS requests. | | Enforcement level | Enterprise-wide settings, overridable for enterprise teams | Enterprise-wide or for individual organizations | -| Supported clients | Clients supported by the `{% data variables.copilot.managed_setting_file %}` file, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-managed-settings). Planned to expand in the near future. | See [AUTOTITLE](/copilot/reference/enterprise-administrators/mcp-private-registry-enforcement). | +| Supported clients | Clients supported by the `{% data variables.copilot.managed_setting_file %}` file, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/get-started). Planned to expand in the near future. | See [AUTOTITLE](/copilot/reference/enterprise-administrators/mcp-private-registry-enforcement). | | Server matching method | Secure matching based on name, URL, or `stdio` commands | Less secure matching, based on name or ID only. Users can bypass the restriction by editing configuration files. | {% endrowheaders %} diff --git a/content/copilot/concepts/enterprise/opentelemetry.md b/content/copilot/concepts/enterprise/opentelemetry.md index de175fa4468d..c6e625519d0b 100644 --- a/content/copilot/concepts/enterprise/opentelemetry.md +++ b/content/copilot/concepts/enterprise/opentelemetry.md @@ -37,7 +37,7 @@ To collect OTel data from users' {% data variables.product.prodname_copilot_shor Enterprises can enforce OTel configuration across supported clients with managed settings. These settings are enforced across users' clients and cannot be overridden. The `telemetry` property includes keys for enabling and configuring OpenTelemetry. -For more information, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-managed-settings) and [AUTOTITLE](/copilot/reference/enterprise-administrators/enterprise-managed-settings). +For more information, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/get-started) and [AUTOTITLE](/copilot/reference/enterprise-administrators/enterprise-managed-settings). ## Client documentation diff --git a/content/copilot/concepts/enterprise/plugin-standards.md b/content/copilot/concepts/enterprise/plugin-standards.md index 9cb0ad2a5285..47a97f26e19a 100644 --- a/content/copilot/concepts/enterprise/plugin-standards.md +++ b/content/copilot/concepts/enterprise/plugin-standards.md @@ -44,4 +44,4 @@ Enterprise-managed plugin standards help administrators address several common c ## Next step -To configure enterprise plugin standards, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-managed-settings). +To configure enterprise plugin standards, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/get-started). diff --git a/content/copilot/concepts/enterprise/policies.md b/content/copilot/concepts/enterprise/policies.md index 94c19a612d98..4918686dbcaf 100644 --- a/content/copilot/concepts/enterprise/policies.md +++ b/content/copilot/concepts/enterprise/policies.md @@ -10,6 +10,8 @@ redirect_from: - /copilot/concepts/policies category: - Manage Copilot for a team +docsTeamMetrics: + - ai-governance --- ## How do policies work? diff --git a/content/copilot/concepts/index.md b/content/copilot/concepts/index.md index 92d63b299c3f..8110be9edcc2 100644 --- a/content/copilot/concepts/index.md +++ b/content/copilot/concepts/index.md @@ -9,13 +9,11 @@ children: - /chat - /agents - /about-cloud-and-local-sandboxes - - /copilot-usage-metrics - /prompting - /context - /tools - /models - - /usage-limits - - /billing + - /billing-and-usage - /network-settings - /enterprise contentType: concepts diff --git a/content/copilot/concepts/models/auto-model-selection.md b/content/copilot/concepts/models/auto-model-selection.md index 71f8370c66e3..296327d92883 100644 --- a/content/copilot/concepts/models/auto-model-selection.md +++ b/content/copilot/concepts/models/auto-model-selection.md @@ -32,6 +32,23 @@ Benefits of using {% data variables.copilot.copilot_auto_model_selection_short % * Language invariance: Routing decisions depend on what you are trying to do, not what language you're asking in. * Improved cost efficiency due to intelligent task routing. +#### Auto tier options + +When using auto with task optimization, there are three tiers available. Use these tiers to adjust how {% data variables.copilot.copilot_auto_model_selection_short %} preferentially routes models for each prompt. + +| Tier | Priority | Typical use | +| --- | --- | --- | +| **Efficiency** | Cost | Well suited to fast, straightforward tasks. | +| **Balance** | Balances cost, quality and latency | A good fit for everyday work. | +| **Intelligence** | Quality | Built for complex tasks. | + +With tiers, {% data variables.copilot.copilot_auto_model_selection_short %} still considers the prompt for each task. The same models remain available in each tier, but tiered routing changes how preferred models are selected for each task. Examples for each tier: +* **Efficiency**: All prompts are routed to the most cost-efficient and appropriately capable model for the task. +* **Balance**: For each prompt, the model is selected by considering cost, quality, and latency, to provide cost effective and efficient performance appropriate to the complexity of each prompt. +* **Intelligence**: Prompts are evaluated for which model would provide the highest quality response. A simple prompt could still be routed to a smaller model, while a complex prompt is routed to the most capable model for that task. + +Usage is still charged based on the model auto selects, regardless of tier, alongside the 10% discount for users on paid plans. See [Discount for auto model selection](#discount-for-using-auto-model-selection). + ### Auto optimized for model reliability and availability Experience less rate limiting by letting {% data variables.copilot.copilot_auto_model_selection_short %} choose the best available model on your behalf. @@ -63,8 +80,10 @@ When you select **Auto**, {% data variables.copilot.copilot_auto_model_selection {% data variables.copilot.copilot_auto_model_selection_short_cap_a %}, with task optimization, is generally available in these {% data variables.product.prodname_copilot_short %} products: * {% data variables.copilot.copilot_chat_short %}, on the {% data variables.product.github %} website and supported IDEs * {% data variables.copilot.copilot_cli_short %} -* {% data variables.copilot.copilot_cloud_agent %} * {% data variables.copilot.github_copilot_app %} +* {% data variables.copilot.copilot_cloud_agent %} + +> [!NOTE] Auto tiers are only available on {% data variables.product.prodname_vscode_shortname %}, {% data variables.copilot.copilot_cli_short %}, and {% data variables.copilot.github_copilot_app %} . > [!TIP] > You can see which model was used for each {% data variables.product.prodname_copilot_short %} response. diff --git a/content/copilot/concepts/models/index.md b/content/copilot/concepts/models/index.md index 5e55b889958a..a268f6600fbb 100644 --- a/content/copilot/concepts/models/index.md +++ b/content/copilot/concepts/models/index.md @@ -6,9 +6,9 @@ versions: feature: copilot contentType: concepts children: + - /overview + - /auto-model-selection - /bring-your-own-key - /utility-models - - /auto-model-selection - /fallback-and-lts-models --- - diff --git a/content/copilot/concepts/models/overview.md b/content/copilot/concepts/models/overview.md new file mode 100644 index 000000000000..086cc35e315c --- /dev/null +++ b/content/copilot/concepts/models/overview.md @@ -0,0 +1,54 @@ +--- +title: Models in GitHub Copilot +shortTitle: Overview +intro: 'Understand the types and availability of AI models in {% data variables.product.prodname_copilot %}.' +versions: + feature: copilot +contentType: concepts +--- + +## About models in {% data variables.product.prodname_copilot_short %} + +{% data variables.product.prodname_copilot %} supports a range of AI models. Different models have different strengths. For example, some prioritize low latency, while others are optimized for complex reasoning or large context windows. For a full list of supported models, see [AUTOTITLE](/copilot/reference/ai-models/supported-models). + +Depending on the surface you're using, your plan, and any policies your organization or enterprise has set, you can often **choose** which model handles your request, or **let {% data variables.copilot.copilot_auto_model_selection_short %} choose** one for you. Model choice affects the speed, cost, and quality of your results, so understanding your options helps you get the most out of every feature. + +In addition, {% data variables.product.prodname_copilot_short %} also has utility models that run automatically in the background, and for {% data variables.copilot.copilot_business_short %} and {% data variables.copilot.copilot_enterprise_short %}, base and long-term support (LTS) models for extended stability. + +## Model choice + +When you're using {% data variables.product.prodname_copilot_short %}, whether that's on {% data variables.product.github %}, {% data variables.copilot.copilot_cli_short %}, the {% data variables.copilot.github_copilot_app %} and supported IDEs, you can select the model that best suits your task. For guidance on which model fits common tasks, such as general-purpose coding, large-scale refactors, or documentation writing, see [AUTOTITLE](/copilot/reference/ai-models/model-comparison). + +### What determines which models are available to you + +The models you see in {% data variables.product.prodname_copilot_short %} depend on several factors: + +* **Your plan.** Some models are available on all plans, while others, such as premium models, require a paid plan. See [AUTOTITLE](/copilot/get-started/plans). +* **The {% data variables.product.prodname_copilot_short %} surface or client you're using.** Not every model is available in every IDE, on {% data variables.product.github %}, in {% data variables.copilot.copilot_cli_short %}, or in the {% data variables.copilot.github_copilot_app %}. See [AUTOTITLE](/copilot/reference/ai-models/supported-models#supported-ai-models-per-client). +* **Administrator policies.** If you're part of an organization or enterprise, administrators can enable or disable specific models, which affects what you and {% data variables.copilot.copilot_auto_model_selection_short %} can use. See [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-access-to-ai-models). +* **Model availability over time.** Providers periodically release new models and retire older ones, so the specific models available to you can change. Check [AUTOTITLE](/copilot/reference/ai-models/supported-models) for the current list. + +## Auto model selection + +Rather than requiring you to track every model's strengths yourself, you can select **Auto** in the model picker. {% data variables.copilot.copilot_auto_model_selection_short_cap_a %} then routes your request to an appropriate supported model based on the complexity of your task and real-time model availability. See [AUTOTITLE](/copilot/concepts/models/auto-model-selection). + +## Bring your own key + +With bring your own key (BYOK), you (or your enterprise) can connect a custom or provider-hosted model to {% data variables.product.prodname_copilot_short %}. Availability depends on the mechanism you use and the client you're working in. See [AUTOTITLE](/copilot/concepts/models/bring-your-own-key). + +## Utility models for background features + +Some {% data variables.product.prodname_copilot_short %} features, such as generating a commit message or a chat session title, run on small utility models that work automatically in the background. Utility models aren't part of the model picker, and you can't select them directly. See [AUTOTITLE](/copilot/concepts/models/utility-models). + +## Base and long-term support models + +{% data variables.copilot.copilot_business_short %} and {% data variables.copilot.copilot_enterprise_short %} accounts have access to two additional model designations: + +* A **base model** is used automatically when no other model is enabled for the account. +* A **long-term support (LTS) model** is supported for a defined extended period of time, currently one year from its designation date. + +See [AUTOTITLE](/copilot/concepts/models/fallback-and-lts-models). + +## Further reading + +* [AUTOTITLE](/copilot/reference/ai-models) diff --git a/content/copilot/concepts/models/utility-models.md b/content/copilot/concepts/models/utility-models.md index 0f48b57db10b..0251c9ce0173 100644 --- a/content/copilot/concepts/models/utility-models.md +++ b/content/copilot/concepts/models/utility-models.md @@ -6,7 +6,7 @@ versions: contentType: concepts --- -Utility models are a small set of models that are automatically enabled for all {% data variables.product.prodname_copilot %} users across every plan. They power background features such as the generation of commit messages or chat session titles, and they apply across {% data variables.product.prodname_copilot_short %} surfaces: in IDEs, on {% data variables.product.github %}, and in {% data variables.copilot.copilot_cli_short %}. +Utility models are a small set of models that are automatically enabled for all {% data variables.product.prodname_copilot %} users across every plan. They power background features such as the generation of commit messages or chat session titles, and they apply across {% data variables.product.prodname_copilot_short %} surfaces: in IDEs, on {% data variables.product.github %}, in {% data variables.copilot.copilot_cli_short %}, and in {% data variables.copilot.github_copilot_app %}. ## How do utility models work? diff --git a/content/copilot/get-started/about-github-copilot.md b/content/copilot/get-started/about-github-copilot.md new file mode 100644 index 000000000000..dd27118d5720 --- /dev/null +++ b/content/copilot/get-started/about-github-copilot.md @@ -0,0 +1,104 @@ +--- +title: About GitHub Copilot +shortTitle: About Copilot +intro: 'Understand how {% data variables.product.prodname_copilot %} helps you ship software faster, how it works, and how to get access.' +versions: + feature: copilot +redirect_from: + - /copilot/copilot-individual + - /copilot/copilot-individual/about-github-copilot-individual + - /copilot/copilot-business/about-github-copilot-business + - /copilot/github-copilot-enterprise/about-github-copilot-enterprise + - /copilot/github-copilot-enterprise/overview + - /copilot/overview-of-github-copilot/about-github-copilot-for-individuals + - /copilot/overview-of-github-copilot/about-github-copilot + - /copilot/overview-of-github-copilot/about-github-copilot-individual + - /copilot/overview-of-github-copilot/about-github-copilot-for-business + - /copilot/overview-of-github-copilot/about-github-copilot-business + - /copilot/github-copilot-enterprise/overview/about-github-copilot-enterprise + - /copilot/configuring-github-copilot/configuring-github-copilot-settings-in-your-organization + - /copilot/managing-copilot-business + - /copilot/managing-copilot-for-business + - /copilot/github-copilot-enterprise + - /copilot/copilot-business + - /copilot/copilot-business/github-copilot-business-feature-set + - /copilot/copilot-individual/github-copilot-individual-feature-set + - /copilot/github-copilot-enterprise/github-copilot-enterprise-feature-set + - /copilot/about-github-copilot/github-copilot-features + - /copilot/get-started/github-copilot-features + - /copilot/get-started/features + - /copilot/about-github-copilot/what-is-github-copilot + - /copilot/get-started/what-is-github-copilot +contentType: get-started +category: + - Learn about Copilot +--- + +{% data variables.product.prodname_copilot %} is an AI assistant that helps you write, understand, and ship software. It suggests code as you type, answers questions about a codebase, reviews your changes, and works on tasks you assign it. + +Because {% data variables.product.prodname_copilot_short %} is built into {% data variables.product.github %}, it works within the development workflow you already use: + +* Your code and its history. +* The issues and pull requests you already use to track work. +* The automations you run in your repository. + +A change can start as an issue, be picked up by an agent, return as a pull request, get reviewed for quality and security, and be merged. + +You and {% data variables.product.prodname_copilot_short %} work on it in the same place, with the same context, instead of moving code into separate tools and back again. + +## How {% data variables.product.prodname_copilot_short %} works + +{% data variables.product.prodname_copilot_short %}'s capabilities and supporting features fall into four categories: + +**Assistive.** {% data variables.product.prodname_copilot_short %} responds while you work, suggesting code, answering questions, or explaining code. You review and apply each suggestion. + +**Agentic.** You describe a goal, and {% data variables.product.prodname_copilot_short %} can work through multiple steps. It researches a repository, proposes a plan, edits files, reviews pull requests, runs tools, and prepares tasks for your review. You remain responsible for reviewing and approving. + +**Customizations.** You customize {% data variables.product.prodname_copilot_short %}'s responses with instructions, reusable prompts, repository context, external tools, agent skills, and custom agents. When {% data variables.product.prodname_copilot_short %} understands your project's structure, conventions, and tooling, it gives you better responses. + +**External AI agents, models, and tools.** Coding agents, models, and tools, including MCP servers from other providers, work alongside {% data variables.product.prodname_copilot_short %}. Third-party coding agents work asynchronously on development tasks and can make changes and open or update pull requests for your review. They are subject to the same security protections, mitigations, and limitations as {% data variables.product.prodname_copilot_short %}. + +## What you can do with {% data variables.product.prodname_copilot_short %} + +{% data variables.product.prodname_copilot_short %} helps you throughout the software development lifecycle. For example: + +* **Understand code** by asking questions about files, repositories, and development concepts. +* **Plan and implement tasks** with an agent that can research a repository, make changes, and prepare a pull request for your review. +* **Customize responses** with instructions, reusable prompts, repository context, tools, and specialized agents. +* **Write code** with inline suggestions and natural-language prompts. +* **Build applications** from natural-language descriptions. +* **Change code** by asking {% data variables.product.prodname_copilot_short %} to edit, refactor, or fix code. +* **Review code** and pull requests, including summaries and suggestions for potential improvements. + +The capabilities available to you depend on your Copilot plan, the client you use, and your organization's policies. + +## Get access + +You can start using {% data variables.product.prodname_copilot_short %} in several ways, depending on your role and needs. + +### Individuals + +* **Try {% data variables.product.prodname_copilot_short %} for free.** Use [{% data variables.copilot.copilot_free_short %}](https://github.com/copilot?ref_product=copilot&ref_plan=free&ref_style=text&ref_type=engagement) to explore core features with no paid plan required. +* **Subscribe to a paid plan.** Upgrade to a paid plan for access to premium features, increased access to models, and a higher monthly allowance of {% data variables.product.prodname_ai_credits_short %}. See [AUTOTITLE](/copilot/how-tos/manage-your-account/get-started-with-a-copilot-plan) for more information. +* **Get free access if you're eligible.** Students, teachers, and open source maintainers may qualify for access to premium features at no cost. See [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-for-students) and [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-for-teachers-and-os-maintainers). + +### Members of an organization + +* **Request access from your organization.** If your organization or enterprise has a {% data variables.product.prodname_copilot %} plan, go to [https://github.com/settings/copilot](https://github.com/settings/copilot) and request access under "Get {% data variables.product.prodname_copilot_short %} from an organization." + +### Organization and enterprise owners + +{% data reusables.copilot.plans.subscribe-for-org %} + +{% data reusables.copilot.plans.subscribe-for-enterprise %} + +## Control for organizations and enterprises + +If you use {% data variables.product.prodname_copilot_short %} through an organization or enterprise, administrators decide how it can be used. They control which members have access, set policies for which features are available, exclude files that {% data variables.product.prodname_copilot_short %} shouldn't see, and review usage data and audit logs to understand how it's being used. + +These settings help administrators manage {% data variables.product.prodname_copilot_short %} across the environments and features available to their organization or enterprise. Some settings and controls depend on the {% data variables.product.prodname_copilot_short %} plan and the client where {% data variables.product.prodname_copilot_short %} is used. See [AUTOTITLE](/copilot/how-tos/administer-copilot). + +## Next steps + +* Start using {% data variables.product.prodname_copilot_short %}. See [AUTOTITLE](/copilot/how-tos/set-up). +* View the {% data variables.product.prodname_copilot_short %} features available to you by navigating to your {% data variables.product.prodname_copilot_short %} settings at [https://github.com/settings/copilot/features](https://github.com/settings/copilot/features?ref_product=copilot&ref_type=engagement&ref_style=text). diff --git a/content/copilot/get-started/enterprise-ai-governance.md b/content/copilot/get-started/enterprise-ai-governance.md index 151c8c0a22e3..e112b6bfd835 100644 --- a/content/copilot/get-started/enterprise-ai-governance.md +++ b/content/copilot/get-started/enterprise-ai-governance.md @@ -22,15 +22,16 @@ journeyTracks: description: 'Use {% data variables.product.github %}''s governance features to stay in control of your codebase and compliance requirements.' guides: - href: '/copilot/tutorials/roll-out-at-scale/govern-at-scale/govern-for-adoption' - - href: '/copilot/concepts/policies' + - href: '/copilot/concepts/enterprise/policies' - href: '/copilot/tutorials/roll-out-at-scale/govern-at-scale/maintain-codebase-standards' - href: '/copilot/how-tos/administer-copilot/manage-for-enterprise/review-audit-logs' + - href: '/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/get-started' - id: 'adopting_agents' title: 'Preparing for agents' description: 'Learn what agents can do for your enterprise, and prepare to roll them out.' guides: - href: '/copilot/tutorials/roll-out-at-scale/enable-developers/integrate-ai-agents' - - href: '/copilot/concepts/agents/enterprise-management' + - href: '/copilot/concepts/enterprise/agent-management' - href: '/copilot/tutorials/cloud-agent/build-guardrails' - href: '/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-enterprise-allowlist' - id: 'enable_agents' @@ -47,6 +48,8 @@ journeyTracks: title: 'Adopting new features' description: 'Expand your capabilities by assessing and rolling out any new feature or model.' guides: - - href: '/copilot/concepts/learning-about-new-features-and-models' + - href: '/copilot/concepts/enterprise/learning-about-new-features-and-models' - href: '/copilot/tutorials/roll-out-at-scale/govern-at-scale/pilot-a-feature-or-model' +docsTeamMetrics: + - ai-governance --- diff --git a/content/copilot/get-started/features.md b/content/copilot/get-started/features.md deleted file mode 100644 index 52ebe70e0aa0..000000000000 --- a/content/copilot/get-started/features.md +++ /dev/null @@ -1,129 +0,0 @@ ---- -title: GitHub Copilot features -intro: '{% data variables.product.prodname_copilot %} offers a suite of features for users and administrators.' -versions: - feature: copilot -shortTitle: Features -redirect_from: - - /copilot/copilot-business/github-copilot-business-feature-set - - /copilot/copilot-individual/github-copilot-individual-feature-set - - /copilot/github-copilot-enterprise/github-copilot-enterprise-feature-set - - /copilot/about-github-copilot/github-copilot-features - - /copilot/get-started/github-copilot-features -contentType: get-started -category: - - Learn about Copilot ---- - -## Assistive features - -These tools are used synchronously, providing advice or suggestions as people work on a task. - -### {% data variables.copilot.copilot_chat_short %} - -A chat interface that lets you ask coding-related questions. {% data variables.copilot.copilot_chat %} is available on the {% data variables.product.github %} website, in {% data variables.product.prodname_mobile %}, in supported IDEs, and in {% data variables.product.prodname_windows_terminal %}. Users can also use skills with {% data variables.copilot.copilot_chat_short %}. See [AUTOTITLE](/copilot/how-tos/copilot-on-github/chat-with-copilot/chat-in-github) and [AUTOTITLE](/copilot/how-tos/chat-with-copilot/chat-in-ide). - -### Inline suggestions - -Autocomplete-style suggestions from {% data variables.product.prodname_copilot_short %} in supported IDEs. See [AUTOTITLE](/copilot/how-tos/get-code-suggestions/get-ide-code-suggestions). - -If you use {% data variables.product.prodname_vscode_shortname %}, Xcode, or Eclipse, you can also use {% data variables.copilot.next_edit_suggestions %}, which will predict the location of the next edit you are likely to make and suggest a completion for it. - -### {% data variables.copilot.copilot_for_prs %} - -AI-generated summaries of the changes that were made in a pull request, which files they impact, and what a reviewer should focus on when they conduct their review. See [AUTOTITLE](/copilot/how-tos/copilot-on-github/copilot-for-github-tasks/create-a-pr-summary). - -### {% data variables.copilot.copilot_desktop_short %} - -Automatically generate commit messages and descriptions with {% data variables.copilot.copilot_desktop_short %} based on the changes you make to your project. - -## Agentic features - -These features can work autonomously without direct human supervision. However, they typically need human approval to perform sensitive actions, such as running commands in a developer's terminal or merging a pull request. - -### {% data variables.copilot.copilot_cli_short %} - -A command line interface that lets you use {% data variables.product.prodname_copilot_short %} in your terminal. Use the CLI to add features or fix bugs, then create a pull request. Start {% data variables.product.prodname_copilot_short %} working on a task in your terminal, then continue working in the same session on {% data variables.product.prodname_dotcom_the_website %}, or on your mobile. See [AUTOTITLE](/copilot/concepts/agents/copilot-cli/about-copilot-cli). - -### {% data variables.copilot.github_copilot_app %} - -A desktop application for agent-driven development. From the app, you can run multiple agent sessions in parallel across your repositories, manage issues and pull requests, and set up automations to run tasks on a schedule. See [AUTOTITLE](/copilot/concepts/agents/github-copilot-app). - -### {% data variables.copilot.copilot_cloud_agent %} - -An autonomous AI agent that can research a repository, create an implementation plan, and make code changes on a branch. You can review the diff, iterate, and create a pull request when you're ready. You can also assign a {% data variables.product.github %} issue to {% data variables.product.prodname_copilot_short %} or ask it to open a pull request directly to complete a task. See [AUTOTITLE](/copilot/how-tos/use-copilot-agents/cloud-agent). - -### Third-party coding agents ({% data variables.release-phases.public_preview %}) - -You can use third-party coding agents alongside {% data variables.copilot.copilot_cloud_agent %}. Third-party agents are subject to the same security protections, mitigations, and limitations as {% data variables.copilot.copilot_cloud_agent %}. See [AUTOTITLE](/copilot/concepts/agents/about-third-party-coding-agents). - -### {% data variables.copilot.copilot_code-review_short %} - -AI-generated code review suggestions to help you write better code. See [AUTOTITLE](/copilot/how-tos/use-copilot-agents/request-a-code-review/use-code-review). - -Several {% data variables.copilot.copilot_code-review-tools_short %} are in {% data variables.release-phases.public_preview %} and subject to change. See [AUTOTITLE](/copilot/concepts/agents/code-review). - -### Agent mode in IDEs - -Allow {% data variables.product.prodname_copilot_short %} to work autonomously in the IDE. {% data variables.product.prodname_copilot_short %} will determine which files to make changes to, offer code changes and terminal commands for the user's approval, and iterate to remediate issues until the original task is complete. - -## Features for customization - -These features can be used to add context to {% data variables.product.prodname_copilot_short %} and improve its performance. For a comparison of when to use each feature, see [AUTOTITLE](/copilot/reference/customization-cheat-sheet). - -### {% data variables.copilot.copilot_spaces %} - -Organize and centralize relevant content—like code, docs, specs, and more—into {% data variables.copilot.copilot_spaces_short %} that ground {% data variables.product.prodname_copilot_short %}’s responses in the right context for a specific task. See [AUTOTITLE](/copilot/concepts/context/spaces). - -### Custom instructions - -Enhance responses by providing contextual details on your preferences, tools, and requirements. See [AUTOTITLE](/copilot/concepts/prompting/response-customization). - -### {% data variables.copilot.copilot_memory %} ({% data variables.release-phases.public_preview %}) - -{% data variables.product.prodname_copilot_short %} can deduce and store useful information about a repository, which {% data variables.copilot.copilot_cloud_agent %} and {% data variables.copilot.copilot_code-review_short %} can use to improve the quality of their output when working in that repository. For more information, see [AUTOTITLE](/copilot/concepts/agents/copilot-memory). - -### Prompt files - -Build and share reusable prompt instructions with additional context. A prompt file is a Markdown file, stored in your workspace, that mimics the existing format of writing prompts. See [AUTOTITLE](/copilot/concepts/prompting/response-customization#about-prompt-files). - -### MCP servers - -You can configure Model Context Protocol (MCP) servers for many {% data variables.product.prodname_copilot_short %} features, giving {% data variables.product.prodname_copilot_short %} access to external tools or data sources. See [AUTOTITLE](/copilot/concepts/context/mcp). - -### Agent skills - -Create folders of instructions, scripts, and resources that {% data variables.product.prodname_copilot_short %} can load when relevant to improve its performance in specialized tasks. See [AUTOTITLE](/copilot/concepts/agents/about-agent-skills). - -### Custom agents - -Create specialized versions of {% data variables.copilot.copilot_cloud_agent %} with access to specific tools, instructions, and MCP servers. See [AUTOTITLE](/copilot/concepts/agents/cloud-agent/about-custom-agents). - -## Features for administrators - -The following features are available to organization and enterprise owners with a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} plan. - -### Policy management - -Manage policies for {% data variables.product.prodname_copilot_short %} in your organization or enterprise. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies). - -### Access management - -Enterprise owners can specify which organizations in the enterprise can use {% data variables.product.prodname_copilot_short %}, and organization owners can specify which organization members can use Copilot. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/manage-access) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-access). - -### Usage data - -Review {% data variables.product.prodname_copilot_short %} usage data within your organization or enterprise to inform how to manage access and drive adoption of {% data variables.product.prodname_copilot_short %}. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/review-activity/review-user-activity-data) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-access/view-license-usage). - -### Audit logs - -Review audit logs for {% data variables.product.prodname_copilot_short %} in your enterprise to understand what actions have been taken and by which users. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/review-audit-logs). - -### File exclusions - -Configure {% data variables.product.prodname_copilot_short %} to ignore certain files. This can be useful if you have files that you don't want to be available to {% data variables.product.prodname_copilot_short %}. See [AUTOTITLE](/copilot/how-tos/configure-content-exclusion/exclude-content-from-copilot). - -## Next steps - -* To learn more about the plans available for {% data variables.product.prodname_copilot %}, see [AUTOTITLE](/copilot/get-started/plans). -* To start using {% data variables.product.prodname_copilot_short %}, see [AUTOTITLE](/copilot/how-tos/set-up). diff --git a/content/copilot/get-started/index.md b/content/copilot/get-started/index.md index 04fd99c3a261..95dcd85a9018 100644 --- a/content/copilot/get-started/index.md +++ b/content/copilot/get-started/index.md @@ -5,12 +5,14 @@ intro: 'Learn how to sign up for and use {% data variables.product.prodname_copi versions: feature: copilot children: - - /quickstart + - /about-github-copilot + - /where-to-use-github-copilot + - /quickstart-for-using-github-copilot-on-github-com + - /quickstart-for-using-github-copilot-in-your-ide - /cli-quickstart - /quickstart-copilot-app - - /what-is-github-copilot + - /sdk-quickstart - /plans - - /features - /best-practices - /enterprise-ai-governance redirect_from: diff --git a/content/copilot/get-started/plans.md b/content/copilot/get-started/plans.md index 4b88115f0881..97d3deaad128 100644 --- a/content/copilot/get-started/plans.md +++ b/content/copilot/get-started/plans.md @@ -10,7 +10,7 @@ redirect_from: - /copilot/get-started/plans-for-github-copilot - /copilot/concepts/billing/individual-plans contentType: get-started -category: +category: - Learn about Copilot --- @@ -67,7 +67,7 @@ The table below provides an overview of differences between plans. All plans inc {% endrowheaders %} -Each plan comes with an allowance of {% data variables.product.prodname_ai_credits %}. For more information, including how {% data variables.product.prodname_ai_credits %} work, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-individuals) and [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +Each plan comes with an allowance of {% data variables.product.prodname_ai_credits %}. For more information, including how {% data variables.product.prodname_ai_credits %} work, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-individuals) and [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). For more detail on what's uniquely available in each plan, see the following sections: * [Individual plans](#individual-plans) @@ -187,7 +187,7 @@ With these plans you'll receive access to the following features and capabilitie {% data variables.product.prodname_copilot_short %} usage is measured in {% data variables.product.prodname_ai_credits_short %} under usage-based billing. Each license contributes {% data variables.product.prodname_ai_credits_short %} to a shared enterprise pool, and usage beyond the pool is charged at {% data variables.product.prodname_ai_credits_value %} per {% data variables.product.prodname_ai_credit_singular %}. Code completions and {% data variables.copilot.next_edit_suggestions %} are not billed in {% data variables.product.prodname_ai_credits_short %} and remain unlimited for all paid plans. -For a full explanation of how {% data variables.product.prodname_ai_credits_short %} work, including pooling, additional usage, and what happens when credits run out, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +For a full explanation of how {% data variables.product.prodname_ai_credits_short %} work, including pooling, additional usage, and what happens when credits run out, see [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). ### Inline suggestions and {% data variables.copilot.copilot_chat_short %} diff --git a/content/copilot/get-started/quickstart-copilot-app.md b/content/copilot/get-started/quickstart-copilot-app.md index a1de1e2967cb..034caacc6f57 100644 --- a/content/copilot/get-started/quickstart-copilot-app.md +++ b/content/copilot/get-started/quickstart-copilot-app.md @@ -51,7 +51,7 @@ In this quickstart, you will: To work on code, you need at least one project connected to the app. A project can be a folder already on your machine, including a repository you've already cloned locally, or a repository you clone from {% data variables.product.github %} or another remote Git host such as Azure DevOps. Connecting a project unlocks the core app workflow: reading code, making edits, and opening pull requests from agent sessions. If you skipped project setup during onboarding, or want to add more projects later: -1. Click the **+** button in the sidebar next to "Sessions". +1. In the sidebar, next to **Projects**, click {% octicon "plus" aria-label="Add project" %}. 1. Under **Add project from**, choose one of the following: * **Local folder or repository** — Select a folder already on your machine, including one that contains a repository you've already cloned locally. * **{% data variables.product.github %} repository** — Browse and clone a repository from {% data variables.product.github %}. @@ -59,7 +59,7 @@ To work on code, you need at least one project connected to the app. A project c ## Making your first code changes -1. Click **+** next to **Sessions**, then choose a connected folder or repository under **Start session in**. +1. Under **Projects** in the sidebar, find the connected folder or repository you want to use, then click {% octicon "plus" aria-label="Start a new session" %} next to it. 1. Select a session mode from the dropdown below the prompt field—for example, **Interactive** to work collaboratively with the agent. 1. In the prompt box, paste this prompt: @@ -79,11 +79,12 @@ To work on code, you need at least one project connected to the app. A project c The sidebar gives you access to the main areas of the app: +* **New** — Start a new agent session. * **[My work](https://github.com/copilot/app/launch?open=ghapp%3A%2F%2Fmywork)** — Browse and filter issues and pull requests from your repositories, check CI status, and leave reviews. * **[Automations](https://github.com/copilot/app/launch?open=ghapp%3A%2F%2Fautomations)** — Saved agent tasks that run on a schedule or on demand. * **Customize** — Discover and manage plugins, skills, MCP servers, and canvases. * **Search** — Search across your repositories directly from the app. -* **Sessions** — Active agent sessions, grouped by project. +* **Projects** — View connected projects and their active agent sessions, or start a new session for a project. * **Chats** — General conversations that do not require a dedicated branch or workspace. ## Next steps diff --git a/content/copilot/get-started/quickstart-for-using-github-copilot-in-your-ide.md b/content/copilot/get-started/quickstart-for-using-github-copilot-in-your-ide.md new file mode 100644 index 000000000000..68b350659b10 --- /dev/null +++ b/content/copilot/get-started/quickstart-for-using-github-copilot-in-your-ide.md @@ -0,0 +1,81 @@ +--- +title: Quickstart for using GitHub Copilot in your IDE +shortTitle: Copilot in your IDE +intro: 'Use {% data variables.product.prodname_copilot_short %} in your IDE to explain concepts, complete code, propose edits, and validate files with agent mode.' +allowTitleToDifferFromFilename: true +versions: + feature: copilot +redirect_from: + - /copilot/getting-started-with-github-copilot + - /github/copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-visual-studio-code + - /github/copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-a-jetbrains-ide + - /github/copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-neovim + - /github/copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-visual-studio + - /copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-visual-studio-code + - /copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-a-jetbrains-ide + - /copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-neovim + - /copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-visual-studio + - /copilot/using-github-copilot/getting-started-with-github-copilot + - /copilot/quickstart +contentType: get-started +category: + - Learn about Copilot +--- + +{% data variables.product.prodname_copilot %} is available in supported IDEs: {% data variables.product.prodname_vscode %}, {% data variables.product.prodname_vs %}, {% data variables.product.prodname_jetbrains_ides %}, Eclipse, and XCode. It can answer questions and explain concepts, and suggest or complete code as you work. In IDEs that support agent mode, it can also propose edits and validate files. + +This quickstart shows you how to use these capabilities. It takes about ten minutes. + +## Prerequisites + +* **An active {% data variables.product.prodname_copilot_short %} plan.** See [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +* **The {% data variables.product.prodname_copilot_short %} extension for your IDE.** See [AUTOTITLE](/copilot/how-tos/set-up/install-copilot-extension). +* **Signed in to {% data variables.product.company_short %} in your IDE.** If you have authentication problems, see [AUTOTITLE](/copilot/how-tos/troubleshoot-copilot/troubleshoot-common-issues). + +## Ask a question about your code + +1. Open an existing code file in your editor. +1. Open the {% data variables.copilot.copilot_chat_short %} window. + + The way you do this depends on your IDE. + * In {% data variables.product.prodname_vscode %}, press Ctrl+Alt+I (Windows/Linux) or Control+Command+I (macOS). + * In other IDEs, look for {% data variables.copilot.copilot_chat_short %} in the menu bar or sidebar. See [AUTOTITLE](/copilot/how-tos/chat-with-copilot/chat-in-ide). + +1. Type `what does this file do`, then press Enter. + + {% data variables.product.prodname_copilot_short %}'s answer displays below your question. + +1. Select a line of code in the editor, then type `explain this line` in the chat window. + +{% data variables.product.prodname_copilot_short %} can see the file you have open, so you can ask about your code instead of describing it first. + +## Let {% data variables.product.prodname_copilot_short %} work through a task + +Most IDEs support **agent mode**. In agent mode, you describe what you want, and {% data variables.product.prodname_copilot_short %} decides which files to change, makes the edits, and runs commands with your approval. + +To check whether your IDE supports agent mode, see [AUTOTITLE](/copilot/reference/copilot-feature-matrix?tool=ides). + +1. In the chat window, select **Agent**, then describe a task. For example, `Create a task manager web app with the ability to add, delete, and mark tasks as completed`. +1. Press Enter. + + {% data variables.product.prodname_copilot_short %} generates the files and code needed. + +1. Review the changes, then use your IDE's controls to accept them. + +When you're ready, save your changes, and commit when everything looks good. + +## Get your first inline suggestion + +{% data variables.product.prodname_copilot %} can suggest code as you work and supports many programming languages. This example uses JavaScript, but you can follow along in your preferred language. + +1. In your IDE, create a new JavaScript (_*.js_) file. +{% data reusables.copilot.type-function-header %} + {% data variables.product.prodname_copilot_short %} will automatically suggest an entire function body in grayed text. The exact suggestion may vary. +1. {% data reusables.copilot.accept-suggestion %} + +When you're ready, save your changes, and commit when everything looks good. + +## Next steps + +* Customize {% data variables.product.prodname_copilot_short %} in your IDE with custom instructions. See [AUTOTITLE](/copilot/how-tos/configure-custom-instructions-in-your-ide/add-repository-instructions-in-your-ide#further-reading). +* Try the {% data variables.copilot.github_copilot_app %}. See [AUTOTITLE](/copilot/get-started/quickstart-copilot-app). diff --git a/content/copilot/get-started/quickstart-for-using-github-copilot-on-github-com.md b/content/copilot/get-started/quickstart-for-using-github-copilot-on-github-com.md new file mode 100644 index 000000000000..4d9539c4f1b0 --- /dev/null +++ b/content/copilot/get-started/quickstart-for-using-github-copilot-on-github-com.md @@ -0,0 +1,84 @@ +--- +title: Quickstart for using GitHub Copilot on GitHub.com +shortTitle: Copilot on GitHub.com +intro: 'Understand code and work faster by asking questions and assigning coding tasks to {% data variables.copilot.copilot_cloud_agent %} without leaving {% data variables.product.github %}.' +allowTitleToDifferFromFilename: true +versions: + feature: copilot +redirect_from: + - /copilot/get-started/quickstart +contentType: get-started +category: + - Learn about Copilot +--- + +{% data variables.product.prodname_copilot %} is built into {% data variables.product.github %}, so you can use it without installing anything. + +This quickstart shows how to ask questions about code and assign a coding task to {% data variables.copilot.copilot_cloud_agent %}. It takes about ten minutes. + +## Step 1: Ask {% data variables.product.prodname_copilot_short %} about a file + +1. Try these prompts to explore specific files in the `github/docs` repository. + + ```copilot prompt + In `github/docs`, look at `/package.json` and explain what this file does. + ``` + + ```copilot prompt + In `github/docs`, look at `/src/color-schemes/tests/color-mode-script.ts` and share how I could improve this code. + ``` + +Next, open a file in a repository of your choice and ask {% data variables.product.prodname_copilot_short %} questions about it. + +1. Navigate to any repository you want to explore. It doesn't need to be your own. +1. Open any file in the repository. +1. Click the {% data variables.product.prodname_copilot_short %} icon ({% octicon "copilot" aria-hidden="true" aria-label="copilot" %}) at the top right of the file view. +1. In the prompt box, type a question and press Enter. For example: + * {% prompt %}Explain what this file does.{% endprompt %} + * {% prompt %}How could I improve this code?{% endprompt %} + * {% prompt %}What tests would cover this function?{% endprompt %} + * {% prompt %}What was the last change and why was it made?{% endprompt %} + + {% data variables.product.prodname_copilot_short %} responds in the chat panel. +1. Ask follow-up questions to explore the code further. For example: + * {% prompt %}Tell me more{% endprompt %} to get {% data variables.product.prodname_copilot_short %} to expand on its last comment + * Ask exploratory questions about a repository + * Explain the changes in a pull request + * Ask a question about a specific issue or commit + +For more information, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/chat-with-copilot/chat-in-github). + +## Step 2: Assign an issue to {% data variables.product.prodname_copilot_short %} + +> [!NOTE] +> To use {% data variables.copilot.copilot_cloud_agent %} in this quickstart, upgrade to a paid plan such as [{% data variables.copilot.copilot_pro_short %}](https://github.com/github-copilot/signup?ref_product=copilot&ref_type=purchase&ref_style=text&ref_plan=pro). +> +> Without access to a paid plan, you can instead learn about the remaining steps by using {% data variables.product.prodname_copilot_short %} in your preferred editor. See [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-in-your-ide). + +{% data variables.copilot.copilot_cloud_agent %} can work on coding tasks autonomously. Assigning an issue is the easiest way to start, and {% data variables.product.prodname_copilot_short %} creates a pull request when it finishes. + +1. In a personal repository you have write access to, enable {% data variables.copilot.copilot_cloud_agent %} from your [{% data variables.product.prodname_copilot_short %} settings](https://github.com/settings/copilot?ref_product=copilot&ref_type=engagement&ref_style=text). + + * To enable {% data variables.copilot.copilot_cloud_agent %} for repositories in an organization or enterprise instead, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot) for further instructions. + +1. Find an existing issue you'd like {% data variables.product.prodname_copilot_short %} to work on, or create a new issue. +1. Open the issue. In the right sidebar of the issue, click **Assignees**. +1. Click **Copilot** from the assignees list. +1. Optionally, add context in the **Optional prompt** field—for example, coding patterns, files to modify, or testing requirements. + +{% data variables.product.prodname_copilot_short %} uses the issue title, description, and existing comments. Add follow-up information directly to the pull request after it opens. + +## Step 3: Review the resulting pull request + +When {% data variables.product.prodname_copilot_short %} finishes the task, it opens a pull request and requests your review. + +1. Open the pull request that {% data variables.product.prodname_copilot_short %} created. +1. Review the diff and verify the changes match what you intended. +1. To request changes, mention `@copilot` in a comment on the pull request, or push commits directly to the branch. +1. When you're satisfied with the changes, merge the pull request. + +For more information, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/use-copilot-agents/review-copilot-output). + +## Next steps + +* **Experiment with using {% data variables.copilot.copilot_cloud_agent %}** for research and multitasking. See [AUTOTITLE](/copilot/how-tos/copilot-on-github/use-copilot-agents/overview) diff --git a/content/copilot/get-started/quickstart.md b/content/copilot/get-started/quickstart.md deleted file mode 100644 index 43964e0fca37..000000000000 --- a/content/copilot/get-started/quickstart.md +++ /dev/null @@ -1,420 +0,0 @@ ---- -title: Quickstart for GitHub Copilot -intro: 'Quickly learn how to use {% data variables.product.prodname_copilot %}.' -allowTitleToDifferFromFilename: true -versions: - feature: copilot -redirect_from: - - /copilot/getting-started-with-github-copilot - - /github/copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-visual-studio-code - - /github/copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-a-jetbrains-ide - - /github/copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-neovim - - /github/copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-visual-studio - - /copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-visual-studio-code - - /copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-a-jetbrains-ide - - /copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-neovim - - /copilot/getting-started-with-github-copilot/getting-started-with-github-copilot-in-visual-studio - - /copilot/using-github-copilot/getting-started-with-github-copilot - - /copilot/quickstart -shortTitle: Quickstart -contentType: get-started -category: - - Configure Copilot ---- - -This quickstart covers using {% data variables.product.prodname_copilot_short %} on the {% data variables.product.github %} website, in IDEs, and in {% data variables.product.prodname_windows_terminal %}. To try an agent-driven workflow in the {% data variables.copilot.github_copilot_app %}, see [AUTOTITLE](/copilot/get-started/quickstart-copilot-app). - -## Introduction - - - - - -{% webui %} - -You can use {% data variables.product.prodname_copilot_short %} to get answers to coding-related questions, such as how best to code something, how to fix a bug, or how someone else's code works. For full details of what {% data variables.product.prodname_copilot_short %} can do, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot). - -Instructions for using {% data variables.product.prodname_copilot_short %} differ depending on where you are using it. This version of the quickstart is for using {% data variables.product.prodname_copilot_short %} on the {% data variables.product.github %} website. Click the tabs above for instructions on using {% data variables.product.prodname_copilot_short %} in other environments. - -{% ifversion fpt %} -{% data reusables.copilot.quickstart-signup %} -{% endif %} - -{% ifversion ghec %} - -## Prerequisite - -To use {% data variables.product.prodname_copilot_short %} on the {% data variables.product.github %} website, you must have an active {% data variables.product.prodname_copilot_short %} plan. {% data reusables.copilot.subscription-prerequisite %} -{% endif %} - -## Asking your first question - -1. On {% data variables.product.github %}, navigate to a repository and open a file. -1. Click the {% data variables.product.prodname_copilot_short %} icon ({% octicon "copilot" aria-hidden="true" aria-label="copilot" %}) at the top right of the file view. - - ![Screenshot of the {% data variables.product.prodname_copilot_short %} button, highlighted with a dark orange outline, at the top of the file view.](/assets/images/help/copilot/copilot-button-for-file.png) - -1. Type a question in the "Ask {% data variables.product.prodname_copilot_short %}" box at the bottom of the chat panel and press Enter. - - For example, you could enter: - - * `Explain this file.` - * `How could I improve this code?` - * `How can I test this code?` - - {% data variables.product.prodname_copilot_short %} responds to your request in the panel. - -1. You can continue the conversation by asking a follow-up question. For example, you could type "tell me more" to get {% data variables.product.prodname_copilot_short %} to expand on its last comment. - -## Other questions you can ask - -There are many more things you can do with {% data variables.copilot.copilot_chat_dotcom %}. For example: - -* Ask a general question about software development -* Ask exploratory questions about a repository -* Find out about the changes in a pull request -* Ask a question about a specific issue or commit - -For more information, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/chat-with-copilot/chat-in-github). - -## Next steps - -* **Find out more about {% data variables.copilot.copilot_chat %}** - See [AUTOTITLE](/copilot/how-tos/chat-with-copilot/chat-in-ide){% ifversion fpt %}.{% endif %}{% ifversion ghec %} and [AUTOTITLE](/copilot/how-tos/copilot-on-github/chat-with-copilot/chat-in-github).{% endif %} -* **Get {% data variables.product.prodname_copilot_short %} inline suggestions in an IDE** - See [AUTOTITLE](/enterprise-cloud@latest/copilot/how-tos/get-code-suggestions/get-ide-code-suggestions). -* **Learn how to write effective prompts** - See [AUTOTITLE](/copilot/concepts/prompting/prompt-engineering). -* **Use {% data variables.product.prodname_copilot_short %} on your mobile device** - See [AUTOTITLE](/copilot/how-tos/copilot-on-github/chat-with-copilot/chat-in-mobile). -* **Use {% data variables.product.prodname_copilot_short %} on the command line** - See [AUTOTITLE](/copilot/how-tos/use-copilot-for-common-tasks/use-copilot-in-the-cli). - -{% endwebui %} - - - - - -{% windowsterminal %} - -{% data reusables.copilot.quickstart-intro %} - -Instructions for using {% data variables.product.prodname_copilot_short %} differ depending on where you are using it. This version of the quickstart is for {% data variables.product.prodname_windows_terminal %}. Click the tabs above for instructions on using {% data variables.product.prodname_copilot_short %} in other environments. - -{% ifversion fpt %} -{% data reusables.copilot.quickstart-signup %} -{% endif %} - -## Prerequisites - -* **Subscription to {% data variables.product.prodname_copilot_short %}**. To use {% data variables.product.prodname_copilot %} in {% data variables.product.prodname_windows_terminal %}, you must have an active {% data variables.product.prodname_copilot %} subscription. {% data reusables.copilot.subscription-prerequisite %} -* **{% data variables.product.prodname_windows_terminal %} Canary**. Terminal Chat is only available in [{% data variables.product.prodname_windows_terminal %} Canary](https://github.com/microsoft/terminal?tab=readme-ov-file#installing-windows-terminal-canary). - -## Use {% data variables.product.prodname_copilot_short %} in Terminal Chat - -After you've installed {% data variables.product.prodname_windows_terminal %} Canary, you can use {% data variables.product.prodname_copilot_short %} in [Terminal Chat](https://learn.microsoft.com/windows/terminal/terminal-chat) to ask command line-related questions. - -1. Open **Settings** from the dropdown menu. - - ![Screenshot of the dropdown menu in the {% data variables.product.prodname_windows_terminal %} with the Settings item highlighted.](/assets/images/help/copilot/windows-terminal-dropdown.png) - -1. Go to the **Terminal Chat (Experimental)** setting. - - ![Screenshot of the Settings menu in the {% data variables.product.prodname_windows_terminal %} with the Terminal Chat (Experimental) item highlighted.](/assets/images/help/copilot/windows-terminal-settings.png) - -1. Under **Service Providers**, select **GitHub Copilot** and **Authenticate via GitHub** to sign in. - -## Chat with {% data variables.product.prodname_copilot %} - -> [!NOTE] {% data reusables.copilot.windows-terminal-access-denied %} - -1. Open **Terminal Chat (Experimental)** in the dropdown menu. - -1. In the Terminal Chat window, type `how do i list all markdown files in my directory` then press Enter. - - {% data variables.product.prodname_copilot_short %}'s answer is displayed below your question. - -1. Click on an answer to insert it to the command line. - -## Next steps - -{% data reusables.copilot.quickstart-nextsteps1 %} -{% data reusables.copilot.quickstart-nextsteps2 %} - -{% endwindowsterminal %} - - - - - -{% vscode %} - -{% data reusables.copilot.quickstart-intro %} - -Instructions for using {% data variables.product.prodname_copilot_short %} differ depending on where you are using it. This version of the quickstart is for {% data variables.product.prodname_vscode %}. Click the tabs above for instructions on using {% data variables.product.prodname_copilot_short %} in other environments. - -{% ifversion fpt %} -{% data reusables.copilot.quickstart-signup %} -{% endif %} - -## Prerequisites - -* **{% data variables.product.prodname_copilot_short %} subscription** - To use {% data variables.product.prodname_copilot %} in {% data variables.product.prodname_vscode_shortname %}, you must have an active {% data variables.product.prodname_copilot %} subscription. {% data reusables.copilot.subscription-prerequisite %} -{% data reusables.copilot.vscode-prerequisites %} - -## Chat with {% data variables.product.prodname_copilot %} - -After you've installed the {% data variables.product.prodname_copilot %} Chat extension, you can ask {% data variables.product.prodname_copilot_short %} coding-related questions. - -> [!NOTE] {% data reusables.copilot.chat-access-denied %} - -1. Create a new folder for your project and open it in VS Code. -1. Open the Chat view by pressing Control+Command+i (Mac) / Ctrl+Alt+i (Windows/Linux) or by selecting the chat icon in the VS Code title bar. -1. At the bottom of the chat view, in the chat input field, type: `Create a complete task manager web application with the ability to add, delete, and mark tasks as completed. Include modern CSS styling and make it responsive. Use semantic HTML and ensure it's accessible. Separate markup, styles, and scripts into their own files.` -1. Press Enter. Watch as the agent generates the necessary files and code to implement your request. You should see it update the `index.html` file, create a `styles.css` file for styling, and a `script.js` file for functionality. -1. Review the generated files and select Keep to accept all the changes. - -## Get your first inline suggestion - -The following example uses JavaScript, however other languages will work similarly. {% data reusables.copilot.supported-languages %} - -1. Open {% data variables.product.prodname_vscode %}. -{% data reusables.copilot.create-js-file %} -{% data reusables.copilot.type-function-header %} - {% data variables.product.prodname_copilot %} will automatically suggest an entire function body in grayed text. The exact suggestion may vary. -1. {% data reusables.copilot.accept-suggestion %} - -## Next steps - -{% data reusables.copilot.quickstart-nextsteps1 %} -* **Use {% data variables.product.prodname_copilot_short %} like a pro** - Learn how to write effective prompts for {% data variables.product.prodname_copilot %}. For more information, see [Best practices for using {% data variables.product.prodname_copilot %} in {% data variables.product.prodname_vscode_shortname %}](https://code.visualstudio.com/docs/copilot/prompt-crafting) in the {% data variables.product.prodname_vscode %} documentation. -* **Get familiar with {% data variables.copilot.next_edit_suggestions %}** - See [Navigating and accepting {% data variables.copilot.next_edit_suggestions %}](/copilot/how-tos/get-code-suggestions/get-ide-code-suggestions#navigating-and-accepting-next-edit-suggestions-1). -{% data reusables.copilot.quickstart-nextsteps2 %} - -{% endvscode %} - - - - - -{% visualstudio %} - -{% data reusables.copilot.quickstart-intro %} - -Instructions for using {% data variables.product.prodname_copilot_short %} differ depending on where you are using it. This version of the quickstart is for {% data variables.product.prodname_vs %}. Click the tabs above for instructions on using {% data variables.product.prodname_copilot_short %} in other environments. - -{% ifversion fpt %} -{% data reusables.copilot.quickstart-signup %} -{% endif %} - -## Prerequisites - -* **Subscription to {% data variables.product.prodname_copilot_short %}**. To use {% data variables.product.prodname_copilot %} in {% data variables.product.prodname_vs %}, you must have an active {% data variables.product.prodname_copilot %} subscription. {% data reusables.copilot.subscription-prerequisite %} -{% data reusables.copilot.visual-studio-prerequisites %} - -## Chat with {% data variables.product.prodname_copilot %} - -After you've installed the {% data variables.product.prodname_copilot %} extension, you can ask {% data variables.product.prodname_copilot_short %} coding-related questions. - -> [!NOTE] {% data reusables.copilot.chat-access-denied %} - -1. Open an existing code file. -1. In the {% data variables.product.prodname_vs %} menu bar, click **View**, then click **{% data variables.copilot.copilot_chat %}**. -1. In the {% data variables.copilot.copilot_chat_short %} window, type `what does this file do` then press Enter. - - {% data variables.product.prodname_copilot_short %}'s answer is displayed below your question. - -1. Select a line of code in the editor. -1. In the {% data variables.copilot.copilot_chat_short %} window, type `explain this line` then press Enter. - -## Get your first inline suggestion - -The following example uses JavaScript, however other languages will work similarly. {% data reusables.copilot.supported-languages %} - -1. Open {% data variables.product.prodname_vs %}. -1. In {% data variables.product.prodname_vs %}, create a new JavaScript (_*.js_) file. -{% data reusables.copilot.type-function-header %} - {% data variables.product.prodname_copilot %} will automatically suggest an entire function body in grayed text. The exact suggestion may vary. -1. {% data reusables.copilot.accept-suggestion %} - -## Next steps - -{% data reusables.copilot.quickstart-nextsteps1 %} -* **Prompt like a pro** - Watch [{% data variables.product.prodname_vs %} Prompt Engineering with {% data variables.product.prodname_copilot %}](https://www.youtube.com/watch?v=9hZsOeIINg8&list=PLReL099Y5nRckZDdcQ21UigO9pKa14yxC) on YouTube. -{% data reusables.copilot.quickstart-nextsteps2 %} - -{% endvisualstudio %} - - - - - -{% jetbrains %} - -{% data reusables.copilot.quickstart-intro %} - -Instructions for using {% data variables.product.prodname_copilot_short %} differ depending on where you are using it. This version of the quickstart is for JetBrains IDEs. Click the tabs above for instructions on using {% data variables.product.prodname_copilot_short %} in other environments. - -{% ifversion fpt %} -{% data reusables.copilot.quickstart-signup %} -{% endif %} - -## Prerequisites - -* **Subscription to {% data variables.product.prodname_copilot_short %}**. To use {% data variables.product.prodname_copilot %} in a JetBrains IDE, you must have an active {% data variables.product.prodname_copilot %} subscription. {% data reusables.copilot.subscription-prerequisite %} -* **A compatible JetBrains IDE**. {% data variables.product.prodname_copilot_short %} is supported in a large number of JetBrains IDEs. For a full list, see [AUTOTITLE](/copilot/how-tos/chat-with-copilot/chat-in-ide?tool=jetbrains). -{% data reusables.copilot.jetbrains-plugin-prerequisites %} - -## Chat with {% data variables.product.prodname_copilot %} - -After you've installed the {% data variables.product.prodname_copilot %} plugin, you can ask {% data variables.product.prodname_copilot_short %} coding-related questions. - -> [!NOTE] {% data reusables.copilot.chat-access-denied %} - -1. Open an existing code file. -1. Open the {% data variables.copilot.copilot_chat_short %} window by clicking the **{% data variables.copilot.copilot_chat_short %}** icon at the right side of the JetBrains IDE window. - - ![Screenshot of the {% data variables.copilot.copilot_chat_short %} icon in the Activity Bar.](/assets/images/help/copilot/jetbrains-copilot-chat-icon.png) - -1. In the {% data variables.copilot.copilot_chat_short %} window, type `what does this file do` then press Enter. - - {% data variables.product.prodname_copilot_short %}'s answer is displayed below your question. - -1. Select a line of code in the editor. -1. In the {% data variables.copilot.copilot_chat_short %} window, type `explain this line` then press Enter. - -## Get your first inline suggestion - -The following example uses JavaScript, however other languages will work similarly. {% data reusables.copilot.supported-languages %} - -1. In your JetBrains editor, create a new JavaScript (_*.js_) file. -{% data reusables.copilot.type-function-header %} - {% data variables.product.prodname_copilot %} will automatically suggest an entire function body in grayed text. The exact suggestion may vary. -1. {% data reusables.copilot.accept-suggestion %} - -## Next steps - -{% data reusables.copilot.quickstart-nextsteps1 %} -{% data reusables.copilot.quickstart-nextsteps2 %} - -{% endjetbrains %} - - - - - -{% xcode %} - -{% data reusables.copilot.quickstart-intro %} - -Instructions for using {% data variables.product.prodname_copilot_short %} differ depending on where you are using it. This version of the quickstart is for XCode in MacOS. Click the tabs above for instructions on using {% data variables.product.prodname_copilot_short %} in other environments. - -{% ifversion fpt %} -{% data reusables.copilot.quickstart-signup %} -{% endif %} - -## Prerequisites - -* **Subscription to {% data variables.product.prodname_copilot_short %}**. To use {% data variables.product.prodname_copilot %} in Xcode, you must have an active {% data variables.product.prodname_copilot %} subscription. {% data reusables.copilot.subscription-prerequisite %} -* **Latest version of the {% data variables.product.prodname_copilot %} extension**. For installation instructions, see [AUTOTITLE](/copilot/how-tos/set-up/install-copilot-extension?tool=xcode). -* **Sign in to {% data variables.product.company_short %} in Xcode**. If you experience authentication issues, see [AUTOTITLE](/copilot/how-tos/troubleshoot-copilot/troubleshoot-common-issues). - -## Chat with {% data variables.product.prodname_copilot %} - -After you've installed the {% data variables.product.prodname_copilot %} plugin, you can ask {% data variables.product.prodname_copilot_short %} coding-related questions. - -> [!NOTE] {% data reusables.copilot.chat-access-denied %} - -1. Open an existing code file. -1. Click **Editor** in the menu bar, then click **{% data variables.product.prodname_copilot %}** then **Open Chat**. - - {% data variables.copilot.copilot_chat_short %} opens in a new window. - -1. In the {% data variables.copilot.copilot_chat_short %} window, select the file to indicate that you want to chat about this file. - - ![Screenshot of a file selected in the Chat window. The file is highlighted with a dark orange outline.](/assets/images/help/copilot/xcode-chat-about-file.png) - -1. Type `what does this file do` then press Enter. - - {% data variables.product.prodname_copilot_short %}'s answer is displayed below your question. - -1. Select a line of code in the editor. -1. In the {% data variables.copilot.copilot_chat_short %} window, type `explain this line` then press Enter. - -## Get your first inline suggestion - -The following example uses Swift, however other languages will work similarly. - -1. Create a new file called `CalculateDays.swift`. -1. Type the following code in the new file: - - ```swift copy - import Foundation - - func calculateDaysBetweenDates(_ start: Date, _ end: Date) - ``` - - {% data variables.product.prodname_copilot %} adds a suggestion of code that continues this function. Suggestions are displayed in grayed text. -1. {% data reusables.copilot.accept-suggestion %} -1. {% data variables.product.prodname_copilot_short %} will continue to make suggestions, each of which you can accept by pressing Tab. - -## Next steps - -{% data reusables.copilot.quickstart-nextsteps1 %} -* **Get familiar with {% data variables.copilot.next_edit_suggestions %}** - See [Navigating and accepting {% data variables.copilot.next_edit_suggestions %}](/copilot/how-tos/get-code-suggestions/get-ide-code-suggestions?tool=xcode#navigating-and-accepting-next-edit-suggestions-2). -{% data reusables.copilot.quickstart-nextsteps2 %} - -{% endxcode %} - - - - - -{% eclipse %} - -{% data reusables.copilot.quickstart-intro %} - -Instructions for using {% data variables.product.prodname_copilot_short %} differ depending on where you are using it. This version of the quickstart is for Eclipse. Click the tabs above for instructions on using {% data variables.product.prodname_copilot_short %} in other environments. - -{% ifversion fpt %} -{% data reusables.copilot.quickstart-signup %} -{% endif %} - -## Prerequisites - -* **Subscription to {% data variables.product.prodname_copilot_short %}**. To use {% data variables.product.prodname_copilot %} in Eclipse, you must have an active {% data variables.product.prodname_copilot %} subscription. {% data reusables.copilot.subscription-prerequisite %} -* **Latest version of the {% data variables.product.prodname_copilot %} extension**. For installation instructions, see [AUTOTITLE](/copilot/how-tos/set-up/install-copilot-extension?tool=eclipse). -* **Sign in to {% data variables.product.company_short %} in Eclipse**. If you experience authentication issues, see [AUTOTITLE](/copilot/how-tos/troubleshoot-copilot/troubleshoot-common-issues). - -## Chat with {% data variables.product.prodname_copilot %} - -After you've installed the {% data variables.product.prodname_copilot %} plugin, you can ask {% data variables.product.prodname_copilot_short %} coding-related questions. - -> [!NOTE] {% data reusables.copilot.chat-access-denied %} - -1. Open an existing code file. -1. In the menu bar of Eclipse, click **{% data variables.product.prodname_copilot_short %}**, then click **{% octicon "copilot" aria-hidden="true" aria-label="copilot" %} Open Chat**. -1. In the {% data variables.copilot.copilot_chat_short %} window, type `what does this file do` then press Enter. - - {% data variables.product.prodname_copilot_short %}'s answer is displayed below your question. - -1. Select a line of code in the editor. -1. In the {% data variables.copilot.copilot_chat_short %} window, type `explain this line` then press Enter. - -## Get your first inline suggestion - -The following example uses Java, however other languages will work similarly. - -1. Create a new Java class called `CalculateDaysBetween`. -1. Within the class add the following comment: - - ```java copy - // Take 2 dates and return the number of days between them - ``` - - {% data variables.product.prodname_copilot %} adds a suggestion of code to use for this class. Suggestions are displayed in grayed text. -1. {% data reusables.copilot.accept-suggestion %} - -## Next steps - -{% data reusables.copilot.quickstart-nextsteps1 %} -* **Get familiar with {% data variables.copilot.next_edit_suggestions %}** - See [Navigating and accepting {% data variables.copilot.next_edit_suggestions %}](/copilot/how-tos/get-code-suggestions/get-ide-code-suggestions?tool=eclipse#navigating-and-accepting-next-edit-suggestions-3). -{% data reusables.copilot.quickstart-nextsteps2 %} - -{% endeclipse %} diff --git a/content/copilot/how-tos/copilot-sdk/getting-started.md b/content/copilot/get-started/sdk-quickstart.md similarity index 99% rename from content/copilot/how-tos/copilot-sdk/getting-started.md rename to content/copilot/get-started/sdk-quickstart.md index 0b14f781ee31..33db9d2e1cab 100644 --- a/content/copilot/how-tos/copilot-sdk/getting-started.md +++ b/content/copilot/get-started/sdk-quickstart.md @@ -1,21 +1,22 @@ --- title: Build your first Copilot-powered app -shortTitle: Getting Started +shortTitle: Copilot SDK quickstart +allowTitleToDifferFromFilename: true intro: >- In this tutorial, you'll use the Copilot SDK to build a command-line assistant. You'll start with the basics, add streaming responses, then add custom tools - giving Copilot the ability to call your code. versions: - fpt: '*' - ghec: '*' + feature: copilot redirect_from: - /copilot/how-tos/copilot-sdk/sdk-getting-started -contentType: how-tos + - /copilot/how-tos/copilot-sdk/getting-started +contentType: get-started +category: + - Quickstarts + - Integrate Copilot with your tools --- - - - **What you'll build:** ```text diff --git a/content/copilot/get-started/what-is-github-copilot.md b/content/copilot/get-started/what-is-github-copilot.md deleted file mode 100644 index dcce38943409..000000000000 --- a/content/copilot/get-started/what-is-github-copilot.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: What is GitHub Copilot? -intro: 'Learn what {% data variables.product.prodname_copilot_short %} is and what you can do with it.' -versions: - feature: copilot -shortTitle: What is GitHub Copilot? -redirect_from: - - /copilot/copilot-individual - - /copilot/copilot-individual/about-github-copilot-individual - - /copilot/copilot-business/about-github-copilot-business - - /copilot/github-copilot-enterprise/about-github-copilot-enterprise - - /copilot/github-copilot-enterprise/overview - - /copilot/overview-of-github-copilot/about-github-copilot-for-individuals - - /copilot/overview-of-github-copilot/about-github-copilot - - /copilot/overview-of-github-copilot/about-github-copilot-individual - - /copilot/overview-of-github-copilot/about-github-copilot-for-business - - /copilot/overview-of-github-copilot/about-github-copilot-business - - /copilot/github-copilot-enterprise/overview/about-github-copilot-enterprise - - /copilot/configuring-github-copilot/configuring-github-copilot-settings-in-your-organization - - /copilot/managing-copilot-business - - /copilot/managing-copilot-for-business - - /copilot/github-copilot-enterprise - - /copilot/copilot-business - - /copilot/about-github-copilot/what-is-github-copilot -contentType: get-started -category: - - Learn about Copilot ---- - -{% data variables.product.prodname_copilot %} is an AI coding assistant that helps you write code faster and with less effort. Then, you can focus more energy on problem solving and collaboration. - -Research shows that {% data variables.product.prodname_copilot_short %} increases developer productivity and accelerates software development. See [Research: quantifying {% data variables.product.prodname_copilot %}’s impact on developer productivity and happiness](https://github.blog/2022-09-07-research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/) in the {% data variables.product.prodname_dotcom %} blog. - -## Features - -You can use {% data variables.product.prodname_copilot_short %} to: - -* Get code suggestions as you type in your IDE. -* Chat with {% data variables.product.prodname_copilot_short %} to get help with your code. -* Ask for help using the command line. -* Organize and share context with {% data variables.copilot.copilot_spaces %} to get more relevant answers. -* Generate descriptions of changes in a pull request. -* Research, plan, make code changes, and create pull requests for you to review. - -**For enterprises and organizations with data residency requirements:** If you use {% data variables.product.prodname_ghe_cloud %}, {% data variables.product.prodname_copilot_short %} can enforce geographic data residency. See [AUTOTITLE](/admin/data-residency/github-copilot-with-data-residency). - -Use {% data variables.product.prodname_copilot_short %} in the following places: - -* Your IDE -* {% data variables.product.prodname_mobile %}, as a chat interface -* {% data variables.product.prodname_windows_terminal %} Canary, through the Terminal Chat interface -* The command line, through the {% data variables.product.prodname_cli %} -* The {% data variables.copilot.github_copilot_app %}, a desktop application for agent-driven development. See [AUTOTITLE](/copilot/concepts/agents/github-copilot-app). -* The {% data variables.product.github %} website - -See [AUTOTITLE](/copilot/get-started/features). - -## Get access - -You can start using {% data variables.product.prodname_copilot_short %} in several ways, depending on your role and needs. - -### Individuals - -* **Try {% data variables.product.prodname_copilot_short %} for free.** Use {% data variables.copilot.copilot_free_short %} to explore core features with no paid plan required. -* **Subscribe to a paid plan.** Upgrade to {% data variables.copilot.copilot_pro_short %}, {% data variables.copilot.copilot_pro_plus_short %}, or {% data variables.copilot.copilot_max_short %} for access to premium features, increased access to models, and higher available monthly allowance of {% data variables.product.prodname_ai_credits_short %}. -* **Get free access if you're eligible.** Students, teachers, and open source maintainers may qualify for access to premium features at no cost. See [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-for-students) and [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-for-teachers-and-os-maintainers). -* **Request access from your organization.** If your organization or enterprise has a {% data variables.product.prodname_copilot %} plan, you can request access by going to [https://github.com/settings/copilot](https://github.com/settings/copilot) and request access under "Get {% data variables.product.prodname_copilot_short %} from an organization." - -See [AUTOTITLE](/copilot/how-tos/manage-your-account/get-started-with-a-copilot-plan) for more information. - -### Organizations and enterprises - -{% data reusables.copilot.plans.subscribe-for-org %} - -{% data reusables.copilot.plans.subscribe-for-enterprise %} - -## Next steps - -* Learn more about {% data variables.product.prodname_copilot_short %} features. See [AUTOTITLE](/copilot/get-started/features). -* Start using {% data variables.product.prodname_copilot_short %}. See [AUTOTITLE](/copilot/how-tos/set-up). - -## Further reading - -* [Frequently asked questions](https://github.com/features/copilot#faq) about {% data variables.product.prodname_copilot %} -* [{% data variables.product.prodname_copilot %} Trust Center](https://copilot.github.trust.page/) diff --git a/content/copilot/get-started/where-to-use-github-copilot.md b/content/copilot/get-started/where-to-use-github-copilot.md new file mode 100644 index 000000000000..98d5c079e37c --- /dev/null +++ b/content/copilot/get-started/where-to-use-github-copilot.md @@ -0,0 +1,76 @@ +--- +title: Where to use GitHub Copilot +shortTitle: Where to use Copilot +intro: 'Choose where to work with {% data variables.product.prodname_copilot %}, from understanding an issue to writing, reviewing, testing, and shipping code.' +versions: + feature: copilot +contentType: get-started +category: + - Learn about Copilot +--- + +Use {% data variables.product.prodname_copilot %} in the tools you already use to plan, build, review, test, and ship software. + +The {% data variables.copilot.github_copilot_app %} is the best place to do it all in one workflow: manage agent-driven work across parallel tasks, coordinate work across repositories, and keep the browser, terminal, and pull request lifecycle connected in one place. + +You can also ask questions in your browser, get suggestions while editing code in your IDE, work from the terminal, or build your own {% data variables.product.prodname_copilot_short %}-powered tools with the SDK. + +If you’re not sure where to start, choose a surface based on the coding work you want to do now. Surfaces can have overlapping use cases: some support broad, multi-step workflows, while others focus on specific tasks. + +## Where you can use {% data variables.product.prodname_copilot_short %} + +| Where | Use it for | Get started | +| ----- | ---------- | ----------- | +| **{% data variables.copilot.github_copilot_app %}** | Managing your developer and agent-driven work across parallel tasks, multiple repositories, and the pull request lifecycle in one dedicated workspace. | [AUTOTITLE](/copilot/get-started/quickstart-copilot-app) | +| **{% data variables.copilot.copilot_cli %}** | Working with {% data variables.product.prodname_copilot_short %} from the terminal, including repeatable command-line workflows. | [AUTOTITLE](/copilot/get-started/cli-quickstart) | +| **Your IDE**
({% data variables.product.prodname_vscode %}, {% data variables.product.prodname_vs %}, {% data variables.product.prodname_jetbrains_ides %}, Eclipse, and XCode) | Getting inline suggestions, chatting about nearby code, and using an agent that can edit files for you. | [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-in-your-ide) | +| **{% data variables.copilot.copilot_sdk %}** | Building custom applications that use the same primitives as {% data variables.product.prodname_copilot_short %}. | [AUTOTITLE](/copilot/get-started/sdk-quickstart) | +| **{% data variables.product.github %} website** | Asking questions about repositories, issues, and pull requests, or assigning work to an agent. | [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-on-github-com) | +| **{% data variables.product.prodname_mobile %}** | Chatting with {% data variables.product.prodname_copilot_short %} while away from your main development environment. | [AUTOTITLE](/copilot/how-tos/copilot-on-github/chat-with-copilot/chat-in-mobile) | +| **{% data variables.product.prodname_desktop %}** | Getting help with commit messages and summaries. | [AUTOTITLE](/desktop/configuring-and-customizing-github-desktop/configuring-copilot-in-github-desktop) | + +To check which {% data variables.product.prodname_copilot_short %} features are available to your personal account, go to your {% data variables.product.prodname_copilot_short %} settings at [https://github.com/settings/copilot/features](https://github.com/settings/copilot/features?ref_product=copilot&ref_type=engagement&ref_style=text). + +To compare support across IDEs, see [AUTOTITLE](/copilot/reference/copilot-feature-matrix). + +## Which one is right for me? + +You do not need to use every surface. Choose the one closest to the work you are doing now. + +If you are not sure where to start, use {% data variables.product.prodname_copilot_short %} on the {% data variables.product.github %} website. There is nothing to install, and you can ask questions about a repository, issue, or pull request you already have open. + +Use these common development contexts to choose a surface: + +* **Coordinating agent work**: Use the {% data variables.copilot.github_copilot_app %} when you want one place to coordinate agent work, manage parallel workstreams, work across multiple repositories, and keep the browser, terminal, and pull request lifecycle connected. +* **Running commands**: Use {% data variables.copilot.copilot_cli %} when you want to work in the terminal, run complex terminal commands, and execute tasks in parallel. For agent tasks that run commands, use cloud or local sandboxes to control where commands run and what they can access. +* **Writing code**: Use {% data variables.product.prodname_copilot %} in your IDE when you want to write and refine your code interactively. +* **Extending your own tools**: Use {% data variables.copilot.copilot_sdk %} when you are building an application or internal workflow that calls {% data variables.product.prodname_copilot_short %} directly. +* **Planning a change**: Use the {% data variables.product.github %} website when the work starts from an issue, pull request, or unfamiliar repository. +* **Checking work away from your desk**: Use {% data variables.product.prodname_mobile %} when you need to ask a quick question from a mobile device. + +You can switch surfaces later, often without starting over. For example, you might understand an issue in the web interface, ask an agent to make a change, review the pull request in your IDE, and then follow up from the terminal. + +## How the surfaces work together + +Some context, permissions, and configuration can carry between surfaces. The settings and context that apply depend on the {% data variables.product.prodname_copilot_short %} feature and the surface you use. + +Where supported, your plan, custom instructions, agent skills, and connected MCP servers apply across the places where you use {% data variables.product.prodname_copilot_short %}, so you can configure them once and use them in different parts of your workflow. + +A single piece of work can move between surfaces. For example, you can start with an issue on {% data variables.product.github %}, assign it to {% data variables.copilot.copilot_cloud_agent %}, track the work in the {% data variables.copilot.github_copilot_app %}, review the pull request in your IDE, and merge it in the web interface. + +You can also start {% data variables.product.prodname_copilot_short %} working on a task in your terminal, then continue the same session in your browser or on your mobile device. + +The surfaces also share the same foundation. The {% data variables.product.prodname_copilot_short %} experiences you use across surfaces are all powered by the same SDK and platform primitives. You can use that same SDK to build {% data variables.product.prodname_copilot_short %} into your own applications, tools, and workflows, so custom integrations and first-party {% data variables.product.prodname_copilot_short %} experiences all work with the same underlying capabilities. + +Your choices hold across the workflow, including: + +* **Which model**: Different models suit different kinds of work, and you can switch models for chat and agents. See [AUTOTITLE](/copilot/how-tos/use-ai-models/change-the-chat-model). +* **Which agents**: {% data variables.product.prodname_copilot_short %} agents and agents from other providers work in the same repositories, open pull requests, and go through review. {% data variables.product.prodname_copilot_short %} applies the same security protections, mitigations, and limitations to third-party agents as it does to {% data variables.copilot.copilot_cloud_agent %}. See [AUTOTITLE](/copilot/concepts/agents/cloud-agent/about-cloud-agent) and [AUTOTITLE](/copilot/concepts/agents/about-third-party-coding-agents). +* **What {% data variables.product.prodname_copilot_short %} can see**: Custom instructions, agent skills, and MCP servers connect {% data variables.product.prodname_copilot_short %} to your conventions and to the tools your team uses. See [AUTOTITLE](/copilot/concepts/context/mcp). +* **What {% data variables.product.prodname_copilot_short %} remembers**: For supported features, {% data variables.copilot.copilot_memory %} can reuse repository facts and your preferences in later work. See [AUTOTITLE](/copilot/concepts/agents/copilot-memory). + +For organizations, administrator policies apply across most surfaces developers use. See [AUTOTITLE](/copilot/how-tos/administer-copilot). + +## Next steps + +* Compare the available {% data variables.product.prodname_copilot_short %} plans. See [AUTOTITLE](/copilot/get-started/plans). diff --git a/content/copilot/how-tos/administer-copilot/index.md b/content/copilot/how-tos/administer-copilot/index.md index 2037f68ce914..1f42d496acda 100644 --- a/content/copilot/how-tos/administer-copilot/index.md +++ b/content/copilot/how-tos/administer-copilot/index.md @@ -7,6 +7,7 @@ versions: children: - /manage-for-organization - /manage-for-enterprise + - /manage-budget-requests - /manage-mcp-usage - /download-activity-report - /view-usage-and-adoption diff --git a/content/copilot/how-tos/administer-copilot/manage-budget-requests.md b/content/copilot/how-tos/administer-copilot/manage-budget-requests.md new file mode 100644 index 000000000000..bf47d5d345d2 --- /dev/null +++ b/content/copilot/how-tos/administer-copilot/manage-budget-requests.md @@ -0,0 +1,23 @@ +--- +title: Managing requests for additional Copilot budget +shortTitle: Manage budget requests +intro: 'Approve, adjust, or deny requests from members who have used all the {% data variables.product.prodname_ai_credits_short %} in their budget.' +permissions: 'Organization owners, enterprise owners, and billing managers' +versions: + feature: enhanced-billing-platform +contentType: how-tos +category: + - Manage Copilot for a team +--- + +When a member uses all the {% data variables.product.prodname_ai_credits_short %} available to them, they are blocked from {% data variables.product.prodname_copilot_short %} features that consume {% data variables.product.prodname_ai_credits_short %}, and they can request an increase. + +Requests go to whichever account pays for the budget. Requests against an organization-owned budget are reviewed in the organization's settings, and requests against an enterprise-owned budget are reviewed in the enterprise's settings. + +## Reviewing requests + +1. Navigate to your organization or enterprise. For example, from the [Organizations](https://github.com/settings/organizations?ref_product=copilot&ref_type=engagement&ref_style=text) or [Enterprises](https://github.com/settings/enterprises?ref_product=copilot&ref_type=engagement&ref_style=text) pages on {% data variables.product.prodname_dotcom_the_website %}. +1. In the settings for the account, click **{% octicon "bell" aria-hidden="true" aria-label="bell" %} Requests from members**, then review the pending requests for additional {% data variables.product.prodname_copilot_short %} budget. +1. To approve requests, set a new amount for each one, select the requests, then click **Approve and increase**. + +Approving a request sets the member's budget to the amount you entered and restores their access to {% data variables.product.prodname_ai_credits_short %}. diff --git a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/create-github-private-repo.md b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/create-github-private-repo.md index 62a9ec1c38b1..c9bbb2ba8d74 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/create-github-private-repo.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/create-github-private-repo.md @@ -44,4 +44,4 @@ To control who can propose and merge changes to the governance settings stored h ## Next steps * [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents) -* [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-managed-settings) +* [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/get-started) diff --git a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/enable-copilot-cloud-agent.md b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/enable-copilot-cloud-agent.md index af4b977c6b48..ac0556986519 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/enable-copilot-cloud-agent.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/enable-copilot-cloud-agent.md @@ -20,6 +20,8 @@ redirect_from: contentType: how-tos category: - Manage Copilot for a team +docsTeamMetrics: + - ai-governance --- ## Prerequisites diff --git a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/enable-copilot-code-review.md b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/enable-copilot-code-review.md index eb80fe054285..cd7a3270d38f 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/enable-copilot-code-review.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/enable-copilot-code-review.md @@ -12,6 +12,8 @@ redirect_from: contentType: how-tos category: - Manage Copilot for a team +docsTeamMetrics: + - ai-governance --- {% data variables.product.prodname_copilot %} can review pull requests in your enterprise. This can save time for human reviewers by detecting bugs or vulnerabilities and enforcing consistent coding standards. diff --git a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/monitor-agentic-activity.md b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/monitor-agentic-activity.md index 62c0ea639fd7..5278e978d60b 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/monitor-agentic-activity.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/monitor-agentic-activity.md @@ -8,6 +8,8 @@ shortTitle: Monitor agentic activity contentType: how-tos category: - Manage Copilot for a team +docsTeamMetrics: + - ai-governance --- ## Viewing active and recent agentic sessions in your enterprise @@ -41,4 +43,4 @@ OpenTelemetry (OTel) is an open source observability framework. It provides a st When you enable OTel monitoring, you can send data from users' {% data variables.product.prodname_copilot_short %} clients to an OTel-compatible backend. This lets you analyze agent sessions and understand agent usage across your enterprise. -For more information, see [AUTOTITLE](/copilot/concepts/agents/opentelemetry). +For more information, see [AUTOTITLE](/copilot/concepts/enterprise/opentelemetry). diff --git a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents.md b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents.md index 8bdf3137443d..8fb11a2ffe63 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents.md @@ -42,4 +42,4 @@ If you prefer to maintain full control over your enterprise's tooling to ensure ## Next steps -To centrally control {% data variables.product.prodname_copilot_short %} client behavior across your enterprise, configure enterprise managed settings. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-managed-settings). +To centrally control {% data variables.product.prodname_copilot_short %} client behavior across your enterprise, configure enterprise managed settings. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/get-started). diff --git a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies.md b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies.md index b3628cc5a50b..f46ab2084ef0 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies.md @@ -23,7 +23,7 @@ If you're setting up {% data variables.product.prodname_copilot_short %} for the ## Defining policies for your enterprise -Enterprise owners can define a policy for the whole enterprise, or delegate the decision to individual organization owners. See [AUTOTITLE](/copilot/concepts/policies). +Enterprise owners can define a policy for the whole enterprise, or delegate the decision to individual organization owners. See [AUTOTITLE](/copilot/concepts/enterprise/policies). {% data reusables.enterprise-accounts.access-enterprise %} {% data reusables.enterprise-accounts.ai-controls-tab %} diff --git a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/review-audit-logs.md b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/review-audit-logs.md index b9769e99bf6a..3b3f9e6fa23c 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-enterprise/review-audit-logs.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-enterprise/review-audit-logs.md @@ -23,6 +23,8 @@ versions: contentType: how-tos category: - Manage Copilot for a team +docsTeamMetrics: + - ai-governance --- You can use the audit log to review actions taken in your enterprise. The audit log includes a record of: diff --git a/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-default-models.md b/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-default-models.md index d0715e17454f..72322048c0a4 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-default-models.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-default-models.md @@ -22,7 +22,7 @@ When viewing the model settings for your organization, you may see the following * **Enabled** or **Disabled** with a {% octicon "shield" aria-label="shield" %} icon: The enterprise owner has enforced this setting. You cannot change the availability of this model. * **Enabled** or **Disabled** in a dropdown menu: The enterprise owner has made this model optional. You can configure the availability for your organization. -* **Delegate to Default Policy**: This model is available for you to configure, but no one has configured it in the organization. The model inherits the default set in the "Default availability" policy for your organization. See [AUTOTITLE](/copilot/concepts/models/default-availability). +* **Delegate to Default Policy**: This model is available for you to configure, but no one has configured it in the organization. The model inherits the default set in the "Default availability" policy for your organization. See [AUTOTITLE](/copilot/concepts/enterprise/default-model-availability). ## Configuring model availability for your organization diff --git a/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-plan/subscribe.md b/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-plan/subscribe.md index 8ca6e0194577..a62e0a01716d 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-plan/subscribe.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-organization/manage-plan/subscribe.md @@ -21,14 +21,14 @@ category: --- > [!NOTE] -> If your organization is part of an enterprise, you will gain {% data variables.product.prodname_copilot_short %} through your enterprise instead. See [AUTOTITLE](/copilot/managing-copilot/managing-copilot-for-your-enterprise/subscribing-to-copilot-for-your-enterprise) and [AUTOTITLE](/copilot/managing-copilot/managing-copilot-for-your-enterprise/enabling-copilot-for-organizations-in-your-enterprise). +> If your organization is part of an enterprise, you will gain {% data variables.product.prodname_copilot_short %} through your enterprise instead. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-plan/subscribe) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-access/grant-access). 1. Navigate to the [{% data variables.product.prodname_copilot %} sign up page](https://github.com/github-copilot/purchase?ref_product=copilot&ref_type=purchase&ref_style=text). 1. Ensure you are signed in to the right organization account. If you are not, click **{% octicon "arrow-switch" aria-hidden="true" aria-label="arrow-switch" %} Switch** and select the organization for which you want to purchase {% data variables.product.prodname_copilot %}. 1. Click **Enable {% data variables.product.prodname_copilot %}**. -1. Enable {% data variables.product.prodname_copilot_short %} for some or all members of your organization. For more information about assigning seats, see [AUTOTITLE](/copilot/managing-copilot/managing-github-copilot-in-your-organization/managing-access-to-github-copilot-in-your-organization/granting-access-to-copilot-for-members-of-your-organization). +1. Enable {% data variables.product.prodname_copilot_short %} for some or all members of your organization. For more information about assigning seats, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/manage-access/grant-access). ## Next steps -* To finish setting up {% data variables.product.prodname_copilot_short %} for your organization, see [AUTOTITLE](/copilot/setting-up-github-copilot/setting-up-github-copilot-for-your-organization). -* For billing information, see [AUTOTITLE](/billing/managing-billing-for-github-copilot/about-billing-for-github-copilot#about-billing-for-github-copilot-business-and-github-copilot-enterprise) and [AUTOTITLE](/billing/managing-your-billing). \ No newline at end of file +* To finish setting up {% data variables.product.prodname_copilot_short %} for your organization, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-for-organization). +* For billing information, see [AUTOTITLE](/billing/concepts/product-billing/github-copilot-licenses#about-billing-for-github-copilot-business-and-github-copilot-enterprise) and [AUTOTITLE](/billing/get-started). \ No newline at end of file diff --git a/content/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-enterprise-allowlist.md b/content/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-enterprise-allowlist.md index 97f4ef40bad4..146c11e81d72 100644 --- a/content/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-enterprise-allowlist.md +++ b/content/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-enterprise-allowlist.md @@ -10,13 +10,15 @@ contentType: how-tos category: - Configure Copilot - Manage Copilot for a team +docsTeamMetrics: + - ai-governance --- ## About allowlists You can define an allowlist and denylist to control which MCP servers users in your enterprise can run in {% data variables.product.prodname_copilot_short %} clients. These lists are defined in your enterprise's `{% data variables.copilot.managed_setting_file %}`, which you can store on {% data variables.product.github %}. -For more information, see [AUTOTITLE](/copilot/concepts/mcp-management). +For more information, see [AUTOTITLE](/copilot/concepts/enterprise/mcp-management). ## Prerequisites @@ -27,7 +29,7 @@ You can find these settings in the {% octicon "mcp" aria-hidden="true" aria-labe ## Defining an allowlist or denylist -1. Create a `{% data variables.copilot.managed_setting_file %}` file for your enterprise. Most enterprises store this file in a `.github-private` repository. You can also install it directly on users' machines using mobile device management. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-managed-settings#deploying-server-managed-settings). +1. Create a `{% data variables.copilot.managed_setting_file %}` file for your enterprise. Most enterprises store this file in a `.github-private` repository. You can also install it directly on users' machines using mobile device management. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/deploy-managed-settings#deploying-server-managed-settings). 1. Edit the file to define an allowlist and denylist for MCP servers. You can match by name, server URL, or specific commands. For syntax details, see [allowedMcpServers](/copilot/reference/enterprise-administrators/enterprise-managed-settings#allowedmcpservers), and [deniedMcpServers](/copilot/reference/enterprise-administrators/enterprise-managed-settings#deniedmcpservers) in "Enterprise managed settings." The following example allows servers that match any of the three allowlist entries. The filesystem server configured to access the root filesystem is always blocked, even if it also matches an allowlist entry. diff --git a/content/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-mcp-registry.md b/content/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-mcp-registry.md index 4e8ba65eb0b4..7eb195f216e9 100644 --- a/content/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-mcp-registry.md +++ b/content/copilot/how-tos/administer-copilot/manage-mcp-usage/configure-mcp-registry.md @@ -16,7 +16,7 @@ category: ## Prerequisites -Before you create your Model Context Protocol (MCP) registry, you should understand the functionality and benefits of MCP management for your company. See [AUTOTITLE](/copilot/concepts/mcp-management). +Before you create your Model Context Protocol (MCP) registry, you should understand the functionality and benefits of MCP management for your company. See [AUTOTITLE](/copilot/concepts/enterprise/mcp-management). ## Option 1: Self-hosting an MCP registry diff --git a/content/copilot/how-tos/chat-with-copilot/chat-in-windows-terminal.md b/content/copilot/how-tos/chat-with-copilot/chat-in-windows-terminal.md index d1c2e32ec159..4856c21cd494 100644 --- a/content/copilot/how-tos/chat-with-copilot/chat-in-windows-terminal.md +++ b/content/copilot/how-tos/chat-with-copilot/chat-in-windows-terminal.md @@ -11,15 +11,15 @@ redirect_from: - /copilot/how-tos/use-chat/use-chat-in-windows-terminal - /copilot/how-tos/chat-with-copilot/use-chat-in-windows-terminal contentType: how-tos -category: +category: - Author and optimize with Copilot --- ## Prerequisites -* **Access to {% data variables.product.prodname_copilot %}**. See [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +* **Access to {% data variables.product.prodname_copilot %}**. See [AUTOTITLE](/copilot/get-started/about-github-copilot#get-access). * **{% data variables.product.prodname_windows_terminal %} Canary installed**. For installation instructions, see [Installing {% data variables.product.prodname_windows_terminal %} Canary](https://github.com/microsoft/terminal?tab=readme-ov-file#installing-windows-terminal-canary). -* **{% data variables.product.prodname_copilot %} connected to Terminal Chat**. See [AUTOTITLE](/copilot/get-started/quickstart?tool=windowsterminal). +* **{% data variables.product.prodname_copilot %} connected to Terminal Chat**. See [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-in-your-ide). If you have access to {% data variables.product.prodname_copilot %} via your organization or enterprise, you cannot use {% data variables.product.prodname_copilot_short %} in {% data variables.product.prodname_windows_terminal %} if your organization owner or enterprise administrator has disabled {% data variables.copilot.copilot_cli_short %}. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/manage-policies). diff --git a/content/copilot/how-tos/cloud-and-local-sandboxes/configuring-local-sandbox-settings.md b/content/copilot/how-tos/cloud-and-local-sandboxes/configuring-local-sandbox-settings.md index 295be57c903a..ed336b745a2f 100644 --- a/content/copilot/how-tos/cloud-and-local-sandboxes/configuring-local-sandbox-settings.md +++ b/content/copilot/how-tos/cloud-and-local-sandboxes/configuring-local-sandbox-settings.md @@ -20,6 +20,9 @@ docsTeamMetrics: You can use the `/sandbox` slash command to grant extra paths, adjust network access, or turn sandboxing on or off. +> [!NOTE] +> If you get your {% data variables.product.prodname_copilot_short %} license from an enterprise, some or all sandbox settings may be controlled by enterprise managed settings. A managed setting is labeled `(managed)` in the `/sandbox` interface and can't be changed. + For a conceptual overview of cloud and local sandboxes for {% data variables.product.prodname_copilot_short %}, see [AUTOTITLE](/copilot/concepts/about-cloud-and-local-sandboxes). ## Opening the sandbox configuration diff --git a/content/copilot/how-tos/cloud-and-local-sandboxes/enabling-or-disabling-cloud-sandboxes-for-your-organization.md b/content/copilot/how-tos/cloud-and-local-sandboxes/enabling-or-disabling-cloud-sandboxes-for-your-organization.md index 53a63a6089f0..9514ea525fb9 100644 --- a/content/copilot/how-tos/cloud-and-local-sandboxes/enabling-or-disabling-cloud-sandboxes-for-your-organization.md +++ b/content/copilot/how-tos/cloud-and-local-sandboxes/enabling-or-disabling-cloud-sandboxes-for-your-organization.md @@ -48,3 +48,5 @@ Enterprise owners can control cloud sandbox access for all organizations in the * [AUTOTITLE](/copilot/concepts/about-cloud-and-local-sandboxes) * [AUTOTITLE](/billing/concepts/product-billing/cloud-and-local-sandboxes) +* [AUTOTITLE](/copilot/reference/enterprise-administrators/enterprise-managed-settings#sandbox) + diff --git a/content/copilot/how-tos/copilot-cli/administer-copilot-cli-for-your-enterprise.md b/content/copilot/how-tos/copilot-cli/administer-copilot-cli-for-your-enterprise.md index f24f57769888..c81695274eb0 100644 --- a/content/copilot/how-tos/copilot-cli/administer-copilot-cli-for-your-enterprise.md +++ b/content/copilot/how-tos/copilot-cli/administer-copilot-cli-for-your-enterprise.md @@ -12,6 +12,7 @@ category: - Administer Copilot CLI # Copilot CLI bespoke landing page docsTeamMetrics: - copilot-cli + - ai-governance --- {% data variables.copilot.copilot_cli_short %} brings agentic capabilities to developers' command line. When {% data variables.copilot.copilot_cli_short %} is enabled, developers can use it to ask {% data variables.product.prodname_copilot_short %} to work on tasks locally or delegate work to {% data variables.copilot.copilot_cloud_agent %}. diff --git a/content/copilot/how-tos/copilot-cli/automate-copilot-cli/schedule-prompts.md b/content/copilot/how-tos/copilot-cli/automate-copilot-cli/schedule-prompts.md index 820670f89949..f16316b5ca8f 100644 --- a/content/copilot/how-tos/copilot-cli/automate-copilot-cli/schedule-prompts.md +++ b/content/copilot/how-tos/copilot-cli/automate-copilot-cli/schedule-prompts.md @@ -73,7 +73,7 @@ The prompt fires once, after the delay has elapsed, and is then removed from the You can use `/every` and `/after` to schedule a skill. To do this, you can reference the skill explicitly by using its slash command, or you can use natural language to tell {% data variables.product.prodname_copilot_short %} to run the skill. > [!NOTE] -> Only user-invocable skills can be scheduled this way. You cannot include built-in slash commands (such as `/clear`) in a scheduled prompt. +> Only user-invocable skills and a subset of built-in slash commands can be scheduled. Commands that start a self-contained piece of work—such as `/plan`, `/review`, `/research`, or `/security-review`—are schedulable. Commands that change your session or configuration (for example, `/model`, `/clear`, `/compact`, `/permissions`, or `/sandbox`), that only display information (such as `/usage` or `/context`), or that manage scheduling itself (`/every` and `/after`) can't be scheduled, and {% data variables.product.prodname_copilot_short %} rejects them when you try. ### Examples @@ -94,9 +94,11 @@ You can use `/every` and `/after` to schedule a skill. To do this, you can refer | `h` | hours | `2h` | | `d` | days | `1d` | -A bare number with no suffix is interpreted as minutes—for example, `/every 30 remind me to check for Slack messages` schedules the prompt every 30 minutes. +When you specify a numeric duration, always include the suffix. A bare number—for example, `/every 30 remind me to check for Slack messages`—is not recognized as an interval. -The minimum interval is **10 seconds** and the maximum is **1 day** (24 hours). +For a fixed interval, the minimum is **10 seconds** and the maximum is **1 day** (24 hours). + +You can also describe the timing in plain language instead of using a duration—for example, `/after at 3pm push the release`, or `/every day at 9am post the standup`. {% data variables.product.prodname_copilot_short %} uses a model to interpret the phrase, then creates the schedule from it. ## Identifying scheduled prompts in the session @@ -116,9 +118,9 @@ Press Esc to exit the schedule list. Scheduled prompts are scoped to the session they were created in, and they are only triggered while that session is running. -When you reopen the session (using the `--continue` or `--resume` command line options) the schedules are restarted, with interval before a schedule is triggered measured from the moment you reopen the session. +When you reopen the session (using the `--continue` or `--resume` command line options) the schedules are restored. For a recurring schedule created with a fixed interval, the wait before the next run is measured from the moment you reopen the session. -If an `/after` schedule had not been triggered before you closed the session, it remains in the schedule list and will be triggered after the specified delay in the reopened session. +An `/after` schedule that had not been triggered before you closed the session keeps its original target time, rather than restarting the delay. If that time passed while the session was closed, the prompt is submitted as soon as you reopen the session. ## Running a prompt from an external scheduler diff --git a/content/copilot/how-tos/copilot-cli/customize-copilot/plugins-creating.md b/content/copilot/how-tos/copilot-cli/customize-copilot/plugins-creating.md index f42ba006c413..129e40911991 100644 --- a/content/copilot/how-tos/copilot-cli/customize-copilot/plugins-creating.md +++ b/content/copilot/how-tos/copilot-cli/customize-copilot/plugins-creating.md @@ -22,38 +22,54 @@ Plugins are packages that extend the functionality of {% data variables.copilot. ## Plugin structure -A plugin consists of a directory with a specific structure. At minimum, it must contain a `plugin.json` manifest file at the root of the directory. It can also contain any combination of agents, skills, hooks, and MCP server configurations. - -### Example plugin structure - -```text -my-plugin/ -├── plugin.json # Required manifest -├── agents/ # Custom agents (optional) -│ └── helper.agent.md -├── skills/ # Skills (optional) -│ └── deploy/ -│ └── SKILL.md -├── hooks.json # Hook configuration (optional) -└── .mcp.json # MCP server config (optional) -``` +A plugin consists of a directory with a specific structure and a `plugin.json` manifest file. Agent Plugins 1.0 requires the manifest at the plugin root. Legacy plugins support additional manifest locations. A plugin can also contain any combination of agents, skills, hooks, and MCP server configurations. + +{% data variables.copilot.copilot_cli_short %} supports two plugin formats: + +* Agent Plugins 1.0, a portable format for skills and MCP servers. Declaring the canonical `$schema` in `plugin.json` opts the plugin into this format. +* The legacy {% data variables.product.prodname_copilot_short %} format, which supports {% data variables.product.prodname_copilot_short %}-specific components and configurable component paths. A manifest without the Agent Plugins `$schema` continues to use this format. + +Both formats are supported. Choose Agent Plugins 1.0 when you want to make skills and MCP servers portable across compatible clients. Choose the legacy format when you need custom component paths or are maintaining an existing {% data variables.product.prodname_copilot_short %}-specific plugin. In Agent Plugins 1.0, skills and MCP servers are portable, and {% data variables.product.prodname_copilot_short %}-specific components such as agents, commands, rules, hooks, and LSP servers come from the `com.github.copilot` directory in the plugin. ## Creating a plugin 1. Create a directory for your plugin. -1. Add a `plugin.json` manifest file to the root of the directory. +1. Choose a plugin format, then add a `plugin.json` manifest file to the root of the directory. + + To create an Agent Plugins 1.0 plugin, include the canonical `$schema`: - **Example `plugin.json` file** + **Example Agent Plugins 1.0 `plugin.json` file** {% data reusables.copilot.copilot-cli.cli-example-plugin-file %} + The schema allows only `$schema`, `name`, `version`, `description`, `author`, `homepage`, `repository`, `license`, `keywords`, and `extensions` as top-level fields. Unknown top-level fields are reported and ignored. The `extensions` field is a map of client-specific data keyed by reverse-domain namespace. + + To create a legacy plugin, omit the Agent Plugins `$schema`. You can use component path fields in the manifest: + + **Example legacy `plugin.json` file** + + ```json copy + { + "name": "my-dev-tools", + "description": "React development utilities", + "agents": "agents/", + "skills": ["skills/", "extra-skills/"], + "hooks": "hooks.json", + "mcpServers": ".mcp.json" + } + ``` + For details of the full set of fields you can include in this file, see [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-plugin-reference#pluginjson). -1. Add some components to your plugin by creating the appropriate files and directories for agents, skills, hooks, and MCP server configurations. +1. Add components to your plugin. + + In an Agent Plugins 1.0 plugin, skills must be immediate subdirectories of `skills/`, and each skill must contain a `SKILL.md` file. MCP configuration must be in `mcp.json` at the plugin root. You cannot override these locations in `plugin.json`. {% data variables.product.prodname_copilot_short %}-specific components go in the `com.github.copilot` directory, such as `com.github.copilot/agents/` for custom agents and `com.github.copilot/hooks/hooks.json` for hooks. + + In a legacy plugin, use the default component locations or the component paths configured in `plugin.json`. For example: - 1. Add an agent by creating a `NAME.agent.md` file in an `agents` subdirectory. + 1. Add an agent by creating a `NAME.agent.md` file in an `agents` subdirectory. In an Agent Plugins 1.0 plugin, create the file in `com.github.copilot/agents/`. In a legacy plugin, create it in `agents/`. ```markdown copy --- @@ -78,6 +94,31 @@ my-plugin/ Instructions for the skill... ``` + 1. For an Agent Plugins 1.0 plugin, add MCP servers in a root `mcp.json` file. The MCP configuration uses its own Agent Plugins schema: + + ```json copy + { + "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json", + "mcpServers": { + "deployment-api": { + "type": "streamable-http", + "url": "https://deploy.example.com/mcp" + }, + "local-validator": { + "type": "stdio", + "command": "node", + "args": ["${PLUGIN_ROOT}/server/index.js"], + "cwd": "${PLUGIN_ROOT}", + "env": { + "DATA_DIR": "${PLUGIN_DATA}/validator" + } + } + } + } + ``` + + The `streamable-http` transport name is accepted for Streamable HTTP servers. For `stdio` servers, {% data variables.copilot.copilot_cli_short %} provides `PLUGIN_ROOT` and `PLUGIN_DATA` environment variables and expands `${PLUGIN_ROOT}` and `${PLUGIN_DATA}` in `args`, `env` values, and `cwd`. + 1. Install your plugin locally, so that you can test it as you develop it. For example, where `./my-plugin` is the path to your plugin directory, enter: @@ -137,5 +178,6 @@ To distribute your plugin, you can add it to a marketplace. See [AUTOTITLE](/cop ## Further reading +* [Agent Plugins author documentation](https://agent-plugins.org/plugin-authors) * [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/plugins-finding-installing) * [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-plugin-reference) diff --git a/content/copilot/how-tos/copilot-cli/customize-copilot/use-byok-models.md b/content/copilot/how-tos/copilot-cli/customize-copilot/use-byok-models.md index 7872d4ded2df..815b9c6e0207 100644 --- a/content/copilot/how-tos/copilot-cli/customize-copilot/use-byok-models.md +++ b/content/copilot/how-tos/copilot-cli/customize-copilot/use-byok-models.md @@ -49,6 +49,13 @@ You configure your model provider by setting environment variables before starti | `COPILOT_PROVIDER_BASE_URL` | Yes | The base URL of your model provider's API endpoint. | | `COPILOT_PROVIDER_TYPE` | No | The provider type: `openai` (default), `azure`, or `anthropic`. | | `COPILOT_PROVIDER_API_KEY` | No | Your API key for the provider. Not required for providers that do not use authentication, such as a local Ollama instance. | +| `COPILOT_PROVIDER_BEARER_TOKEN` | No | Bearer token used for provider authentication when API-key authentication is not used. | +| `COPILOT_PROVIDER_WIRE_API` | No | Specifies the API protocol used when communicating with the provider. | +| `COPILOT_PROVIDER_AZURE_API_VERSION` | Azure only | The Azure OpenAI API version used for requests. | +| `COPILOT_PROVIDER_MODEL_ID` | No | The well-known model name used to identify model capabilities and token limits. | +| `COPILOT_PROVIDER_WIRE_MODEL` | No | The model name sent to the provider API for inference. For Azure OpenAI, use the deployment name. | +| `COPILOT_PROVIDER_MAX_PROMPT_TOKENS` | No | Maximum number of prompt tokens allowed in a request. | +| `COPILOT_PROVIDER_MAX_OUTPUT_TOKENS` | No | Maximum number of tokens generated in a response. | | `COPILOT_MODEL` | Yes | The model identifier to use. You can also set this with the `--model` command-line flag. | ## Connecting to an OpenAI-compatible endpoint @@ -81,17 +88,29 @@ Use the following steps if you are connecting to OpenAI, Ollama, vLLM, Foundry L 1. Set the environment variables for Azure OpenAI. ```shell - export COPILOT_PROVIDER_BASE_URL=https://YOUR-RESOURCE-NAME.openai.azure.com/openai/deployments/YOUR-DEPLOYMENT-NAME + export COPILOT_PROVIDER_BASE_URL=https://YOUR-RESOURCE-NAME.openai.azure.com export COPILOT_PROVIDER_TYPE=azure export COPILOT_PROVIDER_API_KEY=YOUR-AZURE-API-KEY + export COPILOT_PROVIDER_AZURE_API_VERSION=YOUR-AZURE-API-VERSION + export COPILOT_PROVIDER_MODEL_ID=YOUR-MODEL-NAME + export COPILOT_PROVIDER_WIRE_MODEL=YOUR-DEPLOYMENT-NAME export COPILOT_MODEL=YOUR-DEPLOYMENT-NAME ``` Replace the following placeholders: - * `YOUR-RESOURCE-NAME`: your Azure OpenAI resource name - * `YOUR-DEPLOYMENT-NAME`: the name of your model deployment - * `YOUR-AZURE-API-KEY`: your Azure OpenAI API key + * `YOUR-RESOURCE-NAME`: your Azure OpenAI resource name + * `YOUR-DEPLOYMENT-NAME`: the deployment name that receives requests + * `YOUR-MODEL-NAME`: the underlying model associated with the deployment (for example, `gpt-4o`) + * `YOUR-AZURE-API-VERSION`: the Azure OpenAI API version + * `YOUR-AZURE-API-KEY`: your Azure OpenAI API key + +### Azure-specific environment variables + +| Variable | Description | +|---|---| +| `COPILOT_PROVIDER_MODEL_ID` | The well-known model name. {% data variables.copilot.copilot_cli_short %} uses this value to identify model capabilities and token limits. | +| `COPILOT_PROVIDER_WIRE_MODEL` | The Azure OpenAI deployment name. Azure OpenAI routes requests through deployments rather than directly through model names. | {% data reusables.copilot.copilot-cli.start-cli %} diff --git a/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/add-lsp-servers.md b/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/add-lsp-servers.md index 3530dc658c3a..09ce7588aa6f 100644 --- a/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/add-lsp-servers.md +++ b/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/add-lsp-servers.md @@ -266,6 +266,7 @@ You can list and manage your LSP servers in an interactive CLI session using the | `/lsp` or `/lsp show` | Show the status of all configured LSP servers. | | `/lsp test SERVER-NAME` | Test whether a server starts correctly. | | `/lsp reload` | Reload LSP configurations from disk. | +| `/lsp logs` | Open the live LSP services panel to view server logs. | | `/lsp help` | Show `/lsp` command information. | ### Listing available LSP servers diff --git a/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/authenticate-copilot-cli.md b/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/authenticate-copilot-cli.md index ee3130ff8d29..852b0cfb149c 100644 --- a/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/authenticate-copilot-cli.md +++ b/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/authenticate-copilot-cli.md @@ -18,9 +18,9 @@ If you use your own LLM provider API keys (BYOK), {% data variables.product.gith Authentication is required for any other {% data variables.copilot.copilot_cli %} usage. -When authentication is required, {% data variables.copilot.copilot_cli_short %} supports three methods. The method you use depends on whether you are working interactively or in an automated environment. +When authentication is required, {% data variables.copilot.copilot_cli_short %} supports several methods. The method you use depends on whether you are working interactively or in an automated environment. -* **OAuth device flow**: The default and recommended method for interactive use. When you run `/login` in {% data variables.copilot.copilot_cli_short %}, the CLI generates a one-time code and directs you to authenticate in your browser. This is the simplest way to authenticate. See [Authenticating with OAuth](#authenticating-with-oauth). +* **OAuth**: The default and recommended method for interactive use. There are two OAuth flows. The browser (web) flow opens your browser to authorize the sign-in and completes it on a local loopback callback. The device code flow displays a one-time code that you enter in your browser. The browser flow is the default on a local desktop, and known remote or headless environments (including SSH, {% data variables.product.prodname_github_codespaces %}, dev containers, and CI) default to the device code flow. See [Authenticating with OAuth](#authenticating-with-oauth). * **Environment variables**: Recommended for CI/CD pipelines, containers, and non-interactive environments. You set a supported token as an environment variable (`COPILOT_GITHUB_TOKEN`, `GH_TOKEN`, or `GITHUB_TOKEN`), and the CLI uses it automatically without prompting. See [Authenticating with environment variables](#authenticating-with-environment-variables). * **{% data variables.product.prodname_cli %} fallback**: If you have {% data variables.product.prodname_cli %} (`gh`) (note: the `gh` CLI, not `copilot`) installed and authenticated, {% data variables.copilot.copilot_cli_short %} can use its token automatically. This is the lowest priority method and activates only when no other credentials are found. See [Authenticating with {% data variables.product.prodname_cli %}](#authenticating-with-github-cli). @@ -52,7 +52,7 @@ Offline mode is **only fully air-gapped** if your BYOK provider is local or othe | Token type | Prefix | Supported | Notes | |----------------------------|---------------|-----------|--------------------------------------------------------| -| OAuth token (device flow) | `gho_` | Yes | Default method via `copilot login` | +| OAuth token (browser or device flow) | `gho_` | Yes | Default method via `copilot login` | | Fine-grained PAT | `github_pat_` | Yes | Must be owned by your personal account (not an organization) with the **{% data variables.product.prodname_copilot_short %} Requests** account permission | | GitHub App user-to-server | `ghu_` | Yes | Via environment variable | | Classic PAT | `ghp_` | No | Not supported by {% data variables.copilot.copilot_cli_short %} | @@ -78,12 +78,12 @@ When you run a command, {% data variables.copilot.copilot_cli_short %} checks fo 1. GitHub CLI (`gh auth token`) fallback > [!NOTE] -> * An environment variable silently overrides a stored OAuth token. If you set `GH_TOKEN` for another tool, the CLI uses that token instead of the OAuth token from `copilot login`. To avoid unexpected behavior, unset environment variables you do not intend the CLI to use. +> * An environment variable silently overrides a stored OAuth token. If you set `GH_TOKEN` for another tool, the CLI uses that token instead of the OAuth token from `copilot login`. To avoid unexpected behavior, unset environment variables you do not intend the CLI to use. There is one exception: in {% data variables.product.prodname_github_codespaces %}, the `GITHUB_TOKEN` that is injected automatically does not take precedence over an account you signed in with using `/login`. A `GITHUB_TOKEN`, `COPILOT_GITHUB_TOKEN`, or `GH_TOKEN` that you export explicitly still does. > * When you configure BYOK provider environment variables (for example, `COPILOT_PROVIDER_BASE_URL`, `COPILOT_PROVIDER_API_KEY`), {% data variables.copilot.copilot_cli_short %} uses these for AI model requests regardless of your {% data variables.product.github %} authentication status. {% data variables.product.github %} tokens are only needed for {% data variables.product.github %}-hosted features. ## Authenticating with OAuth -The OAuth device flow is the default authentication method for interactive use. You can authenticate by running `/login` from {% data variables.copilot.copilot_cli_short %} or `copilot login` from your terminal. +OAuth is the default authentication method for interactive use. You can authenticate by running `/login` from {% data variables.copilot.copilot_cli_short %} or `copilot login` from your terminal. Both offer a browser (web) flow and a device code flow. ### Authenticate with `/login` @@ -101,16 +101,28 @@ The OAuth device flow is the default authentication method for interactive use. 2. {% data variables.product.prodname_ghe_cloud %} with data residency (*.ghe.com) ``` -1. The CLI displays a one-time user code and automatically copies it to your clipboard and opens your browser. +1. Choose how you want to sign in. The recommended option is listed first, and depends on your environment: the browser flow on a local terminal, or the device code flow in a remote or headless environment. The following example shows the prompt in a local terminal: ```text - Waiting for authorization... - Enter one-time code: 1234-5678 at https://github.com/login/device - Press any key to copy to clipboard and open browser... + How do you want to sign in? + 1. Sign in with your browser (recommended) + 2. Sign in with a device code ``` -1. Navigate to the verification URL at `https://github.com/login/device` if your browser did not open automatically. -1. Paste the one-time code in the field on the page. +1. Complete the flow you selected. + + * **Browser**: {% data variables.copilot.copilot_cli_short %} opens your browser so that you can authorize the sign-in. If your browser does not open automatically, the terminal displays a URL that you can visit instead. + + * **Device code**: The CLI displays a one-time user code, and can copy it to your clipboard and open your browser for you. + + ```text + Waiting for authorization... + Enter one-time code: 1234-5678 at https://github.com/login/device + Press any key to copy to clipboard and open browser... + ``` + + Navigate to the verification URL at `https://github.com/login/device` if your browser did not open automatically, then paste the one-time code in the field on the page. + 1. If your organization uses SAML SSO, click **Authorize** next to each organization you want to grant access to. 1. Review the requested permissions and click **Authorize GitHub Copilot CLI**. 1. Return to your terminal. The CLI displays a success message when authentication is complete. @@ -133,14 +145,27 @@ The OAuth device flow is the default authentication method for interactive use. copilot login --host HOSTNAME ``` - The CLI displays a one-time user code and automatically copies it to your clipboard and opens your browser. +1. Authorize the sign-in. + + On a local desktop, `copilot login` uses the browser flow by default. It opens your browser to authorize the sign-in and captures the result on a local loopback callback. + + ```text + Opening your browser to authenticate... + If it doesn't open automatically, visit: + URL + Waiting for authorization... + ``` + + Known remote or headless environments (including SSH, {% data variables.product.prodname_github_codespaces %}, dev containers, and CI) use the device code flow instead. The CLI displays a one-time code and, when supported by the environment, can copy it to your clipboard and open a browser. ```text - To authenticate, visit https://github.com/login/device and enter code 1234-5678. + To authenticate, visit https://github.com/login/device and enter code 1234-5678 + Waiting for authorization... ``` -1. Navigate to the verification URL at `https://github.com/login/device` if your browser did not open automatically. -1. Paste the one-time code in the field on the page. + To force a particular flow, add the `--web-flow` or `--device-code` option. + +1. Navigate to the URL displayed in your terminal if your browser did not open automatically. For the device code flow, paste the one-time code in the field on the page. 1. If your organization uses SAML SSO, click **Authorize** next to each organization you want to grant access to. 1. Review the requested permissions and click **Authorize GitHub Copilot CLI**. 1. Return to your terminal. The CLI displays a success message when authentication is complete. diff --git a/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/troubleshoot-copilot-cli-auth.md b/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/troubleshoot-copilot-cli-auth.md index c122abb364f6..e229d3cc8655 100644 --- a/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/troubleshoot-copilot-cli-auth.md +++ b/content/copilot/how-tos/copilot-cli/set-up-copilot-cli/troubleshoot-copilot-cli-auth.md @@ -62,7 +62,7 @@ If you are using an environment variable, check whether the `COPILOT_GITHUB_TOKE If the command prints nothing, the variable is not set. Set the variable to a valid token. To generate a token, see [AUTOTITLE](/copilot/how-tos/copilot-cli/set-up-copilot-cli/authenticate-copilot-cli#authenticating-with-environment-variables). ```bash copy - export $COPILOT_GITHUB_TOKEN=PERSONAL_ACCESS_TOKEN + export COPILOT_GITHUB_TOKEN=PERSONAL_ACCESS_TOKEN ``` #### macOS keychain @@ -106,7 +106,31 @@ Review the token's status and permissions on {% data variables.product.prodname_ ## {% data variables.product.pat_classic_caps %} rejected -A token starting with `ghp_` is silently ignored and the CLI behaves as if no token is set. +A token starting with `ghp_` is rejected. What happens next depends on how you are running {% data variables.copilot.copilot_cli_short %}. + +In an interactive session, the classic {% data variables.product.pat_generic %} is ignored and the CLI keeps running, so you can authenticate another way, such as with `/login`. {% data variables.copilot.copilot_cli_short %} displays a warning like the following, naming the environment variable that holds the token: + + +```text +Classic Personal Access Tokens (ghp_) are not supported. GITHUB_TOKEN contains a classic PAT and will be ignored. Use /login to authenticate, or replace it with a fine-grained PAT. +``` + + +In non-interactive use, such as `copilot -p` or other automation, if the classic {% data variables.product.pat_generic %} is the only credential available, the CLI refuses to start and displays the following error, naming the environment variable that holds the token: + + +```text +Error: Classic Personal Access Tokens (ghp_) are not supported by Copilot. + +The GITHUB_TOKEN environment variable contains a classic PAT. +Please use a Fine-Grained Personal Access Token or another authentication method. + +To fix this, you can: + • Replace the token in GITHUB_TOKEN with a fine-grained PAT + • Unset GITHUB_TOKEN and run 'gh auth login' to authenticate + • Unset GITHUB_TOKEN and start 'copilot', then use the '/login' command +``` + ### Cause diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli-in-actions.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli-in-actions.md index 45e3320c7024..4bed4fdba593 100644 --- a/content/copilot/how-tos/copilot-cli/use-copilot-cli-in-actions.md +++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli-in-actions.md @@ -50,19 +50,22 @@ jobs: runs-on: ubuntu-latest steps: - uses: {% data reusables.actions.action-checkout %} + with: + fetch-depth: 2 - name: Install Copilot CLI run: npm install -g @github/copilot - name: Run Copilot - run: copilot --yolo -p "Summarize the changes in this commit" + run: copilot -p "Use git show HEAD to summarize the changes in this commit" -s --allow-tool='shell(git show:*)' env: GITHUB_TOKEN: {% raw %}${{ github.token }}{% endraw %} ``` Key details about this example: -* The `--yolo` flag automatically approves all tool, path, and URL permission requests. Non-interactive (`-p`) runs can't display an interactive approval prompt, so any action that isn't pre-approved is denied automatically. To grant only the permissions the task needs, use narrower options such as `--allow-tool`, `--add-dir`, and `--allow-url` instead. +* The `fetch-depth: 2` option fetches the current commit and its parent, allowing `git show HEAD` to calculate the changes introduced by the current commit. +* The `--allow-tool='shell(git show:*)'` option allows {% data variables.copilot.copilot_cli_short %} to run `git show` commands without requesting approval. Non-interactive (`-p`) runs can't display an interactive approval prompt, so any action that isn't pre-approved is denied automatically. * The `copilot-requests: write` permission is required for the workflow to make {% data variables.product.prodname_copilot_short %} requests. -* The `GITHUB_TOKEN` provided by {% data variables.product.prodname_actions %} handles authentication automatically, no additional secrets are needed. +* The `GITHUB_TOKEN` provided by {% data variables.product.prodname_actions %} handles authentication automatically. No additional secrets are needed. > [!NOTE] > You must be on a recent version of {% data variables.copilot.copilot_cli_short %} to use `GITHUB_TOKEN` authentication. Update with `copilot update`, or reinstall the latest version with `npm install -g @github/copilot`. diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/ask-a-side-question.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/ask-a-side-question.md new file mode 100644 index 000000000000..c5c4faf1aaed --- /dev/null +++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/ask-a-side-question.md @@ -0,0 +1,42 @@ +--- +title: Asking a side question in {% data variables.copilot.copilot_cli %} +shortTitle: Ask a side question +intro: During a CLI session, you can ask {% data variables.product.prodname_copilot_short %} a question without adding the prompt, or the answer, to your conversation history. +product: '{% data reusables.gated-features.copilot-cli %}' +versions: + feature: copilot +contentType: how-tos +category: + - Build with Copilot CLI +docsTeamMetrics: + - copilot-cli +--- + +During an interactive {% data variables.copilot.copilot_cli_short %} session, you can use the `/ask` slash command to ask a quick side question and see the answer in a separate dialog. {% data variables.product.prodname_copilot_short %} uses the current conversation as context when it is available, but cannot use tools to answer the question. + +You can use `/ask` while {% data variables.product.prodname_copilot_short %} is currently working on a task. The question and answer are not added to the conversation history, so you should use a normal prompt instead if you want them to become part of the conversation. + +The `/ask` command is not available for remote sessions. + +## Asking a quick question + +1. In a local interactive session, enter `/ask` followed by your question. + + For example: + + ```copilot copy + /ask What does the previous response mean by "idempotent"? + ``` + + > [!NOTE] + > `/btw` is an alias for `/ask`. You can use either command to ask a side question. + + {% data variables.product.prodname_copilot_short %} answers your question in a dialog, separate from the main conversation. + +1. To cancel an answer that is still being generated, or to dismiss a completed answer, press Esc. + +The dialog does not have an input field for follow-up questions. To ask another question, dismiss the dialog and enter another `/ask YOUR-QUESTION` command. + +## Further reading + +* [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#slash-commands-in-the-interactive-interface) diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/browse-issues-prs-gists.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/browse-issues-prs-gists.md index 3393158323d8..287a281510d5 100644 --- a/content/copilot/how-tos/copilot-cli/use-copilot-cli/browse-issues-prs-gists.md +++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/browse-issues-prs-gists.md @@ -44,11 +44,11 @@ Tab switching is paused while another part of the CLI—such as the slash comman The **Issues**, **Pull requests**, and **Gists** tabs all use the same controls. Regardless of which of these tabs you're on: * Use the up and down arrow keys to highlight an item in the list. -* Use the left and right arrow keys to navigate between pages in a list. +* Use Shift+ and Shift+ to move to the previous or next page in a multi-page list. * Press Enter to display a detailed view of the highlighted item. Press Esc in the details view to return to the list. * Press o to open the highlighted item (or, in the detailed view, the current item) on {% data variables.product.prodname_dotcom_the_website %}. * Press c to insert a reference to the item into the prompt input area and jump back to the **Session** tab. -* Press / (on the **Issues** and **Pull requests** tabs) to search {% data variables.product.prodname_dotcom %} with a custom query. Type a query, press Enter to run it, and Esc to cancel or clear it. +* Press / (on the **Issues** and **Pull requests** tabs) to filter the list with your own search terms. Type your terms, press Enter to run the search, and Esc to cancel or clear it. For the full set of keypresses you can use, see [Keyboard reference](#keyboard-reference) at the end of this article. @@ -80,11 +80,11 @@ Pressing c inserts a reference to the pull request into the prompt bo By default, the **Issues** and **Pull requests** tabs show items that involve you. Press a to toggle between this (`involves:@me`) and all open items. -To run your own search, press /. An inline search box opens where you can type a {% data variables.product.prodname_dotcom %} search query, then press Enter to run it. +To run your own search, press /. An inline search box opens where you can type your search terms, then press Enter to run the search. Press Esc to cancel while typing, or to clear an applied search and return to the default list. -You can use the same set of search qualifiers that are available on {% data variables.product.prodname_dotcom_the_website %}. See [AUTOTITLE](/search-github/searching-on-github/searching-issues-and-pull-requests). +Your search terms are added to the qualifiers the tab already applies, so results are always limited to open items in the current repository—and, unless you have pressed a, to items that involve you. Enter plain search terms rather than search qualifiers: text containing a colon is searched for as a literal phrase, so a term such as `label:bug` is not interpreted as a qualifier. ## Browsing your gists @@ -141,7 +141,7 @@ The footer hint bar in the **Issues**, **Pull requests**, and **Gists** tabs sum | --- | --- | --- | | Tab / Shift+Tab | Any home tab | Switch to the next or previous home tab. | | /
j / k | List view | Highlight the next or previous item in a list. | -| /
l / h | List view | Display the next or previous page in a multi-page list. | +| Shift+ / Shift+ | List view | Display the next or previous page in a multi-page list. | | Enter | List view | Open the details view for the highlighted item. | | o | List view or details view | Open the highlighted item on {% data variables.product.prodname_dotcom_the_website %} in your browser. | | c | List view or details view | Insert a reference to the item into the prompt input area and jump back to the **Session** tab. | diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/chronicle.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/chronicle.md index 3702153baed8..e8b583570d94 100644 --- a/content/copilot/how-tos/copilot-cli/use-copilot-cli/chronicle.md +++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/chronicle.md @@ -99,7 +99,7 @@ When you type `/chronicle` without arguments, a picker is displayed that lets yo | ---------- | ----------- | | `standup` | Generate a standup report from your recent work. | | `tips` | Get personalized tips based on your usage patterns. | -| `cost tips` | Get feedback on your token spend and suggestions for reducing costs. | +| `cost-tips` | Get feedback on your token spend and suggestions for reducing costs. | | `search` | Search your session history for specific topics or keywords. | | `improve` | Suggest improvements to your {% data variables.product.prodname_copilot_short %} custom instructions file. | | `reindex` | Rebuild the local session store from your session history, and sync session data to your account. | @@ -160,12 +160,12 @@ You can focus the tips on a specific area by appending context after `/chronicle /chronicle tips for better prompting ``` -### `/chronicle cost tips` +### `/chronicle cost-tips` This analyzes your token usage across recent sessions to show where tokens are being spent and suggests ways to reduce costs. {% data variables.product.prodname_copilot_short %} looks at patterns like prompt length, tool call frequency, and continuation steps to identify opportunities for more efficient usage. ```copilot copy -/chronicle cost tips +/chronicle cost-tips ``` ### `/chronicle search` diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/index.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/index.md index 2972d9f58236..78133051eb4d 100644 --- a/content/copilot/how-tos/copilot-cli/use-copilot-cli/index.md +++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/index.md @@ -13,6 +13,7 @@ children: - /connecting-vs-code - /delegate-tasks-to-cca - /browse-issues-prs-gists + - /ask-a-side-question - /roll-back-changes - /work-with-multiple-sessions - /invoke-custom-agents diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/manage-pull-requests.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/manage-pull-requests.md index 0d5a0e4ac9de..b8c37a1134a9 100644 --- a/content/copilot/how-tos/copilot-cli/use-copilot-cli/manage-pull-requests.md +++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/manage-pull-requests.md @@ -89,6 +89,12 @@ The `/pr` slash command has several subcommands that you can use to perform diff No Yes + +/pr automerge +Do the same as /pr auto, then merge the pull request once it is green. Find out more +No +Yes + @@ -142,6 +148,8 @@ To have {% data variables.product.prodname_copilot_short %} read and address rev {% data variables.product.prodname_copilot_short %} fetches all review comment threads on the pull request, determines what changes are requested, applies the changes to your codebase, and commits and pushes the fixes. Actionable code change requests are prioritized over conversational comments. +For each thread it addresses, {% data variables.product.prodname_copilot_short %} replies within the thread on {% data variables.product.prodname_dotcom_the_website %} to explain the change, then marks the thread as resolved. Threads that need your input are answered but left unresolved. + ## Resolving merge conflicts To sync your branch with the base branch and resolve any merge conflicts, enter: @@ -201,7 +209,9 @@ To have {% data variables.product.prodname_copilot_short %} manage the entire pu /pr auto ``` -If no pull request exists for the current branch, {% data variables.product.prodname_copilot_short %} creates one first. It then loops through the fix phases—review feedback, conflicts, and CI—repeating until there are no more review comments, no conflicts, and all CI checks pass. +If no pull request exists for the current branch, {% data variables.product.prodname_copilot_short %} creates one first. It then loops through the fix phases—review feedback, conflicts, and CI—repeating until there are no more review comments, no conflicts, and all CI checks pass. It does not merge the pull request. + +The loop runs as a self-paced schedule rather than as a single, continuous turn, doing one pass of work each time it runs and pausing between passes while CI settles. Use the `/every` slash command to check on the loop, or to stop it. You can append instructions to guide the pull request creation. For example: @@ -209,6 +219,18 @@ You can append instructions to guide the pull request creation. For example: /pr auto include migration notes in the description ``` +### Automatically merging the pull request + +`/pr auto` deliberately stops when the pull request is green. If you also want {% data variables.product.prodname_copilot_short %} to merge the pull request, enter: + +```copilot copy +/pr automerge +``` + +This runs the same loop as `/pr auto`. Once the pull request is no longer a draft, has no unresolved requests for changes, and all required checks are passing, {% data variables.product.prodname_copilot_short %} enables auto-merge rather than merging the pull request itself. {% data variables.product.prodname_dotcom %} then completes the merge as soon as every remaining requirement is satisfied, including any required approvals and merge queue. {% data variables.product.prodname_copilot_short %} keeps the loop running—handling any further review feedback or check failures—until the pull request is merged or closed. + +You can use `/pr agentmerge` as an alias for `/pr automerge`. + ## Further reading * [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/allowing-tools) diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/set-session-limit.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/set-session-limit.md index d4ba136edc09..acd352e880f2 100644 --- a/content/copilot/how-tos/copilot-cli/use-copilot-cli/set-session-limit.md +++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/set-session-limit.md @@ -27,8 +27,8 @@ These session limits are **soft limits**. If a response is in progress when the How the limit is set and applied depends on whether you are in an interactive session or running the CLI programmatically. -> [!TIP] -> {% data variables.product.prodname_ai_credit_singular %} session limits work best when set to > 30 {% data variables.product.prodname_ai_credits_short %} as most model calls will cost more than 20 {% data variables.product.prodname_ai_credits_short %}. +> [!NOTE] +> {% data variables.product.prodname_ai_credit_singular %} session limits must be set to at least 30 {% data variables.product.prodname_ai_credits_short %}. ### Setting a limit within an interactive session diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/speed-up-task-completion.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/speed-up-task-completion.md index d6362a0e34cb..1c543b6f7ed7 100644 --- a/content/copilot/how-tos/copilot-cli/use-copilot-cli/speed-up-task-completion.md +++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/speed-up-task-completion.md @@ -47,6 +47,44 @@ Use up and down keyboard keys to navigate through the list of background tasks. Press Esc to exit the task list and return to the main CLI prompt. +## Starting in fleet mode from the command line + +You can start {% data variables.copilot.copilot_cli_short %} in fleet mode directly from the command line by using the `--fleet` option. This is the command-line equivalent of the `/fleet` slash command. It wraps the prompt you supply, so {% data variables.product.prodname_copilot_short %} starts working on it in fleet mode straight away. You don't have to enter `/fleet` in an interactive session. + +The `--fleet` option is not supported in ACP server mode, so you cannot combine it with the `--acp` option. + +You must provide a prompt for {% data variables.product.prodname_copilot_short %} to work on. You can supply the prompt in one of three ways: + +* With the `-i` (interactive) option, to start an interactive session that begins in fleet mode. +* With the `-p` (prompt) option, to run a task without an interactive session. The session exits when the task is complete. +* By piping the prompt in through standard input. + +### When to use the `--fleet` option + +The `--fleet` option is particularly useful for automation, using the `-p` option, when you know that a task can be split into parts that run in parallel. + +For more information about the `-p` option and running tasks without an interactive session, see [AUTOTITLE](/copilot/how-tos/copilot-cli/automate-copilot-cli/run-cli-programmatically). + +### Examples + +Run a task in fleet mode without an interactive session: + +```shell copy +copilot --fleet -p "Refactor the utils package and update everything that calls it" --allow-tool write +``` + +Pipe a prompt into fleet mode: + +```shell copy +echo "Update the project dependencies and run the tests" | copilot --fleet +``` + +Start an interactive session that begins in fleet mode: + +```shell copy +copilot --fleet -i "Add unit tests for every module in the src directory" +``` + ## Further reading * [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#slash-commands-in-the-interactive-interface) diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/steer-agents.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/steer-agents.md index e6d25c59e903..83e1a083ff34 100644 --- a/content/copilot/how-tos/copilot-cli/use-copilot-cli/steer-agents.md +++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/steer-agents.md @@ -16,9 +16,11 @@ docsTeamMetrics: ## Steer the conversation while {% data variables.product.prodname_copilot_short %} is thinking -While {% data variables.product.prodname_copilot_short %} is working on a task, you can enter a new prompt at any time. Any input you send while {% data variables.product.prodname_copilot_short %} is thinking is treated as steering and is considered in the context of the current task. +While {% data variables.product.prodname_copilot_short %} is working on a task, you can enter a new prompt at any time. By default, a plain prompt you send while {% data variables.product.prodname_copilot_short %} is thinking is treated as steering and is considered in the context of the current task. -There is no separate instruction queue. To provide additional instructions, enter another prompt while {% data variables.product.prodname_copilot_short %} is running. {% data variables.product.prodname_copilot_short %} processes each message in order as part of the active task. +## Queue a prompt to be processed next + +You can also queue a message instead of steering with it, by pressing Ctrl+Enter (or Ctrl+Q) instead of Enter. A queued message waits until the current task finishes, then runs as the next turn, instead of being folded into the task that's in progress. For more information about queued prompts, see [AUTOTITLE](/copilot/concepts/agents/copilot-cli/cancel-and-roll-back). Steering lets you: diff --git a/content/copilot/how-tos/copilot-cli/use-copilot-cli/voice-input.md b/content/copilot/how-tos/copilot-cli/use-copilot-cli/voice-input.md index 2906a434e7dd..b1ee6a496d02 100644 --- a/content/copilot/how-tos/copilot-cli/use-copilot-cli/voice-input.md +++ b/content/copilot/how-tos/copilot-cli/use-copilot-cli/voice-input.md @@ -14,13 +14,15 @@ docsTeamMetrics: Voice input lets you dictate prompts to {% data variables.copilot.copilot_cli_short %} by speaking into your microphone instead of typing on the keyboard. Transcription runs entirely on your local machine. Your audio is not sent over the network. The recognized text is inserted at the cursor position in the prompt input area, where you can edit it before submitting. -## Prerequisite +## Prerequisites You need a working microphone connected to your machine. By default, voice input uses your system's default microphone. +Voice input is supported on Windows (x64 and ARM64), Linux (x64), and macOS on Apple Silicon (ARM64). It is not available on Intel-based Macs. + ## Limitation -Voice input is currently only supported for English and Spanish dictation. English is the default language for speech recognition. +{% data variables.copilot.copilot_cli_short %} offers a fixed set of speech-to-text models: a multilingual model, which is the default, plus a dedicated English model and a dedicated Spanish model. Only these models are listed in the voice models picker. ## Enabling voice input @@ -31,12 +33,12 @@ Before you can dictate prompts, you need to download the voice runtime that powe The download runs in the background. You can keep using {% data variables.copilot.copilot_cli_short %} while it completes. -1. When you're prompted to choose a voice model, press Enter with "Download default model" selected to download the English speech-to-text model. +1. When you're prompted to choose a voice model, press Enter with "Download default model" selected to download the default multilingual speech-to-text model. - Alternatively, if you want to dictate in Spanish: + Alternatively, if you want to use the dedicated English or Spanish model: 1. Use the arrow keys on your keyboard to select "Browse models", then press Enter. - 1. In the voice models picker, use the arrow keys to select the Spanish speech-to-text model, then press Enter to download it. + 1. In the voice models picker, use the arrow keys to select the model you want, then press Enter to download it. 1. Press Esc to exit the picker. ## Using voice input @@ -92,7 +94,7 @@ If you have more than one microphone available on your system, you can switch in ## Switching voice models -You can dictate prompts in English or Spanish, but the appropriate voice model must be downloaded and activated for the language you want to use. +The default multilingual model handles more than one language, but you can switch to the dedicated English or Spanish model if you prefer. The model you want must be downloaded and activated before you can use it. To change to a different voice model: @@ -100,7 +102,7 @@ To change to a different voice model: The voice models picker is displayed. A check mark indicates the currently active model. -1. In the voice models picker, use the arrow keys on your keyboard to select the English or Spanish speech-to-text, then press Enter. +1. In the voice models picker, use the arrow keys on your keyboard to select the model you want to use, then press Enter. If the model is not already downloaded, it will be downloaded to your machine. diff --git a/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-azure-boards.md b/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-azure-boards.md index a34bb684e624..d2a9d122f749 100644 --- a/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-azure-boards.md +++ b/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-azure-boards.md @@ -63,4 +63,4 @@ If you already have the Azure Boards application installed on {% data variables. ## Further reading * [AUTOTITLE](/copilot/concepts/agents/cloud-agent/about-cloud-agent) -* [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management) +* [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access) diff --git a/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-jira.md b/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-jira.md index 8c3b7247aabe..2c554d68422d 100644 --- a/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-jira.md +++ b/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-jira.md @@ -140,7 +140,7 @@ Use custom instructions to set defaults that apply to every session, such as the {% data variables.copilot.copilot_cloud_agent %} uses {% data variables.product.prodname_actions %} minutes and {% data variables.product.prodname_ai_credits_short %}. -For more information, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +For more information, see [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). ## Adding or removing an organization to the {% data variables.product.prodname_copilot %} for Jira app @@ -200,6 +200,6 @@ To resolve this issue, follow these steps to start a new active SSO session for ## Further reading * [AUTOTITLE](/copilot/concepts/agents/cloud-agent/about-cloud-agent) -* [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management) +* [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access) * [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/configure-mcp-servers#example-atlassian) * [Collaborate on work items with AI agents](https://support.atlassian.com/jira-software-cloud/docs/collaborate-on-work-items-with-ai-agents/) in the Atlassian documentation diff --git a/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-linear.md b/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-linear.md index 6d546c1296fa..c4c718e92361 100644 --- a/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-linear.md +++ b/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-linear.md @@ -96,4 +96,4 @@ After you trigger {% data variables.copilot.copilot_cloud_agent %} from a Linear ## Further reading * [AUTOTITLE](/copilot/concepts/agents/cloud-agent/about-cloud-agent) -* [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management) +* [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access) diff --git a/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-teams.md b/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-teams.md index 41c5fd13e32c..9a10abe04f15 100644 --- a/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-teams.md +++ b/content/copilot/how-tos/copilot-integrations/integrate-cloud-agent-with-teams.md @@ -129,4 +129,4 @@ You can view and share feedback in our [discussion forum](https://github.com/org ## Further reading * [AUTOTITLE](/copilot/concepts/agents/cloud-agent/about-cloud-agent) -* [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management) +* [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access) diff --git a/content/copilot/how-tos/copilot-on-github/chat-with-copilot/chat-in-mobile.md b/content/copilot/how-tos/copilot-on-github/chat-with-copilot/chat-in-mobile.md index 267cd13ba512..48f05a93d72e 100644 --- a/content/copilot/how-tos/copilot-on-github/chat-with-copilot/chat-in-mobile.md +++ b/content/copilot/how-tos/copilot-on-github/chat-with-copilot/chat-in-mobile.md @@ -24,7 +24,7 @@ category: The following limitations apply to {% data variables.copilot.copilot_mobile_short %}: -* If you're a member of an organization or enterprise, your access to {% data variables.copilot.copilot_mobile_short %} may depend on policies set by your administrator. See [AUTOTITLE](/copilot/concepts/policies). +* If you're a member of an organization or enterprise, your access to {% data variables.copilot.copilot_mobile_short %} may depend on policies set by your administrator. See [AUTOTITLE](/copilot/concepts/enterprise/policies). * If you purchased {% data variables.copilot.copilot_pro_short %}, {% data variables.copilot.copilot_pro_plus_short %}, or {% data variables.copilot.copilot_max_short %} through an in-app purchase on iOS or Android, you cannot enable additional {% data variables.product.prodname_ai_credits %}. To do so, cancel your mobile subscription and re-subscribe on {% data variables.product.prodname_dotcom_the_website %} through a web browser. ## Asking a general question about software development diff --git a/content/copilot/how-tos/copilot-on-github/copilot-for-github-tasks/use-copilot-to-create-or-update-issues.md b/content/copilot/how-tos/copilot-on-github/copilot-for-github-tasks/use-copilot-to-create-or-update-issues.md index cf4e82664d6d..e6a265155af3 100644 --- a/content/copilot/how-tos/copilot-on-github/copilot-for-github-tasks/use-copilot-to-create-or-update-issues.md +++ b/content/copilot/how-tos/copilot-on-github/copilot-for-github-tasks/use-copilot-to-create-or-update-issues.md @@ -81,7 +81,7 @@ Review the draft in the workbench, then click **Review and create** > **Create i ## Assign an issue to {% data variables.product.prodname_copilot_short %} -With {% data variables.copilot.copilot_cloud_agent %} enabled, you can assign an issue to {% data variables.product.prodname_copilot_short %} during creation. See [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management). +With {% data variables.copilot.copilot_cloud_agent %} enabled, you can assign an issue to {% data variables.product.prodname_copilot_short %} during creation. See [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access). * **Natural language:** Include `Assign this issue to {% data variables.product.prodname_copilot_short %}.` in your prompt. * **Manually:** Select "{% data variables.product.prodname_copilot_short %}" from the assignee list. diff --git a/content/copilot/how-tos/copilot-on-github/customize-copilot/configure-mcp-servers.md b/content/copilot/how-tos/copilot-on-github/customize-copilot/configure-mcp-servers.md index 3edc35457f0a..f8b9385dc721 100644 --- a/content/copilot/how-tos/copilot-on-github/customize-copilot/configure-mcp-servers.md +++ b/content/copilot/how-tos/copilot-on-github/customize-copilot/configure-mcp-servers.md @@ -87,6 +87,9 @@ The configuration object can contain the following keys: * `tools` (`string[]`): The tools from the MCP server to enable. You may be able to find a list of tools in the server's documentation, or in its code. We strongly recommend that you allowlist specific read-only tools, since the agent will be able to use these tools autonomously and will not ask you for approval first. You can also enable all tools by including `*` in the array. * `type` (`string`): {% data variables.copilot.copilot_cloud_agent %} accepts `"local"`, `"stdio"`, `"http"`, or `"sse"`. +> [!NOTE] +> For {% data variables.copilot.copilot_code-review_short %}, each tool in the MCP server's `tools/list` response must set `annotations.readOnlyHint` to `true` to allow {% data variables.product.prodname_copilot_short %} to use it. {% data variables.copilot.copilot_code-review_short %} excludes tools when this annotation is missing or set to `false`. For more information, see [Tool annotations in the MCP specification](https://modelcontextprotocol.io/specification/2025-11-25/schema#toolannotations-readonlyhint). + **Local MCP specific keys** * `command` (`string`): Required. The command to run to start the MCP server. * `args` (`string[]`): Required. The arguments to pass to the `command`. @@ -348,13 +351,14 @@ If your MCP servers require any dependencies that are not installed on the {% da The {% data variables.product.github %} MCP server is enabled by default and connects to {% data variables.product.github %} with a specially scoped token that only has read-only access to the current repository. -If you want to allow {% data variables.product.prodname_copilot_short %} to access data outside the current repository, you can give it a {% data variables.product.pat_generic %} with wider access. +If you want to allow {% data variables.product.prodname_copilot_short %} to access data outside the current repository, you can configure a {% data variables.product.pat_generic %} with wider access or a {% data variables.product.prodname_github_app %}. -1. Create a {% data variables.product.pat_generic %} with the appropriate permissions. We recommend using a {% data variables.product.pat_v2 %}, where you can limit the token's access to read-only permissions on specific repositories. For more information on {% data variables.product.pat_generic_plural %}, see [AUTOTITLE](/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.sidebar-settings %} 1. {% data reusables.user-settings.code-planning-automation %} click **{% data variables.product.prodname_copilot_short %}** then **MCP servers**. -1. Add your configuration in the "MCP configuration" section. For example, you can add the following: +1. Add your configuration in the "MCP configuration" section. + + For {% data variables.product.pat_generic %}, you can add the following example: ```javascript copy // If you copy and paste this example, you will need to remove the comments prefixed with `//`, which are not valid JSON. @@ -375,10 +379,48 @@ If you want to allow {% data variables.product.prodname_copilot_short %} to acce } ``` + For {% data variables.product.prodname_github_app %}, you can add the following example: + + ```javascript copy + { + "mcpServers": { + "github-wider-access": { + "type": "stdio", + "command": "docker", + "args": [ + "run", "--rm", "-i", + "-e", "GITHUB_APP_ID", + "-e", "GITHUB_APP_INSTALLATION_ID", + "-e", "GITHUB_APP_PRIVATE_KEY", + "-e", "GITHUB_READ_ONLY", + "-e", "GITHUB_TOOLSETS", + "ghcr.io/github/github-mcp-server" + ], + "env": { + "GITHUB_APP_ID": "$COPILOT_MCP_GITHUB_APP_ID", + "GITHUB_APP_INSTALLATION_ID": "$COPILOT_MCP_GITHUB_APP_INSTALLATION_ID", + "GITHUB_APP_PRIVATE_KEY": "$COPILOT_MCP_GITHUB_APP_PRIVATE_KEY", + "GITHUB_READ_ONLY": "true", + "GITHUB_TOOLSETS": "repos,pull_requests" + }, + "tools": ["*"] + } + } + } + ``` + + For more information on the {% data variables.product.github %} MCP server with {% data variables.product.prodname_github_app %}, refer to [GitHub App authentication](https://github.com/github/github-mcp-server/blob/main/docs/github-app-auth.md). + For more information on toolsets, refer to the [README](https://github.com/github/github-mcp-server?tab=readme-ov-file#available-toolsets) in the {% data variables.product.github %} Remote MCP Server documentation. 1. Click **Save MCP configuration**. -1. Add an Agents secret called `COPILOT_MCP_GITHUB_PERSONAL_ACCESS_TOKEN` with your {% data variables.product.pat_generic %} as the value. You can configure this at either the organization or repository level. For more information, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/configure-secrets-and-variables). +1. Add your Agents secrets and variables. You can configure these at either the organization or repository level. For more information, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/configure-secrets-and-variables). + + For {% data variables.product.pat_generic %}, add a secret called `COPILOT_MCP_GITHUB_PERSONAL_ACCESS_TOKEN` with your {% data variables.product.pat_generic %} as the value. We recommend using a {% data variables.product.pat_v2 %} so you can limit the token's access to read-only permissions on specific repositories. For more information on {% data variables.product.pat_generic_plural %}, see [AUTOTITLE](/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). + + For {% data variables.product.prodname_github_app %}, your Agents secrets and variables must be prefixed with `COPILOT_MCP_`. For example, add a variable called `COPILOT_MCP_GITHUB_APP_ID` with your {% data variables.product.prodname_github_app %} ID as the value, a variable called `COPILOT_MCP_GITHUB_APP_INSTALLATION_ID` with your {% data variables.product.prodname_github_app %} installation ID as the value, and a secret called `COPILOT_MCP_GITHUB_APP_PRIVATE_KEY` with your {% data variables.product.prodname_github_app %} private key as the value. + +1. If you see a firewall warning for `api.github.com` when using the {% data variables.product.github %} MCP server, add `api.github.com` to the custom allowlist. For more information, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/customize-the-firewall). For information on using the {% data variables.product.github %} MCP server in other environments, see [AUTOTITLE](/copilot/how-tos/provide-context/use-mcp-in-your-ide/use-the-github-mcp-server). diff --git a/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/customize-the-agent-environment.md b/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/customize-the-agent-environment.md index 8ee0ce1cf4e6..d8c79e090e7e 100644 --- a/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/customize-the-agent-environment.md +++ b/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/customize-the-agent-environment.md @@ -49,9 +49,9 @@ A `copilot-setup-steps.yml` file looks like a normal {% data variables.product.p > [!NOTE] > The `copilot-setup-steps.yml` workflow won't trigger unless it's present on your default branch. -Here is a simple example of a `copilot-setup-steps.yml` file for a TypeScript project that clones the project, installs Node.js and downloads and caches the project's dependencies. You should customize this to fit your own project's language(s) and dependencies: +Here is a simple example of a `copilot-setup-steps.yml` file for a TypeScript project that clones the project, installs Node.js and downloads and caches the project's dependencies. You should customize this to fit your own project, including its language(s), its dependencies, and the workflow triggers you need. For example, you wouldn't typically run on both `push` and `pull_request`. -```yaml copy +```yaml name: "Copilot Setup Steps" # Automatically run the setup steps when they are changed to allow for easy validation, and diff --git a/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview.md b/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview.md index 07591c5dc3d1..9e83e1e90d97 100644 --- a/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview.md +++ b/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview.md @@ -16,7 +16,7 @@ This quickstart walks you through customizing {% data variables.product.prodname ## Prerequisites * Any paid {% data variables.product.prodname_copilot_short %} plan. For more information, see [AUTOTITLE](/copilot/get-started/plans). -* {% data variables.copilot.copilot_cloud_agent_short_cap_c %} enabled for your organization or account. For more information, see [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management). +* {% data variables.copilot.copilot_cloud_agent_short_cap_c %} enabled for your organization or account. For more information, see [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access). * Write access to a {% data variables.product.github %} repository. ## Step 1: Teach {% data variables.product.prodname_copilot_short %} your project's conventions diff --git a/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-the-firewall.md b/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-the-firewall.md index fb85b596b6e3..1cef5f168f55 100644 --- a/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-the-firewall.md +++ b/content/copilot/how-tos/copilot-on-github/customize-copilot/customize-the-firewall.md @@ -40,7 +40,7 @@ If {% data variables.product.prodname_copilot_short %} tries to make a request w The agent firewall has important limitations that affect its security coverage. -* **Only applies to processes started by the agent**: The firewall only applies to processes started by the agent via its Bash tool. It does not apply to Model Context Protocol (MCP) servers or processes started in configured {% data variables.product.prodname_copilot_short %} setup steps. +* **Only applies to processes started by the agent**: The firewall only applies to processes started by the agent via its Bash tool. It does not apply directly to Model Context Protocol (MCP) server processes or processes started in configured {% data variables.product.prodname_copilot_short %} setup steps. Other agent processes can still make network requests while an MCP server is in use, and these requests are subject to the firewall. * **Only applies within the {% data variables.product.prodname_actions %} appliance**: The firewall only operates within the {% data variables.product.prodname_actions %} appliance environment. It does not apply to processes running outside of this environment. * **Bypass potential**: Sophisticated attacks may bypass the firewall, potentially allowing unauthorized network access and data exfiltration. diff --git a/content/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-a-dedicated-enterprise-for-copilot-business.md b/content/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-a-dedicated-enterprise-for-copilot-business.md index 808cf9cf95d9..7e9b7d97774e 100644 --- a/content/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-a-dedicated-enterprise-for-copilot-business.md +++ b/content/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-a-dedicated-enterprise-for-copilot-business.md @@ -18,7 +18,7 @@ category: - Manage Copilot for a team --- -Before you begin, see [AUTOTITLE](/copilot/concepts/about-enterprise-accounts-for-copilot-business) to understand how to use a standard enterprise account for {% data variables.copilot.copilot_business_short %} without consuming {% data variables.product.prodname_ghe_cloud %} licenses. +Before you begin, see [AUTOTITLE](/copilot/concepts/enterprise/about-enterprise-accounts-for-copilot-business) to understand how to use a standard enterprise account for {% data variables.copilot.copilot_business_short %} without consuming {% data variables.product.prodname_ghe_cloud %} licenses. ## Create an enterprise account @@ -63,7 +63,7 @@ For detailed steps, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-f After you assign licenses, you can centrally govern how members use {% data variables.product.prodname_copilot_short %}: * **Policies**. Control feature availability with policies in AI Controls. -* **Enterprise managed settings**. Distribute client governance and extensibility configuration from a centrally defined source. For example, you can disable bypass mode, restrict plugins, and set the default model for new conversations. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-managed-settings). +* **Enterprise managed settings**. Distribute client governance and extensibility configuration from a centrally defined source. For example, you can disable bypass mode, restrict plugins, and set the default model for new conversations. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/get-started). To use server-managed settings, you need an organization and a `.github-private` repository, which requires a {% data variables.product.prodname_enterprise %} license for the user who creates them. Alternatively, you can deploy managed settings through MDM or a file-based deployment without creating an organization. diff --git a/content/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-for-enterprise.md b/content/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-for-enterprise.md index 47287e83f030..147f10a3cfcd 100644 --- a/content/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-for-enterprise.md +++ b/content/copilot/how-tos/copilot-on-github/set-up-copilot/enable-copilot/set-up-for-enterprise.md @@ -17,6 +17,8 @@ redirect_from: contentType: how-tos category: - Configure Copilot +docsTeamMetrics: + - ai-governance --- ## Enable {% data variables.product.prodname_copilot %} diff --git a/content/copilot/how-tos/copilot-on-github/use-copilot-agents/copilot-code-review.md b/content/copilot/how-tos/copilot-on-github/use-copilot-agents/copilot-code-review.md index b9ffeb91fd26..e2e0f329d28b 100644 --- a/content/copilot/how-tos/copilot-on-github/use-copilot-agents/copilot-code-review.md +++ b/content/copilot/how-tos/copilot-on-github/use-copilot-agents/copilot-code-review.md @@ -58,13 +58,13 @@ When you push new changes to a pull request that {% data variables.product.prodn To manually request a re-review, click the {% octicon "sync" aria-label="Re-request review" %} button next to {% data variables.product.prodname_copilot_short %}'s name in the **Reviewers** menu. For more information, see [AUTOTITLE](/pull-requests/how-tos/create-pull-requests/requesting-a-pull-request-review). -To automatically request re-reviews on every push, enable automatic code review and select **Review new pushes** in the ruleset settings. For more information, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review#configuring-automatic-code-review-for-repositories-in-an-organization). +To automatically request re-reviews on every push, enable automatic code review and select **Review new pushes** in the ruleset settings. For more information, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review#configuring-automatic-code-review-for-repositories-in-an-organization). When re-reviewing, {% data variables.product.prodname_copilot_short %} may repeat previous comments, even if you resolved or downvoted them. ## Enable automatic reviews -By default, you request reviews from {% data variables.product.prodname_copilot_short %} manually on each pull request. To enable automatic reviews for all pull requests, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review). +By default, you request reviews from {% data variables.product.prodname_copilot_short %} manually on each pull request. To enable automatic reviews for all pull requests, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review). ## Customize reviews with custom instructions diff --git a/content/copilot/how-tos/copilot-on-github/use-copilot-agents/overview.md b/content/copilot/how-tos/copilot-on-github/use-copilot-agents/overview.md index 945ae16c17e1..1e60d6018a65 100644 --- a/content/copilot/how-tos/copilot-on-github/use-copilot-agents/overview.md +++ b/content/copilot/how-tos/copilot-on-github/use-copilot-agents/overview.md @@ -11,7 +11,7 @@ contentType: how-tos ## Prerequisite -You need a repository where {% data variables.copilot.copilot_cloud_agent %} is enabled. For {% data variables.copilot.copilot_business_short %} and {% data variables.copilot.copilot_enterprise_short %} subscribers, an administrator must enable the agent before you can use it. See [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management). +You need a repository where {% data variables.copilot.copilot_cloud_agent %} is enabled. For {% data variables.copilot.copilot_business_short %} and {% data variables.copilot.copilot_enterprise_short %} subscribers, an administrator must enable the agent before you can use it. See [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access). ## Step 1: Assign an issue to {% data variables.product.prodname_copilot_short %} diff --git a/content/copilot/how-tos/copilot-sdk/auth/authenticate.md b/content/copilot/how-tos/copilot-sdk/auth/authenticate.md index 7b6068443725..efd6654f5bb8 100644 --- a/content/copilot/how-tos/copilot-sdk/auth/authenticate.md +++ b/content/copilot/how-tos/copilot-sdk/auth/authenticate.md @@ -404,5 +404,5 @@ const client = new CopilotClient({ ## Next steps * [AUTOTITLE](/copilot/how-tos/copilot-sdk/auth/byok) - Learn how to use your own API keys -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started) - Build your first Copilot-powered app +* [AUTOTITLE](/copilot/get-started/sdk-quickstart) - Build your first Copilot-powered app * [AUTOTITLE](/copilot/how-tos/copilot-sdk/features/mcp) - Connect to external tools diff --git a/content/copilot/how-tos/copilot-sdk/auth/byok.md b/content/copilot/how-tos/copilot-sdk/auth/byok.md index a5ec405399ee..6624808ec975 100644 --- a/content/copilot/how-tos/copilot-sdk/auth/byok.md +++ b/content/copilot/how-tos/copilot-sdk/auth/byok.md @@ -594,4 +594,4 @@ foundry model run phi-4-mini ## Next steps * [AUTOTITLE](/copilot/how-tos/copilot-sdk/auth) - Learn about all authentication methods -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started) - Build your first Copilot-powered app +* [AUTOTITLE](/copilot/get-started/sdk-quickstart) - Build your first Copilot-powered app diff --git a/content/copilot/how-tos/copilot-sdk/features/hooks.md b/content/copilot/how-tos/copilot-sdk/features/hooks.md index 3958e751636a..172c78fd7633 100644 --- a/content/copilot/how-tos/copilot-sdk/features/hooks.md +++ b/content/copilot/how-tos/copilot-sdk/features/hooks.md @@ -890,7 +890,7 @@ For full type definitions, input/output field tables, and additional examples fo ## See also -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started) +* [AUTOTITLE](/copilot/get-started/sdk-quickstart) * [AUTOTITLE](/copilot/how-tos/copilot-sdk/features/custom-agents) * [AUTOTITLE](/copilot/how-tos/copilot-sdk/features/streaming-events) * [AUTOTITLE](/copilot/how-tos/copilot-sdk/troubleshooting/debugging) diff --git a/content/copilot/how-tos/copilot-sdk/features/mcp.md b/content/copilot/how-tos/copilot-sdk/features/mcp.md index d23b054c0bb9..9569df0f34d1 100644 --- a/content/copilot/how-tos/copilot-sdk/features/mcp.md +++ b/content/copilot/how-tos/copilot-sdk/features/mcp.md @@ -340,7 +340,7 @@ For detailed debugging guidance, see the **[AUTOTITLE](/copilot/how-tos/copilot- * [Model Context Protocol Specification](https://modelcontextprotocol.io/) * [MCP Servers Directory](https://github.com/modelcontextprotocol/servers) - Community MCP servers * [GitHub MCP Server](https://github.com/github/github-mcp-server) - Official GitHub MCP server -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started) - SDK basics and custom tools +* [AUTOTITLE](/copilot/get-started/sdk-quickstart) - SDK basics and custom tools * [AUTOTITLE](/copilot/how-tos/copilot-sdk/troubleshooting/debugging) - SDK-wide debugging ## See also diff --git a/content/copilot/how-tos/copilot-sdk/features/skills.md b/content/copilot/how-tos/copilot-sdk/features/skills.md index 17676dc35f94..71fa9121dc63 100644 --- a/content/copilot/how-tos/copilot-sdk/features/skills.md +++ b/content/copilot/how-tos/copilot-sdk/features/skills.md @@ -373,6 +373,6 @@ If multiple skills provide conflicting instructions: ## See also -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started#create-custom-agents) - Define specialized AI personas -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started#step-4-add-a-custom-tool) - Build your own tools +* [AUTOTITLE](/copilot/get-started/sdk-quickstart#create-custom-agents) - Define specialized AI personas +* [AUTOTITLE](/copilot/get-started/sdk-quickstart#step-4-add-a-custom-tool) - Build your own tools * [AUTOTITLE](/copilot/how-tos/copilot-sdk/features/mcp) - Connect external tool providers diff --git a/content/copilot/how-tos/copilot-sdk/features/steering-and-queueing.md b/content/copilot/how-tos/copilot-sdk/features/steering-and-queueing.md index b1576cef0332..3669f9c5c2ca 100644 --- a/content/copilot/how-tos/copilot-sdk/features/steering-and-queueing.md +++ b/content/copilot/how-tos/copilot-sdk/features/steering-and-queueing.md @@ -546,7 +546,7 @@ class InteractiveChat { ## See also -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started): Set up a session and send messages +* [AUTOTITLE](/copilot/get-started/sdk-quickstart): Set up a session and send messages * [AUTOTITLE](/copilot/how-tos/copilot-sdk/features/custom-agents): Define specialized agents with scoped tools * [AUTOTITLE](/copilot/how-tos/copilot-sdk/hooks/hooks-overview): React to session lifecycle events * [AUTOTITLE](/copilot/how-tos/copilot-sdk/features/session-persistence): Resume sessions across restarts diff --git a/content/copilot/how-tos/copilot-sdk/hooks/hooks-overview.md b/content/copilot/how-tos/copilot-sdk/hooks/hooks-overview.md index 2a5df49b0ab7..58541e6eeb89 100644 --- a/content/copilot/how-tos/copilot-sdk/hooks/hooks-overview.md +++ b/content/copilot/how-tos/copilot-sdk/hooks/hooks-overview.md @@ -277,6 +277,6 @@ const session = await client.createSession({ ## See also -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started) -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started#step-4-add-a-custom-tool) +* [AUTOTITLE](/copilot/get-started/sdk-quickstart) +* [AUTOTITLE](/copilot/get-started/sdk-quickstart#step-4-add-a-custom-tool) * [AUTOTITLE](/copilot/how-tos/copilot-sdk/troubleshooting/debugging) diff --git a/content/copilot/how-tos/copilot-sdk/index.md b/content/copilot/how-tos/copilot-sdk/index.md index 094b1f3411a1..2285a39ff9fa 100644 --- a/content/copilot/how-tos/copilot-sdk/index.md +++ b/content/copilot/how-tos/copilot-sdk/index.md @@ -9,7 +9,6 @@ versions: ghec: '*' contentType: how-tos children: - - /getting-started - /auth - /features - /hooks diff --git a/content/copilot/how-tos/copilot-sdk/integrations/microsoft-agent-framework.md b/content/copilot/how-tos/copilot-sdk/integrations/microsoft-agent-framework.md index 2bc40d5b2b24..ce4a8769c230 100644 --- a/content/copilot/how-tos/copilot-sdk/integrations/microsoft-agent-framework.md +++ b/content/copilot/how-tos/copilot-sdk/integrations/microsoft-agent-framework.md @@ -33,7 +33,7 @@ The Microsoft Agent Framework is the unified successor to Semantic Kernel and Au Before you begin, ensure you have: -* A working [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started) in your language of choice +* A working [AUTOTITLE](/copilot/get-started/sdk-quickstart) in your language of choice * A GitHub Copilot subscription (Individual, Business, or Enterprise) * The Copilot CLI installed or available via the SDK's bundled CLI @@ -593,7 +593,7 @@ client.stop().get(); ### Copilot SDK options (passed through) -All standard [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started) options are still available when creating the underlying Copilot client. The MAF wrapper delegates to the SDK under the hood: +All standard [AUTOTITLE](/copilot/get-started/sdk-quickstart) options are still available when creating the underlying Copilot client. The MAF wrapper delegates to the SDK under the hood: | SDK Feature | MAF Support | |-------------|-------------| @@ -661,7 +661,7 @@ catch (AgentException ex) ## See also -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started): initial Copilot SDK setup +* [AUTOTITLE](/copilot/get-started/sdk-quickstart): initial Copilot SDK setup * [AUTOTITLE](/copilot/how-tos/copilot-sdk/features/custom-agents): define specialized sub-agents within the SDK * [AUTOTITLE](/copilot/how-tos/copilot-sdk/features/skills): reusable prompt modules * [Microsoft Agent Framework documentation](https://learn.microsoft.com/en-us/agent-framework/agents/providers/github-copilot): official MAF docs for the Copilot provider diff --git a/content/copilot/how-tos/copilot-sdk/setup/bundled-cli.md b/content/copilot/how-tos/copilot-sdk/setup/bundled-cli.md index 7f9f3b012772..51076cb21120 100644 --- a/content/copilot/how-tos/copilot-sdk/setup/bundled-cli.md +++ b/content/copilot/how-tos/copilot-sdk/setup/bundled-cli.md @@ -215,4 +215,4 @@ Session state persists at `~/.copilot/session-state/{sessionId}/`. * **[AUTOTITLE](/copilot/how-tos/copilot-sdk/auth/byok)**: Use your own model provider keys * **[AUTOTITLE](/copilot/how-tos/copilot-sdk/features/session-persistence)**: Advanced session management -* **[AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started)**: Build a complete app +* **[AUTOTITLE](/copilot/get-started/sdk-quickstart)**: Build a complete app diff --git a/content/copilot/how-tos/copilot-sdk/setup/choosing-a-setup-path.md b/content/copilot/how-tos/copilot-sdk/setup/choosing-a-setup-path.md index 79d5e41f9608..34c16e7d36cd 100644 --- a/content/copilot/how-tos/copilot-sdk/setup/choosing-a-setup-path.md +++ b/content/copilot/how-tos/copilot-sdk/setup/choosing-a-setup-path.md @@ -101,7 +101,7 @@ All guides assume you have: * Go: `go get github.com/github/copilot-sdk/go` (requires separate CLI installation) * .NET: `dotnet add package GitHub.Copilot.SDK` -If you're brand new, start with the **[AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started)** first, then come back here for production configuration. +If you're brand new, start with the **[AUTOTITLE](/copilot/get-started/sdk-quickstart)** first, then come back here for production configuration. ## Next steps diff --git a/content/copilot/how-tos/copilot-sdk/setup/local-cli.md b/content/copilot/how-tos/copilot-sdk/setup/local-cli.md index 541c481c4038..8efe570391ed 100644 --- a/content/copilot/how-tos/copilot-sdk/setup/local-cli.md +++ b/content/copilot/how-tos/copilot-sdk/setup/local-cli.md @@ -177,5 +177,5 @@ Session state is stored locally at `~/.copilot/session-state/{sessionId}/`. ## Next steps * **[AUTOTITLE](/copilot/how-tos/copilot-sdk/setup/bundled-cli)**: Use the SDK's built-in CLI (recommended for most use cases) -* **[AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started)**: Build a complete interactive app +* **[AUTOTITLE](/copilot/get-started/sdk-quickstart)**: Build a complete interactive app * **[AUTOTITLE](/copilot/how-tos/copilot-sdk/auth/authenticate)**: All auth methods in detail diff --git a/content/copilot/how-tos/copilot-sdk/troubleshooting/compatibility.md b/content/copilot/how-tos/copilot-sdk/troubleshooting/compatibility.md index 4499e127ded7..5a1f9a6cd656 100644 --- a/content/copilot/how-tos/copilot-sdk/troubleshooting/compatibility.md +++ b/content/copilot/how-tos/copilot-sdk/troubleshooting/compatibility.md @@ -308,7 +308,7 @@ console.log("Protocol version:", status.protocolVersion); ## See also -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started) +* [AUTOTITLE](/copilot/get-started/sdk-quickstart) * [AUTOTITLE](/copilot/how-tos/copilot-sdk/hooks/hooks-overview) * [AUTOTITLE](/copilot/how-tos/copilot-sdk/features/mcp) * [AUTOTITLE](/copilot/how-tos/copilot-sdk/troubleshooting/debugging) diff --git a/content/copilot/how-tos/copilot-sdk/troubleshooting/debugging.md b/content/copilot/how-tos/copilot-sdk/troubleshooting/debugging.md index bcd88f945ae6..5f99af3540d1 100644 --- a/content/copilot/how-tos/copilot-sdk/troubleshooting/debugging.md +++ b/content/copilot/how-tos/copilot-sdk/troubleshooting/debugging.md @@ -538,7 +538,7 @@ If you're still stuck: ## See also -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started) +* [AUTOTITLE](/copilot/get-started/sdk-quickstart) * [AUTOTITLE](/copilot/how-tos/copilot-sdk/features/mcp) - MCP configuration and setup * [AUTOTITLE](/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging) - Detailed MCP troubleshooting * [API Reference](https://github.com/github/copilot-sdk) diff --git a/content/copilot/how-tos/github-copilot-app/agent-sessions.md b/content/copilot/how-tos/github-copilot-app/agent-sessions.md index 85195a14a5a7..2befb73b7a90 100644 --- a/content/copilot/how-tos/github-copilot-app/agent-sessions.md +++ b/content/copilot/how-tos/github-copilot-app/agent-sessions.md @@ -17,7 +17,7 @@ category: Each session in the {% data variables.copilot.github_copilot_app %} runs in its own isolated workspace, so you can run multiple sessions in parallel and make progress on several tasks without conflicts. -1. In the sidebar next to **Sessions**, click **+** to start a new session. +1. In the sidebar, next to **Projects**, click {% octicon "plus" aria-label="Start a new session" %}. 1. Choose a project—you can use a folder already on your machine, choose from {% data variables.product.github %}, or clone from a Git URL for repositories hosted outside {% data variables.product.github %} (for example, on Azure DevOps) or for private repositories without app access. 1. From the dropdown under the prompt box, choose where the session should run: in a new working tree, in your local repository, or in a cloud sandbox. Cloud sandboxes for {% data variables.product.prodname_copilot_short %} (public preview) are fully isolated environments hosted by {% data variables.product.github %}. 1. Select a session mode, model, and reasoning effort from the dropdowns below the prompt field. If you choose **Auto** for the model, the app selects the optimal model for your task based on task complexity. diff --git a/content/copilot/how-tos/github-copilot-app/customize-github-copilot-app.md b/content/copilot/how-tos/github-copilot-app/customize-github-copilot-app.md index 2447d870f801..e8f251e7adfa 100644 --- a/content/copilot/how-tos/github-copilot-app/customize-github-copilot-app.md +++ b/content/copilot/how-tos/github-copilot-app/customize-github-copilot-app.md @@ -104,4 +104,4 @@ Use canvas extensions to build shared, agent-driven artifacts and interfaces for Enterprise and organization owners can set policies to govern how {% data variables.product.prodname_copilot_short %} is used across surfaces. For the major policies supported by the {% data variables.copilot.github_copilot_app %}, see [AUTOTITLE](/copilot/reference/supported-surfaces-for-policies). -Enterprises can also define a `{% data variables.copilot.managed_setting_file %}` file to control which actions users can take in supported {% data variables.product.prodname_copilot_short %} clients, such as which plugins users can install and whether "YOLO-style" commands are permitted. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/configure-enterprise-managed-settings). +Enterprises can also define a `{% data variables.copilot.managed_setting_file %}` file to control which actions users can take in supported {% data variables.product.prodname_copilot_short %} clients, such as which plugins users can install and whether "YOLO-style" commands are permitted. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/use-managed-settings/get-started). diff --git a/content/copilot/how-tos/github-copilot-app/open-with-deep-links.md b/content/copilot/how-tos/github-copilot-app/open-with-deep-links.md index cf10c9c9be6f..638141bbb670 100644 --- a/content/copilot/how-tos/github-copilot-app/open-with-deep-links.md +++ b/content/copilot/how-tos/github-copilot-app/open-with-deep-links.md @@ -227,7 +227,7 @@ The following app links can be wrapped in the hosted launcher. Query strings and | App link shape | Opens | Notes | | --- | --- | --- | -| `ghapp://` | Home | Opens the app home route. | +| `ghapp://` | New | Opens the **New** view to start a new session. | | `ghapp://chats` | Chats | Opens Chats. | | `ghapp://mywork` | My work | Opens issues and pull requests in My work. | | `ghapp://github.com/OWNER/REPO` | Repository setup | Opens or clones the repository. | diff --git a/content/copilot/how-tos/github-copilot-app/using-automations.md b/content/copilot/how-tos/github-copilot-app/using-automations.md index 91bce8c3fd60..771648e80671 100644 --- a/content/copilot/how-tos/github-copilot-app/using-automations.md +++ b/content/copilot/how-tos/github-copilot-app/using-automations.md @@ -36,7 +36,7 @@ Open **[Automations](https://github.com/copilot/app/launch?open=ghapp%3A%2F%2Fau To use cloud {% data variables.copilot.copilot_automations %}, make sure the following settings are enabled. -* {% data variables.copilot.copilot_cloud_agent %} must be enabled for the repository. If you have {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %}, an administrator must enable the {% data variables.copilot.copilot_cloud_agent %} policy. See [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management). +* {% data variables.copilot.copilot_cloud_agent %} must be enabled for the repository. If you have {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %}, an administrator must enable the {% data variables.copilot.copilot_cloud_agent %} policy. See [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access). * The organization must allow both {% data variables.copilot.copilot_cloud_agent %} and {% data variables.copilot.copilot_automations %} in the repository (both are enabled by default). See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/add-copilot-cloud-agent). * If you want to create {% data variables.copilot.copilot_automations %} that can listen to events triggered by users without write access, disable the "Only allow automations to be triggered by users with write access" setting in {% data variables.copilot.copilot_cloud_agent %} repository settings. diff --git a/content/copilot/how-tos/manage-and-track-spending/monitor-ai-usage.md b/content/copilot/how-tos/manage-and-track-spending/monitor-ai-usage.md index 03b4694b6c92..a5e4cdcf653f 100644 --- a/content/copilot/how-tos/manage-and-track-spending/monitor-ai-usage.md +++ b/content/copilot/how-tos/manage-and-track-spending/monitor-ai-usage.md @@ -21,6 +21,9 @@ If you access {% data variables.product.prodname_copilot_short %} through a {% d * If a user-level budget has been set, the card shows credits consumed out of your budget total (for example, "450 / 1,000 {% data variables.product.prodname_ai_credits_short %} used"). * If no user-level budget applies to you, the card shows the total number of {% data variables.product.prodname_ai_credits_short %} you have consumed this cycle (for example, "100 {% data variables.product.prodname_ai_credits_short %} used"). +> [!NOTE] +> {% data reusables.copilot.request-ai-credit-allocation-increase %} + ## For {% data variables.copilot.copilot_individuals_short %} users If you're on a {% data variables.copilot.copilot_individuals_short %} plan, you can see your individual {% data variables.product.prodname_ai_credits_short %} consumption on the **AI usage** page, under "Billing and licensing" settings. diff --git a/content/copilot/how-tos/set-up/install-copilot-extension.md b/content/copilot/how-tos/set-up/install-copilot-extension.md index 1e871e5e8240..e5e1fe7968e9 100644 --- a/content/copilot/how-tos/set-up/install-copilot-extension.md +++ b/content/copilot/how-tos/set-up/install-copilot-extension.md @@ -11,13 +11,13 @@ redirect_from: - /copilot/how-tos/personal-settings/installing-the-github-copilot-extension-in-your-environment - /copilot/how-tos/set-up/installing-the-github-copilot-extension-in-your-environment contentType: how-tos -category: +category: - Configure Copilot --- ## Prerequisite -To use {% data variables.product.prodname_copilot_short %} in your IDE, you need either limited access through {% data variables.copilot.copilot_free_short %} or a paid {% data variables.product.prodname_copilot_short %} plan for full access. For more information about how to get access and choose the right plan, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +To use {% data variables.product.prodname_copilot_short %} in your IDE, you need either limited access through {% data variables.copilot.copilot_free_short %} or a paid {% data variables.product.prodname_copilot_short %} plan for full access. For more information about how to get access and choose the right plan, see [AUTOTITLE](/copilot/get-started/about-github-copilot#get-access). {% azure_data_studio %} @@ -29,7 +29,7 @@ To see instructions for other popular coding environments, use the tool switcher ## Installing the {% data variables.product.prodname_copilot %} extension in Azure Data Studio -1. Make sure you have access to {% data variables.product.prodname_copilot %}. For information, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +1. Make sure you have access to {% data variables.product.prodname_copilot %}. For information, see [AUTOTITLE](/copilot/get-started/about-github-copilot#get-access). 1. Make sure you have a compatible version of Azure Data Studio. To use {% data variables.product.prodname_copilot %} in Azure Data Studio, you must have Azure Data Studio version 1.44.0 or later installed. See the [Azure Data Studio download page](https://docs.microsoft.com/sql/azure-data-studio/download-azure-data-studio) in the Azure Data Studio documentation. @@ -64,7 +64,7 @@ For information about version compatibility of the {% data variables.product.pro The following procedure will guide you through installation of the {% data variables.product.prodname_copilot %} plugin in IntelliJ IDEA. Steps to install the plugin in another supported IDE may differ. -1. Make sure you have access to {% data variables.product.prodname_copilot %}. For information, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +1. Make sure you have access to {% data variables.product.prodname_copilot %}. For information, see [AUTOTITLE](/copilot/get-started/about-github-copilot#get-access). 1. Make sure you have a JetBrains IDE that is compatible with {% data variables.product.prodname_copilot %}. {% data variables.product.prodname_copilot %} is compatible with the following IDEs: @@ -110,7 +110,7 @@ To see instructions for other popular coding environments, use the tool switcher {% data variables.product.prodname_dotcom %} recommends that you install the {% data variables.product.prodname_copilot %} plugin with Vim/Neovim's built-in plugin manager. Alternatively, you can use a plugin manager of your choice to install `github/copilot.vim`. For more information, see the [copilot.vim repository](https://github.com/github/copilot.vim). -1. Make sure you have access to {% data variables.product.prodname_copilot %}. For information, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +1. Make sure you have access to {% data variables.product.prodname_copilot %}. For information, see [AUTOTITLE](/copilot/get-started/about-github-copilot#get-access). 1. Make sure you have a compatible version of Vim/Neovim installed. To use {% data variables.product.prodname_copilot %} in Vim/Neovim you must have Vim version 9.0.0185 / Neovim version 0.6 or above and Node.js version 18 or above. See the [Vim](https://vimhelp.org/) / [Neovim documentation](https://neovim.io/doc/) and the [Node.js website](https://nodejs.org/en/). @@ -164,7 +164,7 @@ The following instructions are for versions 2022 17.8 and 2022 17.9 of {% data v ## Installing the {% data variables.product.prodname_copilot %} extension in {% data variables.product.prodname_vs %} -1. Make sure you have access to {% data variables.product.prodname_copilot %}. For information, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +1. Make sure you have access to {% data variables.product.prodname_copilot %}. For information, see [AUTOTITLE](/copilot/get-started/about-github-copilot#get-access). 1. Make sure you have a compatible version of {% data variables.product.prodname_vs %} installed. {% data reusables.copilot.visual-studio-version %} @@ -208,7 +208,7 @@ To use {% data variables.product.prodname_copilot %} for Xcode you must have Xco ## Installing the {% data variables.product.prodname_copilot %} extension for Xcode -1. Make sure you have access to {% data variables.product.prodname_copilot %}. For information, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +1. Make sure you have access to {% data variables.product.prodname_copilot %}. For information, see [AUTOTITLE](/copilot/get-started/about-github-copilot#get-access). 1. Make sure you have a compatible version of Xcode installed. To use {% data variables.product.prodname_copilot %} for Xcode you must have Xcode version 8.0 or above and macOS Monterey (12.0) or above. See [Xcode](https://developer.apple.com/xcode/) on the Apple Developer site. 1. Download the latest version of the {% data variables.product.prodname_copilot %} for Xcode extension from the [`github/CopilotForXcode` repository](https://github.com/github/CopilotForXcode/releases/latest/download/GitHubCopilotForXcode.dmg?ref_product=copilot&ref_type=engagement&ref_style=text) and install it. A background item will be added for the application to be able to start itself when Xcode starts. 1. Open the **{% data variables.product.prodname_copilot %} for Xcode** application from the Applications folder and step through the on-screen instructions for setting up the extension. diff --git a/content/copilot/how-tos/set-up/set-up-for-self.md b/content/copilot/how-tos/set-up/set-up-for-self.md index 0ce282089442..afb6c10a54a9 100644 --- a/content/copilot/how-tos/set-up/set-up-for-self.md +++ b/content/copilot/how-tos/set-up/set-up-for-self.md @@ -23,7 +23,7 @@ There are a few ways that you can get access to {% data variables.product.prodna * **Sign up for a paid plan**. You can subscribe to one of these plans: * **{% data variables.copilot.copilot_pro_short %}**, which includes access to premium models and a monthly allowance of {% data variables.product.prodname_ai_credits_short %}. [Subscribe to {% data variables.copilot.copilot_pro_short %}](https://github.com/github-copilot/signup?ref_product=copilot&ref_type=purchase&ref_style=text&ref_plan=pro). - * **{% data variables.copilot.copilot_pro_plus_short %}**, which includes a higher monthly allowance of {% data variables.product.prodname_ai_credits_short %} and access to all available models. [Subscribe to {% data variables.copilot.copilot_pro_plus_short %}](https://github.com/github-copilot/signup?ref_product=copilot&ref_type=purchase&ref_style=text&ref_plan=pro). + * **{% data variables.copilot.copilot_pro_plus_short %}**, which includes a higher monthly allowance of {% data variables.product.prodname_ai_credits_short %} and access to all available models. [Subscribe to {% data variables.copilot.copilot_pro_plus_short %}](https://github.com/github-copilot/signup?ref_product=copilot&ref_type=purchase&ref_style=text&ref_plan=pro-plus). * **{% data variables.copilot.copilot_max_short %}**, which includes advanced AI models and our highest individual monthly allowance of {% data variables.product.prodname_ai_credits_short %}. [Subscribe to {% data variables.copilot.copilot_max_short %}](https://github.com/settings/billing/licensing?ref_product=copilot&ref_type=purchase&ref_style=text&ref_plan=max). * **Use {% data variables.product.prodname_copilot_short %} through your organization or enterprise**. If you're part of an organization or enterprise with a {% data variables.product.prodname_copilot_short %} plan, you can request access at [https://github.com/settings/copilot](https://github.com/settings/copilot) under "Get {% data variables.product.prodname_copilot_short %} from an organization." @@ -42,7 +42,7 @@ If you want to use {% data variables.product.prodname_copilot_short %} in the co ## 4. Use {% data variables.product.prodname_copilot_short %} in {% data variables.product.prodname_windows_terminal %} -If you want to chat with {% data variables.product.prodname_copilot_short %} in {% data variables.product.prodname_windows_terminal %}, connect {% data variables.product.prodname_copilot_short %} with Terminal Chat in {% data variables.product.prodname_windows_terminal %} Canary. See [AUTOTITLE](/copilot/get-started/quickstart?tool=windowsterminal). +If you want to chat with {% data variables.product.prodname_copilot_short %} in {% data variables.product.prodname_windows_terminal %}, connect {% data variables.product.prodname_copilot_short %} with Terminal Chat in {% data variables.product.prodname_windows_terminal %} Canary. See [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-in-your-ide). ## 5. Set up networking (if necessary) diff --git a/content/copilot/how-tos/troubleshoot-copilot/troubleshoot-common-issues.md b/content/copilot/how-tos/troubleshoot-copilot/troubleshoot-common-issues.md index 9ff7d1461170..a98e31b0030f 100644 --- a/content/copilot/how-tos/troubleshoot-copilot/troubleshoot-common-issues.md +++ b/content/copilot/how-tos/troubleshoot-copilot/troubleshoot-common-issues.md @@ -24,7 +24,7 @@ If {% data variables.product.prodname_copilot %} stops working, check {% data va ## Unable to use the {% data variables.product.prodname_copilot %} extension in the IDE -We recommend you follow the quickstart guide for {% data variables.product.prodname_copilot %} while setting up {% data variables.product.prodname_copilot %} on your machine. For more information, see [AUTOTITLE](/copilot/get-started/quickstart). +We recommend you follow the quickstart guide for {% data variables.product.prodname_copilot %} while setting up {% data variables.product.prodname_copilot %} on your machine. For more information, see [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-in-your-ide). The {% data variables.product.prodname_copilot %} extension is frequently updated to fix bugs and add new features. It's important to keep your extension up to date because older clients cannot communicate with the {% data variables.product.prodname_copilot %} servers. Update your {% data variables.product.prodname_copilot %} extension on all the machines you have it installed. diff --git a/content/copilot/how-tos/use-copilot-agents/cloud-agent/use-cloud-agent-on-github.md b/content/copilot/how-tos/use-copilot-agents/cloud-agent/use-cloud-agent-on-github.md index dd6f4579c433..1be6dcd31f13 100644 --- a/content/copilot/how-tos/use-copilot-agents/cloud-agent/use-cloud-agent-on-github.md +++ b/content/copilot/how-tos/use-copilot-agents/cloud-agent/use-cloud-agent-on-github.md @@ -138,11 +138,30 @@ When an {% data variables.product.prodname_actions %} workflow run fails on a pu ## Continuing work on a pull request +You can ask {% data variables.product.prodname_copilot_short %} to make changes or address review comments on an existing pull request. You can then track the resulting session and provide follow-up instructions. + +### Asking {% data variables.product.prodname_copilot_short %} to make changes + You can mention `@copilot` in a comment on any pull request to ask {% data variables.product.prodname_copilot_short %} to make changes. This works on pull requests created by {% data variables.product.prodname_copilot_short %} and on pull requests you or others created. By default, {% data variables.product.prodname_copilot_short %} pushes commits directly to the pull request branch. To create a separate pull request instead, describe that in your comment. You can also check out the branch and push changes yourself. -Batch review comments instead of submitting them individually. When submitting a pull request comment (not a review or review comment) through the {% data variables.product.github %} web interface, select a model with the model picker. {% data variables.product.prodname_copilot_short %} uses the model from the original pull request by default. +When submitting a pull request comment (not a review or review comment) through the {% data variables.product.github %} web interface, select a model with the model picker. {% data variables.product.prodname_copilot_short %} uses the model from the original pull request by default. + +### Delegating review comments + +You can delegate review comments to have {% data variables.product.prodname_copilot_short %} implement feedback from human reviewers and {% data variables.copilot.copilot_code-review %}. + +1. In the pull request, open the **Files changed** tab. +1. Navigate to the first review comment you want {% data variables.product.prodname_copilot_short %} to implement. + * To delegate one comment, click **Fix with {% data variables.product.prodname_copilot_short %}**. + * To delegate multiple comments, click **Add to batch**. Continue to add the comments you want {% data variables.product.prodname_copilot_short %} to work on. +1. In the **Manage batch** panel, add any additional instructions, and optionally select a model with the model picker. +1. Choose how you want {% data variables.product.prodname_copilot_short %} to apply the changes: + * To commit the changes directly to the branch, click **{% octicon "agent" aria-label="The Agents icon" %} Fix and commit**. + * To have {% data variables.product.prodname_copilot_short %} create a new pull request with the changes, click **Fix and open pull request** from the dropdown menu. + +### Tracking and continuing a session {% data reusables.copilot.cloud-agent.write-access-required %} diff --git a/content/copilot/how-tos/use-copilot-agents/request-a-code-review/use-code-review.md b/content/copilot/how-tos/use-copilot-agents/request-a-code-review/use-code-review.md index 25546e4d8a1f..4c2d03f0dd06 100644 --- a/content/copilot/how-tos/use-copilot-agents/request-a-code-review/use-code-review.md +++ b/content/copilot/how-tos/use-copilot-agents/request-a-code-review/use-code-review.md @@ -66,7 +66,7 @@ You can also request a review from {% data variables.product.prodname_copilot_sh ## Enabling automatic reviews -By default, you manually request a review from {% data variables.product.prodname_copilot_short %} on each pull request, in the same way you would request a review from a human. However, you can set up {% data variables.product.prodname_copilot_short %} to automatically review all pull requests. See [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review). +By default, you manually request a review from {% data variables.product.prodname_copilot_short %} on each pull request, in the same way you would request a review from a human. However, you can set up {% data variables.product.prodname_copilot_short %} to automatically review all pull requests. See [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review). ## Requesting a re-review from {% data variables.product.prodname_copilot_short %} @@ -74,7 +74,7 @@ When you push changes to a pull request that {% data variables.product.prodname_ To manually request a re-review from {% data variables.product.prodname_copilot_short %}, click the {% octicon "sync" aria-label="Re-request review" %} button next to {% data variables.product.prodname_copilot_short %}'s name in the **Reviewers** menu. For more information, see [AUTOTITLE](/pull-requests/how-tos/create-pull-requests/requesting-a-pull-request-review). -To automatically request re-reviews from {% data variables.product.prodname_copilot_short %} on every push, enable automatic code review for the repository and select **Review new pushes** in the ruleset settings. For more information, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review#configuring-automatic-code-review-for-repositories-in-an-organization). +To automatically request re-reviews from {% data variables.product.prodname_copilot_short %} on every push, enable automatic code review for the repository and select **Review new pushes** in the ruleset settings. For more information, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review#configuring-automatic-code-review-for-repositories-in-an-organization). > [!NOTE] When re-reviewing a pull request, {% data variables.product.prodname_copilot_short %} may repeat the same comments again, even if they have been dismissed with the "Resolve conversation" button or downvoted with the thumbs down (:-1:) button. @@ -98,7 +98,7 @@ Every {% data variables.copilot.copilot_code-review_short %} includes an approva When approvals are enabled, {% data variables.product.prodname_copilot_short %} can submit an approving review that satisfies your repository's required-approval rule the same way a teammate's approval would. If new commits are pushed after {% data variables.product.prodname_copilot_short %} approves, the approval is dismissed, and you can re-request a review. For more details on required reviews, see [AUTOTITLE](/pull-requests/how-tos/review-pull-requests/approving-a-pull-request-with-required-reviews). -Approvals are off by default and can be configured at the enterprise, organization, and repository levels. Repository administrators can also use file paths to control which {% data variables.product.prodname_copilot_short %} approvals count toward merge requirements. For configuration steps, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review#customizing-copilot-code-review). +Approvals are off by default and can be configured at the enterprise, organization, and repository levels. Repository administrators can also use file paths to control which {% data variables.product.prodname_copilot_short %} approvals count toward merge requirements. For configuration steps, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review#customizing-copilot-code-review). ## Customizing {% data variables.product.prodname_copilot_short %}'s reviews with custom instructions diff --git a/content/copilot/index.md b/content/copilot/index.md index 0caf34eccd6d..a9d80ebfa634 100644 --- a/content/copilot/index.md +++ b/content/copilot/index.md @@ -6,8 +6,8 @@ redirect_from: - /github/copilot - /copilot/using-github-copilot/using-github-copilot-for-pull-requests/using-copilot-to-help-you-work-on-a-pull-request introLinks: - overview: /copilot/get-started/what-is-github-copilot - quickstart: /copilot/get-started/quickstart + overview: /copilot/get-started/about-github-copilot + quickstart: /copilot/get-started/quickstart-for-using-github-copilot-on-github-com layout: discovery-landing heroImage: /assets/images/banner-images/hero-6 versions: diff --git a/content/copilot/reference/ai-models/model-comparison.md b/content/copilot/reference/ai-models/model-comparison.md index 6fb5654f718b..28b50a720059 100644 --- a/content/copilot/reference/ai-models/model-comparison.md +++ b/content/copilot/reference/ai-models/model-comparison.md @@ -28,7 +28,7 @@ Use this table to find a suitable model quickly, see more detail in the sections | Model | Task area | Excels at (primary use case) | Further reading | |----------------------------------------------------|-----------------------|------------------------------|-----------------------------| | {% for model in tables.copilot.model-comparison %} | -| {{ model.name }}{% if model.name == 'MAI-Code-1-Flash' or model.name == 'MAI-Code-1.1-Flash' %}[^mai-code-1-flash]{% elsif model.name == 'Kimi K3' %}[^kimi-k3]{% endif %} | {{ model.task_area }} | {{ model.excels_at }} | {{ model.further_reading }} | +| {{ model.name }}{% if model.name == 'MAI-Code-1.1-Flash' %}[^mai-models]{% elsif model.name == 'Kimi K3' %}[^kimi-k3]{% endif %} | {{ model.task_area }} | {{ model.excels_at }} | {{ model.further_reading }} | | {% endfor %} | ## Task: General-purpose coding and writing @@ -40,7 +40,6 @@ Use these models for common development tasks that require a balance of quality, | {% data variables.copilot.copilot_gpt_53_codex %} | Delivers higher-quality code on complex engineering tasks like features, tests, debugging, refactors, and reviews without lengthy instructions. | | {% data variables.copilot.copilot_gpt_5_mini %} | Reliable default for most coding and writing tasks. Fast, accurate, and works well across languages and frameworks. | | {% data variables.copilot.copilot_gpt_56_terra %} | Balanced all-round choice for everyday interactive and agentic coding. | -| {% data variables.copilot.copilot_mai_code_1_flash %} | Strong instruction-following and adaptive reasoning make it a reliable default for everyday coding tasks, writing, and multi-turn development workflows. | ### When to use these models @@ -65,7 +64,6 @@ These models are optimized for speed and responsiveness. They’re ideal for qui |-------------------------------------------------------|------------------------------------------------------------------------------------------------------------| | {% data variables.copilot.copilot_gpt_56_luna %} | Lightweight, cost-efficient option for smaller, faster tasks. The lowest-cost model in the GPT-5.6 family. | | {% data variables.copilot.copilot_claude_haiku_45 %} | Balances fast responses with quality output. Ideal for small tasks and lightweight code explanations. | -| {% data variables.copilot.copilot_mai_code_1_flash %} | Handles quick coding tasks with adaptive efficiency, stays concise for simple requests and delivers fast, accurate responses without unnecessary depth. | ### When to use these models @@ -140,11 +138,11 @@ Some models have behaviors, limitations, or safeguards that are useful to unders ### {% data variables.copilot.copilot_kimi_k3 %} -{% data variables.copilot.copilot_kimi_k3 %} is designed for long-context, multi-step coding and agentic workflows. In pre-release testing, the model exhibited elevated risk on certain higher-risk prompts and was less consistent than some other models in refusing requests involving sensitive topics. These behaviors may reflect differences in the model's safety post-training and alignment. We have deployed additional safeguards in {% data variables.product.prodname_copilot %} to help mitigate the identified risks. As with any model, enterprises should evaluate model capabilities, limitations, and safeguards in light of their particular use cases and requirements. +{% data variables.copilot.copilot_kimi_k3 %} is designed for long-context, multi-step coding and agentic workflows. Fine-tuned model variants may be included as part of the {% data variables.copilot.copilot_kimi_k3 %} ({% data variables.product.github %}) offering on individual plans only. Fine-tuned variants are not included for {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} plans. In pre-release testing, the model exhibited elevated risk on certain higher-risk prompts and was less consistent than some other models in refusing requests involving sensitive topics. These behaviors may reflect differences in the model's safety post-training and alignment. We have deployed additional safeguards in {% data variables.product.prodname_copilot %} to help mitigate the identified risks. As with any model, enterprises should evaluate model capabilities, limitations, and safeguards in light of their particular use cases and requirements. ## Next steps -[^mai-code-1-flash]: MAI models are continuously improving models. Performance and behavior may evolve over time as new checkpoints are released. +[^mai-models]: MAI models are continuously improving models. Performance and behavior may evolve over time as new checkpoints are released. [^kimi-k3]: For important information about {% data variables.copilot.copilot_kimi_k3 %} behavior and safeguards, see [Model-specific considerations](#kimi-k3). diff --git a/content/copilot/reference/ai-models/model-hosting.md b/content/copilot/reference/ai-models/model-hosting.md index 9dd754d33b1d..8dbd481ef9ce 100644 --- a/content/copilot/reference/ai-models/model-hosting.md +++ b/content/copilot/reference/ai-models/model-hosting.md @@ -116,16 +116,15 @@ For more information, see [xAI's enterprise terms of service](https://x.ai/legal Used for: -* {% data variables.copilot.copilot_mai_code_1_flash %} * {% data variables.copilot.copilot_mai_code_1_1_flash %} -{% data variables.copilot.copilot_mai_code_1_flash %} and {% data variables.copilot.copilot_mai_code_1_1_flash %} are first-party Microsoft models hosted on Azure in {% data variables.product.github %}'s tenant. +{% data variables.copilot.copilot_mai_code_1_1_flash %} is a first-party Microsoft model hosted on Azure in {% data variables.product.github %}'s tenant. {% data variables.product.github %} does not use {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} customer data to train AI models. For individual subscribers—{% data variables.copilot.copilot_free_short %}, {% data variables.copilot.copilot_pro_short %}, {% data variables.copilot.copilot_pro_plus_short %}, and {% data variables.copilot.copilot_max_short %} users—{% data variables.product.github %} may use {% data variables.product.prodname_copilot_short %} interaction data, including prompts (inputs), suggestions (outputs), and code snippets generated during {% data variables.product.prodname_copilot_short %} sessions to train and improve AI models, in accordance with our [AUTOTITLE](/free-pro-team@latest/site-policy/privacy-policies/github-general-privacy-statement) and applicable user settings. Individual subscribers can opt out of having their data used for AI model training. To manage this setting, see [AUTOTITLE](/copilot/how-tos/manage-your-account/manage-policies#model-training-and-improvements). -{% data variables.copilot.copilot_mai_code_1_flash %} and {% data variables.copilot.copilot_mai_code_1_1_flash %} are served on Microsoft Azure AI Foundry within {% data variables.product.github %}'s tenant and are subject to {% data variables.product.github %}'s data handling configuration for that deployment. For details about how data is processed, retained, and secured for models served on Azure AI Foundry, see [Data, privacy, and security for Foundry Models sold by Azure](https://learn.microsoft.com/en-us/azure/foundry/responsible-ai/openai/data-privacy?tabs=azure-portal) in the Microsoft documentation. +{% data variables.copilot.copilot_mai_code_1_1_flash %} is served on Microsoft Azure AI Foundry within {% data variables.product.github %}'s tenant and is subject to {% data variables.product.github %}'s data handling configuration for that deployment. For details about how data is processed, retained, and secured for models served on Azure AI Foundry, see [Data, privacy, and security for Foundry Models sold by Azure](https://learn.microsoft.com/en-us/azure/foundry/responsible-ai/openai/data-privacy?tabs=azure-portal) in the Microsoft documentation. -When using {% data variables.copilot.copilot_mai_code_1_flash %} or {% data variables.copilot.copilot_mai_code_1_1_flash %}, input prompts and output completions continue to run through {% data variables.product.prodname_copilot %}'s content filters for public code matching, when applied, along with those for harmful or offensive content. +When using {% data variables.copilot.copilot_mai_code_1_1_flash %}, input prompts and output completions continue to run through {% data variables.product.prodname_copilot %}'s content filters for public code matching, when applied, along with those for harmful or offensive content. ## Open-weight models diff --git a/content/copilot/reference/ai-models/supported-models.md b/content/copilot/reference/ai-models/supported-models.md index 4d67e8352f60..77e7b430c35b 100644 --- a/content/copilot/reference/ai-models/supported-models.md +++ b/content/copilot/reference/ai-models/supported-models.md @@ -39,7 +39,7 @@ This table lists the AI models available in {% data variables.product.prodname_c | Model name | Provider | Release status | |--------------------------------------------------------|-----------|----------------------------| | {% for model in tables.copilot.model-release-status %} | -| {{ model.name }}{% if model.name == 'GPT-5.4 nano' %}[^gpt54nano]{% endif %}{% if model.name == 'MAI-Code-1-Flash' or model.name == 'MAI-Code-1.1-Flash' %}[^mai-code-1-flash]{% endif %}{% if model.name == 'Claude Fable 5' or model.name == 'Claude Fable 5.1' %}[^claude-fable-5]{% endif %}| {{ model.provider }} | {{ model.release_status }} | +| {{ model.name }}{% if model.name == 'GPT-5.4 nano' %}[^gpt54nano]{% endif %}{% if model.name == 'MAI-Code-1.1-Flash' %}[^mai-models]{% endif %}{% if model.name == 'Claude Fable 5' or model.name == 'Claude Fable 5.1' %}[^claude-fable-5]{% endif %}| {{ model.provider }} | {{ model.release_status }} | | {% endfor %} | {% endrowheaders %} @@ -142,7 +142,6 @@ Some {% data variables.product.prodname_copilot_short %} models require minimum | {% data variables.copilot.copilot_claude_fable_51 %} | TBD | TBD | TBD | TBD | TBD | | {% data variables.copilot.copilot_kimi_k27_code %} | `v1.127` | `17.14.6` | `1.9.1-251` | TBD | TBD | | {% data variables.copilot.copilot_kimi_k3 %} | `v1.131` | TBD | TBD | TBD | TBD | -| {% data variables.copilot.copilot_mai_code_1_flash %} | `v1.121` | TBD | TBD | TBD | TBD | | {% data variables.copilot.copilot_mai_code_1_1_flash %} | `v1.121` | TBD | TBD | TBD | TBD | | {% data variables.copilot.copilot_grok_45 %} | TBD | `17.14.19` | TBD | TBD | TBD | | {% data variables.copilot.copilot_grok_46 %} | TBD | TBD | TBD | TBD | TBD | @@ -186,7 +185,7 @@ Access to evaluation models in {% data variables.copilot.copilot_auto_model_sele {% data reusables.enterprise-accounts.ai-controls-tab %} 1. For the **Evaluation models in {% data variables.product.prodname_copilot_short %} {% data variables.copilot.copilot_auto_model_selection_short %}** setting, select **Disabled** from the dropdown. -[^mai-code-1-flash]: MAI models are continuously improving models. Performance and behavior may evolve over time as new checkpoints are released. +[^mai-models]: MAI models are continuously improving models. Performance and behavior may evolve over time as new checkpoints are released. ## Utility models @@ -222,6 +221,6 @@ The following table lists AI models that are retired or scheduled for retirement ## Next steps -* To get up and running with {% data variables.product.prodname_copilot_short %}, see [AUTOTITLE](/copilot/get-started/quickstart). +* To get up and running with {% data variables.product.prodname_copilot_short %}, see [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-on-github-com) and [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-in-your-ide) . * To configure which models are available to you, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-access-to-ai-models). * To learn more about Responsible Use and Responsible AI, see [{% data variables.product.prodname_copilot_short %} Trust Center](https://copilot.github.trust.page/) and [AUTOTITLE](/copilot/responsible-use). diff --git a/content/copilot/reference/copilot-billing/models-and-pricing.md b/content/copilot/reference/copilot-billing/models-and-pricing.md index 0ee0e06a752b..808a74eda135 100644 --- a/content/copilot/reference/copilot-billing/models-and-pricing.md +++ b/content/copilot/reference/copilot-billing/models-and-pricing.md @@ -19,7 +19,7 @@ The cost of an interaction depends on two things: the model and the number of to How {% data variables.product.prodname_copilot_short %} usage is tracked and billed depends on your plan type: * Individual plans ({% data variables.copilot.copilot_free_short %}, {% data variables.copilot.copilot_pro_short %}, {% data variables.copilot.copilot_pro_plus_short %}, and {% data variables.copilot.copilot_max_short %}) include {% data variables.product.prodname_ai_credits %} allowances that vary by plan. For details, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-individuals). -* {% data variables.copilot.copilot_business_short %} and {% data variables.copilot.copilot_enterprise_short %} include per-user {% data variables.product.prodname_ai_credits %} allowances that are pooled at the billing entity level. For details, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +* {% data variables.copilot.copilot_business_short %} and {% data variables.copilot.copilot_enterprise_short %} include per-user {% data variables.product.prodname_ai_credits %} allowances that are pooled at the billing entity level. For details, see [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). When usage exceeds the included allowances for any {% data variables.product.prodname_copilot_short %} plan, additional usage is billed in {% data variables.product.prodname_ai_credits %} at the per-token rates shown in the pricing tables below (1 {% data variables.product.prodname_ai_credit_singular %} = {% data variables.product.prodname_ai_credits_value %}). diff --git a/content/copilot/reference/copilot-billing/request-based-billing-legacy/model-multipliers-for-annual-plans.md b/content/copilot/reference/copilot-billing/request-based-billing-legacy/model-multipliers-for-annual-plans.md index d19fb18537df..8eaedc745014 100644 --- a/content/copilot/reference/copilot-billing/request-based-billing-legacy/model-multipliers-for-annual-plans.md +++ b/content/copilot/reference/copilot-billing/request-based-billing-legacy/model-multipliers-for-annual-plans.md @@ -35,7 +35,6 @@ The following table shows the model multipliers per supported model. > > * {% data variables.copilot.copilot_claude_sonnet_46 %} > * {% data variables.copilot.copilot_gpt_54_mini %} -> * The multiplier for {% data variables.copilot.copilot_mai_code_1_flash %} is a promotional rate. > > If you use {% data variables.copilot.copilot_auto_model_selection_short %} in {% data variables.copilot.copilot_chat_short %}, {% data variables.copilot.copilot_cli_short %}, {% data variables.copilot.github_copilot_app %}, or {% data variables.copilot.copilot_cloud_agent %}, you qualify for a 10% discount. For example, if a model has a multiplier of 1x you'll be billed at 0.9x instead. diff --git a/content/copilot/reference/copilot-cli-reference/acp-server.md b/content/copilot/reference/copilot-cli-reference/acp-server.md index 2f128414e51b..23d3911edf8a 100644 --- a/content/copilot/reference/copilot-cli-reference/acp-server.md +++ b/content/copilot/reference/copilot-cli-reference/acp-server.md @@ -32,7 +32,7 @@ The Agent Client Protocol (ACP) is a protocol that standardizes communication be Use the `--acp` option of the `copilot` command to start the CLI's ACP server. You can specify the transport mode with either the `--stdio` or `--port` options. If no transport mode is specified, the server defaults to stdio mode. -ACP mode allows sessions with a configured bring-your-own-key (BYOK) provider (`COPILOT_PROVIDER_*` environment variables) to run without {% data variables.product.github %} login, matching the behavior of `-p`/interactive mode. +ACP mode allows sessions with a configured bring-your-own-key (BYOK) provider (`COPILOT_PROVIDER_*` environment variables, or a providers configuration file—see `COPILOT_PROVIDERS_CONFIG` in [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#environment-variables)) to run without {% data variables.product.github %} login, matching the behavior of `-p`/interactive mode. ### Options applied to every session diff --git a/content/copilot/reference/copilot-cli-reference/cli-command-reference.md b/content/copilot/reference/copilot-cli-reference/cli-command-reference.md index 6607071e68b7..2826af53253d 100644 --- a/content/copilot/reference/copilot-cli-reference/cli-command-reference.md +++ b/content/copilot/reference/copilot-cli-reference/cli-command-reference.md @@ -25,9 +25,10 @@ docsTeamMetrics: | `copilot init` | Initialize {% data variables.product.prodname_copilot_short %} custom instructions for this repository. | | `copilot login [OPTION]` | Authenticate with {% data variables.product.prodname_copilot_short %} via OAuth. See [`copilot login` options](#copilot-login-options). | | `copilot mcp` | Manage MCP server configurations from the command line. | -| `copilot plugin` | Manage plugins and plugin marketplaces. | -| `copilot plugins list` | Non-interactively inspect every plugin, MCP server, skill, instruction source, and language server discovered for the current working directory. See [Using `copilot plugins list`](#using-copilot-plugins-list). | -| `copilot skill` | Manage agent skills from the command line (list, add, and remove skills). See [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/add-skills). | +| `copilot plugin` | Manage plugins and plugin marketplaces, including listing, enabling, disabling, and uninstalling them. `copilot plugins` (plural) is a legacy alias. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-plugin-reference). | +| `copilot instruction` | Non-interactively list custom instruction sources discovered for the current working directory. See [Using `copilot instruction`](#using-copilot-instruction). | +| `copilot lsp` | Non-interactively list configured language servers. See [Using `copilot lsp`](#using-copilot-lsp). | +| `copilot skill` | Manage agent skills from the command line (list, add, remove, enable, and disable skills). See [Managing skills non-interactively](#managing-skills-non-interactively). | | `copilot update` | Download and install the latest version. | | `copilot version` | Display version information and check for updates. | @@ -102,77 +103,43 @@ Fish: copilot completion fish > ~/.config/fish/completions/copilot.fish ``` -### Using `copilot plugins list` +### Managing plugins non-interactively -Run `copilot plugins list` to inspect every plugin, MCP server, skill, instruction source, and language server discovered for the current working directory. Output is grouped by kind, then by configuration scope (user, repository, organization, plugin-contributed, built-in, or unknown). +Use `copilot plugin` to install, list, update, enable, disable, and uninstall plugins from the command line, without opening an interactive session. `copilot plugins` (plural) is a legacy alias for the same command. For the full command and option reference, see [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-plugin-reference). -```bash -# List everything for the current workspace -copilot plugins list +### Using `copilot instruction` -# Only MCP servers and skills -copilot plugins list --kind mcp --kind skill +Run `copilot instruction list` to non-interactively list custom instruction sources discovered for the current working directory. This replaces the retired `copilot plugins list --kind instruction`. -# Only user-scoped resources, as JSON -copilot plugins list --scope user --json +```bash +copilot instruction list +copilot instruction list --json ``` | Option | Description | |-----------------------|------------------------------------------------------------------------------------| -| `--kind KINDS` | Filter by kind. Repeatable or comma-separated: `mcp`, `skill`, `instruction`, `plugin`, `lsp`. | -| `--scope SCOPES` | Filter by configuration scope. Repeatable or comma-separated. | -| `--json` | Emit machine-readable JSON instead of grouped text. | +| `--json` | Emit JSON instead of text. | | `--config-dir=DIRECTORY` | Path to the configuration directory. This option is deprecated. Use `COPILOT_HOME` instead. | -Custom agents and session-scoped hooks aren't covered by `copilot plugins list`; both require a live session. +Each `--json` entry has the shape `{ id, label, description?, location, type, sourcePath, defaultDisabled, applyTo? }`. This listing resolves plugin-contributed instructions against your global user settings only—an instruction enabled by a trusted repository or by managed settings might not appear here even though a live session applies it. -### `copilot plugins enable` / `copilot plugins disable` +### Using `copilot lsp` -Enable or disable a plugin, MCP server, or skill by name. The change persists to configuration and applies to future sessions. +Run `copilot lsp list` to non-interactively list configured language servers. This replaces the retired `copilot plugins list --kind lsp`. This command is inspect-only; use the `/lsp` slash command in an interactive session to start, stop, or reload a language server. ```bash -# Disable an MCP server -copilot plugins disable github --mcp - -# Enable a skill -copilot plugins enable my-skill --skill - -# Enable a plugin (default kind) -copilot plugins enable spark@copilot-plugins +copilot lsp list +copilot lsp list --json ``` | Option | Description | -|------------------------|------------------------------------------------------------------------------------| -| `--plugin` | Target a plugin (default). | -| `--mcp` | Target an MCP server. | -| `--skill` | Target a skill. | +|-----------------------|------------------------------------------------------------------------------------| +| `--json` | Emit JSON instead of text. | | `--config-dir=DIRECTORY` | Path to the configuration directory. This option is deprecated. Use `COPILOT_HOME` instead. | -Instructions are session-scoped only and can't be toggled with these commands. Language servers, agents, and hooks are managed elsewhere. - -### `copilot plugins remove` - -Uninstall a plugin, remove an MCP server, or delete a skill by name. - -```bash -# Remove an MCP server -copilot plugins remove github --mcp - -# Delete a personal or project skill -copilot plugins remove my-skill --skill - -# Uninstall a plugin (default kind) -copilot plugins remove spark@copilot-plugins -``` - -| Option | Description | -|------------------------|------------------------------------------------------------------------------------| -| `--plugin` | Remove a plugin (default). | -| `--mcp` | Remove an MCP server. | -| `--skill` | Remove a personal or project skill. | -| `--config-dir=DIRECTORY` | Path to the configuration directory. This option is deprecated. Use `COPILOT_HOME` instead. | +Each `--json` entry has the shape `{ id, fileExtensions?, sourcePlugin? }`. -With `--skill`, pass either a skill name or the path to a custom skill directory you added. A skill name deletes that skill's files; a custom directory path only unregisters the directory and leaves its files on disk. Only personal and project skills you added can be deleted—skills provided by a plugin or the builtin set can't be removed this way (disable them instead). Instruction sources are discovered from disk and can't be removed here. +Custom agents and session-scoped hooks aren't covered by `copilot instruction`, `copilot lsp`, `copilot plugin`, `copilot mcp`, or `copilot skill`. All require a live session. ## The sessions sidebar @@ -298,8 +265,10 @@ For more information about the sessions sidebar, see [AUTOTITLE](/copilot/how-to | Ctrl+X then `e` | Edit the prompt in an external editor (`$EDITOR`). | | Ctrl+X then `b` | Promote the running task or shell command to the background. | | Ctrl+X then `g` | Collapse or expand the autopilot goal panel. | +| Ctrl+X then `h` | Hide the current-session sidebar. | | Ctrl+X then `o` | Open the most recent link from the timeline. | | Ctrl+X then `v` | Toggle voice dictation on or off. | +| Ctrl+X then `x` | Close the current session. | | Ctrl+Z | Suspend the process to the background (Unix). | | Shift+Enter or Option+Enter (Mac) / Alt+Enter (Windows/Linux) | Insert a newline in the input. | | Shift+Tab | Cycle between standard, plan, and autopilot mode. | @@ -334,6 +303,12 @@ When the tasks dialog is open (opened via `/tasks`): Subagents that spawn their own nested subagents appear as an indented tree; the row you're teleported into is highlighted as "current." While drilled into a subagent's view, you can send it a steering message from the composer the same way you would the main session. +## Restoring an interrupted session + +If a session was still open when its CLI process went away—for example, due to a crash or a machine restart—the next `copilot` startup can offer to restore it, letting you choose which sessions to bring back or start fresh instead. A session whose agent was mid-turn automatically resumes that work once restored. + +This restore behavior is temporarily opt-in while its startup dialog is reworked. Set the `COPILOT_ENABLE_INTERRUPTED_SESSION_RESTORE` environment variable to `1` to enable it. See [Environment variables](#environment-variables). + ## Session picker shortcuts When the session picker is open (opened via `/resume` or `--continue`): @@ -358,6 +333,41 @@ Sessions sort by the following modes: Sessions already open in another window float to the top in all non-relevance sort modes. When no working-directory context is available, the `relevance` mode is skipped. +## Sidebar and sessions tab shortcuts + +The current-session sidebar lets you browse and switch between sessions without leaving the one you're in. On an empty composer, / walk a three-state focus cycle: closed, timeline-focused, and sidebar-focused. Disable the sidebar entirely with the `sidebar` setting—see [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#configuration-file-settings). + +| Shortcut | Purpose | +|----------|---------| +| (Current tab, closed) | Open the sidebar; the timeline keeps focus. | +| (timeline-focused) | Move focus into the sidebar. | +| (sidebar-focused) | Return focus to the timeline. | +| (timeline-focused) | Close the sidebar. | +| Tab/Shift+Tab | Switch tabs (**Current**, **Sessions**, and so on). | +| / (sidebar-focused) | Move the selection cursor; `j`/`k` are aliases. | +| Enter (sidebar-focused) | Switch the foreground session to the selected card. | +| `n` (sidebar-focused) | Spawn a new background session and bring it to the foreground. | +| `s` (sidebar-focused) | Cycle the sort order: recent → created → name → none. | +| `x`, `x` (sidebar-focused) | Close the selected card (armed for one keystroke, shown in red, before closing). | + +The sidebar's divider can be dragged to resize it, and it auto-collapses below a minimum usable width. Each card shows a status dot, the session name, and its Git branch (or working directory when there is no branch). The foreground session's title is highlighted in accent color, and its card carries a persistent subtle fill. The active sort order (`recent`, `created`, `name`, or `none` for insertion order) persists across restarts. + +Mouse actions mirror the keyboard: click a card to switch the foreground session, double-click a card or empty rail space to focus the sidebar, and click the timeline pane while the sidebar is focused to return focus to it. + +The **Sessions** tab lists the current session plus your full resumable session history under a "Resumable" divider: + +| Shortcut | Purpose | +|----------|---------| +| / | Navigate rows. | +| Shift+/ | Page up or down. | +| Enter | Resume the selected session. | +| `n` | Start a new session. | +| `a` | Cycle the filter scope: all → local → remote (cloud). | +| `/` | Search live across name, branch or working directory, repository, and session ID. | +| / | Switch tabs. | + +Remote (cloud) rows in the **Sessions** tab also show online or offline status and the repository. + ## Diff mode shortcuts When diff mode is open (entered via `/diff`): @@ -415,7 +425,7 @@ These are the slash commands you can use from within an interactive CLI session. | `/after [DELAY PROMPT]`, `/after` | Schedule a non-recurring prompt, skill, or schedulable slash command for the current session (for example, `/after 30m remind me the time` or `/after 1h /chronicle standup`). With no arguments the schedule manager is displayed. {% data reusables.copilot.experimental %} | | `/agent` | Browse and select from available agents (if any). See [AUTOTITLE](/copilot/concepts/agents/copilot-cli/about-custom-agents). | | `/app` | Open the current session in the {% data variables.copilot.github_copilot_app %} (requires version 1.1.3 or later), or show the download URL if the app is not installed. | -| `/ask QUESTION` | Ask a quick side question without adding to the conversation history. | +| `/ask QUESTION`, `/btw QUESTION` | Ask a quick side question without adding to the conversation history. See [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/ask-a-side-question). | | `/allow-all [off\|auto\|show]`, `/yolo [off\|auto\|show]` | Enable all permissions (tools, paths, and URLs). This is an alias for `/permissions allow-all`; see the `/permissions` row for the canonical command and its subcommands. | | `/autopilot [OBJECTIVE]`, `/goal [OBJECTIVE]` | Start or refocus autopilot mode, optionally with an explicit objective (for example, `/goal Refactor the auth module`). Without an objective, autopilot infers intent from context, and the status panel shows your last prompt as the inferred objective. You can cap AI-credit spend for the objective by using `--max-ai-credits N` (for example, `/goal Refactor the auth module --max-ai-credits 5`). When the cap is reached, autopilot pauses and opens a panel reporting credits used against the cap. Enter a new amount to resume with a fresh credit window, or dismiss the panel to stay paused. You can also resume a paused objective yourself, without the panel, by running the option on its own with no objective text—for example, `/goal --max-ai-credits 5`. This is the same action the panel performs: it opens a fresh window of the credits you specify (the full new cap, not an increment) and continues the objective. `/goal on` and `/goal off` toggle autopilot mode without setting an objective and don't accept `--max-ai-credits`. An active goal renders as a pinned panel above the composer, showing the objective, credits used, and todo progress. The panel auto-collapses to a single identity row on short terminals (below 30 rows) and expands above that threshold; press Ctrl+X then `g` to override the automatic sizing by hand. | | `/changelog [summarize] [VERSION\|last N\|since VERSION]`, `/release-notes [summarize] [VERSION\|last N\|since VERSION]` | Display the CLI changelog. Optionally specify a version, a count of recent releases, or a starting version. Add the keyword `summarize` for an AI-generated summary. | @@ -449,7 +459,7 @@ These are the slash commands you can use from within an interactive CLI session. | `/login` | Log in to {% data variables.product.prodname_copilot_short %}. | | `/logout` | Log out of {% data variables.product.prodname_copilot_short %}. | | `/lsp [show\|test\|reload\|logs\|help] [SERVER-NAME]` | Manage the language server configuration. The `logs` subcommand opens the live LSP services log panel. | -| `/mcp [config\|list\|show\|add\|edit\|delete\|disable\|enable\|auth\|reload\|search] [SERVER-NAME]` | Manage the MCP server configuration. With no subcommand, or with `show`, the plugins dashboard opens showing your MCP servers. Select a server and press Enter for its details and for actions such as enabling or disabling it, or use `show SERVER-NAME` to open that server's details directly. `config` opens the MCP configuration interface instead of the dashboard. `list` (alias `ls`) prints a plain-text list of configured servers with connection status and live state, and is read-only, so it can run while the agent is busy processing a turn. All subcommands other than `config`, `show`, and `list` are blocked until the turn finishes. Sandboxed local servers show a `connected (sandboxed)` status. See [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers#managing-mcp-servers). | +| `/mcp [config\|list\|show\|add\|edit\|delete\|disable\|enable\|auth\|reload\|search] [SERVER-NAME]` | Manage the MCP server configuration. With no subcommand, or with `config`, the plugins dashboard opens pinned to the MCP server list; the add, edit, and authenticate forms open inside that dashboard too, so closing a form returns you to the server list. Use `show` or `show SERVER-NAME` to display all configured servers or open one server's details directly, including its available tools, and to enable or disable it. `list` (alias `ls`) prints a plain-text list of configured servers with connection status and live state. Bare `/mcp`, `config`, `show`, and `list` (alias `ls`) are read-only or open the dashboard, so they can run while the agent is busy processing a turn. The mutating subcommands (`add`, `edit`, `delete`, `disable`, `enable`, `auth`, `reload`, and `search`) are blocked until the turn finishes. `edit ` rejects a workspace-sourced server (one defined in a repository's `.mcp.json`) instead of opening the user-tier wizard, since saving would silently create a same-name user entry that the workspace one still shadows. The error names the file to edit directly. `delete ` reports the same file when asked to remove a workspace-sourced server. Sandboxed local servers show a `connected (sandboxed)` status. See [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/add-mcp-servers#managing-mcp-servers). | | `/model [--session\|--global\|--repo\|--local] [MODEL]`, `/models` | Select the AI model you want to use, or choose **Auto**. By default (or with `--session`, alias `-s`), changes the model, reasoning effort, or context window for the current session only, without touching saved settings. `--repo`/`--local` pins the default model in repository settings instead; `--global` (or `/config model`) sets the default for future sessions. Press Tab on a model with a long-context variant to toggle its Context column between the default and long-context window. The picker groups models into sections—press Shift+Tab to cycle grouping between recommended (Recent, Recommended, New, and other models), vendor, and category. A model with vendor-specific data retention terms shows a data retention warning banner with a link to the vendor's policy. Usable mid-turn: a change requested while the agent is running is queued as a cancellable (Ctrl+C) command and applied once the current turn finishes, instead of switching the live model mid-request. See [AUTOTITLE](/copilot/concepts/models/auto-model-selection). | | `/permissions [default\|assisted\|allow-all\|show]` | Switch between permission modes (`default`, `assisted`, `allow-all`), or show the current mode (`show`). This is the canonical command for permission mode changes; `/allow-all` and `/yolo` remain supported as aliases. | | `/permissions reset` | Reset all in-memory tool and path approvals for the current session (re-prompt on next use). | @@ -474,7 +484,7 @@ These are the slash commands you can use from within an interactive CLI session. | `/resume [SESSION-ID]`, `/continue [SESSION-ID]` | Switch to a different session by choosing from a list (optionally specify a session ID). | | `/review [PROMPT]` | Run the code review agent to analyze changes. See [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/agentic-code-review). | | `/rubber-duck [PROMPT]` | Consult the rubber duck agent for a second opinion on plans, code, and tests. See [AUTOTITLE](/copilot/concepts/agents/copilot-cli/rubber-duck). | -| `/sandbox [config\|status\|policy\|enable\|disable]` | Manage OS-level sandboxing that restricts filesystem and network access for shell commands, MCP/LSP servers, and built-in file/web tools. `config` (or bare `/sandbox`) opens the sandbox settings dialog. `status` shows whether sandboxing is enabled. `policy` shows the effective policy, with path grants grouped by source (user-configured, system, working directory, current session, and `~/.copilot`) and access type, plus the network stance and any detected developer tools. `enable`/`disable` turn sandboxing on or off directly. {% data reusables.copilot.experimental %} | +| `/sandbox [config\|status\|policy\|enable\|disable]` | Manage OS-level sandboxing that restricts filesystem and network access for shell commands, MCP/LSP servers, and built-in file/web tools. `config` (or bare `/sandbox`) opens the sandbox settings dialog. `status` shows whether sandboxing is enabled. `policy` shows the effective policy, with path grants grouped by source (user-configured, system, working directory, current session, and `~/.copilot`) and access type, plus the network stance and any detected developer tools. `enable`/`disable` turn sandboxing on or off directly. `status` and `policy` are read-only and can run while the agent is busy processing a turn. `config`, `enable`, and `disable` are queued until the turn finishes. {% data reusables.copilot.experimental %} | | `/search [QUERY]`, `/find [QUERY]` | Search the conversation timeline. | | `/security-review [PROMPT]` | Run a focused security review of active local code changes and return prioritized vulnerability findings with remediation suggestions. This command is not a full repository security audit. | | `/session [info\|checkpoints [n]\|files\|plan\|rename [NAME]\|cleanup\|prune\|delete [ID]\|delete-all]`, `/sessions [info\|checkpoints [n]\|files\|plan\|rename [NAME]\|cleanup\|prune\|delete [ID]\|delete-all]` | Show session information and manage sessions. The `info` subcommand shows session details including the session link (when available). Subcommands: `info`, `checkpoints`, `files`, `plan`, `rename`, `cleanup`, `prune`, `delete`, `delete-all`. | @@ -487,26 +497,29 @@ These are the slash commands you can use from within an interactive CLI session. | `/skills remove ` | Remove a skill by name, or unregister a custom skill directory. | | `/skills reload` | Reload skills from all directories. See [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/add-skills). | | `/statusline`, `/footer` | Configure which items appear in the status line. | -| `/subagents`, `/agents` | Configure default and per-agent subagent models. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#configuration-file-settings). | +| `/subagents`, `/agents` | Configure default and per-agent subagent models. For an agent with `modelPolicy: "required"`—whether set in the agent's own definition or in the `subagents` settings override—the picker shows a locked **Model** entry and a **Model enforcement** row reading "required - cannot be overridden" (or "required by agent definition" when the agent definition itself sets the policy). Switch the policy back to `"preferred"` from the picker to allow overrides again, unless the agent definition requires it. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#configuration-file-settings). | | `/tasks` | View and manage tasks (subagents and shell commands). | | `/terminal-setup` | Configure the terminal for multiline input support (Shift+Enter and Ctrl+Enter). | | `/theme [default\|github\|dim\|high-contrast\|colorblind]` | View or set the color mode. | | `/tuikit [colors\|icons\|select\|tabbar]` | Preview TUIkit design-system components and color tokens. | | `/undo`, `/rewind` | Open the rewind picker to roll the session back to an earlier user turn. Choose between: **Conversation only** (roll back the conversation, leaving files as they are) or **Conversation + files** (also restore the files {% data variables.product.prodname_copilot_short %} changed in that turn, and later discarded turns, to their pre-change contents, skipping any you have since edited yourself). File changes are tracked per turn across editing tools, shell commands, and sub-agents, so Git is not required. | | `/update`, `/upgrade` | Update the CLI to the latest version. | -| `/usage` | Display session usage metrics and statistics, including per-model token totals. | +| `/usage` | Display session usage metrics and statistics, including per-model token totals. For token-based-billing accounts, each model's row also shows its own {% data variables.product.prodname_ai_credit_singular %} consumption (for example, `1 AIC`). Billed models with no token counts show credits only. | | `/user [show\|list\|switch]` | Manage the current {% data variables.product.github %} user. | | `/version` | Display version information and check for updates. | +| `/vim` | Toggle Vim mode for the input composer, enabling Vim-style modal editing: motions (for example, `hjkl`, `w`, `b`, `e`, `0`, `$`, `gg`, `G`), character search (`f`/`F`/`t`/`T`/`;`/`,`), insert commands (`i`/`a`/`o`), edit commands (`r`/`~`/`J`/`x`/`D`/`C`), operators (`d`/`c`/`y`), yank and put (`y`/`p`/`P`), repeat (`.`), undo and redo (`u`/Ctrl+R), counts, and Esc to return to normal mode. Also configurable with the `editorMode` setting. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#user-settings-copilotsettingsjson). | | `/voice [on\|off\|models\|devices]` | Toggle voice mode, browse available voice models, or choose the input device (microphone). | | `/fork [NAME]`, `/branch [NAME]` | Fork the current session into a new session, optionally with a name. | -| `/worktree [branch\|task]` | Create a new Git worktree and switch to it, leaving uncommitted changes behind in the current worktree. Pass a branch name, a task description (multiline supported, used as the opening prompt in the new worktree), or omit the argument to auto-generate a branch name from the conversation. By default, branches off the current checkout (`HEAD`); set the `worktreeBaseRef` setting to `"defaultBranch"` to branch off the remote default branch instead. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#user-settings-copilotsettingsjson). Requires a Git repository. {% data reusables.copilot.experimental %} | -| `/worktree new [PROMPT]` | Start a new conversation in a new Git worktree, leaving the current conversation and its working directory unchanged. Optionally provide the first prompt. `new` is reserved as the subcommand keyword and can't be used as a literal branch name. Follows the same `worktreeBaseRef` setting as `/worktree`. {% data reusables.copilot.experimental %} | -| `/move [branch\|task]` | Move uncommitted changes into a new Git worktree and switch to it. Pass a branch name, a task description (multiline supported, used as the opening prompt in the new worktree), or omit the argument to auto-generate a branch name from the conversation. Requires a Git repository. {% data reusables.copilot.experimental %} | +| `/worktree [branch\|task]` | Create a new Git worktree and switch to it, leaving uncommitted changes behind in the current worktree. Pass a branch name, a task description (multiline supported, used as the opening prompt in the new worktree), or omit the argument to auto-generate a branch name from the conversation. By default, branches off the current checkout (`HEAD`); set the `worktreeBaseRef` setting to `"defaultBranch"` to branch off the remote default branch instead. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#user-settings-copilotsettingsjson). Requires a Git repository. | +| `/worktree new [PROMPT]` | Start a new conversation in a new Git worktree, leaving the current conversation and its working directory unchanged. Optionally provide the first prompt. `new` is reserved as the subcommand keyword and can't be used as a literal branch name. Follows the same `worktreeBaseRef` setting as `/worktree`. | +| `/move [branch\|task]` | Move uncommitted changes into a new Git worktree and switch to it. Pass a branch name, a task description (multiline supported, used as the opening prompt in the new worktree), or omit the argument to auto-generate a branch name from the conversation. Requires a Git repository. | For a complete list of available slash commands enter `/help` in the CLI's interactive interface. In the schedule manager opened by a bare `/every` or `/after`, use / to select an entry and `x` to remove it. Schedules can only be added from the prompt input using `/every` or `/after` with arguments—the dialog itself is read-and-remove only. +The footer shows an "N scheduled" indicator by default whenever the session has active schedules, even if `/every` and `/after` are not enabled for you. + `/plugin` flags an installed plugin or marketplace when a newer version is available upstream, and offers an **Update** action from the dashboard. `/mcp list`/`ls` and `/plugin list`/`ls` (including bare `/plugin`) are read-only and can run while the agent is busy processing a turn. All other `/mcp` and `/plugin` subcommands are blocked until the turn finishes. @@ -518,10 +531,10 @@ In the schedule manager opened by a bare `/every` or `/after`, use ↑↑↑.worktrees/` and start the session inside it. `NAME` is optional—omit it to auto-generate a branch name. By default, branches off the current checkout (`HEAD`); set the `worktreeBaseRef` setting to `"defaultBranch"` to branch off the remote default branch instead. Conflicts with `--resume`, `--continue`, and `--connect`. {% data reusables.copilot.experimental %} | +| `-w`, `--worktree[=NAME]` | Create or reuse an isolated Git worktree under `.worktrees/` and start the session inside it. `NAME` is optional—omit it to auto-generate a branch name. By default, branches off the current checkout (`HEAD`); set the `worktreeBaseRef` setting to `"defaultBranch"` to branch off the remote default branch instead. Conflicts with `--resume`, `--continue`, and `--connect`. | | `--yolo` | Enable all permissions (equivalent to `--allow-all`). | For a complete list of commands and options, run `copilot help`. @@ -611,6 +625,8 @@ Plan-then-autopilot lets a session start in plan mode and automatically continue An enterprise-managed policy can enforce OS-level shell sandboxing as a minimum floor. In other words, even if you pass `--no-sandbox`, the policy can still force sandboxing on. This is a policy override, not a failure of the flag itself. By contrast, `--sandbox` is unaffected because it only turns sandboxing on and never removes it. If the effective policy permits sandbox bypass, you can explicitly disable sandboxing for the rest of the current session while responding to an active bypass permission prompt. +When a managed floor forces sandboxing on with an effective `sandbox.allowBypass` of `true` (the default when a policy sets only `sandbox.enabled` to `true`), run `/sandbox disable` to opt out of the sandbox for the rest of the current session—no bypass prompt is required first. The opt-out is session-only: nothing is saved to `settings.json`, a new session starts sandboxed again, and `/sandbox enable` restores sandboxing immediately without waiting for a new session. If `allowBypass` is `false`, `/sandbox disable` refuses with a message that sandboxing is enforced by the managed policy and can't be disabled. + When a managed policy overrides your setting, the CLI shows a warning in the interactive timeline (or on stderr when using `-p`) so it is clear that the behavior comes from policy enforcement rather than the option failing to work. Contact your administrator if you need the policy changed. The `/sandbox` command is also registered whenever a managed policy forces sandboxing on, even without experimental features enabled, so you can still inspect the effective policy and status while the floor applies. {% data reusables.copilot.experimental %} Adding the managed `sandbox.failIfUnavailable` setting set to `true`, alongside `sandbox.enabled` set to `true`, makes the sandbox mandatory when it cannot be established. Instead of falling back to running commands unsandboxed, {% data variables.product.prodname_copilot_short %} blocks model and tool execution if the policy can't be validated, compiled, or enforced by a usable sandbox backend. See [AUTOTITLE](/copilot/reference/enterprise-administrators/enterprise-managed-settings#sandbox). @@ -645,13 +661,13 @@ Use `--model=MODEL` or the `COPILOT_MODEL` environment variable to select the AI |-------|----------| | `claude-sonnet-4.6` | General-purpose coding (default) | | `gpt-5.4` | Complex reasoning tasks | +| `gpt-6-astra` | New model, opt-in (not the automatic default) | | `claude-haiku-4.5` | Fast, lightweight operations | | `gpt-5.3-codex` | Code-focused tasks | | `gemini-3.1-pro-preview` | Google Gemini reasoning | | `gemini-3.5-flash` | Fast Google Gemini responses | | `gemini-3.6-flash` | Fast Google Gemini responses | | `gemini-3.7-flash` | Fast Google Gemini responses | -| `mai-code-1-flash` | Fast, adaptive coding tasks | You can also switch models during an interactive session using the `/model` slash command. @@ -737,9 +753,11 @@ copilot --deny-tool='write(secret.txt)' | `COPILOT_ALLOW_ALL` | Set to `true` to allow all permissions automatically (equivalent to `--allow-all`). | | `COPILOT_AUTO_UPDATE` | Set to `false` to disable automatic updates of the CLI and first-party plugins. | | `COPILOT_CACHE_HOME` | Override the cache directory (used for marketplace caches, auto-update packages, and other ephemeral data). See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#changing-the-location-of-the-configuration-directory) for platform defaults. | +| `COPILOT_CHILD_OOM_SCORE_ADJ` | Linux only. Overrides the `oom_score_adj` bias applied to shell command process trees spawned by the CLI, so the kernel's out-of-memory (OOM) killer reclaims a runaway child process tree (for example, a build) before the CLI itself. Default: `300`. Range: `-1000`–`1000`. Set to `off` to disable the bias. | | `COPILOT_CUSTOM_INSTRUCTIONS_DIRS` | Comma-separated list of additional directories for custom instructions. | | `COPILOT_EDITOR` | Editor command for interactive editing (checked after `$VISUAL` and `$EDITOR`). Defaults to `vi` if none are set. | | `COPILOT_ENABLE_HTTP2` | Set to `1` or `true` to opt into HTTP/2 transport. HTTP/1.1 is the default. | +| `COPILOT_ENABLE_INTERRUPTED_SESSION_RESTORE` | Set to `1` to enable restoring a session that was still open when the CLI process went away, for example due to a crash or a machine restart. This restore behavior is temporarily opt-in while its startup dialog is reworked. See [Restoring an interrupted session](#restoring-an-interrupted-session). | | `COPILOT_GH_HOST` |{% data variables.product.github %} hostname for {% data variables.copilot.copilot_cli_short %} only, overriding `GH_HOST`. Use when `GH_HOST` targets {% data variables.product.prodname_ghe_server %} but {% data variables.product.prodname_copilot_short %} needs to authenticate against {% data variables.product.prodname_dotcom_the_website %} or a {% data variables.product.prodname_ghe_cloud %} hostname. | | `COPILOT_GITHUB_TOKEN` | Authentication token. Takes precedence over `GH_TOKEN` and `GITHUB_TOKEN`. | | `COPILOT_HOME` | Override the configuration and state directory. Default: `$HOME/.copilot`. | @@ -748,6 +766,8 @@ copilot --deny-tool='write(secret.txt)' | `COPILOT_MODEL` | Set the AI model. | | `COPILOT_PLAN_THEN_AUTOPILOT` | Set to `1`, `true`, `yes`, or `on` to request plan-then-autopilot (equivalent to `--plan --mode autopilot`) for harnesses that can only inject environment variables. Ignored, with a warning, when an explicit `--mode`, `--autopilot`, or `--plan` option is passed. See [Plan-then-autopilot](#plan-then-autopilot). | | `COPILOT_PROMPT_FRAME` | Set to `1` to enable the decorative UI frame around the input prompt, or `0` to disable it. Overrides the `PROMPT_FRAME` experimental feature flag for the current session. | +| `COPILOT_PROVIDER_API_KEY_COMMAND` | Shell command that prints a fresh bring-your-own-key (BYOK) API key before each provider request. Takes precedence over the `COPILOT_PROVIDER_API_KEY` environment variable. Its output replaces the matching credential header even if a custom header set via `COPILOT_PROVIDER_HEADERS` would otherwise collide. | +| `COPILOT_PROVIDERS_CONFIG` | Path to a JSON file that defines a bring-your-own-key (BYOK) provider and model registry, as an object with `providers` and `models` keys. Default: `/providers.json`. When this file declares any provider or model, it takes precedence over the legacy `COPILOT_PROVIDER_*` environment variables. See [`providers.json`](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#providersjson). | | `COPILOT_SKILLS_DIRS` | Comma-separated list of additional directories for skills. | | `PLUGINS_DASHBOARD` | Set to `false` to disable the plugins dashboard opened by bare `/plugin`, `/mcp`, and `/skills`, and to disable the non-interactive `copilot plugin`/`copilot plugins` commands. | | `COPILOT_STRIP_REASONING_ON_RESUME` | Set to `0` or `false` to keep BYOK reasoning tokens across a session resume instead of stripping them. Defaults to stripping them. | @@ -762,7 +782,7 @@ copilot --deny-tool='write(secret.txt)' | `GITHUB_TOKEN` | Authentication token. | | `PLAIN_DIFF` | Set to `true` to disable rich diff rendering. | | `USE_BUILTIN_RIPGREP` | Set to `false` to use the system ripgrep instead of the bundled version. | -| `USE_TGREP` | Set to `true` to always use [tgrep](https://github.com/microsoft/tgrep), a trigram-indexed search engine, regardless of repository size, or `false` to always use ripgrep. When unset, {% data variables.copilot.copilot_cli_short %} automatically switches from ripgrep to tgrep once a repository exceeds a platform-specific file-count threshold. | +| `USE_TGREP` | Set to `true` to always use [tgrep](https://github.com/microsoft/tgrep), a trigram-indexed search engine, even outside a Git repository or on a virtualized or network filesystem (for example, a VFS for Git checkout, or an SMB/9p mount), or `false` to always use ripgrep. When forced outside a Git repository, tgrep indexes the working directory itself, so avoid forcing it somewhere large such as your home directory. Windows cloud-sync folders (for example, OneDrive) always use ripgrep, even when this is set to `true`. When unset, {% data variables.copilot.copilot_cli_short %} automatically switches from ripgrep to tgrep only inside a Git repository, on a non-virtualized filesystem, and once it exceeds a platform-specific file-count threshold. | ## Configuration file settings @@ -839,6 +859,7 @@ Use `copilot mcp` to manage MCP server configurations from the command line with | `list [--json]` | List all configured MCP servers grouped by source, including plugin-provided servers. | | `get [--json]` | Show configuration and tools for a specific server. For plugin-provided servers, also shows the source plugin name and version. | | `add [options] [url]` | Add a server to the user configuration. Writes to `~/.copilot/mcp-config.json`. | +| `enable ` / `disable ` | Enable or disable a server by name. The change persists to the user configuration and applies to future sessions. | | `remove ` | Remove a user-level server. Workspace servers must be edited in their configuration files directly. | For local (stdio) servers, provide the command after `--`: @@ -1003,6 +1024,10 @@ The `github-mcp-server` provides the following tools. | `list_workflow_runs`, `get_workflow_run_logs` | {% data variables.product.prodname_actions %}. | | `get_label`, `list_label`, `label_write` | Label management. | +### Resource discovery + +{% data reusables.copilot.experimental %} When a local capability is missing, the agent can search a remote catalog for public MCP servers and skills to add, using a built-in `discover-resources` skill. The skill queries the catalog for relevance-ranked MCP servers and skills matching an abstract capability (for example, "database access" or "architecture diagrams"), then presents candidates for you to choose from. The skill itself never installs anything. The `/plugin`, `/mcp`, and `/skills` dashboards also include a typed catalog search that blends the same remote results into the local resource list. + ### MCP server naming Server names can contain any printable characters, including spaces, Unicode characters, and punctuation. Control characters (U+0000–U+001F, U+007F) and the closing brace (`}`) are not allowed. Server names are used as prefixes for tool names—for example, a server named `my-server` produces tool names like `my-server-fetch`, and a server named `My Server` produces `My Server-fetch`. @@ -1125,19 +1150,33 @@ Remote skills are projected alongside local skills and follow the same name-base When two plugins provide skills with the same name, both coexist using plugin-qualified invocation names such as `/my-plugin/search` and `/other-plugin/search`. The bare name routes to the higher-priority plugin. This applies to skills only; commands keep the standard tier-based deduplication, where the higher-priority source wins. -### Installing a skill non-interactively +### Managing skills non-interactively -Use `copilot plugins install --skill` to install a skill from a file, URL, or directory without opening an interactive session: +Use `copilot skill` to manage skills from the command line without opening an interactive session. + +| Subcommand | Description | +|------------|-------------| +| `list [--json]` | List all discovered skills. | +| `add [--project]` | Add a skill from a file path, URL, or directory. | +| `remove ` | Remove a personal or project skill, or unregister a custom skill directory. | +| `enable ` / `disable ` | Enable or disable a skill by name. | ```bash -# Install for your user account (default scope) -copilot plugins install --skill ./my-skill/SKILL.md +# Install a skill for your user account (default) +copilot skill add ./my-skill/SKILL.md + +# Install a skill into the current project (.github/skills; file or URL skills only) +copilot skill add --project ./my-skill/SKILL.md -# Install into the current project (.github/skills; file or URL skills only) -copilot plugins install --skill --scope project ./my-skill/SKILL.md +# Enable, disable, or remove a skill by name +copilot skill enable my-skill +copilot skill disable my-skill +copilot skill remove my-skill ``` -Installing a directory registers it as a custom skill source rather than copying it. Installing a file or URL copies the skill's content into your personal or project skills directory. The equivalent interactive command is `/skills add [--project] `. For the full option reference, see [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-plugin-reference#copilot-plugins-install-options). +Installing a directory registers it as a custom skill source rather than copying it. Installing a file or URL copies the skill's content into your personal or project skills directory. The equivalent interactive command is `/skills add [--project] `. + +`copilot skill list --json` rows have the shape `{ name, description, source, path, enabled }`. With `remove`, pass either a skill name or the path to a custom skill directory you added—a skill name deletes that skill's files, while a custom directory path only unregisters the directory and leaves its files on disk. Only personal and project skills you added can be removed; skills provided by a plugin or the builtin set can't be removed this way (disable them instead). This replaces the retired `copilot plugins install --skill [--scope project]` and `copilot plugins remove/enable/disable --skill`. ### Commands (alternative skill format) @@ -1151,12 +1190,12 @@ Custom agents are specialized AI agents defined in Markdown files. The filename | Agent | Default model | Description | |-------|--------------|-------------| -| `code-review` | claude-sonnet-4.5 | High signal-to-noise code review. Analyzes diffs for bugs, security issues, and logic errors. Will not modify code. | +| `code-review` | claude-sonnet-4.6 | High signal-to-noise code review. Analyzes diffs for bugs, security issues, and logic errors. Will not modify code. | | `explore` | gpt-5.4-mini | Fast codebase exploration. Searches files, reads code, and answers questions. Returns focused answers under 300 words. Safe to run in parallel. | -| `general-purpose` | claude-sonnet-4.5 | Full-capability agent for complex multi-step tasks. Runs in a separate context window. | +| `general-purpose` | claude-sonnet-4.6 | Full-capability agent for complex multi-step tasks. Runs in a separate context window. | | `research` | claude-haiku-4.5 | Executes thorough searches based on instructions. Searches {% data variables.product.github %} repositories, fetches files, verifies claims, and reports detailed findings with citations. | | `rubber-duck` | complementary model | Use a complementary model to provide a constructive critique of proposals, designs, implementations, or tests. Identifies weak points and suggests improvements. See [AUTOTITLE](/copilot/concepts/agents/copilot-cli/rubber-duck). | -| `security-review` | claude-sonnet-4.5 | Security-focused code review. Analyzes changes for high-confidence vulnerabilities across 11 categories. Only flags issues with >80% confidence of exploitability. Reports severity and confidence scores. Will not modify code. | +| `security-review` | claude-sonnet-4.6 | Security-focused code review. Analyzes changes for high-confidence vulnerabilities across 11 categories. Only flags issues with >80% confidence of exploitability. Reports severity and confidence scores. Will not modify code. | | `task` | claude-haiku-4.5 | Command execution (tests, builds, lints). Returns brief summary on success, full output on failure. | `code-review` and `security-review` never forward a full review to another review agent: launching one already fulfills a request to "use" or "call" a reviewer, so it performs the review itself instead of delegating the whole task to a nested `code-review` or `security-review` subagent, recursively, across the entire delegation chain. `code-review` still hands off to the dedicated `security-review` specialist for security-focused portions of a request, and both agents may delegate narrow, independently scoped fact-finding work to non-review agents such as `explore`. @@ -1171,11 +1210,13 @@ Only the root agent can call `store_memory` or `vote_memory` to save or vote on | `infer` | boolean | No | Allow auto-delegation by the main agent. Default: `true`. | | `mcp-servers` | object | No | MCP servers to connect. Uses the same schema as `~/.copilot/mcp-config.json`. | | `model` | string | No | AI model for this agent. When unset, inherits the outer agent's model. When the session model is set to `Auto` (server-selected), subagents always inherit the resolved session model regardless of this field. | +| `models` | string[] | No | Authored models in priority order. The runtime uses the first model the user's plan can access; if none resolve, dispatch falls back to the session's model. Overrides `model` when both are set. | +| `modelPolicy` | string | No | `"preferred"` (default) lets `model`/`models` be overridden by a `subagents` override in `~/.copilot/settings.json` or the `/subagents` picker. `"required"` locks dispatch to one of the authored models—overrides are rejected and the picker's **Model** entry is disabled. | | `name` | string | No | Display name. Defaults to the filename. | | `reasoningEffort` | string | No | Default reasoning effort for this agent (for example, `"low"`, `"medium"`, or `"high"`). When unset, inherits the outer agent's effort. | | `tools` | string[] | No | Tools available to the agent. Default: `["*"]` (all tools). Include `*` anywhere in the list to grant full tool access—for example, `["view", "*"]` grants every tool, not just `view`. | -`model` and `reasoningEffort` apply whether the agent is dispatched through the `task` tool or started directly—for example, through the SDK's `session.startSubagent`. They're resolved with this precedence, highest first: an explicit per-call value, the `subagents` override in `~/.copilot/settings.json`, the agent definition's `model`/`reasoningEffort` field, then the parent session's value. A declared model or effort that can't be honored falls back to the session's value instead of failing the dispatch. +`model`, `models`, `modelPolicy`, and `reasoningEffort` apply whether the agent is dispatched through the `task` tool or started directly—for example, through the SDK's `session.startSubagent`. Model and effort are resolved with this precedence, highest first: an explicit per-call value, the `subagents` override in `~/.copilot/settings.json`, the agent definition's `model`/`models`/`reasoningEffort` field, then the parent session's value. A declared model or effort that can't be honored falls back to the session's value instead of failing the dispatch—unless the agent declares `modelPolicy: "required"`, in which case dispatch is refused rather than silently substituting an unauthored model. ### Custom agent locations @@ -1373,6 +1414,16 @@ High-risk commands display additional warnings and require explicit confirmation When sandboxing is enabled and the **Allow sandbox bypass** setting is on (the default), a synchronous shell command that's blocked by the sandbox's filesystem or network policy prompts you to re-run it outside the sandbox—no model round-trip is required. Approving the prompt re-runs the command and returns its output. Declining keeps the sandboxed (blocked) result. +A sandbox bypass prompt also offers a **Yes, and disable the sandbox for the rest of this session** option. Choosing it turns off sandboxing for every remaining command in the current session, not just the command being approved. This only applies to the current session—starting a new session with `/new` sandboxes commands again, and the option has no effect on the saved `sandbox` configuration setting or on other running sessions. + +A detached (backgrounded) command can't be sandboxed at all, since the sandbox can't wrap a process that outlives the tool call. When the **Allow sandbox bypass** setting is on, this prompts for approval before the command starts, instead of being refused outright. Approving runs the command unsandboxed from the start. + +On Windows hosts whose sandbox policy supports denial capture, a blocked interactive shell command escalates in a single step instead of jumping straight to a full bypass. Approving re-runs the command with file and process restrictions set to record instead of block (the network policy still applies), then falls back to the disclosed full bypass only if the command is still blocked. Only one prompt is shown for the entire escalation. A denied loopback or local-network socket (for example, binding or connecting to `127.0.0.1`) also reaches this same escalation instead of failing silently. The retry result is labeled "sandbox relaxed" when network policy is still enforced, or "sandbox bypassed" when fully unsandboxed. If the retry still fails, the message explains that host-level permissions still apply. + +A command that fails with an `EPERM` or `EACCES` diagnostic naming a sandbox-blocked path now offers to run outside the sandbox, even when the command line itself never named that path. + +When a denial is caused by a symlink whose target escapes what the sandbox policy grants, the denial explains that the granted path's link points outside the grant and names the real target, so you know exactly which path to add to your sandbox policy. + For more information, see [AUTOTITLE](/copilot/how-tos/cloud-and-local-sandboxes/configuring-local-sandbox-settings#allowing-sandbox-bypass). #### Environment variable denylist @@ -1396,6 +1447,8 @@ The `web_fetch` tool enforces server-side request forgery (SSRF) protections bef * **IP blocklist**: Requests to loopback addresses (`127.x.x.x`, `::1`), RFC-1918 private ranges (`10.x`, `172.16–31.x`, `192.168.x`), and cloud metadata endpoints (for example, `169.254.169.254`) are blocked by IP-literal check and DNS pre-resolution. * **Validated redirects**: `web_fetch` follows `3xx` redirects (up to 10 hops, within a 60-second network budget), re-validating each hop's target against the same IP blocklist before following it. A redirect to a different origin than the original URL requires permission approval, the same as any other cross-origin fetch; same-origin redirects are followed without an extra prompt. The final result notes when content was `(redirected from )`. +When sandboxing is enabled, requests are checked against the sandbox network policy (outbound access, local and private hosts) before the permission prompt, so a target blocked by policy fails fast instead of prompting. If the **Allow sandbox bypass** setting is on and the sandbox network proxy can't reach a URL—as opposed to the URL being denied by policy—`web_fetch` prompts you to retry the request outside the sandbox. Approving makes one more attempt at the fetch and returns its outcome. + To allow `web_fetch` to reach `localhost` during development—for example, for a local docs server—set the following environment variable: ```bash @@ -1438,6 +1491,8 @@ Every variable is read on every platform; the **Typically set on** column shows These are not the only read-only grants. {% data variables.copilot.copilot_cli_short %} also grants your user-profile application directories (`~/.local/bin` and `~/.local/lib` on Linux and macOS; the immediate subdirectories of `%LOCALAPPDATA%\Programs` on Windows), standard system and profile locations, and the caches and registries used by common package managers and toolchains (shown as **dev-tool access** in the `/sandbox policy` report). To see the fully resolved policy for your current directory—read/write, read-only, and denied paths—run `/sandbox policy` in a session. For the concepts behind how the policy is assembled, see [AUTOTITLE](/copilot/concepts/agents/copilot-cli/understanding-local-sandboxing). +On Windows, `/sandbox policy` lists the directories on your `PATH` environment variable under **System** read-only grants; other developer-tool paths are grouped separately as detected project tool groups. + ## OpenTelemetry monitoring {% data variables.copilot.copilot_cli_short %} can export traces and metrics via [OpenTelemetry](https://opentelemetry.io/) (OTel), giving you visibility into agent interactions, LLM calls, tool executions, and token usage. All signal names and attributes follow the [OTel GenAI Semantic Conventions](https://github.com/open-telemetry/semantic-conventions-genai/tree/main/docs/gen-ai/). @@ -1570,6 +1625,7 @@ One span per tool call. Span kind: `INTERNAL`. | `gen_ai.invoke_agent.duration` | Histogram | s | End-to-end duration of one agent invocation | | `gen_ai.invoke_agent.inference_calls` | Histogram | `{inference_call}` | Number of model calls made during one agent invocation, counted at provider dispatch (failed and partial calls included; requests blocked before dispatch excluded). Dimension: `gen_ai.agent.name`. | | `gen_ai.invoke_agent.tool_calls` | Histogram | `{tool_call}` | Number of client-side tool calls made during one agent invocation (failed and partial calls included; synthetic CLI tool lifecycles and provider-executed server-side tools excluded). Dimension: `gen_ai.agent.name`. | +| `gen_ai.invoke_workflow.duration` | Histogram | s | End-to-end duration of a GenAI workflow (for example, a fleet mode run orchestrating parallel subagents). | #### Vendor-specific metrics diff --git a/content/copilot/reference/copilot-cli-reference/cli-config-dir-reference.md b/content/copilot/reference/copilot-cli-reference/cli-config-dir-reference.md index 480a58f4102f..9c5d5e334d12 100644 --- a/content/copilot/reference/copilot-cli-reference/cli-config-dir-reference.md +++ b/content/copilot/reference/copilot-cli-reference/cli-config-dir-reference.md @@ -38,6 +38,7 @@ The `~/.copilot` directory contains the following top-level items. | `mcp-secrets/` | Directory | Local fallback storage and index for MCP secret placeholders | | `permissions-config.json` | File | Saved tool and directory permissions per project | | `plugin-data/` | Directory | Persistent data for installed plugins | +| `providers.json` | File | User-level bring-your-own-key (BYOK) provider and model registry | | `session-state/` | Directory | Session history and workspace data | | `command-history-state/` | Directory | Command history data | | `session-store.db` | File | SQLite database for cross-session data | @@ -93,6 +94,12 @@ Defines Language Server Protocol (LSP) servers available at the user level. Thes For more information, see [AUTOTITLE](/copilot/how-tos/copilot-cli/set-up-copilot-cli/add-lsp-servers). +### `providers.json` + +Defines a registry of bring-your-own-key (BYOK) providers and models, as a JSON object with `providers` and `models` keys. When this file declares any provider or model, it takes precedence over the legacy `COPILOT_PROVIDER_*` environment variables. + +By default, this file is located at `~/.copilot/providers.json`. Override its location with the `COPILOT_PROVIDERS_CONFIG` environment variable. + ### `agents/` Store personal custom agent definitions here as `.agent.md` files. Agents placed in this directory are available in all your sessions. Project-level agents (in `.github/agents/`) take precedence over personal agents if they share the same name. @@ -401,6 +408,7 @@ To override the default `~/.copilot` location, set the `COPILOT_HOME` environmen | `mcp-secrets/` | With caution | Clears local MCP secret fallback state and mappings. Secret-backed MCP servers may need reconfiguration. | | `permissions-config.json` | With caution | Resets all saved permissions. The CLI will prompt you again for tool and directory approvals. | | `plugin-data/` | Yes | Plugin persistent data is re-created as needed. | +| `providers.json` | Not recommended | You will lose your BYOK provider and model configuration. Back up first. | | `session-state/` | With caution | Deleting removes session history. You will no longer be able to resume past sessions. | | `command-history-state/` | With caution | Deleting removes command history. You will no longer be able to search previous commands with Ctrl+R. | | `session-store.db` | With caution | Deleting removes cross-session data. The file is re-created automatically. | @@ -458,6 +466,7 @@ These settings apply across all your sessions and repositories. You can use the | `disabledMcpServers` | `string[]` | `[]` | MCP server names to disable. Listed servers are configured but not started. | | `disabledSkills` | `string[]` | `[]` | Skill names to disable. Listed skills are discovered but not loaded. | | `dynamicRetrieval` | `{ skills?: boolean }` | unset | Per-category control of embeddings-based dynamic instruction retrieval. Set `skills` to `false` to disable retrieval for skills. | +| `editorMode` | `"normal"` \| `"vim"` | `"normal"` | Input composer editing mode. Set by toggling the `/vim` slash command. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#slash-commands-in-the-interactive-interface). | | `effortLevel` | `string` | `"medium"` | Reasoning effort level for extended thinking: `"low"`, `"medium"`, `"high"`, or `"xhigh"`. Higher levels use more compute. | | `enabledMcpServers` | `string[]` | `[]` | Enable built-in MCP servers that are disabled by default. | | `enabledPlugins` | `Record` | `{}` | Declarative plugin auto-install. Keys are plugin specs; values are `true` (enabled) or `false` (disabled). | @@ -489,6 +498,8 @@ These settings apply across all your sessions and repositories. You can use the | `sandbox.auth.gh` | `boolean` | `true` | Inject {% data variables.product.prodname_cli %} (`gh`) credentials into the sandbox so commands running inside it can authenticate with the {% data variables.product.prodname_cli %}. Set to `false` to opt out. Renamed from `sandbox.ghAuth`; the old key has no migration and is ignored wherever it still appears. | | `sandbox.userPolicy.network.allowLocalNetwork` | `boolean` | `true` | Allow sandboxed commands to reach local network addresses (for example, local dev servers). Set to `false` to opt out. | | `sandbox.userPolicy.network.proxy` | `object` | unset | Route sandboxed network traffic through an HTTP proxy. Fields: `url` (required), `username` (optional), `password` (optional). Configure it from the `/sandbox` dialog's **Network** tab, which masks the password field. The password itself is stored in the OS keychain rather than in `settings.json`, so it isn't editable via `/settings`. Enforcement differs by platform: on macOS the proxy is cooperative—{% data variables.copilot.copilot_cli_short %} sets `HTTP_PROXY`, `HTTPS_PROXY`, and `ALL_PROXY` in the sandbox, so only programs that honor those variables use it; on Linux it is strictly enforced through a private network namespace that permits only the proxy endpoint (the proxy must have an IPv4 address and must not embed credentials); on Windows the proxy is not supported, so a policy that sets it is rejected and the sandboxed command fails with an error. | +| `sandbox.userPolicy.network.allowedHosts` | `string[]` | `[]` | Hosts a sandboxed command is allowed to reach. Entries are exact hostnames, IP addresses, or `*.example.com` for strict subdomain matches (`*` matches every host). A non-empty list blocks any host that doesn't match. Configure from the `/sandbox` dialog's **Network** tab under **Host rules**. | +| `sandbox.userPolicy.network.blockedHosts` | `string[]` | `[]` | Hosts a sandboxed command is denied from reaching, matched the same way as `allowedHosts`. `blockedHosts` always takes precedence over a matching `allowedHosts` entry, and denying a domain also denies its subdomains. Configure from the `/sandbox` dialog's **Network** tab under **Host rules**. | | `sandbox.userPolicy.deniedPaths` | `string[]` | `[]` | Paths that sandboxed commands are denied access to. On Windows, the ProcessContainer (BaseContainer) backend cannot enforce per-path deny rules, so a policy that sets `deniedPaths` is rejected and the sandboxed command fails with an error—remove the denied paths, or use macOS or Linux, to run that policy. | | `sandbox.userPolicy.seatbelt.keychainAccess` | `boolean` | `false` | macOS only. Grant sandboxed commands access to the system keychain. Can also be toggled from the `/sandbox` dialog. | | `screenReader` | `boolean` | `false` | Enable screen reader optimizations. | @@ -496,19 +507,21 @@ These settings apply across all your sessions and repositories. You can use the | `shellShortcut` | `boolean` | `true` | Let a lone `$` at the prompt, followed by Enter, open an interactive shell rooted at the session's working directory (activates only for a local, trusted, idle session on a real TTY). User- or managed-scoped only—not repo-overridable. | | `showTimestamps` | `boolean` | `true` | Show dim `HH:mm` timestamps next to user messages in the timeline. | | `showTipsOnStartup` | `boolean` | `true` | Show a random command tip when the CLI starts. | +| `sidebar` | `boolean` | `true` | Enable the current-session sidebar. Set to `false` to disable it entirely, hiding the composer hint and the open gesture. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#sidebar-and-sessions-tab-shortcuts). | | `skillDirectories` | `string[]` | `[]` | Additional directories to search for custom skill definitions (in addition to `~/.copilot/skills/`). | | `statusLine` | `object` | — | Custom status line display. `type`: must be `"command"`. `command`: path to an executable script that receives session JSON on stdin and prints status content to stdout. `padding`: optional number of left-padding spaces. `refreshInterval`: optional integer number of seconds (`1`–`2147483`) to re-run the command on a timer instead of only on events; omit it to refresh only when the session state changes. If the command fails to spawn, exits non-zero, or fails to receive the status JSON on stdin, the CLI logs a warning once per continuous failure episode and leaves the status line blank instead of failing silently. Run with `--log-level all` to see the underlying error detail. | | `stayInAutopilot` | `boolean` | `true` | Remain in autopilot mode after each task completes. When enabled, the next prompt you enter after a task completes is also handled in autopilot mode. For more information, see [AUTOTITLE](/copilot/concepts/agents/copilot-cli/autopilot#staying-in-autopilot-mode-between-tasks). | | `storeTokenPlaintext` | `boolean` | `false` | Allow authentication tokens to be stored in plain text in `config.json` when no system keychain is available. | | `stream` | `boolean` | `true` | Enable streaming responses. | | `streamerMode` | `boolean` | `false` | Hide preview model names, quota details, prompt timestamps, and the update-available notice. Useful when demonstrating {% data variables.copilot.copilot_cli_short %} or screen sharing. | -| `subagents.agents` | `object` | `{}` | Per-agent model configuration, keyed by agent name. Each value is an object with optional `model` (string), `effortLevel` (string), and `contextTier` (`"default"`, `"long_context"`, or `"inherit"`) fields. Set any field to `"inherit"` to use the parent session's value at dispatch time. Use the `/subagents` slash command to configure these settings interactively. | +| `subagents.agents` | `object` | `{}` | Per-agent model configuration, keyed by agent name. Each value is an object with optional `model` (string), `modelPolicy` (`"preferred"` or `"required"`), `effortLevel` (string), and `contextTier` (`"default"`, `"long_context"`, or `"inherit"`) fields. Set `model`, `effortLevel`, or `contextTier` to `"inherit"` to use the parent session's value at dispatch time. `modelPolicy` has no effect when the agent definition itself sets `modelPolicy: "required"`—that lock can't be overridden here. Use the `/subagents` slash command to configure these settings interactively. | | `subagents.disabledSubagents` | `string[]` | `[]` | Agent names to prevent from being dispatched. Only the `rubber-duck` agent cannot be disabled via this setting. All other built-in agents—including `explore`, `task`, `code-review`, `general-purpose`, `research`, and `security-review`—can be disabled. | | `subagents.maxConcurrency` | `number` | plan-based | Maximum concurrent subagents for this session. Only honored for usage-based billing users; ignored for all other plans. Capped at `32`. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#subagent-limits). | | `subagents.maxDepth` | `number` | `6` | Maximum subagent nesting depth. Only honored for usage-based billing users; ignored for all other plans. Capped at `256`. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#subagent-limits). | | `tabs.enabled` | `boolean` | `true` | Show the home tab bar. Set to `false` to hide it entirely. | | `tabs.hide` | `string[]` | `[]` | Tab identifiers to hide. Accepted values: `"copilot"`, `"agents"`, `"issues"`, `"pull-requests"`, `"gists"` (matched case-insensitively). | | `tabs.sort` | `string[]` | `[]` | Order in which tabs are displayed. Tabs not listed keep their default relative order after the listed ones. Unknown identifiers are ignored. | +| `taskbarPresence` | `boolean` | `true` | Show a live {% data variables.product.prodname_copilot_short %} session on the Windows taskbar (agent icon and hover card). Set to `false` to opt out. Startup-only; takes effect on the next launch. Windows only. | | `terminalProgress` | `boolean` | `true` | Emit OSC 9;4 terminal progress indicators while the agent is working. Supported terminals include Windows Terminal, iTerm2, Ghostty, and ConEmu. | | `theme` | `"default"` \| `"github"` \| `"dim"` \| `"high-contrast"` \| `"colorblind"` | `"github"` | Color palette for terminal output. Managed by the `/settings` and `/theme` slash commands. `colorMode` is a deprecated alias for this setting. | | `toolSearch` | `boolean` | model- and feature-dependent | Controls tool search (deferred tool loading). Set `toolSearch: false` to opt out of tool search. | @@ -518,7 +531,9 @@ These settings apply across all your sessions and repositories. You can use the > [!TIP] > Run `copilot help sandbox` for the full sandbox reference, including supported hosts and all `sandbox` settings keys. -The `/sandbox` dialog groups `git`, `gh`, and keychain access under a dedicated **Auth** tab, and shows the `settings.json` path where the current sandbox configuration is stored. Press Ctrl+E in the `/sandbox` dialog to save any pending changes and open `settings.json` in your editor (`COPILOT_EDITOR`, `VISUAL`, or `EDITOR`), matching the same shortcut in `/settings`. The dialog reloads its state from disk after you edit and save the file. +The `/sandbox` dialog groups `git`, `gh`, and keychain access under a dedicated **Auth** tab, and shows the `settings.json` path where the current sandbox configuration is stored. On the **Filesystem** tab, the configured path list is summarized by permission (for example, `2 read/write, 1 read-only`) behind a **Paths** row. Press Enter on that row to open the full list, which takes over the cursor and tab bar until you press Esc. Configured paths are displayed as absolute paths rather than `./`-relative or `~`-shortened forms. Typing `~/path` when adding a path still expands it to your home directory. Press Ctrl+E in the `/sandbox` dialog to save any pending changes and open `settings.json` in your editor (`COPILOT_EDITOR`, `VISUAL`, or `EDITOR`), matching the same shortcut in `/settings`. The dialog reloads its state from disk after you edit and save the file. + +`sandbox.userPolicy.network.allowedHosts` and `sandbox.userPolicy.network.blockedHosts` run through a built-in local proxy that enforces them strictly on every platform, unlike the cooperative `sandbox.userPolicy.network.proxy` setting on Linux and macOS. When both are configured, the local proxy uses `sandbox.userPolicy.network.proxy` as its upstream, so proxy credentials never reach the sandboxed child process. Sandboxing is powered by [Microsoft eXecution Container (MXC)](https://github.com/microsoft/mxc), which provides platform-specific containment backends. {% data variables.copilot.copilot_cli_short %} uses Seatbelt on macOS, Bubblewrap on Linux, and ProcessContainer on Windows. @@ -633,6 +648,7 @@ Only the following keys are supported in MDM managed settings. | `deniedMcpServers` | Denylist of MCP servers that must never load, matched the same way as `allowedMcpServers`. A matching non-default server is blocked regardless of the allowlist—deny always wins. See [Managed MCP server allow/deny list](#managed-mcp-server-allowdeny-list). | | `enabledPlugins` | Enable or disable specific plugins | | `extraKnownMarketplaces` | Add trusted plugin marketplaces | +| `forceLoginOrgs` | Pin sign-in to an approved set of {% data variables.product.github %} organizations (an array of organization logins, matched case-insensitively). {% data variables.product.prodname_copilot_short %} only runs for an account belonging to at least one listed organization; a personal account, an account that belongs only to some other enterprise, or BYOK/API-key authentication is refused with an actionable error. Set an empty array to turn the pin off without deleting the key. Deploy this key through the device channel (MDM plist/registry, or `managed-settings.json`) since it must be able to redirect a developer's first sign-in—the server-managed channel only reaches accounts that have already authenticated into the organization. This key fails closed: an unusable value, or a managed policy that can't be read on a known-managed device, blocks all sign-in until fixed. | | `forceRemoteSettingsRefresh` | Require a fresh server-managed settings fetch on startup, even when a fresh cached policy exists. The cached entry is still kept as a fallback if the fetch fails. The device (MDM) value takes precedence over a cached server value. | | `model` | Set a default model for all users (overridden by the `--model` flag or a resumed-session model) | | `permissions` | Set managed permissions, including `disableBypassPermissionsMode` and `deny` / `ask` / `allow` rule arrays. See [Managed permission rules](#managed-permission-rules). | @@ -644,20 +660,14 @@ Only the following keys are supported in MDM managed settings. | `telemetry` | Push baseline OpenTelemetry export configuration: `enabled`, `endpoint`, `protocol`, `headers`, `resourceAttributes`, `captureContent`, `lockCaptureContent`, and `serviceName`. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#opentelemetry-monitoring). | > [!NOTE] -> `policyHelper.path` accepts an absolute path, a home-relative path (`~/...`), or a bare program name resolved from `PATH`. Other relative forms are rejected. The registration is accepted and validated, but the runtime doesn't yet invoke the helper—helper execution ships in a future release. - -> [!NOTE] -> When `remoteControl.mode` is `"requireSSO"`, list the allowed organizations in `remoteControl.githubDotComOrganizations`. The client must be SSO-authorized for at least one listed {% data variables.product.prodname_dotcom_the_website %} organization—it no longer needs to be authorized for all of them. - -> [!NOTE] -> Set `permissions.disableBypassPermissionsMode` to `"disable"` in MDM managed settings to enforce the restriction at the device level. Account switches cannot override this policy. Set it to `"allow-auto-only"` to block full allow-all escalation while still permitting `/permissions assisted` (LLM-assisted permission approval). If an unrecognized value is set, the CLI logs the issue and enforces `"disable"` as a fail-closed default, so a malformed managed policy still restricts the allow-all options instead of silently allowing them. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#restricting-the---allow-all-options). - -> [!NOTE] -> Most managed keys lock the entire row: a local edit is silently overridden by the managed value on the next load. `enabledPlugins` and `extraKnownMarketplaces` are the exception—the managed layer merges these maps with your own entries field-by-field instead of replacing them outright. This means the lock applies **per entry**, not to the whole key: a plugin or marketplace pinned by a managed policy can't be re-enabled, disabled, or repointed locally, but other entries in the same map remain fully user-controlled. +> * `policyHelper.path` accepts an absolute path, a home-relative path (`~/...`), or a bare program name resolved from `PATH`. Other relative forms are rejected. The registration is accepted and validated, but the runtime doesn't yet invoke the helper—helper execution ships in a future release. +> * When `remoteControl.mode` is `"requireSSO"`, list the allowed organizations in `remoteControl.githubDotComOrganizations`. The client must be SSO-authorized for at least one listed {% data variables.product.prodname_dotcom_the_website %} organization—it no longer needs to be authorized for all of them. +> * Set `permissions.disableBypassPermissionsMode` to `"disable"` in MDM managed settings to enforce the restriction at the device level. Account switches cannot override this policy. Set it to `"allow-auto-only"` to block full allow-all escalation while still permitting `/permissions assisted` (LLM-assisted permission approval). If an unrecognized value is set, the CLI logs the issue and enforces `"disable"` as a fail-closed default, so a malformed managed policy still restricts the allow-all options instead of silently allowing them. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#restricting-the---allow-all-options). +> * Most managed keys lock the entire row: a local edit is silently overridden by the managed value on the next load. `enabledPlugins` and `extraKnownMarketplaces` are the exception—the managed layer merges these maps with your own entries field-by-field instead of replacing them outright. This means the lock applies **per entry**, not to the whole key: a plugin or marketplace pinned by a managed policy can't be re-enabled, disabled, or repointed locally, but other entries in the same map remain fully user-controlled. ### Managed permission rules -Push `deny`, `ask`, and `allow` rule lists under the managed `permissions` key to enforce a permission policy across all users, independent of `permissions.disableBypassPermissionsMode`. +Add `deny`, `ask`, and `allow` rule lists under the managed `permissions` key to enforce a permission policy for everyone. This works whether or not `permissions.disableBypassPermissionsMode` is set. ```json { @@ -679,6 +689,8 @@ Push `deny`, `ask`, and `allow` rule lists under the managed `permissions` key t Rules are combined across managed sources with a fixed precedence: deny always wins, then ask, then allow—matching a `deny` rule blocks the request even if an `allow` rule also matches. `deny` and `ask` are unioned across every managed source (server, MDM). `allow` requires every source that declares an `allow` list to admit the operation—an intersection, not a union. When any of `deny`, `ask`, or `allow` is set, an operation that matches none of them defaults to `ask` rather than falling through silently. +`Edit(...)` and `Write(...)` rules apply to more than the built-in file tools. They also cover files written directly by a shell command. {% data variables.copilot.copilot_cli_short %} recognizes a fixed set of these writes. It covers Bash output redirections (`>`, `>>`, `>|`, `&>`, `&>>`), PowerShell output redirections (`>`, `>>`, `*>`, `*>>`), and a small set of in-place `sed` edits (`sed -i` or `--in-place`, and the BSD forms `-i ''` and `-I ''`). When {% data variables.copilot.copilot_cli_short %} can work out the target file from the command, a matching `deny` rule blocks the write and a matching `ask` rule prompts you first. This applies even when a broad rule like `Shell(*)` would otherwise allow the command. Sometimes the target file cannot be worked out ahead of time, for example when the path comes from a variable. In that case these path rules do not apply, and the command is checked by the normal shell command rules instead. + ## Managed MCP server allow/deny list Administrators can govern MCP servers directly through MDM managed settings, independent of the [enterprise MCP allowlist](/copilot/reference/copilot-cli-reference/cli-command-reference#enterprise-mcp-allowlist). diff --git a/content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md b/content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md index 7fdc016ee897..dbb7495184be 100644 --- a/content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md +++ b/content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md @@ -20,12 +20,12 @@ For an overview of what plugins are and how they work across {% data variables.p ## CLI commands -You can use the following commands in the terminal to manage plugins for {% data variables.copilot.copilot_cli_short %}. `copilot plugin` and `copilot plugins` are interchangeable—use whichever reads better for the subcommand. +You can use the following commands in the terminal to manage plugins for {% data variables.copilot.copilot_cli_short %}. `copilot plugins` (plural) is a legacy alias for `copilot plugin`—both resolve to the same command. | Command | Description | |------------------------------------------------|-------------| -| `copilot plugin install SPECIFICATION` | Install a plugin. See [Plugin specification for `install` command](#plugin-specification-for-install-command) below. | -| `copilot plugin uninstall NAME` | Remove a plugin | +| `copilot plugin install SPECIFICATION` (alias `add`) | Install a plugin. See [Plugin specification for `install` command](#plugin-specification-for-install-command) below. | +| `copilot plugin uninstall NAME` (aliases `remove`, `rm`) | Remove a plugin | | `copilot plugin list` | List installed plugins | | `copilot plugin update NAME` | Update a named plugin. Use `--all` to update all installed plugins at once. | | `copilot plugin enable NAME` | Enable a previously disabled plugin | @@ -36,10 +36,13 @@ You can use the following commands in the terminal to manage plugins for {% data | `copilot plugin marketplace update [NAME]` (alias `refresh`) | Re-fetch a marketplace's plugin catalog. Omit `NAME` to refresh the catalogs of every registered marketplace. | | `copilot plugin marketplace remove NAME` | Unregister a marketplace. Refused if plugins from the marketplace are still installed; pass `--force` to also uninstall those plugins. | -Non-interactively, `copilot plugins enable NAME --plugin`, `copilot plugins disable NAME --plugin`, and `copilot plugins remove NAME --plugin` provide the same enable, disable, and uninstall operations. `--plugin` is the default kind and can be omitted for these three commands. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#using-copilot-plugins-list) for the non-interactive `--mcp` and `--skill` kinds, which extend these commands to MCP servers and skills. +Before `copilot plugin` was split into separate commands by resource, `copilot plugins` also inspected and toggled MCP servers, skills, instructions, and language servers using `--kind`, `--scope`, `--mcp`, and `--skill` flags. Those cross-kind flags have been removed. Use the dedicated [`copilot mcp`](/copilot/reference/copilot-cli-reference/cli-command-reference#copilot-mcp-subcommand), [`copilot skill`](/copilot/reference/copilot-cli-reference/cli-command-reference#managing-skills-non-interactively), [`copilot instruction`](/copilot/reference/copilot-cli-reference/cli-command-reference#using-copilot-instruction), and [`copilot lsp`](/copilot/reference/copilot-cli-reference/cli-command-reference#using-copilot-lsp) commands instead. `copilot plugin list --json` now emits a flat array of plugins instead of the previous `{ plugins, errors }` object. + > [!NOTE] > A plugin or marketplace pinned by an organization or MDM managed policy (`enabledPlugins`, `extraKnownMarketplaces`) can't be re-enabled, disabled, or repointed locally—the managed value wins for that entry. The `/plugin` dashboard marks these rows with a `Managed` badge and refuses a conflicting toggle. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#mdm-managed-settings). +> +> A plugin whose activation is currently decided by the current repository's `enabledPlugins` overlay rejects `copilot plugin enable`/`disable` instead of silently persisting a global value that would have no effect in that repository. The error names the settings file that actually controls the plugin. See [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-config-dir-reference#repository-settings-githubcopilotsettingsjson). ### Plugin specification for `install` command @@ -51,26 +54,37 @@ Non-interactively, `copilot plugins enable NAME --plugin`, `copilot plugins disa | Git URL | `https://github.com/o/r.git` | Any Git URL | | Local path | `./my-plugin` or `/abs/path` | Local directory | -### `copilot plugins install` options +### `copilot plugin list` options + +| Option | Description | +|------------------------|------------------------------------------------------------------------------------| +| `--json` | Emit a flat JSON array of plugins instead of text. | +| `--config-dir=DIRECTORY` | Path to the configuration directory. This option is deprecated. Use `COPILOT_HOME` instead. | + +Each `--json` row has the shape `{ name, marketplace?, version?, enabled, source, installedFrom? }`. -In addition to installing a plugin from a specification, `copilot plugins install` can install an individual skill from a file, URL, or directory with `--skill`. A skill install isn't a plugin install and doesn't go through a marketplace—see [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference#skills-reference) for details on skills themselves. +### `copilot plugin enable`/`disable` options | Option | Description | |------------------------|------------------------------------------------------------------------------------| -| `--plugin` | Install a plugin (default). | -| `--skill` | Install a skill from a local path or URL. | -| `--scope SCOPE` | For a file or URL `--skill` install: `user` (default) or `project`. `project` scopes the install to the current repository's `.github/skills` directory instead of your user account, and only applies to file or URL skill installs. | | `--config-dir=DIRECTORY` | Path to the configuration directory. This option is deprecated. Use `COPILOT_HOME` instead. | -Installing a directory registers it as a custom skill source rather than copying it; installing a file or URL copies the skill's content into your personal or project skills directory. +### `copilot plugin install` options + +To install a skill instead of a plugin, use [`copilot skill add`](/copilot/reference/copilot-cli-reference/cli-command-reference#managing-skills-non-interactively) instead—it isn't a plugin install and doesn't go through a marketplace. -MCP servers install from a policy-configured registry, which requires authentication and interactive secret entry. Use the **Online** view of the `/mcp` dashboard to add MCP servers instead of `copilot plugins install`. +| Option | Description | +|------------------------|------------------------------------------------------------------------------------| +| `--config-dir=DIRECTORY` | Path to the configuration directory. This option is deprecated. Use `COPILOT_HOME` instead. | -### `copilot plugins update` options +MCP servers install from a policy-configured registry, which requires authentication and interactive secret entry. Use the **Online** view of the `/mcp` dashboard, or the [`copilot mcp add`](/copilot/reference/copilot-cli-reference/cli-command-reference#copilot-mcp-subcommand) command, to add MCP servers instead of `copilot plugin install`. + +### `copilot plugin update` options | Option | Description | |-----------|-----------------------------------------| | `--all` | Update every installed plugin | +| `--config-dir=DIRECTORY` | Path to the configuration directory. This option is deprecated. Use `COPILOT_HOME` instead. | > [!NOTE] > Path-sourced plugins in a local (directory-source) marketplace load live from their real directory—editing one takes effect on `/restart` or in a new session, with no `copilot plugin update` needed. @@ -81,7 +95,7 @@ A marketplace you've added yourself can opt into the same session-start auto-upd In interactive mode, `/plugin` flags an installed plugin or marketplace when a newer version is available upstream, and offers an **Update** action from the dashboard to pull it. -### `copilot plugins marketplace` subcommands +### `copilot plugin marketplace` (alias `marketplaces`) subcommands Built-in default marketplaces ship with the runtime and can't be removed. @@ -97,19 +111,81 @@ In interactive mode, run `/plugin marketplace update [NAME]` (alias `/plugin mar ## `plugin.json` -All plugins consist of a plugin directory containing, at minimum, a manifest file named `plugin.json` located at the root of the plugin directory. See [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/plugins-creating). +All plugins consist of a plugin directory containing a manifest file named `plugin.json`. Agent Plugins 1.0 requires the manifest at the plugin root. Legacy plugins support the alternative locations listed in [File locations](#file-locations). See [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-copilot/plugins-creating). + +{% data variables.copilot.copilot_cli_short %} supports both the legacy plugin manifest and the Agent Plugins 1.0 manifest. The exact `$schema` value `https://agent-plugins.org/schemas/1.0.0/plugin.schema.json` opts a plugin into Agent Plugins 1.0 semantics. A manifest without this value uses the legacy format and loads as before. + +### Agent Plugins 1.0 manifest fields + +Agent Plugins 1.0 defines a closed manifest schema. For the complete format requirements, see the [Agent Plugins 1.0 specification](https://github.com/agentplugins/agent-plugins-spec/blob/main/spec/1.0.0.md). + +The following fields are allowed: + +| Field | Type | Required | Description | +|---------------|----------|----------|-------------| +| `$schema` | string | Yes | Must be `https://agent-plugins.org/schemas/1.0.0/plugin.schema.json`. | +| `name` | string | Yes | Plugin name. See [Name constraints](#name-constraints). | +| `version` | string | No | Version string. Semantic Versioning is recommended. | +| `description` | string | No | Brief description. | +| `author` | object | No | Optional `name`, `email`, and `url` string fields. | +| `homepage` | string | No | Plugin homepage or documentation. | +| `repository` | string | No | Source repository. | +| `license` | string | No | License identifier. An SPDX identifier is recommended. | +| `keywords` | string[] | No | Search and discovery keywords. | +| `extensions` | object | No | Client-specific data keyed by reverse-domain namespace. | + +Unknown top-level fields are reported and ignored. Component path fields such as `agents`, `skills`, `hooks`, `mcpServers`, and `lspServers` are not Agent Plugins 1.0 manifest fields. + +#### Name constraints -### Required field +An Agent Plugins 1.0 name must: + +* Contain between 1 and 64 characters. +* Contain only lowercase ASCII letters, digits, hyphens, and periods. +* Start and end with an alphanumeric character. +* Not contain `--` or `..`. + +#### Components + +Agent Plugins 1.0 defines two portable component types: + +* Skills in immediate subdirectories of `skills/` that contain a `SKILL.md` file. +* MCP servers in `mcp.json` at the plugin root. + +These locations are fixed and cannot be configured in `plugin.json`. The root `mcp.json` must declare `https://agent-plugins.org/schemas/1.0.0/mcp.schema.json` in its `$schema` field. The CLI accepts `stdio`, `streamable-http`, and `sse` MCP transport names. + +For `stdio` servers, the CLI provides `PLUGIN_ROOT` and `PLUGIN_DATA` in the subprocess environment. It expands `${PLUGIN_ROOT}` and `${PLUGIN_DATA}` in the server's `args`, `env` values, and `cwd`. `PLUGIN_DATA` points to a persistent, writable directory for the installed plugin. + +Agent Plugins 1.0 does not define portable agents, hooks, commands, rules, or LSP servers. These remain client-specific. Client-specific manifest data belongs in `extensions`, keyed by reverse-domain namespace. Client-specific files belong in a top-level directory with the same namespace. Clients ignore namespaces they do not support. + +{% data variables.copilot.copilot_cli_short %} reads its client-specific components from the `com.github.copilot` directory: + +| Component | Location | +|-----------|----------| +| Custom agents | `com.github.copilot/agents/` | +| Slash commands | `com.github.copilot/commands/` | +| Rules | `com.github.copilot/rules/` | +| Hooks | `com.github.copilot/hooks/hooks.json` | +| LSP servers | `com.github.copilot/lsp.json` | + +These locations apply only to Agent Plugins 1.0 plugins. Legacy plugins continue to use their own component locations and manifest path fields. + +### Example Agent Plugins 1.0 `plugin.json` file + +{% data reusables.copilot.copilot-cli.cli-example-plugin-file %} + +### Legacy manifest fields + +#### Required field | Field | Type | Description | |---------|--------|-------------| -| `name` | string | Kebab-case plugin name (letters, numbers, hyphens only). Max 64 chars. Plugins that opt into [Open Plugin Spec support](#open-plugin-spec-support) may also use dots (for example, `acme.tools`). | +| `name` | string | Kebab-case plugin name (letters, numbers, and hyphens only). Maximum 64 characters. | -### Optional metadata fields +#### Optional metadata fields | Field | Type | Description | |--------------|-----------|-------------| -| `$schema` | string | Set to the canonical Agent Plugins (Open Plugin Spec) v1.0.0 schema URL to opt into spec semantics. See [Open Plugin Spec support](#open-plugin-spec-support). | | `description`| string | Brief description. Max 1024 chars. | | `version` | string | Semantic version (e.g., `1.0.0`). | | `author` | object | `name` (required), `email` (optional), `url` (optional). | @@ -120,7 +196,7 @@ All plugins consist of a plugin directory containing, at minimum, a manifest fil | `category` | string | Plugin category. | | `tags` | string[] | Additional tags. | -### Component path fields +#### Component path fields These tell the CLI where to find your plugin's components. All are optional. The CLI uses default conventions if omitted. @@ -130,18 +206,29 @@ These tell the CLI where to find your plugin's components. All are optional. The | `skills` | string \| string[] | `skills/` | Path(s) to skill directories (`SKILL.md` files). | | `commands` | string \| string[] | — | Path(s) to command directories. | | `hooks` | string \| object | — | Path to a hooks configuration file, or an inline hooks object. | -| `extensions`| string \| string[] \| object | — | Path(s) to extension directories. Use `{ paths: [...], exclusive: true }` to suppress built-in extensions. In [Open Plugin Spec mode](#open-plugin-spec-support), this field has a different meaning. | +| `extensions`| string \| string[] \| object | — | Path(s) to extension directories. Use `{ paths: [...], exclusive: true }` to suppress built-in extensions. In [Agent Plugins 1.0 manifests](#agent-plugins-10-manifest-fields), this field has a different meaning. | | `mcpServers`| string \| object | — | Path to an MCP configuration file (e.g., `.mcp.json`), or inline server definitions. | | `lspServers`| string \| object | — | Path to an LSP configuration file, or inline server definitions. | -### Example `plugin.json` file +#### Plugin-shipped agent MCP servers -{% data reusables.copilot.copilot-cli.cli-example-plugin-file %} +An agent bundled inside a plugin can declare its own `mcp-servers` in its frontmatter, scoping an MCP server to just that agent instead of exposing it through the plugin's shared `mcpServers` configuration. Within that `mcp-servers` block, `${PLUGIN_ROOT}` (or its `${CLAUDE_PLUGIN_ROOT}`/`${COPILOT_PLUGIN_ROOT}` aliases) expands to the plugin's root directory, so the server's `command` or `args` can point at a script bundled with the plugin: -## Open Plugin Spec support +```markdown +--- +name: Plugin Linter +description: Runs the plugin's bundled linter via its own MCP server +mcp-servers: + plugin-linter: + command: node + args: ["${PLUGIN_ROOT}/tools/serve.js"] + tools: ["*"] +--- -Declaring the canonical `$schema` in `plugin.json` opts a plugin into the [Agent Plugins (Open Plugin Spec)](https://agent-plugins.org) v1.0.0 format, additively on top of standard plugin loading: +You are a linting specialist for this plugin's bundled rules. +``` +This substitution only applies to `mcp-servers` in a plugin-shipped agent's own frontmatter—it doesn't extend to `${PLUGIN_DATA}` or to the server's environment variables. Workspace and user agents have no plugin root, so their frontmatter is left unchanged. ### LSP server configuration @@ -216,7 +303,7 @@ For more information, see [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-cop | Field | Type | Required | Description | |------------|----------|----------|-------------| -| `name` | string | Yes | Kebab-case marketplace name. Max 64 chars. Dots are also accepted (for example, `acme.tools`) for [Open Plugin Spec](#open-plugin-spec-support) plugins. | +| `name` | string | Yes | Kebab-case marketplace name. Max 64 chars. Dots are also accepted (for example, `acme.tools`) for [Agent Plugins 1.0](#agent-plugins-10-manifest-fields) plugins. | | `owner` | object | Yes | `{ name, email? }` — marketplace owner info. | | `plugins` | array | Yes | List of plugin entries (see the table below). | | `metadata` | object | No | `{ description?, version?, pluginRoot? }` | @@ -225,7 +312,7 @@ For more information, see [AUTOTITLE](/copilot/how-tos/copilot-cli/customize-cop | Field | Type | Required | Description | |---------------|--------------------|----------|-------------| -| `name` | string | Yes | Kebab-case plugin name. Max 64 chars. Dots are also accepted for [Open Plugin Spec](#open-plugin-spec-support) plugins. | +| `name` | string | Yes | Kebab-case plugin name. Max 64 chars. Dots are also accepted for [Agent Plugins 1.0](#agent-plugins-10-manifest-fields) plugins. | | `source` | string \| object | Yes | Where to fetch the plugin (relative path, {% data variables.product.github %}, or URL). | | `description` | string | No | Plugin description. Max 1024 chars. | | `version` | string | No | Plugin version. | @@ -280,14 +367,14 @@ Both the `github` and `url` source types accept an optional `sha` field to pin i |----------------------|------| | Installed plugins | `~/.copilot/installed-plugins/MARKETPLACE/PLUGIN-NAME` (installed via a marketplace) and `~/.copilot/installed-plugins/_direct/SOURCE-ID/` (installed directly) | | Marketplace cache | Platform cache directory: `~/.cache/copilot/marketplaces/` (Linux), `~/Library/Caches/copilot/marketplaces/` (macOS). Overridable with `COPILOT_CACHE_HOME`. | -| Plugin manifest | `.plugin/plugin.json`, `plugin.json`, `.github/plugin/plugin.json`, or `.claude-plugin/plugin.json` (checked in this order) | +| Plugin manifest | Agent Plugins 1.0: `plugin.json` at the plugin root. Legacy plugins: `.plugin/plugin.json`, `plugin.json`, `.github/plugin/plugin.json`, or `.claude-plugin/plugin.json` (checked in this order). | | Marketplace manifest | `marketplace.json`, `.plugin/marketplace.json`, `.github/plugin/marketplace.json`, or `.claude-plugin/marketplace.json` (checked in this order) | -| Agents | `agents/` (default, overridable in manifest) | -| Skills | `skills/` (default, overridable in manifest) | -| Hooks configuration | `hooks.json` or `hooks/hooks.json` | -| MCP configuration | `.mcp.json`, `.github/mcp.json` | -| LSP configuration | `lsp.json` or `.github/lsp.json` | -| Plugin data | `${COPILOT_PLUGIN_DATA}` (also available as `${CLAUDE_PLUGIN_DATA}`). Points to a persistent, writable directory unique to each installed plugin. Use this for plugin-specific runtime data instead of paths inside the installed-plugins cache directory. | +| Agents | Legacy plugins: `agents/` (default, overridable in manifest). | +| Skills | Agent Plugins 1.0: `skills/` (fixed). Legacy plugins: `skills/` (default, overridable in manifest). | +| Hooks configuration | Legacy plugins: `hooks.json` or `hooks/hooks.json`. | +| MCP configuration | Agent Plugins 1.0: `mcp.json`. Legacy plugins: `.mcp.json`, `.github/mcp.json`, or the `mcpServers` manifest field. | +| LSP configuration | Legacy plugins: `lsp.json` or `.github/lsp.json`. | +| Plugin data | For Agent Plugins 1.0 MCP servers, `${PLUGIN_DATA}` (also available as `${COPILOT_PLUGIN_DATA}` and `${CLAUDE_PLUGIN_DATA}`) points to a persistent, writable directory unique to each installed plugin. Use this for plugin-specific runtime data instead of paths inside the installed-plugins cache directory. | ## Loading order and precedence @@ -346,7 +433,7 @@ The following diagram illustrates the loading order and precedence rules. ## Further reading -* [AUTOTITLE](/copilot/concepts/agents/about-enterprise-plugin-standards) +* [AUTOTITLE](/copilot/concepts/enterprise/plugin-standards) * [AUTOTITLE](/copilot/how-tos/copilot-cli) * [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-command-reference) * [AUTOTITLE](/copilot/reference/copilot-cli-reference/cli-programmatic-reference) diff --git a/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md b/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md index f5e2adeeea78..843940fe4b34 100644 --- a/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md +++ b/content/copilot/reference/copilot-cli-reference/cli-programmatic-reference.md @@ -38,9 +38,15 @@ There are a number of command-line options that are particularly useful when run | `--allow-all-urls` | Allow access to all URLs without explicit permission for each URL. | | `--allow-tool=TOOL ...` | Selectively grant permission for a specific tool. For multiple tools, use a quoted, comma-separated list. | | `--allow-url=URL ...` | Allow the agent to fetch a specific URL or domain. Useful when a workflow needs web access to known endpoints. For multiple URLs, use a quoted, comma-separated list. | +| `--attachment=PATH ...` | Attach a file (image or native document) to the initial prompt. Only valid in non-interactive mode. Can be used multiple times to attach multiple files. | +| `--available-tools=TOOL ...` | Restrict the model to only the tools you list; all other tools are unavailable. Useful for tightly scoping what the agent can do in an automated workflow. For multiple tools, use a quoted, comma-separated list. | | `--deny-tool=TOOL ...` | Deny a specific tool. Useful for restricting what the agent can do in a locked-down workflow. For multiple tools, use a quoted, comma-separated list. | +| `--deny-url=URL ...` | Deny access to a specific URL or domain. Takes precedence over `--allow-url`. For multiple URLs, use a quoted, comma-separated list. | +| `--excluded-tools=TOOL ...` | Remove specific tools from those available to the model. For multiple tools, use a quoted, comma-separated list. | +| `--fleet` | Run the prompt in fleet mode, so {% data variables.product.prodname_copilot_short %} uses parallel subagents to work on separate parts of the task. Combine with `-p` for non-interactive automation, `-i` for an interactive session, or a piped prompt. Not supported in ACP server mode. See [AUTOTITLE](/copilot/how-tos/copilot-cli/use-copilot-cli/speed-up-task-completion). | | `--model=MODEL` | Choose the AI model (for example, `gpt-5.4` or `claude-haiku-4.5`). Useful for pinning a model in reproducible workflows. See [Choosing a model](#choosing-a-model) below. | | `--no-ask-user` | Prevent the agent from pausing to seek additional user input. | +| `--output-format=FORMAT` | Set the output format: `text` (the default) or `json`. With `json`, the CLI emits JSONL (one JSON object per line), which is convenient for parsing the agent's output in scripts. | | `--secret-env-vars=VAR ...` | An environment variable whose value you want redacted in output. For multiple variables, use a quoted, comma-separated list. Essential for preventing secrets being exposed in logs. The values in the `GITHUB_TOKEN` and `COPILOT_GITHUB_TOKEN` environment variables are redacted by default. | | `--share=PATH` | Export the session transcript to a markdown file after non-interactive completion (defaults to `./copilot-session-.md`). Useful for auditing or archiving what the agent did. Note that session transcripts may contain sensitive information. | | `--share-gist` | Publish the session transcript as a secret GitHub gist after completion. Convenient for sharing results from CI. Note that session transcripts may contain sensitive information. | @@ -88,6 +94,7 @@ You can use environment variables to configure various aspects of the CLI's beha | `COPILOT_ALLOW_ALL` | Set to `true` for full permissions | | `COPILOT_MODEL` | Set the model (for example, `gpt-5.4`, `claude-haiku-4.5`) | | `COPILOT_HOME` | Set the directory for the CLI configuration file (`~/.copilot` by default) | +| `COPILOT_AUTO_UPDATE` | Set to `false` to disable automatic updates. Useful in CI and other automated environments where you want to pin the CLI version. | | `COPILOT_GITHUB_TOKEN`| Authentication token (highest precedence) | | `GH_TOKEN` | Authentication token (second precedence) | | `GITHUB_TOKEN` | Authentication token (third precedence) | diff --git a/content/copilot/reference/enterprise-administrators/enterprise-managed-settings.md b/content/copilot/reference/enterprise-administrators/enterprise-managed-settings.md index 74d99b42df57..96a55c360283 100644 --- a/content/copilot/reference/enterprise-administrators/enterprise-managed-settings.md +++ b/content/copilot/reference/enterprise-administrators/enterprise-managed-settings.md @@ -21,9 +21,9 @@ For instructions on creating the file, see [AUTOTITLE](/copilot/how-tos/administ | Key | Purpose | {% data variables.copilot.copilot_cli_short %} | {% data variables.product.prodname_vscode_shortname %} | {% data variables.copilot.github_copilot_app %} | {% data variables.copilot.copilot_cloud_agent %} | {% data variables.product.prodname_jetbrains_ides %} | | --- | --- | --- | --- | --- | --- | --- | | `permissions.disableBypassPermissionsMode` | Disables bypass or YOLO-style allow-all behavior | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "check" aria-label="Supported" %} | -| `permissions.deny` | Blocks specific operations | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "x" aria-label="Not supported" %} | -| `permissions.ask` | Requires a fresh human approval before specific operations can proceed | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "x" aria-label="Not supported" %} | -| `permissions.allow` | Permits specific operations to proceed without a prompt | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "x" aria-label="Not supported" %} | +| `permissions.deny` | Blocks specific operations | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "x" aria-label="Not supported" %} | +| `permissions.ask` | Requires a fresh human approval before specific operations can proceed | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "x" aria-label="Not supported" %} | +| `permissions.allow` | Permits specific operations to proceed without a prompt | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | {% octicon "x" aria-label="Not supported" %} | | `model` | Sets your preferred model as the default for new conversations | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "x" aria-label="Not supported" %} | | `enabledPlugins` | Enables or disables specific plugins by key | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | | `extraKnownMarketplaces` | Adds plugin marketplaces that users can access | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | {% octicon "check" aria-label="Supported" %} | @@ -126,7 +126,7 @@ The following example shows these keys in one managed settings file. ## enabledPlugins -Defines plugins that are automatically installed or blocked for all enterprise users. Each entry uses the format `PLUGIN-NAME@MARKETPLACE-NAME` as the key, with a boolean value: `true` to require the plugin to be enabled, or `false` to require it to be disabled. See [AUTOTITLE](/copilot/concepts/agents/about-enterprise-plugin-standards). +Defines plugins that are automatically installed or blocked for all enterprise users. Each entry uses the format `PLUGIN-NAME@MARKETPLACE-NAME` as the key, with a boolean value: `true` to require the plugin to be enabled, or `false` to require it to be disabled. See [AUTOTITLE](/copilot/concepts/enterprise/plugin-standards). ## extraKnownMarketplaces @@ -142,7 +142,7 @@ The following source types are supported: * `"git"` — requires `url`; optional `ref` and `path` * `"directory"` — requires `path` -See [AUTOTITLE](/copilot/concepts/agents/about-enterprise-plugin-standards). +See [AUTOTITLE](/copilot/concepts/enterprise/plugin-standards). ## strictKnownMarketplaces @@ -161,7 +161,7 @@ Restricts plugin installation to only the marketplaces explicitly defined by the Sets your preferred model as the default for new conversations. This lets you choose the default model that best fits your enterprise's workflows. Users can still select a different model on a per-conversation basis. * Set `model` to `"auto"` to use {% data variables.copilot.copilot_auto_model_selection_short %} as the default, so new sessions choose a model automatically unless the user specifies a different model on a per-conversation basis. See [AUTOTITLE](/copilot/concepts/models/auto-model-selection). -* Set `model` to a specific model and version to make that model the default for new conversations, for example `"kimi-k-3"`. +* Set `model` to a specific model and version to make that model the default for new conversations, for example `"kimi-k3"`. This key is overridable by enterprise team mapping. In your `{% data variables.copilot.managed_setting_file %}`, use the `{ "overridable": "auto" }` syntax to specialize the key's configuration on a per-team basis. You can then set `"model": "unmanaged"` in a team settings file, providing a specialization that takes precedence over `{% data variables.copilot.managed_setting_file %}` for members of the subject team. @@ -172,6 +172,8 @@ This key is overridable by enterprise team mapping. In your `{% data variables.c ### deny, ask, allow +In {% data variables.product.prodname_vscode_shortname %}, these granular permission rules apply to {% data variables.product.prodname_copilot_short %} sessions that use Agent Host. The `permissions.disableBypassPermissionsMode` setting has broader {% data variables.product.prodname_vscode_shortname %} support and isn't limited to Agent Host. + The `permissions.deny`, `permissions.ask`, and `permissions.allow` keys use **deny > ask > allow** precedence. If an MDM-managed, server-managed, or file-based source defines any permission rule—or if any applicable source declares an `allow` list—an unmatched supported operation defaults to requiring approval. Otherwise, it follows the ordinary permission flow. * `deny` blocks specific operations, regardless of whether they also match an `ask` or `allow` rule. A deny rule set by any managed settings source blocks the operation for all users regardless of rules in the other sources. diff --git a/content/copilot/reference/enterprise-administrators/policy-conflicts.md b/content/copilot/reference/enterprise-administrators/policy-conflicts.md index f7cbaa1e34ba..6c8cf243139a 100644 --- a/content/copilot/reference/enterprise-administrators/policy-conflicts.md +++ b/content/copilot/reference/enterprise-administrators/policy-conflicts.md @@ -15,7 +15,7 @@ contentType: reference ## About delegating policy decisions to organizations -Policies can be defined for a whole enterprise, or set at the organization level. See [AUTOTITLE](/copilot/concepts/policies). +Policies can be defined for a whole enterprise, or set at the organization level. See [AUTOTITLE](/copilot/concepts/enterprise/policies). When an enterprise owner delegates control of a policy to organization owners by setting "No policy," some organizations may enable a feature while others disable it. Users may be granted a {% data variables.product.prodname_copilot_short %} license by organizations with different policies for the same feature. diff --git a/content/copilot/responsible-use/agents.md b/content/copilot/responsible-use/agents.md index 6ccf2ca743bb..9c744465e944 100644 --- a/content/copilot/responsible-use/agents.md +++ b/content/copilot/responsible-use/agents.md @@ -285,7 +285,7 @@ For additional guidance on the responsible use of Copilot agentic features, we r * [AUTOTITLE](/copilot/tutorials/cloud-agent/get-the-best-results) * [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/customize-cloud-agent/customize-the-agent-environment) * [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/customize-the-firewall) -* [AUTOTITLE](/copilot/how-tos/copilot-sdk/getting-started) +* [AUTOTITLE](/copilot/get-started/sdk-quickstart) * [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/configure-mcp-servers) * [AUTOTITLE](/copilot/concepts/agents/copilot-cli/about-copilot-cli) * [AUTOTITLE](/copilot/concepts/agents/github-copilot-app) diff --git a/content/copilot/tutorials/budgets/getting-started-with-budget-controls.md b/content/copilot/tutorials/budgets/getting-started-with-budget-controls.md index e68253eed67b..3b3570605dfb 100644 --- a/content/copilot/tutorials/budgets/getting-started-with-budget-controls.md +++ b/content/copilot/tutorials/budgets/getting-started-with-budget-controls.md @@ -15,13 +15,6 @@ Under usage-based billing, your enterprise's included {% data variables.product. Before you begin, make sure you understand how the four budget controls work and how the system evaluates them. See [AUTOTITLE](/copilot/concepts/billing/budgets-for-usage-based-billing). - - -> [!NOTE] -> If your enterprise was using {% data variables.product.prodname_copilot_short %} before June 1, 2026, you are on a promotional period (June–August 2026) where your included {% data variables.product.prodname_ai_credits_short %} are higher than the standard amounts. When the promotional period ends on September 1, 2026, the shared pool will be smaller. Use this period to understand your team's baseline consumption and adjust your spending limits before the transition. See [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises#how-do-ai-credits-work) for the standard and promotional amounts. - - - ## Step 1: Set a universal user-level budget The universal user-level budget (ULB) is the single most important control. It caps how much any one user can consume per billing cycle—from both the shared pool and any additional metered usage—and applies automatically to every licensed user in your enterprise. diff --git a/content/copilot/tutorials/cloud-agent/build-guardrails.md b/content/copilot/tutorials/cloud-agent/build-guardrails.md index 3e28bd90d880..43b0bc337b57 100644 --- a/content/copilot/tutorials/cloud-agent/build-guardrails.md +++ b/content/copilot/tutorials/cloud-agent/build-guardrails.md @@ -8,6 +8,8 @@ contentType: tutorials category: - Roll Copilot out at scale - Manage Copilot for a team +docsTeamMetrics: + - ai-governance --- Before you enable {% data variables.copilot.copilot_cloud_agent %}, it is good practice to set up your enterprise so you can be confident {% data variables.product.prodname_copilot_short %} will operate within secure, predictable guardrails. @@ -22,7 +24,7 @@ Plan your policies for {% data variables.copilot.copilot_cloud_agent %} in advan Some questions to ask are: -* Which organizations and repositories will {% data variables.copilot.copilot_cloud_agent %} be enabled in? See [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management). +* Which organizations and repositories will {% data variables.copilot.copilot_cloud_agent %} be enabled in? See [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access). * Which MCP servers will you configure to give {% data variables.copilot.copilot_cloud_agent %} access to external tools? See [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/configure-mcp-servers). ### Which policies don't apply? diff --git a/content/copilot/tutorials/cloud-agent/give-access-to-resources.md b/content/copilot/tutorials/cloud-agent/give-access-to-resources.md index ca0fae4e8c09..77ebffbfe526 100644 --- a/content/copilot/tutorials/cloud-agent/give-access-to-resources.md +++ b/content/copilot/tutorials/cloud-agent/give-access-to-resources.md @@ -8,6 +8,8 @@ contentType: tutorials category: - Manage Copilot for a team - Roll Copilot out at scale +docsTeamMetrics: + - ai-governance --- {% data variables.copilot.copilot_cloud_agent %} can connect to MCP servers, use private packages, and access external services, but only if your organization's repositories are configured to allow it. @@ -101,4 +103,4 @@ Now you have seen how access to resources is controlled at the repository and or 1. **Consider who gets admin access** to these repositories. You can control this at the organization level by creating a team with the **All-repository admin** custom role. These users will be able to manage configuration _settings_, such as MCP configuration and Agents secrets and variables, in every repository. 1. **Use rulesets and CODEOWNERS files** to control edits of configuration _files_, such as `copilot-setup-steps.yml`, which anyone with write access can edit by default. 1. **Review the default firewall**. The firewall doesn't affect connections to MCP servers or setup steps in `copilot-setup-steps.yml`, but it does limit {% data variables.product.prodname_copilot_short %}'s access to the Internet during task execution. See [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/customize-the-firewall). -1. **Define plugin standards**. Plugins are installable packages that extend {% data variables.product.prodname_copilot_short %} with reusable agents, skills, hooks, and integrations. You can control which plugins and marketplaces are permitted in an enterprise's `{% data variables.copilot.managed_setting_file %}` file. See [AUTOTITLE](/copilot/concepts/agents/about-enterprise-plugin-standards). +1. **Define plugin standards**. Plugins are installable packages that extend {% data variables.product.prodname_copilot_short %} with reusable agents, skills, hooks, and integrations. You can control which plugins and marketplaces are permitted in an enterprise's `{% data variables.copilot.managed_setting_file %}` file. See [AUTOTITLE](/copilot/concepts/enterprise/plugin-standards). diff --git a/content/copilot/tutorials/cloud-agent/improve-a-project.md b/content/copilot/tutorials/cloud-agent/improve-a-project.md index 9f5a6692e5d1..af676185e001 100644 --- a/content/copilot/tutorials/cloud-agent/improve-a-project.md +++ b/content/copilot/tutorials/cloud-agent/improve-a-project.md @@ -79,7 +79,7 @@ Creating this file is optional but is a good idea if you use {% data variables.c ```text copy - Analyze this repository to understand the dependencies that need to be installed on the development environment to work on the code in this repository. Using this information, and the details about the `copilot-setup-steps.yml` file that are given in https://docs.github.com/copilot/how-tos/use-copilot-agents/cloud-agent/customize-the-agent-environment, add a `.github/workflows/copilot-setup-steps.yml` to this repository. This Actions workflow file should install, in the development environment for {% data variables.copilot.copilot_cloud_agent %}, all of the dependencies necessary to work on the code in this repository. Make sure that the workflow job is named `copilot-setup-steps`. + Analyze this repository to understand the dependencies that need to be installed on the development environment to work on the code in this repository. Using this information, and the details about the `copilot-setup-steps.yml` file that are given in https://docs.github.com/copilot/how-tos/use-copilot-agents/cloud-agent/customize-the-agent-environment, add a `.github/workflows/copilot-setup-steps.yml` to this repository. This Actions workflow file should install, in the development environment for {% data variables.copilot.copilot_cloud_agent %}, all of the dependencies necessary to work on the code in this repository. Make sure that the workflow job is named `copilot-setup-steps`, and that the workflow includes a `workflow_dispatch` trigger so that it can be run manually. Choose any other triggers to suit this repository; there's no need to run on both `push` and `pull_request`. ``` @@ -97,12 +97,6 @@ Creating this file is optional but is a good idea if you use {% data variables.c ```yaml on: workflow_dispatch: - push: - paths: - - .github/workflows/copilot-setup-steps.yml - pull_request: - paths: - - .github/workflows/copilot-setup-steps.yml jobs: copilot-setup-steps: diff --git a/content/copilot/tutorials/copilot-cli-hooks.md b/content/copilot/tutorials/copilot-cli-hooks.md index 1230fbdad344..02f8d787c7fc 100644 --- a/content/copilot/tutorials/copilot-cli-hooks.md +++ b/content/copilot/tutorials/copilot-cli-hooks.md @@ -12,6 +12,7 @@ category: allowTitleToDifferFromFilename: true docsTeamMetrics: - copilot-cli + - ai-governance --- This tutorial is for DevOps engineers, platform teams, and engineering leaders who support developers using {% data variables.copilot.copilot_cli_short %}. @@ -399,15 +400,6 @@ fi COMMAND="$(echo "$TOOL_ARGS_RAW" | jq -r '.command // empty')" -# --------------------------------------------------------------------------- -# Demo-only deny rule for safe testing. -# This blocks a harmless test command so you can validate the deny flow. -# Remove this rule after confirming your hooks work as expected. -# --------------------------------------------------------------------------- -if echo "$COMMAND" | grep -q "COPILOT_HOOKS_DENY_DEMO"; then - deny "Blocked demo command (test rule). Remove this rule after validating hooks." -fi - deny() { local reason="$1" @@ -436,6 +428,15 @@ deny() { exit 0 } +# --------------------------------------------------------------------------- +# Demo-only deny rule for safe testing. +# This blocks a harmless test command so you can validate the deny flow. +# Remove this rule after confirming your hooks work as expected. +# --------------------------------------------------------------------------- +if echo "$COMMAND" | grep -q "COPILOT_HOOKS_DENY_DEMO"; then + deny "Blocked demo command (test rule). Remove this rule after validating hooks." +fi + # Privilege escalation if echo "$COMMAND" | grep -qE '\b(sudo|su|runas)\b'; then deny "Privilege escalation requires manual approval." diff --git a/content/copilot/tutorials/optimize-code-reviews.md b/content/copilot/tutorials/optimize-code-reviews.md index 2b3b80f78a89..8c3e2d22053c 100644 --- a/content/copilot/tutorials/optimize-code-reviews.md +++ b/content/copilot/tutorials/optimize-code-reviews.md @@ -227,7 +227,7 @@ Automatic review comments help you optimize your reviews and secure your code mo To make your reviews more efficient and effective using {% data variables.product.prodname_copilot_short %}'s review capabilities, get started by following these steps. 1. Create custom instructions specific to your project and repository. Write your own, or take inspiration from our library of examples. See [AUTOTITLE](/copilot/tutorials/customization-library/custom-instructions). -1. To enable automatic {% data variables.copilot.copilot_code-review_short %} for your repository, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review). +1. To enable automatic {% data variables.copilot.copilot_code-review_short %} for your repository, see [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review). 1. To configure {% data variables.copilot.copilot_autofix_short %} for your repo you'll need to enable {% data variables.product.prodname_code_scanning %}. Once {% data variables.product.prodname_code_scanning %} with {% data variables.product.prodname_codeql %} analysis is enabled, {% data variables.copilot.copilot_autofix_short %} is enabled by default. For the easiest setup, see [AUTOTITLE](/code-security/how-tos/find-and-fix-code-vulnerabilities/configure-code-scanning/configure-code-scanning). 1. To add reliability, maintainability, and coverage checks to your pull requests, enable {% data variables.product.prodname_code_quality %} for your repository. See [AUTOTITLE](/code-security/how-tos/maintain-quality-code/enable-code-quality). diff --git a/content/copilot/tutorials/roll-out-at-scale/assign-licenses/choose-enterprise-plan.md b/content/copilot/tutorials/roll-out-at-scale/assign-licenses/choose-enterprise-plan.md index 1cde205b0847..5133be553827 100644 --- a/content/copilot/tutorials/roll-out-at-scale/assign-licenses/choose-enterprise-plan.md +++ b/content/copilot/tutorials/roll-out-at-scale/assign-licenses/choose-enterprise-plan.md @@ -13,6 +13,8 @@ redirect_from: contentType: tutorials category: - Manage Copilot for a team +docsTeamMetrics: + - ai-governance --- ## Introduction @@ -40,7 +42,7 @@ For a full comparison, see our [plans page](https://github.com/features/copilot/ {% data variables.product.prodname_ai_credits_short %} are consumed by advanced {% data variables.product.prodname_copilot_short %} features and models, including AI agents. Each plan's included {% data variables.product.prodname_ai_credits_short %} are pooled across your enterprise, so heavier users can draw from lighter users' unused portions. By giving members access to more {% data variables.product.prodname_ai_credits_short %}, you can scale your company with AI agents and drive real business outcomes. -By default, usage can continue beyond the included pool, with additional usage charged at {% data variables.product.prodname_ai_credits_value %} per {% data variables.product.prodname_ai_credit_singular %}. You can control this with budget controls. See [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +By default, usage can continue beyond the included pool, with additional usage charged at {% data variables.product.prodname_ai_credits_value %} per {% data variables.product.prodname_ai_credit_singular %}. You can control this with budget controls. See [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). ## How does {% data variables.copilot.copilot_enterprise_short %} support business goals? diff --git a/content/copilot/tutorials/roll-out-at-scale/drive-downstream-impact/accelerate-pull-requests.md b/content/copilot/tutorials/roll-out-at-scale/drive-downstream-impact/accelerate-pull-requests.md index 8a7a4ba745d4..746e8e98aa9c 100644 --- a/content/copilot/tutorials/roll-out-at-scale/drive-downstream-impact/accelerate-pull-requests.md +++ b/content/copilot/tutorials/roll-out-at-scale/drive-downstream-impact/accelerate-pull-requests.md @@ -158,7 +158,7 @@ Developers **should not**: * [AUTOTITLE](/copilot/how-tos/copilot-on-github/copilot-for-github-tasks/create-a-pr-summary) * [AUTOTITLE](/copilot/how-tos/use-copilot-agents/request-a-code-review/use-code-review) * [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions) -* [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review) +* [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review) * [AUTOTITLE](/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-organization-instructions) ## Metrics to watch diff --git a/content/copilot/tutorials/roll-out-at-scale/enable-developers/integrate-ai-agents.md b/content/copilot/tutorials/roll-out-at-scale/enable-developers/integrate-ai-agents.md index 90501978beec..3e2e345973d9 100644 --- a/content/copilot/tutorials/roll-out-at-scale/enable-developers/integrate-ai-agents.md +++ b/content/copilot/tutorials/roll-out-at-scale/enable-developers/integrate-ai-agents.md @@ -14,6 +14,8 @@ contentType: tutorials category: - Roll Copilot out at scale - Manage Copilot for a team +docsTeamMetrics: + - ai-governance --- ## About AI agents on {% data variables.product.github %} diff --git a/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/govern-for-adoption.md b/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/govern-for-adoption.md index 694929e9995e..303d0d0b08f1 100644 --- a/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/govern-for-adoption.md +++ b/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/govern-for-adoption.md @@ -11,6 +11,8 @@ contentType: tutorials allowTitleToDifferFromFilename: true redirect_from: - /copilot/tutorials/roll-out-at-scale/govern-for-adoption +docsTeamMetrics: + - ai-governance --- Getting the most from {% data variables.product.prodname_copilot %} means finding the right balance between governance and developer access. Too restrictive, and developers can't use the features that make them productive. Too permissive, and you may not meet your compliance requirements. diff --git a/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/maintain-codebase-standards.md b/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/maintain-codebase-standards.md index 19bef4034d35..a754bbc074dd 100644 --- a/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/maintain-codebase-standards.md +++ b/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/maintain-codebase-standards.md @@ -11,6 +11,8 @@ category: contentType: tutorials redirect_from: - /copilot/tutorials/roll-out-at-scale/maintain-codebase-standards +docsTeamMetrics: + - ai-governance --- Most enterprises are aware of the productivity benefits that AI coding tools can bring. However, many worry that improper usage in their company, such as malicious prompts or developers accepting AI suggestions without review, will lead to their codebase's standards being compromised. diff --git a/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/pilot-a-feature-or-model.md b/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/pilot-a-feature-or-model.md index 580c83697efe..4eb33f9f13da 100644 --- a/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/pilot-a-feature-or-model.md +++ b/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/pilot-a-feature-or-model.md @@ -9,13 +9,15 @@ category: - Roll Copilot out at scale contentType: tutorials allowTitleToDifferFromFilename: true +docsTeamMetrics: + - ai-governance --- This tutorial walks you through running a pilot end to end: setting a budget, enabling the feature for a contained group, monitoring results, and using the evidence to make and report a go or no-go decision. ## Before you start your pilot -Before you enable anything, make sure you've evaluated the feature or model and confirmed it meets your compliance requirements. See [AUTOTITLE](/copilot/concepts/learning-about-new-features-and-models). +Before you enable anything, make sure you've evaluated the feature or model and confirmed it meets your compliance requirements. See [AUTOTITLE](/copilot/concepts/enterprise/learning-about-new-features-and-models). If you're not sure whether a feature or model is safe to enable, check with security and compliance teams at your company before you start the pilot. @@ -42,7 +44,7 @@ Many of the features and models you'll want to pilot are billed through usage, s A handful of active developers using a frontier model or an agentic feature could consume more than you'd expect. Work out a rough estimate of what the pilot could cost, and decide on a ceiling you're willing to spend before you enable the feature. -Start by understanding how the feature or model is billed. Usage-based features consume {% data variables.product.prodname_ai_credits %}, and the cost of each interaction depends on the model and the number of tokens consumed. To understand which features count toward usage, how included credits are pooled across your enterprise, and how overages are charged, see [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +Start by understanding how the feature or model is billed. Usage-based features consume {% data variables.product.prodname_ai_credits %}, and the cost of each interaction depends on the model and the number of tokens consumed. To understand which features count toward usage, how included credits are pooled across your enterprise, and how overages are charged, see [AUTOTITLE](/copilot/concepts/billing/organizations-and-enterprises/usage-based-billing). To produce an estimate, combine three numbers: @@ -75,7 +77,7 @@ If any of your pilot users aren't yet members, or are members but receive their {% data variables.product.prodname_copilot_short %} policies control which features and models your users can access and how their data is handled. Configure these policies for the pilot organization *before* you turn the feature on, so that pilot users get a correctly governed experience from their very first interaction rather than a brief window where the feature is available without the guardrails you intend. -Decide which features and models the pilot should allow, and set the policies at the organization level so the change only affects your pilot organization; policies set at the enterprise level apply to every organization in your enterprise. If your enterprise policy doesn't allow organizations to set their own value, an enterprise owner must change this before you can continue. To understand how policies cascade from the enterprise to organizations and who can override settings at each level, see [AUTOTITLE](/copilot/concepts/policies). +Decide which features and models the pilot should allow, and set the policies at the organization level so the change only affects your pilot organization; policies set at the enterprise level apply to every organization in your enterprise. If your enterprise policy doesn't allow organizations to set their own value, an enterprise owner must change this before you can continue. To understand how policies cascade from the enterprise to organizations and who can override settings at each level, see [AUTOTITLE](/copilot/concepts/enterprise/policies). ### Enable the feature for a single organization diff --git a/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/resources-for-approval.md b/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/resources-for-approval.md index 4fa1371ee637..6d1011097447 100644 --- a/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/resources-for-approval.md +++ b/content/copilot/tutorials/roll-out-at-scale/govern-at-scale/resources-for-approval.md @@ -9,6 +9,8 @@ category: - Manage Copilot for a team redirect_from: - /copilot/get-started/resources-for-approval +docsTeamMetrics: + - ai-governance --- Before you can roll out a tool like {% data variables.product.prodname_copilot %} in your company, you will likely need signoff from legal, compliance, and cybersecurity teams. @@ -41,7 +43,7 @@ Compliance teams may also want to know about the administrative features availab * Audit logs for monitoring changes to access and settings * The ability to exclude sensitive content from {% data variables.product.prodname_copilot_short %}'s view -For an overview of these features, see [AUTOTITLE](/copilot/get-started/features#features-for-administrators). +For guidance on managing {% data variables.product.prodname_copilot_short %} for your team, including configuring settings and monitoring usage, see [AUTOTITLE](/copilot/how-tos/administer-copilot). ### For new {% data variables.product.prodname_enterprise %} customers diff --git a/content/copilot/tutorials/use-copilot-code-review-across-the-pull-request-lifecycle.md b/content/copilot/tutorials/use-copilot-code-review-across-the-pull-request-lifecycle.md index be06455d09c7..a0624e6bd139 100644 --- a/content/copilot/tutorials/use-copilot-code-review-across-the-pull-request-lifecycle.md +++ b/content/copilot/tutorials/use-copilot-code-review-across-the-pull-request-lifecycle.md @@ -33,7 +33,7 @@ Choose a review model and set up early feedback for draft and active pull reques | Automatic review on draft pull requests | Teams that want earlier feedback loops | Authors can fix issues before human review starts. | | Automatic review on new pushes | Fast-moving pull requests with multiple revisions | {% data variables.product.prodname_copilot_short %} reevaluates substantial updates as the pull request evolves. | -For setup steps, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/request-a-code-review/use-code-review) and [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-automatic-review). +For setup steps, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/request-a-code-review/use-code-review) and [AUTOTITLE](/copilot/how-tos/copilot-on-github/set-up-copilot/configure-code-review). ### Use {% data variables.copilot.copilot_code-review_short %} early on draft pull requests diff --git a/content/get-started/learning-about-github/githubs-plans.md b/content/get-started/learning-about-github/githubs-plans.md index d143f88529f4..40d7b89bad9f 100644 --- a/content/get-started/learning-about-github/githubs-plans.md +++ b/content/get-started/learning-about-github/githubs-plans.md @@ -88,6 +88,10 @@ In addition to the features available with {% data variables.product.prodname_fr For more information, see [AUTOTITLE](/get-started/learning-about-github/about-github-advanced-security). +{% ifversion fpt or ghec %} +* The option to purchase {% data variables.product.prodname_code_quality %}, which helps teams find and fix code quality and coverage issues. For more information, see [AUTOTITLE](/code-security/concepts/code-quality/code-quality). +{% endif %} + * Advanced tools and insights in private repositories: * Required pull request reviewers * Multiple pull request reviewers diff --git a/content/migrations/ado/key-differences-between-azure-devops-and-github.md b/content/migrations/ado/key-differences-between-azure-devops-and-github.md index e0f8893781f5..e613f131ea41 100644 --- a/content/migrations/ado/key-differences-between-azure-devops-and-github.md +++ b/content/migrations/ado/key-differences-between-azure-devops-and-github.md @@ -89,4 +89,4 @@ For more information, see [AUTOTITLE](/packages/learn-github-packages/introducti Hosting your repositories on {% data variables.product.github %} unlocks the full power of {% data variables.product.prodname_copilot_short %}. Your codebase provides {% data variables.product.prodname_copilot_short %} with all the context it needs to answer questions in {% data variables.copilot.copilot_chat_short %}, review and make suggestions in your pull requests, and even make changes on your behalf with {% data variables.copilot.copilot_cloud_agent %}. -See [AUTOTITLE](/copilot/get-started/quickstart). +See [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-on-github-com). diff --git a/content/migrations/elm/prepare-for-your-migration.md b/content/migrations/elm/prepare-for-your-migration.md index 3dbbc6605ec1..fc3d01045717 100644 --- a/content/migrations/elm/prepare-for-your-migration.md +++ b/content/migrations/elm/prepare-for-your-migration.md @@ -15,6 +15,7 @@ contentType: concepts +* `3.22.0` * `3.21.3` * `3.20.5` * `3.19.9` diff --git a/content/organizations/collaborating-with-groups-in-organizations/customizing-your-organizations-profile.md b/content/organizations/collaborating-with-groups-in-organizations/customizing-your-organizations-profile.md index 41ce89eaa03e..226d19623940 100644 --- a/content/organizations/collaborating-with-groups-in-organizations/customizing-your-organizations-profile.md +++ b/content/organizations/collaborating-with-groups-in-organizations/customizing-your-organizations-profile.md @@ -56,6 +56,8 @@ The content of public `README.md` will appear on your organization's public prof ## Adding a member-only organization profile README +>[!NOTE] Member-only organization profile READMEs will only load from a `.github-private` repository with its visibility set to private. Repositories in enterprises set to internal visibility will not work. + The content of a member-only `README.md` will be displayed in the member view of your organization's profile. 1. If your organization does not already have a `.github-private` repository, create a private repository called `.github-private`. diff --git a/content/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization.md b/content/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization.md index c796e58ef992..f6c4884c1813 100644 --- a/content/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization.md +++ b/content/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization.md @@ -1,6 +1,6 @@ --- -title: Configuring the retention period for GitHub Actions artifacts and logs in your organization -intro: 'You can configure the retention period for {% data variables.product.prodname_actions %} artifacts and logs in your organization.' +title: Configuring the retention period for checks, workflow runs, commit statuses, artifacts, and logs in your organization +intro: 'Control how long checks, workflow runs, commit statuses, artifacts, and logs are retained in your organization.' redirect_from: - /github/setting-up-and-managing-organizations-and-teams/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization versions: @@ -8,6 +8,7 @@ versions: ghes: '*' ghec: '*' shortTitle: Configure retention period +allowTitleToDifferFromFilename: true category: - Configure organization features --- diff --git a/content/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/repository-roles-for-an-organization.md b/content/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/repository-roles-for-an-organization.md index caeb5a661880..4131a90d751f 100644 --- a/content/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/repository-roles-for-an-organization.md +++ b/content/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/repository-roles-for-an-organization.md @@ -56,119 +56,13 @@ Some of the features listed below are limited to organizations using {% data var | Repository action | Read | Triage | Write | Maintain | Admin | |:---|:---:|:---:|:---:|:---:|:---:| -| Manage [individual](/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-an-individuals-access-to-an-organization-repository), [team](/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-team-access-to-an-organization-repository), and [outside collaborator](/organizations/managing-user-access-to-your-organizations-repositories/managing-outside-collaborators/adding-outside-collaborators-to-repositories-in-your-organization) access to the repository | | | | | | -| Pull from the person or team's assigned repositories | | | | | | -| Fork the person or team's assigned repositories | | | | | | -| Edit and delete their own comments | | | | | | -| Open issues | | | | | | -| Close issues they opened themselves | | | | | | -| Reopen issues they closed themselves | | | | | | -| Have an issue assigned to them | | | | | | -| Send pull requests from forks of the team's assigned repositories | | | | | | -| [Submit reviews on pull requests](/pull-requests/how-tos/review-pull-requests/reviewing-proposed-changes-in-a-pull-request) | | | | | | -| [Approve or request changes to a pull request with required reviews](/pull-requests/how-tos/review-pull-requests/approving-a-pull-request-with-required-reviews) | | | | | | -| [Apply suggested changes](/pull-requests/how-tos/review-pull-requests/incorporating-feedback-in-your-pull-request) to pull requests | | | | | | -| View published releases | | | | | | -| {% ifversion fpt or ghec %} | -| View [GitHub Actions workflow runs](/actions/how-tos/manage-workflow-runs) | | | | | | -| {% endif %} | -| Edit wikis in public repositories | | | | | | -| Edit wikis in private repositories | | | | | | -| {% ifversion fpt or ghec %} | -| [Report abusive or spammy content](/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam) | | | | | | -| {% endif %} | -| Apply/dismiss labels | | | | | | -| Create, edit, delete labels | | | | | | -| Close, reopen, and assign all issues and pull requests | | | | | | -| [Enable and disable auto-merge on a pull request](/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-auto-merge-for-pull-requests-in-your-repository) | | | | | | -| Create, edit, delete milestones | | | | | | -| Apply milestones | | | | | | -| Mark [duplicate issues and pull requests](/issues/tracking-your-work-with-issues/administering-issues/marking-issues-or-pull-requests-as-a-duplicate)| | | | | | -| Request [pull request reviews](/pull-requests/how-tos/create-pull-requests/requesting-a-pull-request-review) | | | | | | -| Merge a [pull request](/pull-requests/reference/pull-request-merges) | | | | | | -| Push to (write) the person or team's assigned repositories | | | | | | -| Edit and delete anyone's comments on commits, pull requests, and issues | | | | | | -| [Hide anyone's comments on discussions](/communities/moderating-comments-and-conversations/managing-disruptive-comments) | | | | | | -| [Hide anyone's comments on issues, pull requests, and commits](/communities/moderating-comments-and-conversations/managing-disruptive-comments) | | | | | | -| [Lock conversations](/communities/moderating-comments-and-conversations/locking-conversations) | | | | | | -| Transfer issues (see [AUTOTITLE](/issues/tracking-your-work-with-issues/administering-issues/transferring-an-issue-to-another-repository) for details) | | | | | | -| [Act as a designated code owner for a repository](/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) | | | | | | -| [Mark a draft pull request as ready for review](/pull-requests/how-tos/create-pull-requests/changing-the-stage-of-a-pull-request) | | | | | | -| [Convert a pull request to a draft](/pull-requests/how-tos/create-pull-requests/changing-the-stage-of-a-pull-request) | | | | | | -| Create [status checks](/pull-requests/reference/status-checks) | | | | | | -| {% ifversion fpt or ghec %} | -| Create, edit, run, re-run, and cancel [GitHub Actions workflows](/actions) | | | | | | -| {% endif %} | -| {% ifversion repo-ci-cd-admin %} | -| Create, update, and delete [GitHub Actions secrets](/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) on GitHub.com | | | | | | -| {% else %} | -| Create, update, and delete [GitHub Actions secrets](/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) on GitHub.com | | | | | | -| {% endif %} | -| Create, update, and delete [GitHub Actions secrets](/rest/actions/secrets) using the REST API | | | | | | -| {% ifversion repo-ci-cd-admin %} | -| Create, update, and delete [GitHub Actions variables](/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables) on GitHub.com | | | | | | -| {% else %} | -| Create, update, and delete [GitHub Actions variables](/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables) on GitHub.com | | | | | | -| {% endif %} | -| Create, update, and delete [GitHub Actions variables](/rest/actions/variables) using the REST API | | | | | | -| Create and edit releases | | | | | | -| View draft releases | | | | | | -| Edit a repository's description | | | | | | -| {% ifversion fpt or ghec %} | -| [View and install packages](/packages/learn-github-packages) | | | | | | -| [Publish packages](/packages/learn-github-packages/publishing-a-package) | | | | | | -| [Delete and restore packages](/packages/learn-github-packages/deleting-and-restoring-a-package) | | | | | | -| {% endif %} | -| Manage [topics](/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics) | | | | | | -| Enable wikis and restrict wiki editors | | | | | | -| Configure [pull request merges](/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges) | | | | | | -| Configure [a publishing source for {% data variables.product.prodname_pages %}](/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site) | | | | | | -| {% ifversion copilot %} | -| View [content exclusion settings](/copilot/how-tos/configure-content-exclusion/exclude-content-from-copilot) for {% data variables.product.prodname_copilot %} | | | | | | -| {% endif %} | -| Manage [branch protection rules](/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule) and [repository rulesets](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets) | | | | | | -| View [rulesets for a repository](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets) | | | | | | -| [Push to protected branches](/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches)
Doesn't apply to rulesets as these have a different bypass model. See [Granting bypass permissions for your branch or tag ruleset](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/creating-rulesets-for-a-repository#granting-bypass-permissions-for-your-branch-or-tag-ruleset). | | | | | | -| Merge pull requests on protected branches, even if there are no approving reviews | | | | | | -| [Create and edit repository social cards](/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/customizing-your-repositorys-social-media-preview) | | | | | | -| {% ifversion fpt or ghec %} | -| Limit [interactions in a repository](/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository)| | | | | | -| {% endif %} | -| Delete an issue (see [AUTOTITLE](/issues/tracking-your-work-with-issues/administering-issues/deleting-an-issue)) | | | | | | -| [Define code owners for a repository](/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) | | | | | | -| Add a repository to a team (see [AUTOTITLE](/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-team-access-to-an-organization-repository#giving-a-team-access-to-a-repository) for details) | | | | | | -| [Manage outside collaborator access to a repository](/organizations/managing-user-access-to-your-organizations-repositories/managing-outside-collaborators/adding-outside-collaborators-to-repositories-in-your-organization) | | | | | | -| [Change a repository's visibility](/organizations/managing-organization-settings/restricting-repository-visibility-changes-in-your-organization) | | | | | | -| Make a repository a template (see [AUTOTITLE](/repositories/creating-and-managing-repositories/creating-a-template-repository)) | | | | | | -| Change a repository's settings | | | | | | -| Manage team and collaborator access to the repository | | | | | | -| Edit the repository's default branch | | | | | | -| Rename the repository's default branch (see [AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch)) | | | | | | -| Rename a branch other than the repository's default branch (see [AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch)) | | | | | | -| Manage webhooks and deploy keys | | | | | | -| [Manage the forking policy for a repository](/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/managing-the-forking-policy-for-your-repository) | | | | | | -| [Transfer repositories into the organization](/organizations/managing-organization-settings/restricting-repository-creation-in-your-organization) | | | | | | -| [Delete or transfer repositories out of the organization](/organizations/managing-organization-settings/setting-permissions-for-deleting-or-transferring-repositories) | | | | | | -| [Archive repositories](/repositories/archiving-a-github-repository/archiving-repositories) | | | | | | -| {% ifversion fpt or ghec %} | -| Display a sponsor button (see [AUTOTITLE](/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository)) | | | | | | -| {% endif %} | -| Create autolink references to external resources, like Jira or Zendesk (see [AUTOTITLE](/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/configuring-autolinks-to-reference-external-resources)) | | | | | | -| [Enable {% data variables.product.prodname_discussions %}](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/enabling-or-disabling-github-discussions-for-a-repository) in a repository | | | | | | -| [Create and edit categories](/discussions/managing-discussions-for-your-community/managing-categories-for-discussions) for {% data variables.product.prodname_discussions %} | | | | | | -| [Move a discussion to a different category](/discussions/managing-discussions-for-your-community/managing-discussions) | | | | | | -| [Transfer a discussion](/discussions/managing-discussions-for-your-community/managing-discussions) to a new repository| | | | | | -| [Manage pinned discussions](/discussions/managing-discussions-for-your-community/managing-discussions) | | | | | | -| [Lock and unlock discussions](/discussions/managing-discussions-for-your-community/moderating-discussions) | | | | | | -| [Individually convert issues to discussions](/discussions/managing-discussions-for-your-community/moderating-discussions) | | | | | | -| [Create new discussions and comment on existing discussions](/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion) | | | | | | -| [Delete a discussion](/discussions/managing-discussions-for-your-community/managing-discussions#deleting-a-discussion) | | | | | | -| {% ifversion fpt or ghec %} | -| [Create codespaces](/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository?tool=webui) for private{% ifversion ghec %}/internal{% endif %} repositories | | | | | | -| [Create codespaces](/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository?tool=webui) for private{% ifversion ghec %}/internal{% endif %} repositories with [Codespaces secrets access](/codespaces/managing-codespaces-for-your-organization/managing-development-environment-secrets-for-your-repository-or-organization?tool=webui) | {% octicon "check" aria-label="No" %} | {% octicon "check" aria-label="No" %} | | | | -| [Create codespaces](/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository?tool=webui) for public repositories
(users with read-only access can only create codespaces at their own expense) | | | | | | -| {% endif %} | -| Edit the custom property values for the repository | | | | | | +{%- assign roleColumns = "read,triage,write,maintain,admin" | split: "," -%} +{%- for row in tables.repository-roles.permissions -%} +{%- assign show = row.versions | default: "show" | render_liquid -%} +{%- unless show == "" %} +| {{ row.action | render_liquid }}{% assign granted = row.roles | render_liquid | split: ", " %}{% for role in roleColumns %} | {% if granted contains role %}{% else %}{% endif %}{% endfor %} | +{%- endunless -%} +{%- endfor %} {% endrowheaders %} @@ -183,29 +77,13 @@ In this section, you can find the access required for security features, such as | Repository action | Read | Triage | Write | Maintain | Admin | |:---|:---:|:---:|:---:|:---:|:---:| -| Receive [{% data variables.product.prodname_dependabot_alerts %} for insecure dependencies](/code-security/concepts/supply-chain-security/dependabot-alerts) in a repository | | | | | | -| [Dismiss {% data variables.product.prodname_dependabot_alerts %}](/code-security/how-tos/manage-security-alerts/manage-dependabot-alerts/view-dependabot-alerts) | | | | | | -| {% ifversion ghes or ghec %} | -| [Designate additional people or teams to receive security alerts](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#granting-access-to-security-alerts) | | | | | | -| {% endif %} | -| {% ifversion fpt or ghec %} | -| Create [security advisories](/code-security/concepts/vulnerability-reporting-and-management/repository-security-advisories) | | | | | | -| {% endif %} | -| Manage access to {% data variables.product.prodname_GHAS %} features (see [AUTOTITLE](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization)) | | | | | | -| {% ifversion fpt or ghec %} | -| [Enable the dependency graph](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/explore-dependencies) for a private repository | | | | | | -| {% endif %} | -| {% ifversion ghes or ghec %} | -| [View dependency reviews](/code-security/concepts/supply-chain-security/dependency-review) | | | | | | -| {% endif %} | -| [View {% data variables.product.prodname_code_scanning %} alerts on pull requests](/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/triage-alerts-in-pull-requests) | | | | | | -| [List, dismiss, and delete {% data variables.product.prodname_code_scanning %} alerts](/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/resolve-alerts) | | | | | | -| [View and dismiss {% data variables.secret-scanning.alerts %} in a repository](/code-security/how-tos/manage-security-alerts/manage-secret-scanning-alerts) | | | | | |{% ifversion ghes or ghec %} -| [Resolve, revoke, or re-open {% data variables.secret-scanning.alerts %}](/code-security/how-tos/manage-security-alerts/manage-secret-scanning-alerts) | | | | | | -| {% endif %} | -| {% ifversion ghes or ghec %} | -| [Designate additional people or teams to receive {% data variables.secret-scanning.alerts %}](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#granting-access-to-security-alerts) in repositories | | | | | | -| {% endif %} | +{%- assign roleColumns = "read,triage,write,maintain,admin" | split: "," -%} +{%- for row in tables.repository-roles.securityFeatures -%} +{%- assign show = row.versions | default: "show" | render_liquid -%} +{%- unless show == "" %} +| {{ row.action | render_liquid }}{% assign granted = row.roles | render_liquid | split: ", " %}{% for role in roleColumns %} | {% if granted contains role %}{% else %}{% endif %}{% endfor %} | +{%- endunless -%} +{%- endfor %} {% endrowheaders %} diff --git a/content/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility.md b/content/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility.md index fcdf731f451c..afc9fdf4dfd4 100644 --- a/content/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility.md +++ b/content/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility.md @@ -116,6 +116,12 @@ The specified repository does not need to be the repository where the source cod If you publish a package that is linked to a repository, {% data variables.product.prodname_actions %} workflows in the linked repository automatically get access to the package, unless your organization has disabled the automatic inheritance of access permissions. For more information, see [About inheritance of access permissions](#about-inheritance-of-access-permissions) above. {% endif %} +{% ifversion org-automatic-registry-access %} + +Granting a repository access here also allows {% data variables.product.prodname_dependabot %} to pull from this package automatically, without requiring {% data variables.product.pat_generic_plural %} or `dependabot.yml` registry configuration. See [AUTOTITLE](/code-security/concepts/supply-chain-security/automatic-dependabot-access-to-github-registries). + +{% endif %} + > [!NOTE] > * Syncing your package with a repository {% data variables.package_registry.package-settings-actions-access-menu %} is different than connecting your package to a repository. For more information about linking a repository to your package, see [AUTOTITLE](/packages/learn-github-packages/connecting-a-repository-to-a-package). > * You can choose to limit permissions to workflow jobs using the `permissions` key and `packages` scope. For more information, see [AUTOTITLE](/actions/tutorials/authenticate-with-github_token#modifying-the-permissions-for-the-github_token). diff --git a/content/packages/working-with-a-github-packages-registry/working-with-the-npm-registry.md b/content/packages/working-with-a-github-packages-registry/working-with-the-npm-registry.md index 8a0f2fafc335..f8d47ebb9fcb 100644 --- a/content/packages/working-with-a-github-packages-registry/working-with-the-npm-registry.md +++ b/content/packages/working-with-a-github-packages-registry/working-with-the-npm-registry.md @@ -69,7 +69,7 @@ If your instance has subdomain isolation enabled: {% endif %} ```shell -//{% ifversion fpt or ghec %}npm.pkg.github.com{% else %}npm.HOSTNAME/{% endif %}/:_authToken=TOKEN +//{% ifversion fpt or ghec %}npm.pkg.github.com{% else %}npm.HOSTNAME{% endif %}/:_authToken=TOKEN ``` {% ifversion ghes %} @@ -161,7 +161,7 @@ You can use `publishConfig` element in the `package.json` file to specify the re ```shell "publishConfig": { - "registry": "https://{% ifversion fpt or ghec %}npm.pkg.github.com{% else %}npm. HOSTNAME/{% endif %}" + "registry": "https://{% ifversion fpt or ghec %}npm.pkg.github.com{% else %}npm.HOSTNAME/{% endif %}" }, ``` @@ -225,23 +225,23 @@ You also need to add the `.npmrc` file to your project so that all requests to i ### Installing packages from other organizations -By default, you can only use {% data variables.product.prodname_registry %} packages from one organization. If you'd like to route package requests to multiple organizations and users, you can add additional lines to your `.npmrc` file, replacing {% ifversion ghes %}`HOSTNAME` with the host name of {% data variables.location.product_location %} and {% endif %}`NAMESPACE` with the name of the personal account or organization {% ifversion packages-npm-v2 %}to which the package is scoped{% else %}that owns the repository containing the project{% endif %}. +By default, you can only use {% data variables.product.prodname_registry %} packages from one organization. If you'd like to route package requests to multiple organizations and users, you can add additional lines to your `.npmrc` file, replacing {% ifversion ghes %}`HOSTNAME` with the host name of {% data variables.location.product_location %} and {% endif %}`NAMESPACE1` and `NAMESPACE2` with the names of the personal accounts or organizations {% ifversion packages-npm-v2 %}to which the packages are scoped{% else %}that own the repositories containing the projects{% endif %}. {% ifversion ghes %} If your instance has subdomain isolation enabled: {% endif %} ```shell -@NAMESPACE:registry=https://{% ifversion fpt or ghec %}npm.pkg.github.com{% else %}npm.HOSTNAME{% endif %} -@NAMESPACE:registry=https://{% ifversion fpt or ghec %}npm.pkg.github.com{% else %}npm.HOSTNAME{% endif %} +@NAMESPACE1:registry=https://{% ifversion fpt or ghec %}npm.pkg.github.com{% else %}npm.HOSTNAME{% endif %} +@NAMESPACE2:registry=https://{% ifversion fpt or ghec %}npm.pkg.github.com{% else %}npm.HOSTNAME{% endif %} ``` {% ifversion ghes %} If your instance has subdomain isolation disabled: ```shell -@NAMESPACE:registry=https://HOSTNAME/_registry/npm -@NAMESPACE:registry=https://HOSTNAME/_registry/npm +@NAMESPACE1:registry=https://HOSTNAME/_registry/npm +@NAMESPACE2:registry=https://HOSTNAME/_registry/npm ``` {% endif %} diff --git a/content/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site.md b/content/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site.md index 10ca0cfc10a4..f4714c45ad9d 100644 --- a/content/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site.md +++ b/content/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site.md @@ -103,6 +103,8 @@ To set up an apex domain, such as `example.com`, you must configure a custom dom Navigate to your DNS provider and create a `CNAME` record for the `www` subdomain that points to your {% data variables.product.prodname_pages %} default domain. For example, if your site is located at `.github.io`, you should create a `CNAME` record that points `www.example.com` to `.github.io` Similarly, for an organization site located at `.github.io`, you should create a `CNAME` record that points `www.example.com` to `.github.io`. Ensure that the `CNAME` record points directly to `.github.io` or `.github.io` without including the repository name. +These `CNAME` record values are the same for both publicly and privately published {% data variables.product.prodname_pages %} sites. Privately published sites are available with {% data variables.product.prodname_ghe_cloud %}. + {% data reusables.pages.contact-dns-provider %} {% data reusables.pages.default-domain-information %} ## Configuring a subdomain @@ -121,6 +123,8 @@ To set up a `www` or custom subdomain, such as `www.example.com` or `blog.exampl 1. Navigate to your DNS provider and create a `CNAME` record that points your subdomain to the default domain for your site. For example, if you want to use the subdomain `www.example.com` for your user site, create a `CNAME` record that points `www.example.com` to `.github.io`. If you want to use the subdomain `another.example.com` for your organization site, create a `CNAME` record that points `another.example.com` to `.github.io`. The `CNAME` record should always point to `.github.io` or `.github.io`, excluding the repository name. {% data reusables.pages.contact-dns-provider %} {% data reusables.pages.default-domain-information %} + These `CNAME` record values are the same for both publicly and privately published {% data variables.product.prodname_pages %} sites. Do not point the `CNAME` record to the unique `*.pages.github.io` subdomain shown in your repository's {% data variables.product.prodname_pages %} settings. Privately published sites are available with {% data variables.product.prodname_ghe_cloud %}. For more information, see [AUTOTITLE](/enterprise-cloud@latest/pages/getting-started-with-github-pages/changing-the-visibility-of-your-github-pages-site){% ifversion fpt %} in the {% data variables.product.prodname_ghe_cloud %} documentation{% endif %}. + {% indented_data_reference reusables.pages.wildcard-dns-warning spaces=3 %} {% data reusables.command_line.open_the_multi_os_terminal %} 1. To confirm that your DNS record configured correctly, use the `dig` command, replacing _WWW.EXAMPLE.COM_ with your subdomain. diff --git a/content/pull-requests/concepts/writing-code-for-a-project.md b/content/pull-requests/concepts/writing-code-for-a-project.md index f520d701cc39..2da6d58ab9a8 100644 --- a/content/pull-requests/concepts/writing-code-for-a-project.md +++ b/content/pull-requests/concepts/writing-code-for-a-project.md @@ -15,14 +15,14 @@ When you contribute to a project, you need a safe place to write and refine code Most work starts by creating an isolated copy of the code that you can change freely. -* Use a **branch** when you have write access to a repository. A branch lets you develop a feature, fix a bug, or experiment in a contained area of the repository without affecting other branches. You create a branch from an existing branch, usually the default branch. +* Use a **branch** when you have write access to a repository. A branch lets you develop a feature, fix a bug, or experiment in a contained area of the repository without affecting other branches. You create a branch from an existing branch, usually the default branch. * Use a **fork** when you do not have write access, or when you want full independence from the original project. A fork is a separate repository that shares code and visibility settings with the original "upstream" repository. It has its own branches, issues, and pull requests. With a fork, you can also open pull requests for the upstream repository. A branch is usually the simplest choice when you already collaborate in a shared repository. A fork is often the best choice for open source contributions, where you may not have write access to the upstream repository. ## Checking in work with commits -As you write code, you save small, meaningful groups of changes as **commits**. Each commit records a snapshot of your work along with a message describing what changed, which makes it easier to track history, review changes, and understand how the code evolved. +As you write code, you save small, meaningful groups of changes as **commits**. Each commit records a snapshot of your work along with a message describing what changed, which makes it easier to track history, review changes, and understand how the code evolved. Committing frequently on your branch or fork lets you: @@ -32,7 +32,7 @@ Committing frequently on your branch or fork lets you: ## Proposing changes with pull requests -When your work is ready to share, you open a **pull request** to propose merging your changes into the base branch. A pull request brings together your commits, a description of the change, and the tools reviewers need to discuss and evaluate it before it merges. +When your work is ready to share, you open a **pull request** to propose merging your changes into the base branch. A pull request brings together your commits, a description of the change, and the tools reviewers need to discuss and evaluate it before it merges. You can open a pull request while work is still in progress by creating a draft pull request, which shares your changes without formally requesting review. This is useful when you want early feedback or want to run automated checks against your code. @@ -40,18 +40,18 @@ You can open a pull request while work is still in progress by creating a draft While a pull request is open, the base branch can keep changing as other people merge their work. To keep your changes clean and reduce conflicts, you can: -* Merge or rebase the base branch into your branch frequently so your diff stays focused on what your change introduces. {% data variables.product.github %} shows a three-dot diff by default, which compares your branch against the point where it diverged from the base. +* Merge or rebase the base branch into your branch frequently so your diff stays focused on what your change introduces. {% data variables.product.github %} shows a three-dot diff by default, which compares your branch against the point where it diverged from the base. * Rebase to tidy a messy commit history—reordering, combining, or rewording commits—before you ask for review. -* Resolve merge conflicts when Git cannot automatically combine competing changes. +* Resolve merge conflicts when Git cannot automatically combine competing changes. ## Working within repository controls Experienced contributors work within the guardrails a repository defines. These controls shape where you can push, who must approve your work, and what must pass before it merges. -* **Protected branches and rulesets** can block direct pushes to important branches, require linear history or signed commits, and require status checks or reviews before merging. -* **Code owners** are automatically requested for review when your change touches files they own, so plan for their approval on sensitive areas. +* **Protected branches and rulesets** can block direct pushes to important branches, require linear history or signed commits, and require status checks or reviews before merging. +* **Code owners** are automatically requested for review when your change touches files they own, so plan for their approval on sensitive areas. * **Push rulesets** can apply across a fork network, restricting file paths, sizes, or names in every fork. -* **Pre-receive hooks** let administrators on {% data variables.product.prodname_ghe_server %} enforce policy checks on the server before commits are accepted. +* **Pre-receive hooks** let administrators on {% data variables.product.prodname_ghe_server %} enforce policy checks on the server before commits are accepted. ## An integrated toolchain @@ -60,11 +60,11 @@ Pull requests connect your code to the automation and services that help you wri {% ifversion fpt or ghec %}* **{% data variables.product.prodname_copilot %}** can help you write, debug, and optimize code. {% endif %} * **{% data variables.product.prodname_code_scanning_caps %}** and **{% data variables.product.prodname_dependabot %}** surface security issues and vulnerable dependencies as your changes move through a pull request, so you can apply secure coding practices early. -* **{% data variables.product.prodname_actions %}** can run continuous integration on every push to your pull request, building and testing your changes automatically. +* **{% data variables.product.prodname_actions %}** can run continuous integration on every push to your pull request, building and testing your changes automatically. ## Further reading * [AUTOTITLE](/pull-requests/how-tos/create-pull-requests/creating-a-pull-request) {% ifversion fpt or ghec %} -* [AUTOTITLE](/copilot/get-started/quickstart) +* [AUTOTITLE](/copilot/get-started/quickstart-for-using-github-copilot-on-github-com) {% endif %} diff --git a/content/pull-requests/get-started/reviewing-pull-requests-quickstart.md b/content/pull-requests/get-started/reviewing-pull-requests-quickstart.md index ad2640c33f94..74b89903d7c0 100644 --- a/content/pull-requests/get-started/reviewing-pull-requests-quickstart.md +++ b/content/pull-requests/get-started/reviewing-pull-requests-quickstart.md @@ -39,7 +39,7 @@ When you know the exact change you'd like, suggest it so the author can apply it Finish by submitting your review with a decision that tells the author what to do next. -1. Click **Review changes**. +1. Click **Submit review**. 1. Add a summary comment. 1. Select a decision, then click **Submit review**: @@ -50,4 +50,4 @@ Finish by submitting your review with a decision that tells the author what to d ## Next steps * [AUTOTITLE](/pull-requests/concepts/giving-reviews) -* [AUTOTITLE](/pull-requests/reference/pull-request-reviews) \ No newline at end of file +* [AUTOTITLE](/pull-requests/reference/pull-request-reviews) diff --git a/content/pull-requests/how-tos/commit-changes/managing-branches-within-your-repository.md b/content/pull-requests/how-tos/commit-changes/managing-branches-within-your-repository.md index ba67ee24169f..c6af1dc7a568 100644 --- a/content/pull-requests/how-tos/commit-changes/managing-branches-within-your-repository.md +++ b/content/pull-requests/how-tos/commit-changes/managing-branches-within-your-repository.md @@ -32,9 +32,9 @@ Create a branch for a separate place to work on changes before opening a pull re 1. Click **New branch**. ![Screenshot of the "Branches" page for a repository. A green button, labeled "New branch", is highlighted with an orange outline.](/assets/images/help/branches/new-branch-button.png) -1. Under "Branch name", type a name for the branch. -1. Under "Branch source", choose the repository and branch to base your new branch on. -1. Click **Create branch**. +1. Under "New branch name", type a name for the branch. +1. Under "Source", choose the branch to base your new branch on. +1. Click **Create new branch**. ### Creating a branch using the branch dropdown diff --git a/content/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-required-status-checks.md b/content/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-required-status-checks.md index c4c7e31a47b6..24a40a5ecd31 100644 --- a/content/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-required-status-checks.md +++ b/content/pull-requests/how-tos/merge-and-close-pull-requests/troubleshooting-required-status-checks.md @@ -50,6 +50,25 @@ Use the pull request status checks box to identify which commit must pass. See [AUTOTITLE](/rest/pulls/pulls#get-a-pull-request). +## Checks from some workflow jobs are not evaluated + +A {% data variables.product.prodname_actions %} workflow run can report checks that do not appear in a pull request's checks section or satisfy required status checks in a branch ruleset. For checks created by workflow jobs to be evaluated for a pull request, the workflow run must be triggered by one of these events: + +* `push` +* `pull_request` +* `pull_request_review` +* `pull_request_target` +* `deployment` +* `deployment_status` + +For example, if a workflow is triggered by `workflow_dispatch` on a pull request's head branch, checks reported by its jobs do not appear in the pull request's checks section. Even if the checks pass for the head commit, they do not satisfy a required status check in a branch ruleset. + +Check the event that triggered the workflow run. If the workflow uses another event, update its `on` configuration to use an eligible event appropriate for your workflow, such as `pull_request`. See [AUTOTITLE](/actions/reference/workflows-and-actions/events-that-trigger-workflows). + +This restriction applies only to checks created by workflow jobs, not to checks created by an external {% data variables.product.prodname_github_app %}. + +Merge queues require the separate `merge_group` event. See [Status checks with {% data variables.product.prodname_actions %} and a Merge queue](#status-checks-with-github-actions-and-a-merge-queue). + ## Handling skipped but required checks | Cause | Result | How to fix or check | diff --git a/content/pull-requests/how-tos/review-pull-requests/commenting-on-a-pull-request.md b/content/pull-requests/how-tos/review-pull-requests/commenting-on-a-pull-request.md index 399cbf736b63..2fe5c3ec5d13 100644 --- a/content/pull-requests/how-tos/review-pull-requests/commenting-on-a-pull-request.md +++ b/content/pull-requests/how-tos/review-pull-requests/commenting-on-a-pull-request.md @@ -48,11 +48,11 @@ To reply to an existing line or file comment, navigate to the comment on either {% data reusables.repositories.start-file-comment %} 1. When you're done: - * If you only want to add this **one comment**, click **Add single comment**. + * If you only want to add this **one comment**, click {% ifversion fpt or ghec %}**Comment**{% elsif ghes %}**Add single comment**{% endif %}. * If you want to add **multiple comments**, click **Start a review**, then continue adding comments. - When you're finished, click **Finish your review**, leave a summary of your review, and click **Submit review**. + When you're finished, click {% ifversion fpt or ghec %}**Submit review**{% elsif ghes %}**Finish your review**{% endif %}, leave a summary of your review, and click **Submit review**. Anyone watching the pull request or repository will receive a notification of your comments. Batching your comments avoids sending multiple notifications. diff --git a/content/pull-requests/how-tos/review-pull-requests/incorporating-feedback-in-your-pull-request.md b/content/pull-requests/how-tos/review-pull-requests/incorporating-feedback-in-your-pull-request.md index 2ec8f7488301..e42cdc06da06 100644 --- a/content/pull-requests/how-tos/review-pull-requests/incorporating-feedback-in-your-pull-request.md +++ b/content/pull-requests/how-tos/review-pull-requests/incorporating-feedback-in-your-pull-request.md @@ -40,6 +40,12 @@ Each person who suggested a change included in the commit will be a co-author of 1. In the commit message field, type a short, meaningful commit message that describes the change you made to the file or files. 1. Click **Commit changes**. +{% ifversion fpt or ghec %} +## Delegating review comments to {% data variables.product.prodname_copilot_short %} + +If you have access to {% data variables.copilot.copilot_cloud_agent %}, you can delegate review comments to have {% data variables.product.prodname_copilot_short %} implement the feedback. For more information, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/cloud-agent/use-cloud-agent-on-github#delegating-review-comments). +{% endif %} + ## Re-requesting a review For example, you can re-request a review after you've made substantial changes to your pull request. diff --git a/content/pull-requests/how-tos/review-pull-requests/reviewing-proposed-changes-in-a-pull-request.md b/content/pull-requests/how-tos/review-pull-requests/reviewing-proposed-changes-in-a-pull-request.md index 6405269f7422..026f920dc8ad 100644 --- a/content/pull-requests/how-tos/review-pull-requests/reviewing-proposed-changes-in-a-pull-request.md +++ b/content/pull-requests/how-tos/review-pull-requests/reviewing-proposed-changes-in-a-pull-request.md @@ -96,7 +96,7 @@ To change the format of the diff view in this tab, click {% octicon "gear" aria- {% data reusables.repositories.start-file-comment %} 1. When you're done, click **Start a review**. If you have already started a review, you can click **Add review comment**. -Before you submit your review, your line comments are _pending_ and only visible to you. You can edit pending comments anytime before you submit your review. To cancel a pending review, including all of its pending comments, click **Review changes**, then click **Abandon review**. +Before you submit your review, your line comments are _pending_ and only visible to you. You can edit pending comments anytime before you submit your review. To cancel a pending review, including all of its pending comments, click **Submit review**, then click **Discard review**. ![Screenshot of the comment field for a review. The "Abandon review" button is outlined in dark orange.](/assets/images/help/pull_requests/abandon-review-button.png) {% endwebui %} diff --git a/content/pull-requests/how-tos/review-pull-requests/viewing-a-pull-request-review.md b/content/pull-requests/how-tos/review-pull-requests/viewing-a-pull-request-review.md index 10ca5b6ae5bd..354c8d9595d9 100644 --- a/content/pull-requests/how-tos/review-pull-requests/viewing-a-pull-request-review.md +++ b/content/pull-requests/how-tos/review-pull-requests/viewing-a-pull-request-review.md @@ -22,7 +22,7 @@ When you view a full review, you see the same version of the pull request as the {% data reusables.repositories.sidebar-pr %} {% data reusables.repositories.choose-pr-review %} -1. On the "Conversation" tab, scroll to the review you want to see, then click **View changes**. +1. On the "Conversation" tab, scroll to the review you want to see, then click **View reviewed changes**. ![Screenshot of a review. The "View changes" link is outlined in dark orange.](/assets/images/help/pull_requests/view-full-review-view-changes.png) diff --git a/content/pull-requests/reference/forks.md b/content/pull-requests/reference/forks.md index 3889d221f96c..f0858468edf5 100644 --- a/content/pull-requests/reference/forks.md +++ b/content/pull-requests/reference/forks.md @@ -105,8 +105,9 @@ Forks are powerful collaboration tools, but they can expose code and history in * Forks have their own permissions separate from the upstream repository. * Owners of an upstream repository can read all forks in the repository network. * Organization owners may have administrative access to forks created in personal namespaces. -* Removing someone's access to the upstream repository does not always delete forks in other organizations. -* Commits can remain accessible in the repository network even after a fork is deleted. +* Organization owners of a repository that has been forked have read permission to forks created in organizations, but do not have the ability to delete the fork or its branches. +* Forks created in another organization will not be deleted when individual access is removed from the upstream repository. +* Commits to any repository in a network can be accessed from any repository in the same network, including the upstream repository, even after a fork is deleted. Before allowing forks for sensitive work, review the permissions and visibility model for your repository or organization. diff --git a/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets.md b/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets.md index 8866e5313c2d..7d357280a53f 100644 --- a/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets.md +++ b/content/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/available-rules-for-rulesets.md @@ -211,6 +211,24 @@ Enabling force pushes will not override any other rules. For example, if a branc If a site administrator has blocked force pushes to the default branch only, you can still enable force pushes for any other branch or tag.{% endif %} +{% ifversion secret-scanning-merge-protection %} + +## Require {% data variables.product.prodname_secret_scanning %} alerts are resolved + +> [!NOTE] +> {% data reusables.secret-scanning.merge-protection-public-preview %} + +If your repositories use {% data variables.product.prodname_secret_scanning %}, you can prevent a pull request from merging when either of these conditions applies: + +* A {% data variables.product.prodname_secret_scanning %} scan has not completed for the head commit of the pull request. +* A commit in the pull request introduced an open {% data variables.product.prodname_secret_scanning %} alert that matches a secret type selected in the ruleset. + +You can configure the rule for provider, custom, and generic patterns. AI-detected secrets are not supported. + +For more information, see [AUTOTITLE](/code-security/how-tos/secure-your-secrets/prevent-future-leaks/block-merges-with-secrets). + +{% endif %} + ## Require {% data variables.product.prodname_code_scanning %} results If your repositories are configured with {% data variables.product.prodname_code_scanning %}, you can use rulesets to prevent pull requests from being merged when one of the following conditions is met: diff --git a/content/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository.md b/content/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository.md index 6ab5d995e479..f5c4e7ff7046 100644 --- a/content/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository.md +++ b/content/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository.md @@ -205,15 +205,17 @@ For more information about cache eviction, see [AUTOTITLE](/actions/reference/wo {% endif %} -## Configuring the retention period for {% data variables.product.prodname_actions %} artifacts and logs in your repository + + +## Configuring the retention period for checks, workflow runs, commit statuses, artifacts, and logs in your repository -You can configure the retention period for {% data variables.product.prodname_actions %} artifacts and logs in your repository. +You can configure the retention period for checks, workflow runs, commit statuses, artifacts, and logs in your repository. {% data reusables.actions.about-artifact-log-retention %} You can also define a custom retention period for a specific artifact created by a workflow. For more information, see [AUTOTITLE](/actions/how-tos/manage-workflow-runs/remove-workflow-artifacts#setting-the-retention-period-for-an-artifact). -## Setting the Artifact and Log retention period for a repository +## Setting the check, workflow run, status, artifact and log retention period for a repository {% data reusables.repositories.navigate-to-repo %} {% data reusables.repositories.sidebar-settings %} diff --git a/content/rest/code-scanning/index.md b/content/rest/code-scanning/index.md index e80ddeefbd22..27c259e57984 100644 --- a/content/rest/code-scanning/index.md +++ b/content/rest/code-scanning/index.md @@ -13,6 +13,8 @@ children: - /alert-dismissal-requests - /code-scanning autogenerated: rest +redirect_from: + - /rest/code-scanning/ai-scan --- diff --git a/content/rest/copilot/copilot-usage-metrics.md b/content/rest/copilot/copilot-usage-metrics.md index 32600910d522..d831754070bc 100644 --- a/content/rest/copilot/copilot-usage-metrics.md +++ b/content/rest/copilot/copilot-usage-metrics.md @@ -20,4 +20,6 @@ To enable these endpoints, the "{% data variables.product.prodname_copilot_short For more information on the metrics returned by these endpoints, see [AUTOTITLE](/copilot/reference/copilot-usage-metrics). +For help understanding gaps or discrepancies in {% data variables.product.prodname_copilot_short %} usage data, see [AUTOTITLE](/copilot/reference/copilot-usage-metrics/reconciling-usage-metrics). + diff --git a/content/rest/using-the-rest-api/github-event-types.md b/content/rest/using-the-rest-api/github-event-types.md index 949b6342ff49..50e88747582b 100644 --- a/content/rest/using-the-rest-api/github-event-types.md +++ b/content/rest/using-the-rest-api/github-event-types.md @@ -89,7 +89,7 @@ Link: ; rel="next", "gravatar_id": "", "url": "https://api.github.com/orgs/github", "avatar_url": "https://github.com/images/error/octocat_happy.gif" - }, + } } ] ``` diff --git a/data/features/actions-cache-mode.yml b/data/features/actions-cache-mode.yml new file mode 100644 index 000000000000..d505972bf131 --- /dev/null +++ b/data/features/actions-cache-mode.yml @@ -0,0 +1,6 @@ +# Documentation for the `cache-mode` workflow key, which controls least-privilege +# cache access for GitHub Actions jobs and reusable workflows. +# This feature is dotcom-only and is not available on GitHub Enterprise Server. +versions: + fpt: '*' + ghec: '*' diff --git a/data/features/org-automatic-registry-access.yml b/data/features/org-automatic-registry-access.yml new file mode 100644 index 000000000000..458473d9b3f0 --- /dev/null +++ b/data/features/org-automatic-registry-access.yml @@ -0,0 +1,6 @@ +# Reference: #22447 +# Automatic Dependabot access to GitHub-hosted registries [GA] +versions: + fpt: '*' + ghec: '*' + ghes: '>=3.23' diff --git a/data/features/secret-scanning-merge-protection.yml b/data/features/secret-scanning-merge-protection.yml new file mode 100644 index 000000000000..b49bf679fff2 --- /dev/null +++ b/data/features/secret-scanning-merge-protection.yml @@ -0,0 +1,7 @@ +# Reference: https://github.com/github/docs-content/issues/24116 +# Public preview for requiring secret scanning alerts to be resolved before merging + +versions: + fpt: '*' + ghec: '*' + ghes: '>=3.24' diff --git a/data/features/security-configuration-enterprise-organization-enforcement.yml b/data/features/security-configuration-enterprise-organization-enforcement.yml new file mode 100644 index 000000000000..ebd86bd49801 --- /dev/null +++ b/data/features/security-configuration-enterprise-organization-enforcement.yml @@ -0,0 +1,5 @@ +# Reference: github/releases#9912 +# Enterprise security configuration enforcement for organization owners +versions: + ghec: '*' + ghes: '>=3.24' diff --git a/data/features/spark.yml b/data/features/spark.yml deleted file mode 100644 index f6715c0d95ba..000000000000 --- a/data/features/spark.yml +++ /dev/null @@ -1,5 +0,0 @@ -# Reference: #17636 -# Spark (No-code app builder, public preview) -versions: - fpt: '*' - ghec: '*' diff --git a/data/release-notes/enterprise-server/3-22/0-rc1.yml b/data/release-notes/enterprise-server/3-22/0-rc1.yml index bef5f4aaab9c..5336109f64f6 100644 --- a/data/release-notes/enterprise-server/3-22/0-rc1.yml +++ b/data/release-notes/enterprise-server/3-22/0-rc1.yml @@ -1,6 +1,6 @@ date: '2026-08-11' release_candidate: true -deprecated: false +deprecated: true intro: | > [!NOTE] Release candidate (RC) builds are intended solely for use in a test environment. Do not install an RC in a production environment. > diff --git a/data/release-notes/enterprise-server/3-22/0.yml b/data/release-notes/enterprise-server/3-22/0.yml new file mode 100644 index 000000000000..c0a147589272 --- /dev/null +++ b/data/release-notes/enterprise-server/3-22/0.yml @@ -0,0 +1,273 @@ +date: '2026-09-08' +release_candidate: false +deprecated: false +intro: | +sections: + + features: + - heading: Instance administration + notes: + # https://github.com/github/releases/issues/10237 + - | + Phased upgrade execution gives you better control over downtime-inducing actions by isolating those actions to their own phase. You can now run the pre-upgrade stage of an upgrade outside the maintenance window using `ghe-upgrade --phase pre-upgrade -y UPGRADE-PACKAGE-FILENAME`. Running the pre-upgrade stage in advance can reduce in-maintenance upgrade time by up to 20 minutes. For more information, see [AUTOTITLE](/admin/upgrading-your-instance/performing-an-upgrade/upgrading-with-an-upgrade-package#upgrading-an-instance-using-phased-upgrade-execution). + # https://github.com/github/releases/issues/10384 + - | + Replication operations such as starting and stopping replication and Config Apply are less dependent on each other, reducing runtime and the risk of unrelated component failures. A new replication controller service is introduced, and it manages data replication by monitoring the desired state of the system and reconciling replication configuration for Git, Pages, storage, MySQL, Elasticsearch, GitHooks, and Redis. This is an internal change, and there is no other documentation. + # https://github.com/github/releases/issues/4841 + - | + The Enterprise Live Migrations (ELM) service is generally available, allowing enterprises to migrate repositories from GitHub Enterprise Server to GHE.com with minimal downtime. A new GitHub CLI extension allows administrators to operate the service from their local machine. See [AUTOTITLE](/migrations/elm/about-live-migrations). + + - heading: Copilot + notes: + # https://github.com/github/releases/issues/10164 + - | + {% data variables.copilot.copilot_cli_short %} can be configured to work with {% data variables.product.prodname_ghe_server %} for enterprises that operate in disconnected or air-gapped environments without connectivity to {% data variables.product.prodname_ghe_cloud %}. An administrator can configure a model provider once in {% data variables.product.prodname_ghe_server %}, and end users across the enterprise can use {% data variables.copilot.copilot_cli_short %} with their {% data variables.product.prodname_ghe_server %} credentials. This capability is in {% data variables.release-phases.technical_preview %} and subject to change. See [AUTOTITLE](/admin/github-copilot/copilot-cli/set-up-and-use-copilot-cli). + + - heading: Identity and access management + notes: + # https://github.com/github/releases/issues/6636 + - | + Enterprise Teams, previously in public preview, is now generally available. Enterprise owners can use Enterprise Teams to manage users and their access across the entire enterprise, including organizations and repositories, from a single, centralized team structure. This reduces the operational overhead of managing user access across multiple organizations within an enterprise. + + - heading: GitHub Advanced Security + notes: + # https://github.com/github/releases/issues/9195 + - | + Security analysts can now sort {% data variables.product.prodname_secret_scanning %} push protection bypass requests and {% data variables.product.prodname_secret_scanning %} alert dismissal requests by date, in ascending or descending order, using the filter bar at the repository, organization, and enterprise levels. Previously, sort order for these requests could not be adjusted, which made it difficult for teams managing high volumes of requests to prioritize their review. For more information, see [AUTOTITLE](/code-security/secret-scanning/managing-alerts-from-secret-scanning). + # https://github.com/github/releases/issues/9186 + - | + Organization owners can now enable periodic {% data variables.product.prodname_code_scanning %} of repositories that have been inactive (no commits) for 180 days or more. Previously, {% data variables.product.prodname_code_scanning %} with its default setup stopped scanning repositories after 180 days of inactivity. This option helps organizations that need to scan all repositories periodically for compliance reasons. For details, see the [changelog](https://github.blog/changelog/2026-06-09-periodic-code-scanning-of-inactive-repositories/). + # https://github.com/github/releases/issues/9170 + - | + This release comes installed with {% data variables.product.prodname_codeql %} 2.25.6. Significant updates since the previous version include: + + * {% data variables.product.prodname_codeql %} can analyze projects using Swift up to 6.3.2. + * Users working with Kotlin can analyze projects using Kotlin up to 2.3.20. + * {% data variables.product.prodname_codeql %} now has full support for C# 14 and .NET 10, including partial constructors, user-defined compound assignment operators, and generated data flow models for the .NET 10 runtime. Expanded ASP.NET remote source modeling improves detection of taint flows in ASP.NET applications. + * The Python extractor supports the new lazy import syntax defined in PEP-810 (Python 3.15). + * The Java control flow graph has been completely rewritten for improved analysis precision, and false positives have been reduced across multiple queries including path injection, sensitive logging, and trust boundary violation. + * Five C/C++ queries have been promoted to the default {% data variables.product.prodname_code_scanning %} query suite, and taint flow models have been added for the Windows SDK (`Strsafe.h` and `scanf_s`). + * Security queries for JavaScript/TypeScript now detect vulnerabilities in Vercel serverless functions, and new browser-specific source kinds are available for data extensions. + * {% data variables.product.prodname_actions %} analysis has been expanded to cover composite action metadata files, with improved detection for artifact poisoning and untrusted checkout scenarios. + * Users can now add custom data flow barriers and sanitizer models using data extensions across all supported languages, making it easier to suppress false positives without modifying queries directly. + * Security severity scores have been realigned across multiple languages, increasing XSS query scores and reducing log injection scores to better reflect actual impact. + * Read more in the changelogs for the {% data variables.product.prodname_codeql %} versions included in this release: + + * [{% data variables.product.prodname_codeql %} 2.25.0](https://codeql.github.com/docs/codeql-overview/codeql-changelog/codeql-cli-2.25.0/) + * [{% data variables.product.prodname_codeql %} 2.25.2](https://codeql.github.com/docs/codeql-overview/codeql-changelog/codeql-cli-2.25.2/) + * [{% data variables.product.prodname_codeql %} 2.25.3](https://codeql.github.com/docs/codeql-overview/codeql-changelog/codeql-cli-2.25.3/) + * [{% data variables.product.prodname_codeql %} 2.25.4](https://codeql.github.com/docs/codeql-overview/codeql-changelog/codeql-cli-2.25.4/) + * [{% data variables.product.prodname_codeql %} 2.25.5](https://codeql.github.com/docs/codeql-overview/codeql-changelog/codeql-cli-2.25.5/) + * [{% data variables.product.prodname_codeql %} 2.25.6](https://codeql.github.com/docs/codeql-overview/codeql-changelog/codeql-cli-2.25.6/) + # https://github.com/github/releases/issues/8388 + # https://github.com/github/releases/issues/7049 + # https://github.com/github/releases/issues/6749 + - | + {% data variables.product.prodname_code_scanning_caps %} with {% data variables.product.prodname_codeql %} now performs incremental analysis for pull requests in C/C++, Go, Python, JavaScript, TypeScript, Ruby, and Java repositories. By performing incremental extraction and evaluation, {% data variables.product.prodname_codeql %} analyzes only the code that changed instead of re-scanning the entire codebase, significantly reducing scan duration—with early results showing improvements between 2x and 10x. This gives developers faster feedback on pull requests, helping teams identify and remediate vulnerabilities more quickly without slowing down development. For details, see the changelogs for [C/C++ and Go](https://github.blog/changelog/2026-06-10-incremental-analysis-for-go-c-c-and-codeql-cli/) and [Ruby and Java](https://github.blog/changelog/2026-03-24-faster-incremental-analysis-with-codeql-in-pull-requests/). + # https://github.com/github/releases/issues/8427 + - | + Security managers can now use a standardized filter bar to search and filter delegated bypass requests in Security Overview, providing a consistent filtering experience across bypass views. For details, see the [changelog](https://github.blog/changelog/2026-04-16-rule-insights-dashboard-and-unified-filter-bar/). + # https://github.com/github/releases/issues/8235 + - | + Repository administrators can now exempt trusted automation, such as migration bots and service accounts, from {% data variables.product.prodname_secret_scanning %} push protection at the repository level. This allows high-volume automated pushes to proceed without push protection friction, while enforcement remains in place for all other contributors. Exemptions can also be configured at the organization and enterprise level, and exemption status is evaluated at the time of each push. For more information, see [AUTOTITLE](/code-security/how-tos/secure-your-secrets/manage-bypass-requests/grant-exemptions). + # https://github.com/github/releases/issues/7786 + - | + Enterprise owners can now disable {% data variables.product.prodname_GH_advanced_security %} for all private and internal repositories directly from the Enterprise licensing page. Disabling {% data variables.product.prodname_GH_advanced_security %} this way also sets a policy that prevents future paid adoption of {% data variables.product.prodname_GH_advanced_security %}, helping to avoid unexpected billing or accidental re-enablement. + # https://github.com/github/releases/issues/7616 + - | + Developers and security teams can now set a custom, user-defined validity state for {% data variables.secret-scanning.alerts %} created from custom patterns using the REST API. Sending a `PATCH` request to update an alert now accepts a `validity` value of `active`, `inactive`, or `unknown`, and sending `null` clears any existing user-defined override. When a user manually sets validity, the alert's `GET` response includes a new `validity_set_by` field identifying who set it. + + This provides teams with more flexibility to prioritize and track {% data variables.secret-scanning.alerts %} programmatically, including custom pattern and partner alerts where {% data variables.product.github %} cannot automatically determine validity. For more information, see [AUTOTITLE](/rest/secret-scanning/secret-scanning). For details, see the [changelog](https://github.blog/changelog/2026-04-14-secret-scanning-pattern-updates-and-product-improvements/). + # https://github.com/github/releases/issues/7023 + - | + Organization owners and security managers can enable {% data variables.product.prodname_GH_advanced_security %} features more easily with a new wizard-style setup dialog on the security configurations page. The guided experience lets users choose which security products to enable and where to apply them, and first-time users see a setup splash page that opens the wizard. This makes it simpler for users who are less familiar with {% data variables.product.prodname_GH_advanced_security %} to complete setup. For more information, see [AUTOTITLE](/code-security/how-tos/secure-at-scale/configure-organization-security). For details, see the [changelog](https://github.blog/changelog/2026-03-17-github-advanced-security-setup-made-simple/). + # https://github.com/github/releases/issues/7022 + - | + Developers and security teams can now link {% data variables.product.prodname_code_scanning %} alerts to {% data variables.product.prodname_github_issues %}, making it easier to collaborate on and track remediation work directly within {% data variables.product.github %}. This closes the traceability gap that occurs when switching between {% data variables.product.github %} and external work tracking tools. This feature is in public preview and subject to change. For details, see the [changelog](https://github.blog/changelog/2026-04-14-link-code-scanning-alerts-to-github-issues/). + # https://github.com/github/releases/issues/5239 + - | + Security Overview now displays {% data variables.product.prodname_code_scanning %} {% data variables.product.prodname_codeql %} alerts from pull request analysis for branches other than the default branch. Previously, Security Overview only reported alerts and autofix statistics for the default branch, which meant alert counts did not reflect the full scope of protected branches. Site administrators and security teams can now see a more complete picture of {% data variables.product.prodname_code_scanning %} coverage across all protected branches. + + - heading: Dependabot + notes: + # https://github.com/github/releases/issues/8654 + - | + Organization owners can now configure OpenID Connect (OIDC) for private registries used by {% data variables.product.prodname_dependabot %} and {% data variables.product.prodname_code_scanning %} directly from the organization settings UI, rather than needing to configure OIDC in each repository's `dependabot.yml` file. This simplifies enabling secure, tokenless authentication to private package registries across all repositories in an organization. For more information, see [AUTOTITLE](/code-security/dependabot/working-with-dependabot/configuring-access-to-private-registries-for-dependabot#configuring-access-to-a-private-registry-in-your-organization). + # https://github.com/github/releases/issues/8602 + - | + Organizations can now configure multiple private registries per ecosystem for {% data variables.product.prodname_dependabot %}, removing the previous limitation of one registry per ecosystem type. This allows organizations with multiple private package sources for the same ecosystem, such as two separate NuGet feeds, to register all of their private feeds and have {% data variables.product.prodname_dependabot %} authenticate against each one correctly, including when multiple registries share the same host. + # https://github.com/github/releases/issues/8600 + - | + Developers using Deno can now receive {% data variables.product.prodname_dependabot_version_updates %} for their Deno projects. {% data variables.product.prodname_dependabot %} detects Deno dependency manifests and opens pull requests to keep dependencies up to date. For more information, see [AUTOTITLE](/code-security/reference/supply-chain-security/supported-ecosystems-and-repositories). + # https://github.com/github/releases/issues/8598 + - | + Developers can now receive {% data variables.product.prodname_dependabot_version_updates %} for projects that use sbt as their build tool. This expands {% data variables.product.prodname_dependabot %}'s version update support to teams working with Scala projects managed by sbt. For details, see the [changelog](https://github.blog/changelog/2026-05-26-dependabot-version-updates-now-support-the-sbt-ecosystem/). + # https://github.com/github/releases/issues/8596 + - | + {% data variables.product.prodname_dependabot %} now supports Poetry v2 for version and security updates, allowing users of Poetry v2 to receive {% data variables.product.prodname_dependabot_alerts %} and pull requests to keep their dependencies up to date and secure. + # https://github.com/github/releases/issues/8588 + - | + Enterprise owners can allow {% data variables.product.prodname_dependabot %} to access internal and private repositories across organizations within the same enterprise. This enterprise-level setting lets {% data variables.product.prodname_dependabot %} update jobs in one organization resolve dependencies hosted in internal or private repositories of another organization, extending innersource dependency management beyond single-organization boundaries. Cross-organization access events are fully covered in the audit log. For details, see the [changelog](https://github.blog/changelog/2026-04-28-cross-org-dependabot-access-for-internal-repositories/). + # https://github.com/github/releases/issues/8489 + - | + {% data variables.product.prodname_dependabot %} now supports the Nix ecosystem, enabling automated dependency updates for projects that use Nix Flakes for dependency management. Previously, Nix dependencies appeared as an "unknown" ecosystem with a generic icon on the {% data variables.product.prodname_dependabot %} settings page. Now, Nix is correctly recognized and visually identifiable, bringing it to parity with other supported ecosystems. For details, see the [changelog](https://github.blog/changelog/2026-04-07-dependabot-version-updates-now-support-the-nix-ecosystem/). + # https://github.com/github/releases/issues/8116 + - | + Developers using Swift packages in Xcode projects can now get automated dependency updates from {% data variables.product.prodname_dependabot %}, even when their project doesn't include a standalone `Package.swift` file. {% data variables.product.prodname_dependabot %} now discovers and updates Swift package dependencies in Xcode projects that use `.xcodeproj` manifests with `Package.resolved` files. For more information, see [AUTOTITLE](/code-security/dependabot/ecosystems-supported-by-dependabot/supported-ecosystems-and-repositories). + # https://github.com/github/releases/issues/7255 + - | + {% data variables.product.prodname_dependabot %} now detects and alerts on known malicious package versions, starting with npm packages and expanding to additional ecosystems over time. Previously, users had little to no signal from {% data variables.product.github %} when a dependency was compromised by a supply chain attack, making it difficult to identify and remediate malware quickly. With this release, repositories that depend on packages identified as malware receive proactive {% data variables.product.prodname_dependabot_alerts %}, helping administrators and developers respond faster to targeted attacks. For details, see the [changelog](https://github.blog/changelog/2026-03-17-dependabot-now-detects-malware-in-npm-dependencies/). + + - heading: GitHub Actions + notes: + # https://github.com/github/releases/issues/7396 + - | + Maintainers can now suppress "Run cancelled" notifications while still receiving "Run failed" notifications for their {% data variables.product.prodname_actions %} workflows. This gives users more control over the notifications they receive when manually cancelling a workflow run. + # https://github.com/github/releases/issues/7096 + - | + {% data variables.product.prodname_actions_runner_controller %} (ARC) now supports multiple labels for a single scale set. Previously, ARC supported only one label per scale set, which forced enterprises to create multiple scale sets to cover overlapping configurations, leading to operational complexity and inefficient resource utilization. With multi-label support, administrators can target runners based on combined attributes, such as operating system, hardware tier, compliance zone, and network configuration, within a single scale set. This reduces the number of redundant scale sets, improves utilization, and preserves backward compatibility with existing single-label configurations. + # https://github.com/github/releases/issues/7068 + - | + {% data variables.product.prodname_actions_runner_controller %} (ARC) 0.14.0 delivers quality-of-life improvements that reduce operational complexity for users running self-hosted runners on Kubernetes. This release includes refined Helm charts for easier Docker configuration, improved logging for better troubleshooting, updated metrics aligned with recent platform availability initiatives, and formalized versioning requirements for ARC. For more information, see [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/about-actions-runner-controller). + # https://github.com/github/releases/issues/7066 + - | + Developers can now specify a timezone when scheduling workflows with the `cron` syntax, allowing scheduled workflow runs to be localized to a specific timezone instead of only UTC. This feature is in public preview and subject to change. + + - heading: Community experience + notes: + # https://github.com/github/releases/issues/7270 + - | + Users can sort their notifications from oldest to newest, in addition to the default newest to oldest order, using a new sort dropdown on the notifications page. This helps users who manage large volumes of notifications process their backlog chronologically, making it easier to catch up after vacations, events, or periods of high activity. For more information, see [AUTOTITLE](/account-and-profile/managing-subscriptions-and-notifications-on-github/setting-up-notifications/about-notifications). + + - heading: Organizations + notes: + # https://github.com/github/releases/issues/8680 + - | + Organization owners can disable commit comments for all repositories in an organization at once, instead of disabling commit comments repository by repository. This makes it easier for organizations with many repositories to control commenting on commits at scale. For details, see the [changelog](https://github.blog/changelog/2026-04-23-disable-commit-comments-across-your-organization/). + + - heading: Repositories + notes: + # https://github.com/github/releases/issues/8431 + - | + Repository administrators can now rename default branches that are protected by an organization ruleset. Previously, only organization owners could rename these branches. For more information, see [AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch). + # https://github.com/github/releases/issues/8429 + - | + Repository and organization rulesets now support bypassing by individual users, in addition to roles, teams, and apps. This gives administrators more granular control over rule bypass permissions, such as adding a service account to a bypass list without needing to create a dedicated role or team. + # https://github.com/github/releases/issues/7902 + - | + Repository administrators and maintainers can now delete commit comments. Previously, commit comments could not be removed, which allowed spam and abusive comments to persist in repositories. This gives maintainers another tool to reduce spam and unwanted content. For details, see the [changelog](https://github.blog/changelog/2026-03-25-disable-comments-on-individual-commits/). + # https://github.com/github/releases/issues/7340 + - | + Organization owners and repository administrators can require specific reviewers for pull requests targeting a given branch by adding a required reviewers rule to a repository ruleset. This provides more granular control over code ownership than a single `CODEOWNERS` file, which is difficult to scale for large organizations or monorepos. For example, administrators can require QA reviewers on a release branch, security team members on the default branch, or product and design reviewers on feature branches, including setting the minimum number of required reviews per team. + # https://github.com/github/releases/issues/6784 + - | + Developers can find and organize their repositories more efficiently using the new repositories dashboard at `/repos`. The dashboard displays a developer's most active repositories and allows them to create saved views for quick access to the repositories they use most. This gives developers a centralized page for tracking their work and streamlining their workflows. For details, see the [changelog](https://github.blog/changelog/2026-02-24-repository-dashboard-is-now-generally-available/). + + - heading: Issues + notes: + # https://github.com/github/releases/issues/8570 + - | + Developers can now see release status directly in the issue sidebar. When a linked pull request has been included in a release, the sidebar displays a "Latest" or "Pre-release" badge, making it easy to tell whether a fix has shipped without leaving the issue. For details, see the [changelog](https://github.blog/changelog/2026-04-09-release-info-in-issue-sidebar-and-project-defaults/). + + - heading: Projects + notes: + # https://github.com/github/releases/issues/8570 + - | + Project maintainers can set default values for text, number, and single select fields. When an item is added to a project, these fields are automatically populated with the configured default, reducing repetitive manual data entry. For details, see the [changelog](https://github.blog/changelog/2026-04-09-release-info-in-issue-sidebar-and-project-defaults/). + + - heading: Commits + notes: + # https://github.com/github/releases/issues/8943 + - | + Users can now disable commit comments at the user level, in addition to the existing repository and organization level controls. This is especially useful for the small percentage of users who own more than 100 public repositories, allowing them to manage commit comment settings across all of their repositories from a single location. + + - heading: Pull requests + notes: + # https://github.com/github/releases/issues/8566 + - | + Maintainers can now see contributor role labels, such as "First-time contributor," "Contributor," and "Member," directly in the pull request list view for public repositories. This gives maintainers at-a-glance context about each author's relationship to the repository without needing to open individual pull requests to check the comment box for this information. For details, see the [changelog](https://github.blog/changelog/2026-04-09-repository-member-role-labels-now-in-pull-request-list-view/). + + changes: + # https://github.com/github/ghes/issues/18667 + - | + Starting in version 3.20, we have reserved the `/repos` path for a forthcoming product feature. If you currently use `/repos` for a route (for example, a username, organization name, a {% data variables.product.prodname_github_app %}, {% data variables.product.prodname_oauth_app %}, reverse proxy, or internal integration), you may need to update your configuration to avoid routing conflicts. Starting in 3.22, the `/repos` path will show new functionality. + # https://github.com/github/github/issues/446559 + - | + {% data variables.product.prodname_ghe_server %} now uses fewer CPU resources when serving REST and GraphQL API requests by skipping unused MySQL query backtrace collection. + + known_issues: + # Known issues from "GHES Release Note Tracking" project + - | + During an upgrade of {% data variables.product.prodname_ghe_server %}, custom firewall rules are removed. If you use custom firewall rules, you must reapply them after upgrading. + - | + During the validation phase of a configuration run, a `No such object` error may occur for the Notebook and Viewscreen services. This error can be ignored as the services should still correctly start. + - | + If the root site administrator is locked out of the {% data variables.enterprise.management_console %} after failed login attempts, the account does not unlock automatically after the defined lockout time. Someone with administrative SSH access to the instance must unlock the account using the administrative shell. For more information, see [Troubleshooting access to the {% data variables.enterprise.management_console %}](/admin/administering-your-instance/administering-your-instance-from-the-web-ui/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Admin stats REST API endpoints may time out on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + When following the steps for [Replacing the primary MySQL node](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-the-primary-mysql-node), step 14 (running `ghe-cluster-config-apply`) might fail with errors. If this occurs, re-running `ghe-cluster-config-apply` is expected to succeed. + - | + Running a config apply as part of the steps for [Replacing a node in an emergency](/admin/monitoring-managing-and-updating-your-instance/configuring-clustering/replacing-a-cluster-node#replacing-a-node-in-an-emergency) may fail with errors if the node being replaced is still reachable. If this occurs, shut down the node and repeat the steps. + - | + When restoring data originally backed up from a 3.13 or greater appliance version, the Elasticsearch indices need to be reindexed before some of the data will show up. This happens via a nightly scheduled job. It can also be forced by running `/usr/local/share/enterprise/ghe-es-search-repair`. + - | + When initializing a new GHES cluster, nodes with the `consul-server` role should be added to the cluster before adding additional nodes. Adding all nodes simultaneously creates a race condition between nomad server registration and nomad client registration. + - | + In a cluster, the host running restore requires access to the storage nodes via their private IPs. + - | + On an instance hosted on Azure, commenting on an issue via email meant the comment was not added to the issue. + - | + After a restore, existing outside collaborators cannot be added to repositories in a new organization. This issue can be resolved by running `/usr/local/share/enterprise/ghe-es-search-repair` on the appliance. + - | + After a geo-replica is promoted to be a primary by running `ghe-repl-promote`, the actions workflow of a repository does not have any suggested workflows. + - | + When publishing npm packages in a workflow after restoring from a backup to {% data variables.product.prodname_ghe_server %} 3.13.5.gm4 or 3.14.2.gm3, you may encounter a `401 Unauthorized` error from the {% data variables.product.prodname_registry %} service. This can happen if the restore is from an N-1 or N-2 version and the workflow targets the npm endpoint on the backup instance. To avoid this issue, ensure the access token is valid and includes the correct scopes for publishing to {% data variables.product.prodname_registry %}. + - | + When applying an enterprise security configuration to all repositories (for example, enabling {% data variables.product.prodname_secret_scanning_caps %} or {% data variables.product.prodname_code_scanning_caps %} across all repositories), the system immediately enqueues enablement jobs for every organization in the enterprise simultaneously. For enterprises with a large number of repositories, this can result in significant system load and potential performance degradation. If you manage a large enterprise with many organizations and repositories, we recommend applying security configurations at the organization level rather than at the enterprise level in the UI. This allows you to enable security features incrementally and monitor system performance as you roll out changes. + - | + On instances with multiple Git storage nodes in a voting configuration, including cluster and geo-replication high availability topologies, upgrading may fail to correctly install Actions that ship with the new version. In some cases, previous versions of these Actions remain on the instance. To resolve this issue, run the following commands on the primary node: `ghe-config --unset 'app.actions.actions-repos-sha1sum'`, `ghe-config-apply`, and `/usr/local/share/enterprise/ghe-run-init-actions-graph`. + - | + When booting a cluster in Terraform-based environments, node names may appear unidentifiable in cluster status output. + - | + In cluster HA environments, `ghe-cluster-repl-status` may report inconsistent Spokes or Storage status after running `ghe-cluster-repl-bootstrap` or `ghe-cluster-repl-teardown`. + - | + In some cases, pull requests using auto-merge or merge queue may not merge automatically until mergeability is recalculated. + - | + After upgrading to {% data variables.product.prodname_ghe_server %} 3.22, scheduled {% data variables.product.prodname_dependabot_version_updates %} may stop running for pre-existing configurations. If you have already upgraded and want to trigger scheduled version updates, save a change to each affected repository's `.github/dependabot.yml` file. + - | + When restoring an instance with `ghe-restore` while the replication controller is enabled, the storage directory is not restored. + - | + In clustered {% data variables.product.prodname_ghe_server %} environments, nodes that remain in the cluster after losing the `git-server`, `pages-server`, or `storage-server` role may stay online and remain eligible to vote in the corresponding replication tables. Review the replication state for each role, and contact {% data variables.contact.github_support %} if stale rows affect replication. + - | + On a newly booted {% data variables.product.prodname_ghe_server %} instance, the merge box on a newly created pull request can stay on "Checking for the ability to merge automatically" and not show the merge status. If encountered, refreshing the page shows the correct merge status. + + closing_down: + # https://github.com/github/releases/issues/9775 + - | + {% data variables.product.prodname_nes %}, introduced for cluster topologies and gated by the app.nes.enabled feature flag, is closing down in {% data variables.product.prodname_ghe_server %} 3.22 and will be removed in {% data variables.product.prodname_ghe_server %} 3.23. There is no replacement; cluster administrators do not need to take any action. If you previously enabled the `app.nes.enabled` flag, you can disable it now with `ghe-config app.nes.enabled false && ghe-config-apply`. In 3.22, a closing down warning will appear during `ghe-config-apply` if the flag is set to true. {% data variables.product.prodname_nes %} will continue to function in 3.22, but we recommend planning to stop using it before upgrading to 3.23. + # https://github.com/github/releases/issues/7068 + - | + With the release of {% data variables.product.prodname_actions_runner_controller %} (ARC) 0.14.0, {% data variables.product.github %} has officially announced the closing down of legacy ARC. Users still running legacy ARC versions should migrate to the latest ARC release to continue receiving critical improvements and observability features. For more information, see [AUTOTITLE](/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/about-actions-runner-controller). + # https://github.com/github/releases/issues/8875 + - | + Collectd metrics will be retired starting in version 3.23. There won't be a Collectd metrics stack in 3.23. We will continue to support the Collectd stack in 3.22 and earlier versions during their respective support windows. For more information, see [AUTOTITLE](/admin/monitoring-and-managing-your-instance/monitoring-your-instance/collectd-metrics/about-collectd-metrics). + # https://github.com/github/ghes/issues/18667 + - | + With the release of `2026-03-10`, the `2022-11-28` version has entered its closing down period and will be retired in the next enterprise server release after `2028-03-10`. We recommend planning your migration ahead of this date to avoid any disruption. For more information, see [AUTOTITLE](/rest/about-the-rest-api/api-versions). + + retired: + # https://github.com/github/releases/issues/8843 + - | + The `code_scanning_upload` field is no longer included in the response from the `rate_limit` REST API endpoint. This field displayed a separate rate limit value that was actually joined with the `core` rate limit, which caused confusion for users. Removing the field simplifies the `rate_limit` endpoint response and provides a clearer picture of the rate limits that apply. + # https://github.com/github/releases/issues/7795 + - | + The `*_enabled_for_new_repositories` fields are removed from the REST API for organizations, including `advanced_security_enabled_for_new_repositories`, `dependabot_alerts_enabled_for_new_repositories`, `dependabot_security_updates_enabled_for_new_repositories`, `dependency_graph_enabled_for_new_repositories`, `secret_scanning_enabled_for_new_repositories`, `secret_scanning_push_protection_enabled_for_new_repositories`, and `secret_scanning_validity_checks_enabled`. Use the {% data variables.product.prodname_code_scanning %} configurations API to manage security feature enablement for new repositories instead. For more information, see [AUTOTITLE](/rest/orgs/security-managers). + # https://github.com/github/releases/issues/7806 + - | + Starting in 3.22, high availability replication for cluster topologies has been retired. You will no longer be able to configure or use the feature, and the supporting code will be removed from the product. + # https://github.com/github/releases/issues/6651 + - | + Starting in 3.22, networking-related syscalls will be disabled by default in the pre-receive hook environment. For enhanced security, hook environments will be placed in dedicated network namespaces. You will be able to override the default setting by setting pre-receive-hook-networking to enabled. In many cases, push rulesets are an alternative for many pre-receive hooks. For more information, see [AUTOTITLE](/enterprise-server@3.22/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets#push-rulesets). diff --git a/data/reusables/actions/about-artifact-log-retention.md b/data/reusables/actions/about-artifact-log-retention.md index cf8d84262190..0ffac7e790bd 100644 --- a/data/reusables/actions/about-artifact-log-retention.md +++ b/data/reusables/actions/about-artifact-log-retention.md @@ -1,6 +1,15 @@ -By default, the artifacts and log files generated by workflows are retained for 90 days before they are automatically deleted. +By default, checks, workflow runs, commit statuses, and the artifacts and log files generated by workflows are retained for 90 days before they are automatically deleted. -{%- ifversion fpt or ghec %} +{% ifversion fpt or ghec %} + +> [!IMPORTANT] +> Starting October 1, 2026, these policies will apply to checks, workflow runs, and commit statuses in addition to artifacts and logs. Until then, checks, workflow runs, and commit statuses are retained for 400+ days regardless of your configured retention period. Make sure to review your retention setting and make any adjustments before October 1. For more information, see [the {% data variables.product.company_short %} changelog](https://github.blog/changelog/2026-07-17-actions-retention-will-cover-checks-workflow-runs-and-statuses/). + +{% endif %} + +{% data reusables.actions.checks-and-statuses-retention-scope %} + +{% ifversion fpt or ghec %} You can adjust the retention period, depending on the type of repository: * For public repositories: you can change this retention period to anywhere between 1 day or 90 days. @@ -9,4 +18,4 @@ You can adjust the retention period, depending on the type of repository: You can change this retention period to anywhere between 1 day or 400 days. {%- endif %} -When you customize the retention period, it only applies to new artifacts and log files, and does not retroactively apply to existing objects. For managed repositories and organizations, the maximum retention period cannot exceed the limit set by the managing organization or enterprise. +When you customize the retention period, it only applies to new checks, workflow runs, commit statuses, artifacts, and log files, and does not retroactively apply to existing objects. For managed repositories and organizations, the maximum retention period cannot exceed the limit set by the managing organization or enterprise. diff --git a/data/reusables/actions/change-retention-period-for-artifacts-logs.md b/data/reusables/actions/change-retention-period-for-artifacts-logs.md index afb53f1d9626..109b9e9863ea 100644 --- a/data/reusables/actions/change-retention-period-for-artifacts-logs.md +++ b/data/reusables/actions/change-retention-period-for-artifacts-logs.md @@ -1,2 +1,2 @@ -1. {% ifversion ghes %}In the "Artifact, log, and cache settings" section, u{% else %}U{% endif %}nder **Artifact and log retention**, enter a new value. +1. {% ifversion ghes %}In the "Check, workflow run, status, artifact, log, and cache settings" section, u{% else %}U{% endif %}nder **Check, workflow run, status, artifact and log retention**, enter a new value. 1. Click **Save** to apply the change. diff --git a/data/reusables/actions/checks-and-statuses-retention-scope.md b/data/reusables/actions/checks-and-statuses-retention-scope.md new file mode 100644 index 000000000000..eed64ceeec33 --- /dev/null +++ b/data/reusables/actions/checks-and-statuses-retention-scope.md @@ -0,0 +1 @@ +These retention policies apply to checks data, including check suites and check runs, and to commit statuses, including those created by third-party integrations. The policies are not limited to data created by {% data variables.product.prodname_actions %}. diff --git a/data/reusables/actions/jfrog-json-configuring-identity-mappings.md b/data/reusables/actions/jfrog-json-configuring-identity-mappings.md index 7706210c9c29..382f1bd56d01 100644 --- a/data/reusables/actions/jfrog-json-configuring-identity-mappings.md +++ b/data/reusables/actions/jfrog-json-configuring-identity-mappings.md @@ -1,6 +1,7 @@ ```json copy { "iss": "https://token.actions.githubusercontent.com", - "repository": "octo-org/octo-repo" + "repository": "octo-org/octo-repo"{% ifversion dependabot-oidc-support %}, + "event_name": "push"{% endif %} } ``` diff --git a/data/reusables/actions/oidc-security-notice.md b/data/reusables/actions/oidc-security-notice.md index ac3ad322e227..49a1d3db0402 100644 --- a/data/reusables/actions/oidc-security-notice.md +++ b/data/reusables/actions/oidc-security-notice.md @@ -1 +1,4 @@ * Before proceeding, you must plan your security strategy to ensure that access tokens are only allocated in a predictable way. To control how your cloud provider issues access tokens, you **must** define at least one condition, so that untrusted repositories can’t request access tokens for your cloud resources. For more information, see {% ifversion ghec %}[AUTOTITLE](/actions/concepts/security/openid-connect#establishing-oidc-trust-with-your-cloud-provider){% else %}[AUTOTITLE](/actions/reference/security/oidc#oidc-claims-used-to-define-trust-conditions-on-cloud-roles){% endif %}. +{% ifversion dependabot-oidc-support %} +* OIDC tokens requested for {% data variables.product.prodname_dependabot %} update jobs have an `event_name` claim of `dynamic`. If your trust policy is intended to authorize only {% data variables.product.prodname_actions %} workflows and your cloud provider supports conditions on `event_name`, allow only the event names expected by your workflows. For more information, see {% ifversion ghec %}[AUTOTITLE](/actions/concepts/security/openid-connect#establishing-oidc-trust-with-your-cloud-provider){% else %}[AUTOTITLE](/actions/reference/security/oidc#oidc-claims-used-to-define-trust-conditions-on-cloud-roles){% endif %}. +{% endif %} diff --git a/data/reusables/billing/org-billing-manager-permissions.md b/data/reusables/billing/org-billing-manager-permissions.md index 98076c5ad871..78141f05f6b3 100644 --- a/data/reusables/billing/org-billing-manager-permissions.md +++ b/data/reusables/billing/org-billing-manager-permissions.md @@ -1,5 +1,6 @@ * View all metered usage for your organization and its repositories. * View organization-level budgets. +* Review requests from members for additional {% data variables.product.prodname_copilot_short %} budget. * Download CSV usage reports. * View payment history and download receipts. * Add, update, or remove payment methods. diff --git a/data/reusables/code-quality/agentic-autofix-preview-note.md b/data/reusables/code-quality/agentic-autofix-preview-note.md new file mode 100644 index 000000000000..82110a9f15e5 --- /dev/null +++ b/data/reusables/code-quality/agentic-autofix-preview-note.md @@ -0,0 +1,2 @@ +> [!NOTE] +> Agentic Autofix for {% data variables.product.prodname_code_quality %} backlog findings is currently in {% data variables.release-phases.public_preview %} and subject to change. diff --git a/data/reusables/code-quality/generate-autofix-from-dashboard.md b/data/reusables/code-quality/generate-autofix-from-dashboard.md index 3dbbc61c5618..86a8c3b199c5 100644 --- a/data/reusables/code-quality/generate-autofix-from-dashboard.md +++ b/data/reusables/code-quality/generate-autofix-from-dashboard.md @@ -1,3 +1,2 @@ -1. To the right of an individual finding, click **Generate fix**. -1. Review the diff of the proposed change. If you agree with it, click **Open pull request**. -1. In the "Commit autofix to branch" dialog, select "Open a pull request", then click **Commit change**. +1. To the right of an individual finding, click **Assign to {% data variables.product.prodname_copilot_short %}**. Assigning a finding to {% data variables.product.prodname_copilot_short %} consumes {% data variables.product.prodname_ai_credits_short %}. +1. Review the draft pull request that {% data variables.product.prodname_copilot_short %} opens with a fix for the finding. diff --git a/data/reusables/codeql-cli/download-codeql-cli.md b/data/reusables/codeql-cli/download-codeql-cli.md index f69ac8108132..3d397e51ea56 100644 --- a/data/reusables/codeql-cli/download-codeql-cli.md +++ b/data/reusables/codeql-cli/download-codeql-cli.md @@ -16,6 +16,8 @@ You should download the {% data variables.product.prodname_codeql %} bundle from {% endif %} -You should always use the {% data variables.product.prodname_codeql %} bundle. This ensures compatibility and gives much better performance than a separate download of the {% data variables.product.prodname_codeql_cli %} and checkout of the {% data variables.product.prodname_codeql %} queries. If you will only be running the CLI on one specific platform, download the appropriate `codeql-bundle-PLATFORM.tar.zst` file. Alternatively, you can download `codeql-bundle.tar.zst`, which contains the CLI for all supported platforms. +You should always use the {% data variables.product.prodname_codeql %} bundle. This ensures compatibility and gives much better performance than a separate download of the {% data variables.product.prodname_codeql_cli %} and checkout of the {% data variables.product.prodname_codeql %} queries. Download the `codeql-bundle-PLATFORM.tar.zst` file for the platform where you will run the CLI. Replace `PLATFORM` with `linux64` for Linux x64, `linux-arm64` for Linux ARM64, `osx64` for macOS, or `win64` for Windows. + +The all-platforms bundle (`codeql-bundle.tar.zst` and `codeql-bundle.tar.gz`) is closing down and will stop being published in a future release. Download the per-platform `codeql-bundle-PLATFORM.tar.zst` file instead. In {% data variables.product.prodname_codeql_cli %} 2.27.0 and later, running the CLI from an all-platforms distribution produces a warning. There are also `tar.gz` variants of the bundle, which are identical to the `tar.zst` variants except compressed using the less efficient gzip algorithm. The only reason to download the `tar.gz` variants is if you are using older decompression tools that do not support the Zstandard compression algorithm. diff --git a/data/reusables/copilot/cloud-agent/agent-management-intro.md b/data/reusables/copilot/cloud-agent/agent-management-intro.md index 0d83cdc866cd..f0d890245e8c 100644 --- a/data/reusables/copilot/cloud-agent/agent-management-intro.md +++ b/data/reusables/copilot/cloud-agent/agent-management-intro.md @@ -1 +1 @@ -When utilizing {% data variables.product.github %}'s agentic features, you can use the **Agents** tab within a repository that has {% data variables.copilot.copilot_cloud_agent %} enabled to initiate, monitor, and manage agent sessions without leaving your workflow. You can also use the [Agents page](https://github.com/copilot/agents?ref_product=copilot&ref_type=engagement&ref_style=text) to view and start agent sessions. To learn how to enable {% data variables.copilot.copilot_cloud_agent %}, see [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management). +When utilizing {% data variables.product.github %}'s agentic features, you can use the **Agents** tab within a repository that has {% data variables.copilot.copilot_cloud_agent %} enabled to initiate, monitor, and manage agent sessions without leaving your workflow. You can also use the [Agents page](https://github.com/copilot/agents?ref_product=copilot&ref_type=engagement&ref_style=text) to view and start agent sessions. To learn how to enable {% data variables.copilot.copilot_cloud_agent %}, see [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access). diff --git a/data/reusables/copilot/cloud-agent/automations-availability.md b/data/reusables/copilot/cloud-agent/automations-availability.md index b9cd578e52c4..da38429bc2b7 100644 --- a/data/reusables/copilot/cloud-agent/automations-availability.md +++ b/data/reusables/copilot/cloud-agent/automations-availability.md @@ -1,7 +1,7 @@ For {% data variables.copilot.copilot_automations %} to be available in a repository, all of the following must be true: * The repository must be **private or internal**. {% data variables.copilot.copilot_automations_cap %} are not available in public repositories. -* {% data variables.copilot.copilot_cloud_agent %} must be enabled for the repository. If you have {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %}, an administrator must enable the {% data variables.copilot.copilot_cloud_agent %} policy. See [AUTOTITLE](/copilot/concepts/agents/cloud-agent/access-management). +* {% data variables.copilot.copilot_cloud_agent %} must be enabled for the repository. If you have {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %}, an administrator must enable the {% data variables.copilot.copilot_cloud_agent %} policy. See [AUTOTITLE](/copilot/concepts/enterprise/cloud-agent-access). * The organization must allow both {% data variables.copilot.copilot_cloud_agent %} and {% data variables.copilot.copilot_automations %} in the repository (both are enabled by default). See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/add-copilot-cloud-agent). {% data variables.copilot.copilot_automations_cap %} are available with the {% data variables.copilot.copilot_pro %}, {% data variables.copilot.copilot_pro_plus %}, {% data variables.copilot.copilot_max %}, {% data variables.copilot.copilot_for_business %}, and {% data variables.copilot.copilot_enterprise %} plans. diff --git a/data/reusables/copilot/copilot-cli/cli-example-plugin-file.md b/data/reusables/copilot/copilot-cli/cli-example-plugin-file.md index 0c2d12867506..8a47413cbfc7 100644 --- a/data/reusables/copilot/copilot-cli/cli-example-plugin-file.md +++ b/data/reusables/copilot/copilot-cli/cli-example-plugin-file.md @@ -1,5 +1,6 @@ ```json copy { + "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", "name": "my-dev-tools", "description": "React development utilities", "version": "1.2.0", @@ -8,10 +9,6 @@ "email": "jane@example.com" }, "license": "MIT", - "keywords": ["react", "frontend"], - "agents": "agents/", - "skills": ["skills/", "extra-skills/"], - "hooks": "hooks.json", - "mcpServers": ".mcp.json" + "keywords": ["react", "frontend"] } ``` diff --git a/data/reusables/copilot/copilot-cloud-agent-non-auto-models.md b/data/reusables/copilot/copilot-cloud-agent-non-auto-models.md index 99abd0563331..be60376f1472 100644 --- a/data/reusables/copilot/copilot-cloud-agent-non-auto-models.md +++ b/data/reusables/copilot/copilot-cloud-agent-non-auto-models.md @@ -12,5 +12,4 @@ * {% data variables.copilot.copilot_gpt_6_astra %} * {% data variables.copilot.copilot_grok_45 %} * {% data variables.copilot.copilot_grok_46 %} -* {% data variables.copilot.copilot_mai_code_1_flash %} * {% data variables.copilot.copilot_mai_code_1_1_flash %} diff --git a/data/reusables/copilot/copilot-requires-subscription.md b/data/reusables/copilot/copilot-requires-subscription.md index b425dbfcc047..5cca5844e11a 100644 --- a/data/reusables/copilot/copilot-requires-subscription.md +++ b/data/reusables/copilot/copilot-requires-subscription.md @@ -1 +1 @@ -You'll need access to {% data variables.product.prodname_copilot %}. For more information, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +You'll need access to {% data variables.product.prodname_copilot %}. For more information, see [AUTOTITLE](/copilot/get-started/about-github-copilot#get-access). diff --git a/data/reusables/copilot/model-autoenablement.md b/data/reusables/copilot/model-autoenablement.md index ae612bff83db..0e2af8666b26 100644 --- a/data/reusables/copilot/model-autoenablement.md +++ b/data/reusables/copilot/model-autoenablement.md @@ -1 +1 @@ -For enterprises on a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} plan, a policy controls whether unconfigured generally available (GA) models are enabled or disabled by default. See [AUTOTITLE](/copilot/concepts/models/default-availability). +For enterprises on a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} plan, a policy controls whether unconfigured generally available (GA) models are enabled or disabled by default. See [AUTOTITLE](/copilot/concepts/enterprise/default-model-availability). diff --git a/data/reusables/copilot/model-compliance/pricing-changes.md b/data/reusables/copilot/model-compliance/pricing-changes.md index 836397ba7544..f98af2cb9940 100644 --- a/data/reusables/copilot/model-compliance/pricing-changes.md +++ b/data/reusables/copilot/model-compliance/pricing-changes.md @@ -2,4 +2,4 @@ For example, if an interaction would normally consume 100 {% data variables.product.prodname_ai_credits_short %}, the same interaction processed with this enforcement enabled consumes 110 {% data variables.product.prodname_ai_credits_short %}. This pricing applies to all compliant model requests across all providers. -See [AUTOTITLE](/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises). +See [AUTOTITLE](/copilot/concepts/billing-and-usage/organizations-and-enterprises/billing). diff --git a/data/reusables/copilot/model-compliance/supported-features.md b/data/reusables/copilot/model-compliance/supported-features.md index 58622a6f80ac..753bcccf1b01 100644 --- a/data/reusables/copilot/model-compliance/supported-features.md +++ b/data/reusables/copilot/model-compliance/supported-features.md @@ -1,3 +1,3 @@ -All generally available {% data variables.product.prodname_copilot_short %} features work with this enforcement. See [AUTOTITLE](/copilot/get-started/features). +All generally available {% data variables.product.prodname_copilot_short %} features work with this enforcement. The availability of features is visible under {% data variables.product.prodname_copilot_short %} policy controls, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies). Preview features that reach general availability will be supported with compliant model alternatives at the time of their GA release. diff --git a/data/reusables/copilot/model-compliance/us-models.md b/data/reusables/copilot/model-compliance/us-models.md index 504dd1e8a26b..2e77f292e2b0 100644 --- a/data/reusables/copilot/model-compliance/us-models.md +++ b/data/reusables/copilot/model-compliance/us-models.md @@ -9,4 +9,3 @@ * Claude Sonnet 5 * Claude Opus 4.8 * Claude Opus 5 -* MAI-Code-1-Flash diff --git a/data/reusables/copilot/plans/organization-plans-paused.md b/data/reusables/copilot/plans/organization-plans-paused.md deleted file mode 100644 index 1561e3f17ddc..000000000000 --- a/data/reusables/copilot/plans/organization-plans-paused.md +++ /dev/null @@ -1,7 +0,0 @@ - - -On April 22, 2026, new self-serve purchases of {% data variables.copilot.copilot_business_short %} and {% data variables.copilot.copilot_enterprise_short %} were temporarily paused. - -Self-serve sign-ups **are reopening soon** for customers paying by credit card or PayPal. You might be charged prorated seat costs at sign-up. Additional usage beyond your included amount requires payment as you go. Self-serve trials remain paused. - - diff --git a/data/reusables/copilot/policy/suggestions-code-enterprise-default.md b/data/reusables/copilot/policy/suggestions-code-enterprise-default.md index 381aa5d2dae4..7c6bca5e1bcc 100644 --- a/data/reusables/copilot/policy/suggestions-code-enterprise-default.md +++ b/data/reusables/copilot/policy/suggestions-code-enterprise-default.md @@ -1 +1 @@ -**Suggestions matching public code** is set to **Blocked** by default for {% data variables.copilot.copilot_business_short %} users. You can change this setting in the **Privacy** section of the {% data variables.product.prodname_copilot_short %} policy page. \ No newline at end of file +**Suggestions matching public code** is set to **Allowed** by default for {% data variables.copilot.copilot_business_short %} users. You can change this setting in the **Privacy** section of the {% data variables.product.prodname_copilot_short %} policy page. \ No newline at end of file diff --git a/data/reusables/copilot/quickstart-intro.md b/data/reusables/copilot/quickstart-intro.md index 7a3ae769c315..d22b7c59422a 100644 --- a/data/reusables/copilot/quickstart-intro.md +++ b/data/reusables/copilot/quickstart-intro.md @@ -1 +1 @@ -{% data variables.product.prodname_copilot %} provides coding suggestions as you type in your editor. You can also ask {% data variables.product.prodname_copilot_short %} coding-related questions, such as how best to code something, how to fix a bug, or how someone else's code works. For full details of what {% data variables.product.prodname_copilot_short %} can do, see [AUTOTITLE](/copilot/get-started/what-is-github-copilot). +{% data variables.product.prodname_copilot %} provides coding suggestions as you type in your editor. You can also ask {% data variables.product.prodname_copilot_short %} coding-related questions, such as how best to code something, how to fix a bug, or how someone else's code works. For full details of what {% data variables.product.prodname_copilot_short %} can do, see [AUTOTITLE](/copilot/get-started/about-github-copilot). diff --git a/data/reusables/copilot/request-ai-credit-allocation-increase.md b/data/reusables/copilot/request-ai-credit-allocation-increase.md new file mode 100644 index 000000000000..b50fb875ad61 --- /dev/null +++ b/data/reusables/copilot/request-ai-credit-allocation-increase.md @@ -0,0 +1 @@ +If you use {% data variables.product.prodname_copilot_short %} through a {% data variables.copilot.copilot_business_short %} or {% data variables.copilot.copilot_enterprise_short %} plan and exhaust all your {% data variables.product.prodname_ai_credits_short %}, you'll see a banner on {% data variables.product.prodname_dotcom_the_website %} offering you the option to request more budget from your administrator. \ No newline at end of file diff --git a/data/reusables/copilot/spark-deprecation.md b/data/reusables/copilot/spark-deprecation.md deleted file mode 100644 index 746e8bc208cd..000000000000 --- a/data/reusables/copilot/spark-deprecation.md +++ /dev/null @@ -1 +0,0 @@ -Beginning August 4, 2026, {% data variables.product.prodname_spark %} will no longer accept new users or allow the creation of new apps. Existing users can continue to access and use apps they have already created. Open Spark workbench for your app, select "..." and "Create repository" to save your app code before August 31, 2026. \ No newline at end of file diff --git a/data/reusables/copilot/subscription-prerequisite.md b/data/reusables/copilot/subscription-prerequisite.md index 13cd0bdd3318..dfd0742cd63d 100644 --- a/data/reusables/copilot/subscription-prerequisite.md +++ b/data/reusables/copilot/subscription-prerequisite.md @@ -1 +1 @@ -See [AUTOTITLE](/copilot/get-started/what-is-github-copilot#get-access). +See [AUTOTITLE](/copilot/get-started/about-github-copilot#get-access). diff --git a/data/reusables/discussions/enabling-or-disabling-github-discussions-for-your-organization.md b/data/reusables/discussions/enabling-or-disabling-github-discussions-for-your-organization.md index c15f0303297a..4bd58e9765e5 100644 --- a/data/reusables/discussions/enabling-or-disabling-github-discussions-for-your-organization.md +++ b/data/reusables/discussions/enabling-or-disabling-github-discussions-for-your-organization.md @@ -4,6 +4,7 @@ ![Screenshot of the tabs in an organization's profile. The "Settings" tab is outlined in dark orange.](/assets/images/help/discussions/org-settings-global-nav-update.png) -1. Under "Discussions", select **Enable discussions for this organization**. +1. In the{% ifversion fpt or ghec %} "Code, planning, and automation"{% elsif ghes %} "Code and automation"{% endif %} section of the sidebar, click **{% octicon "comment-discussion" aria-hidden="true" aria-label="comment-discussion" %} Discussions**. +1. Select **Enable discussions for this organization**. 1. Use the dropdown menu to select a repository to use as the source repository for your organization discussions. 1. Click **Save**. diff --git a/data/reusables/elm/ghe-pat-description.md b/data/reusables/elm/ghe-pat-description.md deleted file mode 100644 index 2d20f0ca17ab..000000000000 --- a/data/reusables/elm/ghe-pat-description.md +++ /dev/null @@ -1 +0,0 @@ -The {% data variables.product.pat_v1 %} for {% data variables.enterprise.data_residency_site %} diff --git a/data/reusables/elm/hmac-key-value.md b/data/reusables/elm/hmac-key-value.md deleted file mode 100644 index 976ff0198dfd..000000000000 --- a/data/reusables/elm/hmac-key-value.md +++ /dev/null @@ -1 +0,0 @@ -$(ghe-config secrets.elm-exporter.elm-exporter-hmac-keys) \ No newline at end of file diff --git a/data/reusables/elm/localhost-value.md b/data/reusables/elm/localhost-value.md deleted file mode 100644 index f342748276e3..000000000000 --- a/data/reusables/elm/localhost-value.md +++ /dev/null @@ -1 +0,0 @@ -http://localhost:1738 \ No newline at end of file diff --git a/data/reusables/organizations/copilot-policy-ent-overrides-org.md b/data/reusables/organizations/copilot-policy-ent-overrides-org.md index a9ad35c611ed..87642857b0ea 100644 --- a/data/reusables/organizations/copilot-policy-ent-overrides-org.md +++ b/data/reusables/organizations/copilot-policy-ent-overrides-org.md @@ -1 +1 @@ -{% data variables.product.prodname_copilot_short %} policies are also managed at the enterprise level. If your enterprise owner has selected a specific policy, such as enabling a feature everywhere, disabling it everywhere, or enabling it for selected organizations only, you cannot override that setting at the organization level. For information on how policies combine, see [AUTOTITLE](/copilot/concepts/policies). +{% data variables.product.prodname_copilot_short %} policies are also managed at the enterprise level. If your enterprise owner has selected a specific policy, such as enabling a feature everywhere, disabling it everywhere, or enabling it for selected organizations only, you cannot override that setting at the organization level. For information on how policies combine, see [AUTOTITLE](/copilot/concepts/enterprise/policies). diff --git a/data/reusables/rai/copilot/enterprise-fpt-link.md b/data/reusables/rai/copilot/enterprise-fpt-link.md index ba9aa7f4419a..7fe1c1aba588 100644 --- a/data/reusables/rai/copilot/enterprise-fpt-link.md +++ b/data/reusables/rai/copilot/enterprise-fpt-link.md @@ -1 +1 @@ -> [!NOTE] You are currently viewing the documentation for Free, Pro, and Team plans. {% data variables.copilot.copilot_enterprise %} is only available to customers on the {% data variables.product.prodname_ghe_cloud %} plan. For full documentation of {% data variables.copilot.copilot_enterprise_short %}, see [AUTOTITLE](/enterprise-cloud@latest/copilot/get-started/what-is-github-copilot) in the {% data variables.product.prodname_ghe_cloud %} documentation. +> [!NOTE] You are currently viewing the documentation for Free, Pro, and Team plans. {% data variables.copilot.copilot_enterprise %} is only available to customers on the {% data variables.product.prodname_ghe_cloud %} plan. For full documentation of {% data variables.copilot.copilot_enterprise_short %}, see [AUTOTITLE](/enterprise-cloud@latest/copilot/get-started/about-github-copilot) in the {% data variables.product.prodname_ghe_cloud %} documentation. diff --git a/data/reusables/repositories/rulesets-require-secret-scanning-alerts-resolved.md b/data/reusables/repositories/rulesets-require-secret-scanning-alerts-resolved.md new file mode 100644 index 000000000000..60f01b621d48 --- /dev/null +++ b/data/reusables/repositories/rulesets-require-secret-scanning-alerts-resolved.md @@ -0,0 +1,5 @@ +1. Under "Branch protections", select **Require {% data variables.product.prodname_secret_scanning %} alerts are resolved**. +1. Under "Secret types", select one or more types of secrets that should block merging: + * **Provider patterns** + * **Custom patterns** + * **Generic patterns** diff --git a/data/reusables/secret-scanning/merge-protection-public-preview.md b/data/reusables/secret-scanning/merge-protection-public-preview.md new file mode 100644 index 000000000000..2affc184ebb0 --- /dev/null +++ b/data/reusables/secret-scanning/merge-protection-public-preview.md @@ -0,0 +1 @@ +The rule to require {% data variables.product.prodname_secret_scanning %} alerts to be resolved before merging is in {% data variables.release-phases.public_preview %} and subject to change. diff --git a/data/tables/copilot/annual-subscriber-model-multipliers.yml b/data/tables/copilot/annual-subscriber-model-multipliers.yml index fe26065e9c68..1476210f6ded 100644 --- a/data/tables/copilot/annual-subscriber-model-multipliers.yml +++ b/data/tables/copilot/annual-subscriber-model-multipliers.yml @@ -56,8 +56,5 @@ - model: 'GPT-5 mini' new_multiplier: '0.33' -- model: 'MAI-Code-1-Flash' - new_multiplier: '0.33' - - model: 'MAI-Code-1.1-Flash' new_multiplier: '0.25' diff --git a/data/tables/copilot/auto-model-selection.yml b/data/tables/copilot/auto-model-selection.yml index 21ddb9b2488d..fc2e8393186f 100644 --- a/data/tables/copilot/auto-model-selection.yml +++ b/data/tables/copilot/auto-model-selection.yml @@ -19,11 +19,6 @@ # - app: Availability for GitHub Copilot app. # OpenAI -- name: GPT-5 mini - cloud_agent: false - chat: true - cli: true - app: true - name: GPT-5.3-Codex cloud_agent: true @@ -33,39 +28,33 @@ - name: GPT-5.4 cloud_agent: true - chat: true - cli: true - app: true - -- name: GPT-5.4 mini - cloud_agent: false - chat: true - cli: true - app: true + chat: false + cli: false + app: false - name: GPT-5.5 cloud_agent: false chat: true cli: true - app: false + app: true - name: GPT-5.6 Luna cloud_agent: false chat: true cli: true - app: false + app: true - name: GPT-5.6 Sol cloud_agent: false chat: true cli: true - app: false + app: true - name: GPT-5.6 Terra cloud_agent: false chat: true cli: true - app: false + app: true # Anthropic - name: Claude Haiku 4.5 @@ -84,19 +73,19 @@ cloud_agent: false chat: true cli: true - app: false + app: true - name: Claude Sonnet 4.6 cloud_agent: true - chat: true - cli: true - app: true + chat: false + cli: false + app: false - name: Claude Sonnet 5 cloud_agent: false chat: true cli: true - app: false + app: true # Google - name: Gemini 3.6 Flash diff --git a/data/tables/copilot/model-comparison.yml b/data/tables/copilot/model-comparison.yml index 92d71a7cc499..7f4b338d44cd 100644 --- a/data/tables/copilot/model-comparison.yml +++ b/data/tables/copilot/model-comparison.yml @@ -121,11 +121,6 @@ further_reading: '[Gemini 3.8 Flash model card](https://storage.googleapis.com/deepmind-media/Model-Cards/Gemini-3-8-Flash-Model-Card.pdf)' # Microsoft -- name: MAI-Code-1-Flash - task_area: General-purpose coding and writing - excels_at: Fast, accurate code completions and explanations - further_reading: '[MAI-Code-1-Flash model card](https://aka.ms/mai-code-1-flash-modelcard)' - - name: MAI-Code-1.1-Flash task_area: General-purpose coding and writing, image understanding excels_at: Fast code completions and explanations, instruction following, tool use diff --git a/data/tables/copilot/model-deprecation-history.yml b/data/tables/copilot/model-deprecation-history.yml index a809999b2488..58f7a7cf5ffb 100644 --- a/data/tables/copilot/model-deprecation-history.yml +++ b/data/tables/copilot/model-deprecation-history.yml @@ -37,7 +37,7 @@ - name: 'Raptor mini' retirement_date: '2026-09-01' - suggested_alternative: 'MAI-Code-1-Flash' + suggested_alternative: 'MAI-Code-1.1-Flash' - name: 'Gemini 2.5 Pro' retirement_date: '2026-07-31' diff --git a/data/tables/copilot/model-release-status.yml b/data/tables/copilot/model-release-status.yml index e3aed8a2ca9a..30ef6d240cea 100644 --- a/data/tables/copilot/model-release-status.yml +++ b/data/tables/copilot/model-release-status.yml @@ -112,10 +112,6 @@ release_status: 'GA' # Microsoft models -- name: 'MAI-Code-1-Flash' - provider: 'Microsoft' - release_status: 'GA' - - name: 'MAI-Code-1.1-Flash' provider: 'Microsoft' release_status: 'GA' diff --git a/data/tables/copilot/model-supported-clients.yml b/data/tables/copilot/model-supported-clients.yml index 51d50ccc9855..555c83005dd3 100644 --- a/data/tables/copilot/model-supported-clients.yml +++ b/data/tables/copilot/model-supported-clients.yml @@ -131,15 +131,6 @@ xcode: true jetbrains: true -- name: MAI-Code-1-Flash - dotcom: true - cli: true - vscode: true - vs: true - eclipse: true - xcode: true - jetbrains: true - - name: MAI-Code-1.1-Flash dotcom: true cli: true diff --git a/data/tables/copilot/model-supported-plans.yml b/data/tables/copilot/model-supported-plans.yml index b1560f4c9cf8..663b9264fb24 100644 --- a/data/tables/copilot/model-supported-plans.yml +++ b/data/tables/copilot/model-supported-plans.yml @@ -201,13 +201,6 @@ business: true enterprise: true -- name: MAI-Code-1-Flash - pro: true - pro_plus: true - max: true - business: true - enterprise: true - - name: MAI-Code-1.1-Flash pro: true pro_plus: true diff --git a/data/tables/copilot/models-and-pricing.yml b/data/tables/copilot/models-and-pricing.yml index 054b1fe87753..b5c04e7085e5 100644 --- a/data/tables/copilot/models-and-pricing.yml +++ b/data/tables/copilot/models-and-pricing.yml @@ -370,14 +370,6 @@ output: $12.00 # Microsoft -- model: 'MAI-Code-1-Flash' - provider: microsoft - release_status: GA - category: Lightweight - input: $0.75 - cached_input: $0.075 - output: $4.50 - - model: 'MAI-Code-1.1-Flash' provider: microsoft release_status: GA diff --git a/data/tables/repository-roles.yml b/data/tables/repository-roles.yml new file mode 100644 index 000000000000..998c69af2bf8 --- /dev/null +++ b/data/tables/repository-roles.yml @@ -0,0 +1,340 @@ +# Permissions for each repository role, rendered by: +# content/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/repository-roles-for-an-organization.md +# +# 'roles' lists the roles that CAN perform the action. Roles left out render as no. +# 'roles' and 'versions' may contain Liquid; it is rendered via the render_liquid filter. +# 'versions' shows the row only when it renders non-empty. + +permissions: + - action: 'Manage [individual](/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-an-individuals-access-to-an-organization-repository), [team](/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-team-access-to-an-organization-repository), and [outside collaborator](/organizations/managing-user-access-to-your-organizations-repositories/managing-outside-collaborators/adding-outside-collaborators-to-repositories-in-your-organization) access to the repository' + roles: 'admin' + + - action: "Pull from the person or team's assigned repositories" + roles: 'read, triage, write, maintain, admin' + + - action: "Fork the person or team's assigned repositories" + roles: 'read, triage, write, maintain, admin' + + - action: 'Edit and delete their own comments' + roles: 'read, triage, write, maintain, admin' + + - action: 'Open issues' + roles: 'read, triage, write, maintain, admin' + + - action: 'Close issues they opened themselves' + roles: 'read, triage, write, maintain, admin' + + - action: 'Reopen issues they closed themselves' + roles: 'read, triage, write, maintain, admin' + + - action: 'Have an issue assigned to them' + roles: 'read, triage, write, maintain, admin' + + - action: "Send pull requests from forks of the team's assigned repositories" + roles: 'read, triage, write, maintain, admin' + + - action: '[Submit reviews on pull requests](/pull-requests/how-tos/review-pull-requests/reviewing-proposed-changes-in-a-pull-request)' + roles: 'read, triage, write, maintain, admin' + + - action: '[Approve or request changes to a pull request with required reviews](/pull-requests/how-tos/review-pull-requests/approving-a-pull-request-with-required-reviews)' + roles: 'write, maintain, admin' + + - action: '[Apply suggested changes](/pull-requests/how-tos/review-pull-requests/incorporating-feedback-in-your-pull-request) to pull requests' + roles: 'write, maintain, admin' + + - action: 'View published releases' + roles: 'read, triage, write, maintain, admin' + + - action: 'View [{% data variables.product.prodname_actions %} workflow runs](/actions/how-tos/manage-workflow-runs)' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'read, triage, write, maintain, admin' + + - action: 'Edit wikis in public repositories' + roles: 'read, triage, write, maintain, admin' + + - action: 'Edit wikis in private repositories' + roles: 'write, maintain, admin' + + - action: '[Report abusive or spammy content](/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam)' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'read, triage, write, maintain, admin' + + - action: 'Apply/dismiss labels' + roles: 'triage, write, maintain, admin' + + - action: 'Create, edit, delete labels' + roles: 'write, maintain, admin' + + - action: 'Close, reopen, and assign all issues and pull requests' + roles: 'triage, write, maintain, admin' + + - action: '[Enable and disable auto-merge on a pull request](/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-auto-merge-for-pull-requests-in-your-repository)' + roles: 'write, maintain, admin' + + - action: 'Create, edit, delete milestones' + roles: 'write, maintain, admin' + + - action: 'Apply milestones' + roles: 'triage, write, maintain, admin' + + - action: 'Mark [duplicate issues and pull requests](/issues/tracking-your-work-with-issues/administering-issues/marking-issues-or-pull-requests-as-a-duplicate)' + roles: 'triage, write, maintain, admin' + + - action: 'Request [pull request reviews](/pull-requests/how-tos/create-pull-requests/requesting-a-pull-request-review)' + roles: 'triage, write, maintain, admin' + + - action: 'Merge a [pull request](/pull-requests/reference/pull-request-merges)' + roles: 'write, maintain, admin' + + - action: "Push to (write) the person or team's assigned repositories" + roles: 'write, maintain, admin' + + - action: "Edit and delete anyone's comments on commits, pull requests, and issues" + roles: 'write, maintain, admin' + + - action: "[Hide anyone's comments on discussions](/communities/moderating-comments-and-conversations/managing-disruptive-comments)" + roles: 'triage, write, maintain, admin' + + - action: "[Hide anyone's comments on issues, pull requests, and commits](/communities/moderating-comments-and-conversations/managing-disruptive-comments)" + roles: 'write, maintain, admin' + + - action: '[Lock conversations](/communities/moderating-comments-and-conversations/locking-conversations)' + roles: 'write, maintain, admin' + + - action: 'Transfer issues (see [AUTOTITLE](/issues/tracking-your-work-with-issues/administering-issues/transferring-an-issue-to-another-repository) for details)' + roles: 'write, maintain, admin' + + - action: '[Act as a designated code owner for a repository](/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners)' + roles: 'write, maintain, admin' + + - action: '[Mark a draft pull request as ready for review](/pull-requests/how-tos/create-pull-requests/changing-the-stage-of-a-pull-request)' + roles: 'write, maintain, admin' + + - action: '[Convert a pull request to a draft](/pull-requests/how-tos/create-pull-requests/changing-the-stage-of-a-pull-request)' + roles: 'write, maintain, admin' + + - action: 'Create [status checks](/pull-requests/reference/status-checks)' + roles: 'write, maintain, admin' + + - action: 'Create, edit, run, re-run, and cancel [{% data variables.product.prodname_actions %} workflows](/actions)' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'write, maintain, admin' + + - action: 'Create, update, and delete [{% data variables.product.prodname_actions %} secrets](/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) on {% data variables.product.prodname_dotcom_the_website %}' + versions: '{% ifversion repo-ci-cd-admin %}show{% endif %}' + roles: 'write, maintain, admin' + + - action: 'Create, update, and delete [{% data variables.product.prodname_actions %} secrets](/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) on {% data variables.product.prodname_dotcom_the_website %}' + versions: '{% ifversion repo-ci-cd-admin %}{% else %}show{% endif %}' + roles: 'admin' + + - action: 'Create, update, and delete [{% data variables.product.prodname_actions %} secrets](/rest/actions/secrets) using the REST API' + roles: 'write, maintain, admin' + + - action: 'Create, update, and delete [{% data variables.product.prodname_actions %} variables](/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables) on {% data variables.product.prodname_dotcom_the_website %}' + versions: '{% ifversion repo-ci-cd-admin %}show{% endif %}' + roles: 'write, maintain, admin' + + - action: 'Create, update, and delete [{% data variables.product.prodname_actions %} variables](/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables) on {% data variables.product.prodname_dotcom_the_website %}' + versions: '{% ifversion repo-ci-cd-admin %}{% else %}show{% endif %}' + roles: 'admin' + + - action: 'Create, update, and delete [{% data variables.product.prodname_actions %} variables](/rest/actions/variables) using the REST API' + roles: 'write, maintain, admin' + + - action: 'Create and edit releases' + roles: 'write, maintain, admin' + + - action: 'View draft releases' + roles: 'write, maintain, admin' + + - action: "Edit a repository's description" + roles: 'maintain, admin' + + - action: '[View and install packages](/packages/learn-github-packages)' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'read, triage, write, maintain, admin' + + - action: '[Publish packages](/packages/learn-github-packages/publishing-a-package)' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'write, maintain, admin' + + - action: '[Delete and restore packages](/packages/learn-github-packages/deleting-and-restoring-a-package)' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'admin' + + - action: 'Manage [topics](/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics)' + roles: 'maintain, admin' + + - action: 'Enable wikis and restrict wiki editors' + roles: 'maintain, admin' + + - action: 'Configure [pull request merges](/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges)' + roles: 'maintain, admin' + + - action: 'Configure [a publishing source for {% data variables.product.prodname_pages %}](/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site)' + roles: 'maintain, admin' + + - action: 'View [content exclusion settings](/copilot/how-tos/configure-content-exclusion/exclude-content-from-copilot) for {% data variables.product.prodname_copilot %}' + versions: '{% ifversion copilot %}show{% endif %}' + roles: 'maintain, admin' + + - action: 'Manage [branch protection rules](/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule) and [repository rulesets](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets)' + roles: 'admin' + + - action: 'View [rulesets for a repository](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets)' + roles: 'read, triage, write, maintain, admin' + + - action: "[Push to protected branches](/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches)
Doesn't apply to rulesets as these have a different bypass model. See [Granting bypass permissions for your branch or tag ruleset](/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/creating-rulesets-for-a-repository#granting-bypass-permissions-for-your-branch-or-tag-ruleset)." + roles: 'maintain, admin' + + - action: 'Merge pull requests on protected branches, even if there are no approving reviews' + roles: 'admin' + + - action: '[Create and edit repository social cards](/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/customizing-your-repositorys-social-media-preview)' + roles: 'maintain, admin' + + - action: 'Limit [interactions in a repository](/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository)' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'maintain, admin' + + - action: 'Delete an issue (see [AUTOTITLE](/issues/tracking-your-work-with-issues/administering-issues/deleting-an-issue))' + roles: 'admin' + + - action: '[Define code owners for a repository](/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners)' + roles: 'write, maintain, admin' + + - action: 'Add a repository to a team (see [AUTOTITLE](/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-team-access-to-an-organization-repository#giving-a-team-access-to-a-repository) for details)' + roles: 'admin' + + - action: '[Manage outside collaborator access to a repository](/organizations/managing-user-access-to-your-organizations-repositories/managing-outside-collaborators/adding-outside-collaborators-to-repositories-in-your-organization)' + roles: 'admin' + + - action: "[Change a repository's visibility](/organizations/managing-organization-settings/restricting-repository-visibility-changes-in-your-organization)" + roles: 'admin' + + - action: 'Make a repository a template (see [AUTOTITLE](/repositories/creating-and-managing-repositories/creating-a-template-repository))' + roles: 'admin' + + - action: "Change a repository's settings" + roles: 'admin' + + - action: 'Manage team and collaborator access to the repository' + roles: 'admin' + + - action: "Edit the repository's default branch" + roles: 'admin' + + - action: "Rename the repository's default branch (see [AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch))" + roles: 'admin' + + - action: "Rename a branch other than the repository's default branch (see [AUTOTITLE](/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch))" + roles: 'write, maintain, admin' + + - action: 'Manage webhooks and deploy keys' + roles: 'admin' + + - action: '[Manage the forking policy for a repository](/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/managing-the-forking-policy-for-your-repository)' + roles: 'admin' + + - action: '[Transfer repositories into the organization](/organizations/managing-organization-settings/restricting-repository-creation-in-your-organization)' + roles: 'admin' + + - action: '[Delete or transfer repositories out of the organization](/organizations/managing-organization-settings/setting-permissions-for-deleting-or-transferring-repositories)' + roles: 'admin' + + - action: '[Archive repositories](/repositories/archiving-a-github-repository/archiving-repositories)' + roles: 'admin' + + - action: 'Display a sponsor button (see [AUTOTITLE](/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository))' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'admin' + + - action: 'Create autolink references to external resources, like Jira or Zendesk (see [AUTOTITLE](/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/configuring-autolinks-to-reference-external-resources))' + roles: 'admin' + + - action: '[Enable {% data variables.product.prodname_discussions %}](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/enabling-or-disabling-github-discussions-for-a-repository) in a repository' + roles: 'maintain, admin' + + - action: '[Create and edit categories](/discussions/managing-discussions-for-your-community/managing-categories-for-discussions) for {% data variables.product.prodname_discussions %}' + roles: 'write, maintain, admin' + + - action: '[Move a discussion to a different category](/discussions/managing-discussions-for-your-community/managing-discussions)' + roles: 'triage, write, maintain, admin' + + - action: '[Transfer a discussion](/discussions/managing-discussions-for-your-community/managing-discussions) to a new repository' + roles: 'write, maintain, admin' + + - action: '[Manage pinned discussions](/discussions/managing-discussions-for-your-community/managing-discussions)' + roles: 'write, maintain, admin' + + - action: '[Lock and unlock discussions](/discussions/managing-discussions-for-your-community/moderating-discussions)' + roles: 'triage, write, maintain, admin' + + - action: '[Individually convert issues to discussions](/discussions/managing-discussions-for-your-community/moderating-discussions)' + roles: 'triage, write, maintain, admin' + + - action: '[Create new discussions and comment on existing discussions](/discussions/collaborating-with-your-community-using-discussions/participating-in-a-discussion)' + roles: 'read, triage, write, maintain, admin' + + - action: '[Delete a discussion](/discussions/managing-discussions-for-your-community/managing-discussions#deleting-a-discussion)' + roles: 'triage, write, maintain, admin' + + - action: '[Create codespaces](/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository?tool=webui) for private{% ifversion ghec %}/internal{% endif %} repositories' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'read, triage, write, maintain, admin' + + - action: '[Create codespaces](/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository?tool=webui) for private{% ifversion ghec %}/internal{% endif %} repositories with [{% data variables.product.prodname_codespaces %} secrets access](/codespaces/managing-codespaces-for-your-organization/managing-development-environment-secrets-for-your-repository-or-organization?tool=webui)' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'write, maintain, admin' + + - action: '[Create codespaces](/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository?tool=webui) for public repositories
(users with read-only access can only create codespaces at their own expense)' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'read, triage, write, maintain, admin' + + - action: 'Edit the custom property values for the repository' + roles: 'admin' + +securityFeatures: + - action: 'Receive [{% data variables.product.prodname_dependabot_alerts %} for insecure dependencies](/code-security/concepts/supply-chain-security/dependabot-alerts) in a repository' + roles: 'write, maintain, admin' + + - action: '[Dismiss {% data variables.product.prodname_dependabot_alerts %}](/code-security/how-tos/manage-security-alerts/manage-dependabot-alerts/view-dependabot-alerts)' + roles: 'write, maintain, admin' + + - action: '[Designate additional people or teams to receive security alerts](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#granting-access-to-security-alerts)' + versions: '{% ifversion ghes or ghec %}show{% endif %}' + roles: 'admin' + + - action: 'Create [security advisories](/code-security/concepts/vulnerability-reporting-and-management/repository-security-advisories)' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'admin' + + - action: 'Manage access to {% data variables.product.prodname_GHAS %} features (see [AUTOTITLE](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization))' + roles: 'admin' + + - action: '[Enable the dependency graph](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/explore-dependencies) for a private repository ' + versions: '{% ifversion fpt or ghec %}show{% endif %}' + roles: 'admin' + + - action: '[View dependency reviews](/code-security/concepts/supply-chain-security/dependency-review)' + versions: '{% ifversion ghes or ghec %}show{% endif %}' + roles: 'read, triage, write, maintain, admin' + + - action: '[View {% data variables.product.prodname_code_scanning %} alerts on pull requests](/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/triage-alerts-in-pull-requests)' + roles: 'read, triage, write, maintain, admin' + + - action: '[List, dismiss, and delete {% data variables.product.prodname_code_scanning %} alerts](/code-security/how-tos/manage-security-alerts/manage-code-scanning-alerts/resolve-alerts)' + roles: 'write, maintain, admin' + + - action: '[View and dismiss {% data variables.secret-scanning.alerts %} in a repository](/code-security/how-tos/manage-security-alerts/manage-secret-scanning-alerts)' + roles: 'write, maintain, admin' + # Not available for FPT + + - action: '[Resolve, revoke, or re-open {% data variables.secret-scanning.alerts %}](/code-security/how-tos/manage-security-alerts/manage-secret-scanning-alerts)' + versions: '{% ifversion ghes or ghec %}show{% endif %}' + roles: 'write, maintain, admin' + + - action: '[Designate additional people or teams to receive {% data variables.secret-scanning.alerts %}](/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#granting-access-to-security-alerts) in repositories' + versions: '{% ifversion ghes or ghec %}show{% endif %}' + roles: 'admin' diff --git a/data/ui.yml b/data/ui.yml index 7b4565bf4036..812d976a5b0d 100644 --- a/data/ui.yml +++ b/data/ui.yml @@ -93,7 +93,10 @@ search_results: n_results: '{n} results' search_validation_error: Validation error with search query filter: Filter - clear_filter: Clear + clear_all_filters: Clear all + show_filters: Show filters + hide_filters: Hide filters + filter_search_results: Filter search results homepage: explore_by_product: Explore by product @@ -131,7 +134,7 @@ support: ask_community: Ask the GitHub community survey: - able_to_find: Did you find what you needed? + able_to_find: Was this Doc helpful? yes: Yes no: No cancel: Cancel @@ -147,8 +150,8 @@ survey: server_error: Unable to process comment at the moment. Please try again. contribution_cta: - title: Help us make these docs great! - body: All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request. + title: Help us make GitHub Docs great! + body: All Docs are open source. See something that's wrong or unclear? Submit a pull request. button: Make a contribution to_guidelines: Learn how to contribute @@ -314,6 +317,7 @@ webhooks: footer: support_heading: Help and support legal_heading: Legal + back_to_top: Back to top imprint: Imprint terms: Terms privacy: Privacy diff --git a/data/variables/copilot.yml b/data/variables/copilot.yml index d4c9ea0d09de..680885a1ca79 100644 --- a/data/variables/copilot.yml +++ b/data/variables/copilot.yml @@ -243,7 +243,6 @@ copilot_grok_46: 'Grok 4.6' # Qwen: copilot_qwen_25: 'Qwen2.5' # Microsoft: -copilot_mai_code_1_flash: 'MAI-Code-1-Flash' copilot_mai_code_1_1_flash: 'MAI-Code-1.1-Flash' # Microsoft fine-tuned: copilot_raptor_mini: 'Raptor mini' diff --git a/package-lock.json b/package-lock.json index ffd4b8c84745..e2e0f203f109 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "@primer/octicons-react": "^19.22.0", "@primer/primitives": "^11.3.1", "@primer/react": "38.19.0", - "@primer/react-brand": "^0.70.0", + "@primer/react-brand": "^0.74.0", "accept-language-parser": "^1.5.0", "ajv": "^8.18.0", "ajv-errors": "^3.0.0", @@ -81,7 +81,7 @@ "mdast-util-to-markdown": "2.1.2", "mdast-util-to-string": "^4.0.0", "micromark-extension-gfm": "^3.0.0", - "next": "^16.2.6", + "next": "^16.3.3", "ora": "^9.3.0", "parse5": "8.0.1", "quick-lru": "7.0.1", @@ -100,7 +100,7 @@ "remark-remove-comments": "^1.1.1", "remark-stringify": "^11.0.0", "semver": "^7.7.4", - "sharp": "0.35.3", + "sharp": "0.35.4", "slash": "^5.1.0", "strip-ansi": "7.1.0", "swr": "^2.4.0", @@ -1171,9 +1171,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", - "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "dev": true, "funding": [ { @@ -1401,9 +1401,9 @@ } }, "node_modules/@gr2m/gray-matter/node_modules/js-yaml": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", - "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==", "funding": [ { "type": "github", @@ -1687,9 +1687,9 @@ } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz", - "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.4.tgz", + "integrity": "sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==", "cpu": [ "arm64" ], @@ -1705,13 +1705,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.3.2" + "@img/sharp-libvips-darwin-arm64": "1.3.3" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz", - "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.4.tgz", + "integrity": "sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==", "cpu": [ "x64" ], @@ -1727,20 +1727,20 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.3.2" + "@img/sharp-libvips-darwin-x64": "1.3.3" } }, "node_modules/@img/sharp-freebsd-wasm32": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz", - "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.4.tgz", + "integrity": "sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==", "license": "Apache-2.0", "optional": true, "os": [ "freebsd" ], "dependencies": { - "@img/sharp-wasm32": "0.35.3" + "@img/sharp-wasm32": "0.35.4" }, "engines": { "node": ">=20.9.0" @@ -1750,9 +1750,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz", - "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.3.tgz", + "integrity": "sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==", "cpu": [ "arm64" ], @@ -1766,9 +1766,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz", - "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.3.tgz", + "integrity": "sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==", "cpu": [ "x64" ], @@ -1782,9 +1782,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz", - "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.3.tgz", + "integrity": "sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==", "cpu": [ "arm" ], @@ -1801,9 +1801,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz", - "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.3.tgz", + "integrity": "sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==", "cpu": [ "arm64" ], @@ -1819,10 +1819,48 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.3.tgz", + "integrity": "sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.3.tgz", + "integrity": "sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz", - "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.3.tgz", + "integrity": "sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==", "cpu": [ "s390x" ], @@ -1839,9 +1877,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz", - "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.3.tgz", + "integrity": "sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==", "cpu": [ "x64" ], @@ -1858,9 +1896,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz", - "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.3.tgz", + "integrity": "sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==", "cpu": [ "arm64" ], @@ -1877,9 +1915,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz", - "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.3.tgz", + "integrity": "sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==", "cpu": [ "x64" ], @@ -1896,9 +1934,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz", - "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.4.tgz", + "integrity": "sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==", "cpu": [ "arm" ], @@ -1917,13 +1955,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.3.2" + "@img/sharp-libvips-linux-arm": "1.3.3" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz", - "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.4.tgz", + "integrity": "sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==", "cpu": [ "arm64" ], @@ -1942,13 +1980,63 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.3.2" + "@img/sharp-libvips-linux-arm64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.4.tgz", + "integrity": "sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.3" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.4.tgz", + "integrity": "sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.3" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz", - "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.4.tgz", + "integrity": "sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==", "cpu": [ "s390x" ], @@ -1967,13 +2055,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.3.2" + "@img/sharp-libvips-linux-s390x": "1.3.3" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz", - "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.4.tgz", + "integrity": "sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==", "cpu": [ "x64" ], @@ -1992,13 +2080,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.3.2" + "@img/sharp-libvips-linux-x64": "1.3.3" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz", - "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.4.tgz", + "integrity": "sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==", "cpu": [ "arm64" ], @@ -2017,13 +2105,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.3.2" + "@img/sharp-libvips-linuxmusl-arm64": "1.3.3" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz", - "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.4.tgz", + "integrity": "sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==", "cpu": [ "x64" ], @@ -2042,17 +2130,17 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.3.2" + "@img/sharp-libvips-linuxmusl-x64": "1.3.3" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", - "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.4.tgz", + "integrity": "sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==", "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.11.1" + "@emnapi/runtime": "^1.11.3" }, "engines": { "node": ">=20.9.0" @@ -2062,17 +2150,36 @@ } }, "node_modules/@img/sharp-webcontainers-wasm32": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz", - "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.4.tgz", + "integrity": "sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==", "cpu": [ "wasm32" ], "license": "Apache-2.0", "optional": true, "dependencies": { - "@img/sharp-wasm32": "0.35.3" + "@img/sharp-wasm32": "0.35.4" + }, + "engines": { + "node": ">=20.9.0" }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.4.tgz", + "integrity": "sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=20.9.0" }, @@ -2081,9 +2188,9 @@ } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz", - "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.4.tgz", + "integrity": "sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==", "cpu": [ "ia32" ], @@ -2100,9 +2207,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz", - "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.4.tgz", + "integrity": "sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==", "cpu": [ "x64" ], @@ -2178,15 +2285,15 @@ } }, "node_modules/@next/env": { - "version": "16.2.11", - "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.11.tgz", - "integrity": "sha512-0do5A3BJ2gxWr0ZCMcD6BhW+e595jyxdTl3rXTS6lOtD8ektMiW6CO+EPwt1Eca1DBnm90r/7GdiKWBKxH++DA==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.3.3.tgz", + "integrity": "sha512-U2eYQRwXj+dsqxV79zFqExDdatnNY/ZWc2nsJU1p/OgT7fd3dXwlF6OjYaFQCfMoeTA19PWq+wVmYgimVA+V+g==", "license": "MIT" }, "node_modules/@next/swc-darwin-arm64": { - "version": "16.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.11.tgz", - "integrity": "sha512-wryL4pjKmDwGv2ox6+GZDFxvmtSRLqApBR8kL1j4+vhB7Z5vJC/zAnXpiR9Xkfzl0AS8WLMnsuGV/UKI67/rrw==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.3.3.tgz", + "integrity": "sha512-8Hiv32QJPwdV6KYJ8meR9SBA061tQqnIKTJDocvOXlEQqib0xMFpzArosuffFUUc0sslbh7QQ8a3Yey1QV8EIw==", "cpu": [ "arm64" ], @@ -2200,9 +2307,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "16.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.11.tgz", - "integrity": "sha512-aZl2j4f/fLyjQvOhv0Oe9UaMAQHolYpKhctsoYzplSumKJKPUmgjcf6545aBtysLTcu994TREd0+pSgNE4ohmg==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.3.3.tgz", + "integrity": "sha512-A1lgKgwVchRYmSe467zdwhxT9040dd8lH+o65sL5Jet8fjB4kegw/rDyPIpYVRb6jAqwXFOJpjIXJLxQKLiE3A==", "cpu": [ "x64" ], @@ -2216,9 +2323,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "16.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.11.tgz", - "integrity": "sha512-5jEriyEnH/LWFy27L2ZG0XaLlyEJIjhsImEsiS9P563PKEVp2BVups/xfOucIrsvVntp11oNcZwjHvaDPYVB5g==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.3.3.tgz", + "integrity": "sha512-bf0FIssMFueU2dm7vQEWWxk0c8UjKTdW0yzuh0sQsD8pf1+KCLDdaqhYZNMYGmXwEOiHAUzgBKudovIlcvvBjg==", "cpu": [ "arm64" ], @@ -2235,9 +2342,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "16.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.11.tgz", - "integrity": "sha512-eIjcpx2fnnFSSkZDbTxy74KnokUXDjfoLClpWelfgHLf621aTqswhwXQ7GkD5K5rplrS6LZ/Bj+mVuvzluBOEg==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.3.3.tgz", + "integrity": "sha512-W7viwCk9JY/cAkdz/A273rd5bb3RgT/IHwR7Upv90tunjBWNtAAhGhoecHh+teRNRSinuAFmE+l7fwZ4YKkrXg==", "cpu": [ "arm64" ], @@ -2254,9 +2361,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "16.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.11.tgz", - "integrity": "sha512-8WgzpaWMs46qJT9kiV47cje86L0x/Mu9t8/Gwj+pnbgW3rETVfCnaScPjlYUwNScpOozdcIMHWmAvuZJUonR2w==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.3.3.tgz", + "integrity": "sha512-0W46zw1N3ODpI6n0GeivHvvob1pooozgZVqy65k0mh4/7vr+FbY9+WpHzNVXjHipJf/A3FDheBG19H1s5A25rA==", "cpu": [ "x64" ], @@ -2273,9 +2380,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "16.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.11.tgz", - "integrity": "sha512-I3UgPds7G4ZYnTb/H+5GBGuUT2DhAk6j0mL6A4s63RjFs74wB2hOWP0vaxsK+3NJraExt3eYEPQ/UtT0x/64Nw==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.3.3.tgz", + "integrity": "sha512-H4mBso8ZTMBPtdT0PN0pBx2ayTvQuTuvS6qT13d77yVFJXAPCxkyIhLTmdMaGTJs0krQYI/qpzdHijCeihXhbg==", "cpu": [ "x64" ], @@ -2292,9 +2399,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "16.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.11.tgz", - "integrity": "sha512-n89CjtcThnjrwgJMAiI5xbqwLY51zvwC9tSlArmVndAJLYVl9T9UAdlkXTmZvE++idoXe8KdglQlhNRdUp1c6g==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.3.3.tgz", + "integrity": "sha512-cTMUJpcEGmeywofCUfhR+rSsoE33+rVPnPEYNTNdLNlsOeEg/vktOsKUSTb28vUGqD2jkm4Zaskcwn7OCI6FQg==", "cpu": [ "arm64" ], @@ -2308,9 +2415,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "16.2.11", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.11.tgz", - "integrity": "sha512-md8CLNggS1Dx9pUgApzps5uAf+N8GN9xywzmNx9vHAWo94HtBwCCqkSnhIrdfQe83Dhz8Lfo/20Nb1Zxal092w==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.3.3.tgz", + "integrity": "sha512-2VR4cTBzHXaBjnGsuH6GyJjENzQOmHeAh11uY1iUhjm3j5dEUrVJuUj+VL78jaGi/Dik8xS76zEj18BsFhlVZQ==", "cpu": [ "x64" ], @@ -3786,9 +3893,9 @@ } }, "node_modules/@primer/react-brand": { - "version": "0.70.0", - "resolved": "https://registry.npmjs.org/@primer/react-brand/-/react-brand-0.70.0.tgz", - "integrity": "sha512-6La/hIIbNp8OA3ZxUTzxRJmpr8Imr5NdMiSVjWJTGyEtIuEJ9d4VA9OL0qQkg5cdeq+GTr6qZuTHQQh8cAhG8g==", + "version": "0.74.0", + "resolved": "https://registry.npmjs.org/@primer/react-brand/-/react-brand-0.74.0.tgz", + "integrity": "sha512-bOgO48EBP7EYRE4/JSqrd33jj4islNBgCUNTs+DZqwCjsxLxlnzq8ezoeEQP2Pr1fpZcke7ImtPzU7h3VQuXLQ==", "license": "MIT", "dependencies": { "@oddbird/popover-polyfill": "0.5.2", @@ -4283,9 +4390,9 @@ "license": "MIT" }, "node_modules/@swc/helpers": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", - "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -8498,9 +8605,9 @@ "dev": true }, "node_modules/fast-uri": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", - "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz", + "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==", "funding": [ { "type": "github", @@ -10423,9 +10530,9 @@ } }, "node_modules/js-yaml": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.3.tgz", - "integrity": "sha512-n+mUVyUX5bVv7G/G2zyIHOhdxfuU1dY2NOFzTQUWiMUbFss8b57NFlgCCaggU78wSw5KVS9cllzeLyzyR+n5nw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.4.1.tgz", + "integrity": "sha512-28R/k+NAjeuf7+CKlTxWZVExJGwVVLwY06DgEnOMz2gEpfNkDcD7QvyiVPT0xy0XXhU8vHsd4Ot42OOPdJG7dQ==", "funding": [ { "type": "github", @@ -12311,16 +12418,16 @@ } }, "node_modules/next": { - "version": "16.2.11", - "resolved": "https://registry.npmjs.org/next/-/next-16.2.11.tgz", - "integrity": "sha512-B339zaqbyK8cmxhoAvLrcwoabwCP1wz21zSzfqxqXAemTu2BXnH7tQnfcglKv1vnMUIDBc+Hth7XODQriTZiRQ==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/next/-/next-16.3.3.tgz", + "integrity": "sha512-tuRTx1nQ/yVw83cwJBo9F+njGUgMn3UHQycreWHB8XsStvvAh1AthbI8/4IpKnFaF58F+iSiHejYOlMQ/eq83g==", "license": "MIT", "dependencies": { - "@next/env": "16.2.11", - "@swc/helpers": "0.5.15", + "@next/env": "16.3.3", + "@swc/helpers": "0.5.23", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", - "postcss": "8.4.31", + "postcss": "8.5.23", "styled-jsx": "5.1.6" }, "bin": { @@ -12330,15 +12437,15 @@ "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "16.2.11", - "@next/swc-darwin-x64": "16.2.11", - "@next/swc-linux-arm64-gnu": "16.2.11", - "@next/swc-linux-arm64-musl": "16.2.11", - "@next/swc-linux-x64-gnu": "16.2.11", - "@next/swc-linux-x64-musl": "16.2.11", - "@next/swc-win32-arm64-msvc": "16.2.11", - "@next/swc-win32-x64-msvc": "16.2.11", - "sharp": "^0.34.5" + "@next/swc-darwin-arm64": "16.3.3", + "@next/swc-darwin-x64": "16.3.3", + "@next/swc-linux-arm64-gnu": "16.3.3", + "@next/swc-linux-arm64-musl": "16.3.3", + "@next/swc-linux-x64-gnu": "16.3.3", + "@next/swc-linux-x64-musl": "16.3.3", + "@next/swc-win32-arm64-msvc": "16.3.3", + "@next/swc-win32-x64-msvc": "16.3.3", + "sharp": "^0.35.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -14214,9 +14321,9 @@ "license": "ISC" }, "node_modules/sharp": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz", - "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==", + "version": "0.35.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.4.tgz", + "integrity": "sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==", "license": "Apache-2.0", "dependencies": { "@img/colour": "^1.1.0", @@ -14230,31 +14337,31 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.35.3", - "@img/sharp-darwin-x64": "0.35.3", - "@img/sharp-freebsd-wasm32": "0.35.3", - "@img/sharp-libvips-darwin-arm64": "1.3.2", - "@img/sharp-libvips-darwin-x64": "1.3.2", - "@img/sharp-libvips-linux-arm": "1.3.2", - "@img/sharp-libvips-linux-arm64": "1.3.2", - "@img/sharp-libvips-linux-ppc64": "1.3.2", - "@img/sharp-libvips-linux-riscv64": "1.3.2", - "@img/sharp-libvips-linux-s390x": "1.3.2", - "@img/sharp-libvips-linux-x64": "1.3.2", - "@img/sharp-libvips-linuxmusl-arm64": "1.3.2", - "@img/sharp-libvips-linuxmusl-x64": "1.3.2", - "@img/sharp-linux-arm": "0.35.3", - "@img/sharp-linux-arm64": "0.35.3", - "@img/sharp-linux-ppc64": "0.35.3", - "@img/sharp-linux-riscv64": "0.35.3", - "@img/sharp-linux-s390x": "0.35.3", - "@img/sharp-linux-x64": "0.35.3", - "@img/sharp-linuxmusl-arm64": "0.35.3", - "@img/sharp-linuxmusl-x64": "0.35.3", - "@img/sharp-webcontainers-wasm32": "0.35.3", - "@img/sharp-win32-arm64": "0.35.3", - "@img/sharp-win32-ia32": "0.35.3", - "@img/sharp-win32-x64": "0.35.3" + "@img/sharp-darwin-arm64": "0.35.4", + "@img/sharp-darwin-x64": "0.35.4", + "@img/sharp-freebsd-wasm32": "0.35.4", + "@img/sharp-libvips-darwin-arm64": "1.3.3", + "@img/sharp-libvips-darwin-x64": "1.3.3", + "@img/sharp-libvips-linux-arm": "1.3.3", + "@img/sharp-libvips-linux-arm64": "1.3.3", + "@img/sharp-libvips-linux-ppc64": "1.3.3", + "@img/sharp-libvips-linux-riscv64": "1.3.3", + "@img/sharp-libvips-linux-s390x": "1.3.3", + "@img/sharp-libvips-linux-x64": "1.3.3", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.3", + "@img/sharp-libvips-linuxmusl-x64": "1.3.3", + "@img/sharp-linux-arm": "0.35.4", + "@img/sharp-linux-arm64": "0.35.4", + "@img/sharp-linux-ppc64": "0.35.4", + "@img/sharp-linux-riscv64": "0.35.4", + "@img/sharp-linux-s390x": "0.35.4", + "@img/sharp-linux-x64": "0.35.4", + "@img/sharp-linuxmusl-arm64": "0.35.4", + "@img/sharp-linuxmusl-x64": "0.35.4", + "@img/sharp-webcontainers-wasm32": "0.35.4", + "@img/sharp-win32-arm64": "0.35.4", + "@img/sharp-win32-ia32": "0.35.4", + "@img/sharp-win32-x64": "0.35.4" }, "peerDependenciesMeta": { "@types/node": { @@ -14262,113 +14369,6 @@ } } }, - "node_modules/sharp/node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz", - "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==", - "cpu": [ - "ppc64" - ], - "libc": [ - "glibc" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/sharp/node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz", - "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==", - "cpu": [ - "riscv64" - ], - "libc": [ - "glibc" - ], - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/sharp/node_modules/@img/sharp-linux-ppc64": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz", - "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==", - "cpu": [ - "ppc64" - ], - "libc": [ - "glibc" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.3.2" - } - }, - "node_modules/sharp/node_modules/@img/sharp-linux-riscv64": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz", - "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==", - "cpu": [ - "riscv64" - ], - "libc": [ - "glibc" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.3.2" - } - }, - "node_modules/sharp/node_modules/@img/sharp-win32-arm64": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz", - "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=20.9.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "dev": true, diff --git a/package.json b/package.json index 3fc6618ceceb..98c20df90fbd 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,6 @@ "purge-fastly": "tsx src/workflows/purge-fastly.ts", "purge-fastly-changed-content": "tsx src/workflows/purge-fastly-changed-content.ts", "wait-for-build": "tsx src/workflows/wait-for-build.ts", - "readability-report": "tsx src/workflows/experimental/readability-report.ts", "ready-for-docs-review": "tsx src/workflows/ready-for-docs-review.ts", "release-banner": "tsx src/ghes-releases/scripts/release-banner.ts", "repo-sync": "./src/workflows/local-repo-sync.sh", @@ -193,7 +192,7 @@ "@primer/octicons-react": "^19.22.0", "@primer/primitives": "^11.3.1", "@primer/react": "38.19.0", - "@primer/react-brand": "^0.70.0", + "@primer/react-brand": "^0.74.0", "accept-language-parser": "^1.5.0", "ajv": "^8.18.0", "ajv-errors": "^3.0.0", @@ -244,7 +243,7 @@ "mdast-util-to-markdown": "2.1.2", "mdast-util-to-string": "^4.0.0", "micromark-extension-gfm": "^3.0.0", - "next": "^16.2.6", + "next": "^16.3.3", "ora": "^9.3.0", "parse5": "8.0.1", "quick-lru": "7.0.1", @@ -263,7 +262,7 @@ "remark-remove-comments": "^1.1.1", "remark-stringify": "^11.0.0", "semver": "^7.7.4", - "sharp": "0.35.3", + "sharp": "0.35.4", "slash": "^5.1.0", "strip-ansi": "7.1.0", "swr": "^2.4.0", @@ -369,7 +368,7 @@ "brace-expansion": "^5.0.8" }, "sharp": "$sharp", - "fast-uri": "^3.1.5" + "fast-uri": "^3.1.7" }, "optionalDependencies": { "esm": "^3.2.25" diff --git a/src/ai-tools/lib/auth-utils.ts b/src/ai-tools/lib/auth-utils.ts index 9639c6fc35b0..c85ebaba54e5 100644 --- a/src/ai-tools/lib/auth-utils.ts +++ b/src/ai-tools/lib/auth-utils.ts @@ -1,7 +1,8 @@ import { execSync } from 'child_process' /** - * Ensure GitHub token is available, exiting process if not found + * Falls back to the gh CLI token, setting process.env.GITHUB_TOKEN. + * Exits the process if neither is available. */ export function ensureGitHubToken(): void { if (!process.env.GITHUB_TOKEN) { diff --git a/src/ai-tools/lib/call-models-api.ts b/src/ai-tools/lib/call-models-api.ts index 70e2a90b6f58..db8883f7c536 100644 --- a/src/ai-tools/lib/call-models-api.ts +++ b/src/ai-tools/lib/call-models-api.ts @@ -42,7 +42,6 @@ export async function callModelsApi( ): Promise { let aiResponse: ChatCompletionChoice - // Set default model if none specified if (!promptWithContent.model) { promptWithContent.model = DEFAULT_MODEL if (verbose) { @@ -51,7 +50,6 @@ export async function callModelsApi( } try { - // Create an AbortController for timeout handling const controller = new AbortController() const timeoutId = setTimeout(() => controller.abort(), API_TIMEOUT_MS) @@ -82,7 +80,6 @@ export async function callModelsApi( if (!response.ok) { let errorMessage = `HTTP error! status: ${response.status} - ${response.statusText}` - // Try to get more detailed error information try { const errorBody = await response.json() if (errorBody.error && errorBody.error.message) { @@ -92,7 +89,6 @@ export async function callModelsApi( // If we can't parse error body, continue with basic error } - // Add helpful hints for common errors if (response.status === 401) { errorMessage += ' (Check your GITHUB_TOKEN)' } else if (response.status === 400) { @@ -135,9 +131,7 @@ export async function callModelsApi( return cleanAIResponse(aiResponse.message.content) } -// Helper function to clean up AI response content function cleanAIResponse(content: string): string { - // Remove markdown code blocks return content .replace(/^```[\w]*\n/gm, '') // Remove opening code blocks .replace(/\n```$/gm, '') // Remove closing code blocks at end diff --git a/src/ai-tools/lib/file-utils.ts b/src/ai-tools/lib/file-utils.ts index d113396793bd..63cbe92a10e7 100644 --- a/src/ai-tools/lib/file-utils.ts +++ b/src/ai-tools/lib/file-utils.ts @@ -6,9 +6,6 @@ import { schema } from '@/frame/lib/frontmatter' const MAX_DIRECTORY_DEPTH = 20 -/** - * Enhanced recursive markdown file finder with symlink, depth, and root path checks - */ export function findMarkdownFiles( dir: string, rootDir: string, @@ -33,7 +30,6 @@ export function findMarkdownFiles( return [] } visited.add(realDir) - // Prevent excessive depth if (depth > maxDepth) { return [] } @@ -71,9 +67,8 @@ interface FrontmatterProperties { } /** - * Function to merge new frontmatter properties into existing file while preserving formatting. - * Uses surgical replacement to only modify the specific field(s) being updated, - * preserving all original YAML formatting for unchanged fields. + * Replaces only the fields being updated, so the original YAML formatting + * of every other field survives. */ export function mergeFrontmatterProperties(filePath: string, newPropertiesYaml: string): string { const content = fs.readFileSync(filePath, 'utf8') @@ -90,7 +85,7 @@ export function mergeFrontmatterProperties(filePath: string, newPropertiesYaml: } try { - // Clean up the AI response - remove markdown code blocks if present + // The model often wraps its output in a code fence. let cleanedYaml = newPropertiesYaml.trim() cleanedYaml = cleanedYaml.replace(/^```ya?ml\s*\n/i, '') cleanedYaml = cleanedYaml.replace(/\n```\s*$/i, '') @@ -111,12 +106,10 @@ export function mergeFrontmatterProperties(filePath: string, newPropertiesYaml: }), ) - // Split content into lines for surgical replacement const lines = content.split('\n') let inFrontmatter = false let frontmatterEndIndex = -1 - // Find frontmatter boundaries for (let i = 0; i < lines.length; i++) { if (lines[i].trim() === '---') { if (!inFrontmatter) { @@ -128,17 +121,14 @@ export function mergeFrontmatterProperties(filePath: string, newPropertiesYaml: } } - // Replace each field value while preserving everything else for (const [key, value] of Object.entries(sanitizedProperties)) { const formattedValue = typeof value === 'string' ? `'${value.replace(/'/g, "''")}'` : value - // Find the line with this field let foundField = false for (let i = 1; i < frontmatterEndIndex; i++) { const line = lines[i] if (line.startsWith(`${key}:`)) { foundField = true - // Simple replacement: keep the field name and spacing, replace the value const colonIndex = line.indexOf(':') const leadingSpace = line.substring(colonIndex + 1, colonIndex + 2) // Usually a space lines[i] = `${key}:${leadingSpace}${formattedValue}` @@ -153,7 +143,6 @@ export function mergeFrontmatterProperties(filePath: string, newPropertiesYaml: } } - // If field doesn't exist, add it before the closing --- if (!foundField && frontmatterEndIndex > 0) { lines.splice(frontmatterEndIndex, 0, `${key}: ${formattedValue}`) frontmatterEndIndex++ diff --git a/src/ai-tools/lib/prompt-utils.ts b/src/ai-tools/lib/prompt-utils.ts index 1715d7bc2202..7d5f875ba348 100644 --- a/src/ai-tools/lib/prompt-utils.ts +++ b/src/ai-tools/lib/prompt-utils.ts @@ -17,17 +17,11 @@ export interface PromptData { max_tokens?: number } -/** - * Get the prompts directory path - */ export function getPromptsDir(): string { const __dirname = path.dirname(fileURLToPath(import.meta.url)) return path.join(__dirname, '../prompts') } -/** - * Dynamically discover available editor types from prompt files - */ export function getAvailableEditorTypes(promptDir: string): string[] { const editorTypes: string[] = [] @@ -46,16 +40,10 @@ export function getAvailableEditorTypes(promptDir: string): string[] { return editorTypes } -/** - * Get formatted description of available refinement types - */ export function getRefinementDescriptions(editorTypes: string[]): string { return editorTypes.join(', ') } -/** - * Enrich context for intro prompt on index.md files - */ export function enrichIndexContext(filePath: string, content: string): string { if (!filePath.endsWith('index.md')) return content @@ -72,7 +60,6 @@ export function enrichIndexContext(filePath: string, content: string): string { .join(' ') : '' - // Get child article titles const titles: string[] = [] if (data.children && Array.isArray(data.children)) { const dir = path.dirname(filePath) @@ -94,7 +81,6 @@ export function enrichIndexContext(filePath: string, content: string): string { } } - // Build context note const parts: string[] = [] if (productName) parts.push(`Product: ${productName}`) if (titles.length > 0) parts.push(`Child articles: ${titles.join(', ')}`) @@ -114,24 +100,19 @@ export function enrichIndexContext(filePath: string, content: string): string { return content } -/** - * Call an editor with the given content and options - */ export async function callEditor( editorType: string, content: string, promptDir: string, writeMode: boolean, verbose = false, - promptContent?: string, // Optional: use this instead of reading from file + promptContent?: string, // Use this instead of reading a prompt file ): Promise { let markdownPrompt: string if (promptContent) { - // Use provided prompt content (e.g., from Copilot Space) markdownPrompt = promptContent } else { - // Read from file const markdownPromptPath = path.join(promptDir, `${editorType}.md`) if (!fs.existsSync(markdownPromptPath)) { @@ -144,7 +125,6 @@ export async function callEditor( const prompt = load(fs.readFileSync(promptTemplatePath, 'utf8')) as PromptData - // Validate the prompt template has required properties if (!prompt.messages || !Array.isArray(prompt.messages)) { throw new Error('Invalid prompt template: missing or invalid messages array') } @@ -152,7 +132,8 @@ export async function callEditor( for (const msg of prompt.messages) { msg.content = msg.content.replace('{{markdownPrompt}}', markdownPrompt) msg.content = msg.content.replace('{{input}}', content) - // Replace writeMode template variable with simple string replacement + // Resolve the write-mode markers, then strip whatever they marked + // for removal. msg.content = msg.content.replace( //g, writeMode ? '' : '', @@ -166,7 +147,6 @@ export async function callEditor( writeMode ? '' : '', ) - // Remove sections marked for removal msg.content = msg.content.replace(/[\s\S]*?/g, '') } diff --git a/src/ai-tools/lib/spaces-utils.ts b/src/ai-tools/lib/spaces-utils.ts index e5859ec5b338..e0f993b3b046 100644 --- a/src/ai-tools/lib/spaces-utils.ts +++ b/src/ai-tools/lib/spaces-utils.ts @@ -1,6 +1,3 @@ -/** - * Copilot Space API response types - */ import { fetchWithRetry, readBodyWithTimeout } from '@/frame/lib/fetch-utils' export interface SpaceResource { @@ -25,9 +22,6 @@ export interface SpaceData { updated_at: string } -/** - * Parse a Copilot Space URL to extract org and space ID - */ export function parseSpaceUrl(url: string): { org: string; id: string } { // Expected format: https://api.github.com/orgs/{org}/copilot-spaces/{id} const match = url.match(/\/orgs\/([^/]+)\/copilot-spaces\/(\d+)/) @@ -44,9 +38,6 @@ export function parseSpaceUrl(url: string): { org: string; id: string } { } } -/** - * Fetch a Copilot Space from the GitHub API - */ export async function fetchCopilotSpace(spaceUrl: string): Promise { const { org, id } = parseSpaceUrl(spaceUrl) const apiUrl = `https://api.github.com/orgs/${org}/copilot-spaces/${id}` @@ -88,26 +79,20 @@ export async function fetchCopilotSpace(spaceUrl: string): Promise { return (await readBodyWithTimeout(response, () => response.json(), 30_000)) as SpaceData } -/** - * Convert a Copilot Space to a markdown prompt file - */ export function convertSpaceToPrompt(space: SpaceData): string { const timestamp = new Date().toISOString() const lines: string[] = [] - // Header with metadata lines.push(``) lines.push(``) lines.push(``) lines.push('') - // General instructions if (space.general_instructions) { lines.push(space.general_instructions.trim()) lines.push('') } - // Add each resource as a context section if (space.resources_attributes && space.resources_attributes.length > 0) { for (const resource of space.resources_attributes) { if (resource.resource_type === 'free_text' && resource.metadata) { diff --git a/src/ai-tools/scripts/ai-tools.ts b/src/ai-tools/scripts/ai-tools.ts index 62f2d3a04cfb..2c66e8c72938 100644 --- a/src/ai-tools/scripts/ai-tools.ts +++ b/src/ai-tools/scripts/ai-tools.ts @@ -19,7 +19,6 @@ dotenv.config({ quiet: true }) const promptDir = getPromptsDir() -// Ensure GitHub token is available ensureGitHubToken() const editorTypes = getAvailableEditorTypes(promptDir) @@ -68,7 +67,7 @@ program .option('-f, --files ', 'One or more content file paths in the content directory') .action((options: CliOptions) => { ;(async () => { - // Handle export-space workflow (standalone, doesn't process files) + // The export-space workflow is standalone and processes no files. if (options.exportSpace) { if (!options.output) { console.error('Error: --export-space requires --output option') @@ -95,13 +94,11 @@ program } } - // Validate mutually exclusive options if (options.space && options.prompt) { console.error('Error: Cannot use both --space and --prompt options') process.exit(1) } - // Files are required for processing workflows if (!options.files || options.files.length === 0) { console.error('Error: --files option is required (unless using --export-space)') process.exit(1) @@ -113,7 +110,7 @@ program let prompts: string[] = [] let promptContent: string | undefined - // Handle Space workflow (in-memory) + // Build the prompt in memory instead of reading a prompt file. if (options.space) { try { spinner.text = 'Fetching Copilot Space...' @@ -130,7 +127,6 @@ program process.exit(1) } } else { - // Handle local prompt workflow prompts = options.prompt || options.refine || [] if (prompts.length === 0) { @@ -140,7 +136,7 @@ program } } - // Validate local prompt types exist (skip for Space workflow) + // A Space prompt is not a local file, so there is nothing to validate. if (!options.space) { const availableEditors = editorTypes for (const editor of prompts) { @@ -168,16 +164,13 @@ program continue } - // Check if it's a directory const isDirectory = fs.statSync(filePath).isDirectory() for (const editorType of prompts) { try { - // For other editor types, process individual files const filesToProcess: string[] = [] if (isDirectory) { - // Find all markdown files in the directory recursively // Use process.cwd() as the root directory for safety const rootDir = fs.realpathSync(process.cwd()) filesToProcess.push(...findMarkdownFiles(filePath, rootDir)) @@ -197,7 +190,7 @@ program const relativePath = path.relative(process.cwd(), fileToProcess) spinner.text = `Processing: ${relativePath}` try { - // Expand Liquid references before processing + // Capture the intro before Liquid expansion rewrites it. let originalIntro = '' if (editorType === 'intro') { const originalContent = fs.readFileSync(fileToProcess, 'utf8') @@ -212,7 +205,6 @@ program let content = fs.readFileSync(fileToProcess, 'utf8') - // For intro prompt, add original intro and enrich context if (editorType === 'intro') { if (originalIntro) { content = `\n\n---\nOriginal intro (unresolved): ${originalIntro}\n---\n\n${content}` @@ -220,7 +212,6 @@ program content = enrichIndexContext(fileToProcess, content) } - // For content-type prompt, skip files that already have contentType if (editorType === 'content-type' && content.includes('contentType:')) { spinner.stop() console.log(`⏭️ Skipping ${relativePath} (already has contentType)`) @@ -240,24 +231,22 @@ program if (options.write) { if (editorType === 'intro' || editorType === 'content-type') { - // For frontmatter addition/modification, merge properties instead of overwriting entire file + // Merge frontmatter instead of overwriting the whole file. const updatedContent = mergeFrontmatterProperties(fileToProcess, answer) fs.writeFileSync(fileToProcess, updatedContent, 'utf8') console.log(`✅ Added frontmatter properties to: ${relativePath}`) } else { - // For other editor types, write the full result back to the original file fs.writeFileSync(fileToProcess, answer, 'utf8') console.log(`✅ Updated: ${relativePath}`) } } else { - // Just output to console (current behavior) if (filesToProcess.length > 1) { console.log(`\n=== ${relativePath} ===`) } console.log(answer) } - // Always restore Liquid references after processing (even in non-write mode) + // Restore Liquid references even when not writing. if (options.verbose) { console.log(`Restoring Liquid references in: ${relativePath}`) } @@ -271,7 +260,6 @@ program try { runLiquidTagsScript('restore', [fileToProcess], false) } catch (restoreError) { - // Log restore failures in verbose mode for debugging if (options.verbose) { console.error(`Warning: Failed to restore Liquid references: ${restoreError}`) } @@ -291,7 +279,6 @@ program spinner.stop() - // Exit with appropriate code based on whether any errors occurred if (process.exitCode) { process.exit(process.exitCode) } @@ -300,9 +287,6 @@ program program.parse(process.argv) -/** - * Run liquid-tags command on specified file paths - */ function runLiquidTagsScript( command: 'expand' | 'restore', filePaths: string[], @@ -314,7 +298,6 @@ function runLiquidTagsScript( } try { - // Run liquid-tags script via tsx const liquidTagsScriptPath = path.join( process.cwd(), 'src/content-render/scripts/liquid-tags.ts', @@ -330,7 +313,6 @@ function runLiquidTagsScript( } } -// Handle graceful shutdown process.on('SIGINT', () => { console.log('\n\n🛑 Process interrupted by user') process.exit(0) diff --git a/src/archives/middleware/archived-enterprise-versions.ts b/src/archives/middleware/archived-enterprise-versions.ts index d7501fb082e8..6a678383e7c8 100644 --- a/src/archives/middleware/archived-enterprise-versions.ts +++ b/src/archives/middleware/archived-enterprise-versions.ts @@ -105,7 +105,6 @@ export default async function archivedEnterpriseVersions( const { isArchived, requestedVersion } = isArchivedVersion(req) if (!isArchived || !requestedVersion) return next() - // Skip asset paths if (patterns.assetPaths.test(req.path)) return next() const redirectCode = pathLanguagePrefixed(req.path) ? 301 : 302 @@ -176,8 +175,6 @@ export default async function archivedEnterpriseVersions( // URLs like this only need to redirect the original `req.path` // didn't already have a language if (newPath !== undefined && (newPath || !language)) { - // Construct the new URL by combining the new language and the - // new destination. const redirect = `/${language || 'en'}${newPath || withoutLanguagePath}` cacheAggressively(res) return res.safeRedirect(redirectCode, redirect) @@ -258,8 +255,6 @@ export default async function archivedEnterpriseVersions( ])() const responseTime = Date.now() - startTime - // Log warnings for slow responses to help identify degraded performance - // A response time over half the timeout indicates potential issues if (responseTime > WARN_RESPONSE_THRESHOLD) { logger.warn('Slow response from archived enterprise content', { version: requestedVersion, @@ -270,14 +265,14 @@ export default async function archivedEnterpriseVersions( }) } - // Log non-200 responses — use warn for 404s (expected for missing archived - // pages) and error for genuine upstream failures (5xx, timeouts). + // Warn on 404s, which are expected for missing archived pages. + // Everything else is a genuine upstream failure. if (r.status !== 200) { let upstreamBody: string | undefined try { upstreamBody = await readBodyWithTimeout(r, () => r.text(), timeoutConfiguration.response) } catch { - // ignore — body reading failure shouldn't affect error handling + // A body we cannot read should not change how we handle the error. } const level = r.status === 404 ? 'warn' : 'error' logger[level]('Failed to fetch archived enterprise content', { @@ -369,7 +364,6 @@ export default async function archivedEnterpriseVersions( ) } - // Continue with remaining replacements modifiedBody = modifiedBody.replaceAll( /="(\.\.\/)*assets/g, `="${ENTERPRISE_GH_PAGES_URL_PREFIX}${requestedVersion}/assets`, @@ -465,7 +459,7 @@ function getProxyPath(reqPath: string, requestedVersion: string) { } // Module-level global cache object. -// Get's populated lazily inside getFallbackRedirect(). +// Gets populated lazily inside getFallbackRedirect(). const fallbackRedirectLookups = new Map() function getFallbackRedirect(req: ExtendedRequest) { @@ -543,8 +537,8 @@ function getEarlyNotFoundReason(reqPath: string, version: string): string | null return 'double-slash' } - // Duplicated "/developer/developer/" segment — these are broken - // crawler URLs from the old developer.github.com site. + // A duplicated "/developer/developer/" segment means a broken crawler URL + // from the old developer.github.com site. if (reqPath.includes('/developer/developer/')) { return 'developer-developer' } diff --git a/src/article-api/lib/get-all-toc-items.ts b/src/article-api/lib/get-all-toc-items.ts index bf3e94824931..985bb2667c1c 100644 --- a/src/article-api/lib/get-all-toc-items.ts +++ b/src/article-api/lib/get-all-toc-items.ts @@ -19,11 +19,6 @@ interface TocItem extends LinkData { * Recursively gathers all TOC items from a page and its descendants. * This mirrors the behavior of getTocItems() in the generic-toc middleware * but works with the page.children frontmatter property. - * - * @param page - The page to gather TOC items from - * @param context - The rendering context - * @param options - Configuration options - * @returns Array of TocItems with nested childTocItems */ export async function getAllTocItems( page: Page, @@ -41,7 +36,6 @@ export async function getAllTocItems( return [] } - // Get the page's pathname for resolving children const pagePermalink = page.permalinks.find( (p) => p.languageCode === languageCode && p.pageVersion === context.currentVersion, ) @@ -92,10 +86,6 @@ export async function getAllTocItems( /** * Flattens nested TOC items into a single array. * Only includes leaf nodes (items without children) or all items based on options. - * - * @param tocItems - The nested TOC items to flatten - * @param options - Configuration options - * @returns Flat array of LinkData items */ export function flattenTocItems( tocItems: TocItem[], @@ -125,7 +115,6 @@ export function flattenTocItems( } } - // Recurse into children if (hasChildren) { recurse(item.childTocItems!) } diff --git a/src/article-api/lib/get-link-data.ts b/src/article-api/lib/get-link-data.ts index f9c33c74608e..45749ec06a0e 100644 --- a/src/article-api/lib/get-link-data.ts +++ b/src/article-api/lib/get-link-data.ts @@ -5,15 +5,9 @@ import type { LinkData } from '@/article-api/transformers/types' * Resolves link data (title, href, intro) for a given href and page * * This helper is used by landing page transformers to build link lists. - * It resolves the page from an href, renders its title and intro, and + * It resolves the page from an href (relative or absolute), renders its title + * and intro, and * returns the canonical permalink. - * - * @param href - The href to resolve (can be relative or absolute) - * @param languageCode - The language code for the current page - * @param pathname - The current page's pathname (for relative resolution) - * @param context - The rendering context - * @param resolvePath - Function to resolve an href to a Page object - * @returns LinkData with resolved title, href, and optional intro */ export async function getLinkData( href: string, diff --git a/src/article-api/lib/graphql-helpers.ts b/src/article-api/lib/graphql-helpers.ts index 6db482d7ff06..dc07ef55ca18 100644 --- a/src/article-api/lib/graphql-helpers.ts +++ b/src/article-api/lib/graphql-helpers.ts @@ -2,10 +2,7 @@ import type { Context, Page } from '@/types' import { renderContent } from '@/content-render/index' import matter from '@gr2m/gray-matter' -/** - * Extract manual content from page markdown - * Used by GraphQL transformers to get content before the auto-generated marker - */ +// Returns the part of the page markdown before the auto-generated marker. export async function extractManualContent(page: Page, context: Context): Promise { if (!page.markdown) return '' diff --git a/src/article-api/lib/load-template.ts b/src/article-api/lib/load-template.ts index 2cf169ba791b..3e17398756ed 100644 --- a/src/article-api/lib/load-template.ts +++ b/src/article-api/lib/load-template.ts @@ -2,30 +2,12 @@ import { readFileSync } from 'fs' import { join, dirname } from 'path' import { fileURLToPath } from 'url' -// Get the directory path for the transformers directory -// This will be used to resolve template paths relative to transformers const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) -/** - * Load a template file from the templates directory - * - * This helper loads Liquid template files used by transformers. - * Templates are located in src/article-api/templates/ - * - * @param templateName - The name of the template file (e.g., 'landing-page.template.md') - * @returns The template content as a string - * - * @example - * ```typescript - * const template = loadTemplate('landing-page.template.md') - * const rendered = await renderContent(template, context) - * ``` - */ +// Loads a Liquid template file from src/article-api/templates, for use by +// transformers. export function loadTemplate(templateName: string): string { - // Templates are in ../templates relative to the lib directory - // lib is at src/article-api/lib - // templates is at src/article-api/templates const templatePath = join(__dirname, '../templates', templateName) return readFileSync(templatePath, 'utf8') } diff --git a/src/article-api/lib/strip-html-comments.ts b/src/article-api/lib/strip-html-comments.ts index 354bef9b0b63..1f15e67fc084 100644 --- a/src/article-api/lib/strip-html-comments.ts +++ b/src/article-api/lib/strip-html-comments.ts @@ -1,27 +1,10 @@ -/** - * Strips HTML comments from markdown content. - * Removes single-line HTML comments like - * while preserving other content. - * - * @param content - The markdown content to process - * @returns The content with HTML comments removed - */ +// Removes single-line HTML comments such as . export function stripHtmlComments(content: string): string { - // Remove single-line HTML comments () - // This matches comments that are on their own line or inline return content.replace(//g, '').trim() } -/** - * Strips HTML comments and cleans up extra blank lines. - * Useful for cleaning up rendered markdown content where HTML comments - * were on separate lines and their removal creates gaps. - * - * @param content - The markdown content to process - * @returns The content with HTML comments removed and blank lines normalized - */ +// Strips HTML comments, then collapses the blank lines their removal leaves behind. export function stripHtmlCommentsAndNormalizeWhitespace(content: string): string { - // Remove HTML comments let cleaned = stripHtmlComments(content) // Normalize multiple consecutive blank lines to at most 2 blank lines diff --git a/src/article-api/lib/summarize-schema.ts b/src/article-api/lib/summarize-schema.ts index 8ae39784399b..57f0276d6bd2 100644 --- a/src/article-api/lib/summarize-schema.ts +++ b/src/article-api/lib/summarize-schema.ts @@ -194,14 +194,12 @@ export function summarizeSchema(schema: JsonSchema): string { // compact and fast to render (shared types can recur dozens of times). const seen = new Set() - // Handle top-level composition for (const keyword of ['oneOf', 'anyOf', 'allOf'] as const) { if (schema[keyword]) { return renderCompositionVariants(keyword, schema[keyword]!, 0, 0, seen) } } - // Handle top-level array const schemaTypes = Array.isArray(schema.type) ? schema.type : schema.type ? [schema.type] : [] const isNullable = schemaTypes.includes('null') const primaryType = schemaTypes.find((t) => t !== 'null') @@ -215,7 +213,6 @@ export function summarizeSchema(schema: JsonSchema): string { const constraintStr = constraints.length ? ` (${constraints.join(', ')})` : '' const itemTitle = items.title - // Composition inside items const compositionKey = (['oneOf', 'anyOf', 'allOf'] as const).find((k) => items[k]) if (compositionKey) { const label = compositionKey.replace('Of', ' of') @@ -248,7 +245,6 @@ export function summarizeSchema(schema: JsonSchema): string { return `Array${constraintStr} of ${renderTypeConstraints(items)}${isNullable ? ' or null' : ''}` } - // Handle top-level object if (schema.properties) { // Note: we deliberately do NOT pre-mark schema.title here. Unlike the // array-items case above, a top-level object emits no visible titled diff --git a/src/article-api/liquid-renderers/index.ts b/src/article-api/liquid-renderers/index.ts index b25734dbad69..7b2739dec3ea 100644 --- a/src/article-api/liquid-renderers/index.ts +++ b/src/article-api/liquid-renderers/index.ts @@ -1,16 +1,9 @@ -/** - * API Transformer Liquid Tags - * - * This module contains custom Liquid tags used by article-api transformers - * to render API documentation in a consistent format. - */ +// Custom Liquid tags used by article-api transformers. import { restTags } from './rest-tags' -// Export all API transformer tags for registration export const apiTransformerTags = { ...restTags, } -// Re-export individual tag modules for direct access if needed export { restTags } from './rest-tags' diff --git a/src/article-api/liquid-renderers/rest-tags.ts b/src/article-api/liquid-renderers/rest-tags.ts index 63b3ee52cd6f..e8121e40c9c2 100644 --- a/src/article-api/liquid-renderers/rest-tags.ts +++ b/src/article-api/liquid-renderers/rest-tags.ts @@ -7,10 +7,7 @@ import { createLogger } from '@/observability/logger' const logger = createLogger('article-api/liquid-renderers/rest-tags') -/** - * Custom Liquid tag for rendering REST API parameters - * Usage: {% rest_parameter param %} - */ +// Usage: {% rest_parameter param %} export class RestParameter { private paramName: string @@ -56,10 +53,7 @@ export class RestParameter { } } -/** - * Custom Liquid tag for rendering REST API body parameters - * Usage: {% rest_body_parameter param indent %} - */ +// Usage: {% rest_body_parameter param indent %} export class RestBodyParameter { constructor( token: TagToken, @@ -67,7 +61,6 @@ export class RestBodyParameter { liquid: Liquid, private liquidContext?: LiquidContext, ) { - // Parse arguments - param name and optional indent level const args = token.args.trim().split(/\s+/) this.param = args[0] this.indent = args[1] ? parseInt(args[1]) : 0 @@ -106,7 +99,6 @@ export class RestBodyParameter { lines.push(`${prefix} Can be one of: ${param.enum.map((v) => `\`${v}\``).join(', ')}`) } - // Handle nested parameters if (param.childParamsGroups && param.childParamsGroups.length > 0) { for (const childGroup of param.childParamsGroups) { lines.push(await renderChildParameter(childGroup, context, indent + 1)) @@ -117,10 +109,7 @@ export class RestBodyParameter { } } -/** - * Custom Liquid tag for rendering REST API status codes - * Usage: {% rest_status_code statusCode %} - */ +// Usage: {% rest_status_code statusCode %} export class RestStatusCode { private statusCodeName: string @@ -158,9 +147,6 @@ export class RestStatusCode { } } -/** - * Helper function to render child parameters recursively - */ async function renderChildParameter( param: ChildParameter, context: Context, @@ -186,7 +172,6 @@ async function renderChildParameter( lines.push(`${prefix} Can be one of: ${param.enum.map((v: string) => `\`${v}\``).join(', ')}`) } - // Recursively handle nested parameters if (param.childParamsGroups && param.childParamsGroups.length > 0) { for (const child of param.childParamsGroups) { lines.push(await renderChildParameter(child, context, indent + 1)) @@ -196,9 +181,6 @@ async function renderChildParameter( return lines.join('\n') } -/** - * Helper function to convert HTML to markdown - */ async function htmlToMarkdown(html: string, context: Context): Promise { if (!html) return '' @@ -215,12 +197,10 @@ async function htmlToMarkdown(html: string, context: Context): Promise { if (process.env.NODE_ENV !== 'production') { throw error } - // Fallback to simple text extraction return fastTextOnly(html) } } -// Export tag names for registration export const restTags = { rest_parameter: RestParameter, rest_body_parameter: RestBodyParameter, diff --git a/src/article-api/middleware/article-body.ts b/src/article-api/middleware/article-body.ts index cae5e7f003b8..ce0c6717c341 100644 --- a/src/article-api/middleware/article-body.ts +++ b/src/article-api/middleware/article-body.ts @@ -11,10 +11,7 @@ import { normalizeRenderedMarkdown } from '@/article-api/lib/normalize-markdown' import { allVersions } from '@/versions/lib/all-versions' import type { Page } from '@/types' -/** - * Creates a mocked rendering request and contextualizes it. - * This is used to prepare a request for rendering pages in markdown format. - */ +// Creates a mocked rendering request, contextualized for rendering a page as markdown. async function createContextualizedRenderingRequest(pathname: string, page: Page) { const mockedContext: Context = {} const renderingReq = { @@ -52,7 +49,6 @@ export async function getArticleBody(req: ExtendedRequestWithPageInfo) { if (archived?.isArchived) throw new Error(`Page ${pathname} is archived and can't be rendered in markdown.`) - // Extract apiVersion from query params if provided const apiVersion = req.query.apiVersion as string | undefined // With the catch-all ArticleTransformer registered last, @@ -60,7 +56,6 @@ export async function getArticleBody(req: ExtendedRequestWithPageInfo) { const transformer = transformerRegistry.findTransformer(page) if (!transformer) throw new Error(`No transformer found for page: ${pathname}`) - // Use the transformer const renderingReq = await createContextualizedRenderingRequest(pathname, page) // Determine the API version to use (provided or latest) @@ -68,7 +63,6 @@ export async function getArticleBody(req: ExtendedRequestWithPageInfo) { const currentVersion = renderingReq.context.currentVersion let effectiveApiVersion = apiVersion - // Use latest version if not provided if (!effectiveApiVersion && currentVersion && allVersions[currentVersion]) { effectiveApiVersion = allVersions[currentVersion].latestApiVersion || undefined } diff --git a/src/article-api/middleware/pagelist.ts b/src/article-api/middleware/pagelist.ts index 295a18c49acf..a80978c481c4 100644 --- a/src/article-api/middleware/pagelist.ts +++ b/src/article-api/middleware/pagelist.ts @@ -35,15 +35,12 @@ router.get( defaultCacheControl(res) const response = { - // Simple list of all version strings versions: allVersionKeys, - // GHES-specific information ghesVersions: enterpriseServerReleases.supported, ghesLatest: enterpriseServerReleases.latest, ghesLatestStable: enterpriseServerReleases.latestStable, ghesReleaseCandidate: enterpriseServerReleases.releaseCandidate, ghesDeprecated: enterpriseServerReleases.deprecated, - // Full version details allVersions, } @@ -77,9 +74,7 @@ router.get( ) const response = { - // Simple list of language codes languages: languageKeys, - // Full language details (without redirectPatterns) allLanguages: sanitizedLanguages, } @@ -142,10 +137,8 @@ router.get( const pages = req.context.pages - // the keys of `context.pages` are permalinks const keys = Object.keys(pages) - // we filter the permalinks to get only our target version and language const filteredPermalinks = keys.filter((key) => versionMatcher(key, req.context!.currentVersion!, req.context!.currentLanguage!), ) diff --git a/src/article-api/middleware/validation.ts b/src/article-api/middleware/validation.ts index 031b60704e49..eff2c9c842da 100644 --- a/src/article-api/middleware/validation.ts +++ b/src/article-api/middleware/validation.ts @@ -16,23 +16,19 @@ export const pagelistValidationMiddleware = ( res: Response, next: NextFunction, ) => { - // get version from path, fallback to default version if it can't be resolved const versionFromPath = getVersionStringFromPath(req.path) || nonEnterpriseDefaultVersion - // in the rare case that this failed, probably won't be reached + // Defensive: getVersionStringFromPath falls back above, so this is unreachable. if (!versionFromPath) return res.status(400).json({ error: `Couldn't get version from the given path.` }) - // get the language from path, fallback to english if it can't be resolved const langFromPath = getLangFromPath(req.path) || 'en' - // in the rare case that the language fallback failed if (!langFromPath) return res.status(400).json({ error: `Couldn't get language from the from the given path.`, }) - // set the version and language in the context, we'll use it later req.context!.currentVersion = versionFromPath req.context!.currentLanguage = langFromPath return next() @@ -96,7 +92,7 @@ export const pageValidationMiddleware = ( pathname = `/${req.context.currentLanguage}` } - // Initialize archived property to avoid it being undefined + // Initialized so downstream readers never see undefined. req.pageinfo.archived = { isArchived: false } if (!(pathname in req.context.pages)) { @@ -133,24 +129,20 @@ export const apiVersionValidationMiddleware = ( ) => { const apiVersion = req.query.apiVersion as string | string[] | undefined - // If no apiVersion is provided, continue (it will default to latest) if (!apiVersion) { return next() } - // Validate apiVersion is a single string, not an array if (Array.isArray(apiVersion)) { return res.status(400).json({ error: "Multiple 'apiVersion' keys" }) } - // Get the version from the pathname query parameter const pathname = req.pageinfo?.pathname || (req.query.pathname as string) if (!pathname) { // This should not happen as pathValidationMiddleware runs first throw new Error('pathname not available for apiVersion validation') } - // Extract version from the pathname const currentVersion = getVersionStringFromPath(pathname) || nonEnterpriseDefaultVersion const versionInfo = allVersions[currentVersion] @@ -160,7 +152,6 @@ export const apiVersionValidationMiddleware = ( const validApiVersions = versionInfo.apiVersions || [] - // If this version has API versioning, validate the provided version if (validApiVersions.length > 0 && !validApiVersions.includes(apiVersion)) { return res.status(400).json({ error: `Invalid apiVersion '${apiVersion}' for ${currentVersion}. Valid API versions are: ${validApiVersions.join(', ')}`, diff --git a/src/article-api/scripts/generate-api-docs.ts b/src/article-api/scripts/generate-api-docs.ts index ba1b64c5f83d..081a72799d09 100644 --- a/src/article-api/scripts/generate-api-docs.ts +++ b/src/article-api/scripts/generate-api-docs.ts @@ -11,23 +11,18 @@ type ApiDoc = { } function main({ sources, outputPath }: { sources: string[]; outputPath: string }): void { - // Extract API documentation comments from all source files const allDocs = sources.flatMap((sourcePath) => extractApiDocs(sourcePath)) - // Generate markdown const markdown = generateMarkdown(allDocs) - // Update README updateReadme(outputPath, markdown) console.log('API documentation generated successfully!') } -// Extract API docs from comments in the file function extractApiDocs(file: string): ApiDoc[] { const apiDocs: ApiDoc[] = [] - // get the content from the api routes const content = readFileSync(file, 'utf8') // Get the router method definitions with JSDOC-style comments @@ -40,15 +35,13 @@ function extractApiDocs(file: string): ApiDoc[] { const method = match[2] const path = match[3] - // The description is first line of the comment const description = commentBlock .trim() .split('\n')[0] .trim() .replace(/^\*\s*/, '') - // Grab the other elements from the comment - // we currently support: params, returns, examples, throws + // We currently support params, returns, examples, and throws. const params = extractParams(commentBlock) const returns = extractReturns(commentBlock) const examples = extractExample(commentBlock) @@ -82,7 +75,6 @@ function extractThrows(commentBlock: string): string[] { return throws } -// Extract parameters from comment block function extractParams(commentBlock: string): string[] { const paramRegex = /@param\s+{([^}]+)}\s+([^\s]+)\s+([^\n]+)/g const params: string[] = [] @@ -98,7 +90,6 @@ function extractParams(commentBlock: string): string[] { return params } -// Extract return info from comment block function extractReturns(commentBlock: string): string { const returnMatch = commentBlock.match(/@returns\s+{([^}]+)}\s+([^\n]+)/) if (returnMatch) { @@ -109,7 +100,6 @@ function extractReturns(commentBlock: string): string { return '' } -// Extract example from comment block function extractExample(commentBlock: string): string { const exampleMatch = commentBlock.match(/@example\b([\s\S]*?)(?=\s*\*\s*@|\s*\*\/|$)/) if (exampleMatch) { @@ -123,7 +113,6 @@ function extractExample(commentBlock: string): string { return '' } -// Generate markdown from parsed documentation function generateMarkdown(apiDocs: ApiDoc[]): string { let markdown = '## Reference: API endpoints\n\n' @@ -157,14 +146,12 @@ function generateMarkdown(apiDocs: ApiDoc[]): string { return markdown } -// Update README with generated documentation function updateReadme(readmePath: string, markdown: string): void { if (existsSync(readmePath)) { let readme = readFileSync(readmePath, 'utf8') const placeholderComment = `` - // Replace API documentation section, or append to end if (readme.includes(placeholderComment)) { const pattern = new RegExp(`${placeholderComment}[\\s\\S]*`, 'g') readme = readme.replace(pattern, `${placeholderComment}\n${markdown}`) diff --git a/src/article-api/tests/article-body.ts b/src/article-api/tests/article-body.ts index 932d3e230ebb..ea47acacb8b2 100644 --- a/src/article-api/tests/article-body.ts +++ b/src/article-api/tests/article-body.ts @@ -38,7 +38,6 @@ describe('article body api', () => { const res = await get(makeURL('/en/get-started/start-your-journey/hello-world')) expect(res.statusCode).toBe(200) - // Check that octicons without aria-label get auto-generated ones expect(res.body).toContain('aria-label="check icon"') expect(res.body).toContain('aria-label="git branch icon"') }) @@ -47,7 +46,6 @@ describe('article body api', () => { const res = await get(makeURL('/en/get-started/start-your-journey/hello-world')) expect(res.statusCode).toBe(200) - // Check that custom aria-labels are preserved expect(res.body).toContain('aria-label="Supported"') expect(res.body).toContain('aria-label="Not supported"') }) @@ -56,7 +54,6 @@ describe('article body api', () => { const res = await get(makeURL('/en/get-started/start-your-journey/hello-world')) expect(res.statusCode).toBe(200) - // Check that octicons with width attribute still get aria-labels expect(res.body).toContain('aria-label="rocket icon"') expect(res.body).toContain('width="32"') }) diff --git a/src/article-api/tests/audit-logs-transformer.ts b/src/article-api/tests/audit-logs-transformer.ts index d7869a6538ac..9e20c1cd2874 100644 --- a/src/article-api/tests/audit-logs-transformer.ts +++ b/src/article-api/tests/audit-logs-transformer.ts @@ -23,21 +23,16 @@ describe('Audit Logs transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for the main heading expect(res.body).toContain('# Security log events') - // Check for intro expect(res.body).toContain( 'Learn about security log events recorded for your personal account.', ) - // Check for manual content section heading expect(res.body).toContain('## About security log events') - // Check for new main heading expect(res.body).toContain('## Audit log events') - // Check for category heading // The template renders "### Category" expect(res.body).toMatch(/### \w+/) }) @@ -72,17 +67,14 @@ describe('Audit Logs transformer', () => { ) expect(res.statusCode).toBe(200) - // Check for event action header // #### `action.name` expect(res.body).toMatch(/#### `[\w.]+`/) - // Check for fields section - either common fields summary or additional fields per event const body = res.body const hasCommonFields = body.includes('### Common fields') const hasAdditionalFields = body.includes('**Additional fields:**') expect(hasCommonFields || hasAdditionalFields).toBe(true) - // Validate that a known common field is in the common section and not duplicated if (hasCommonFields) { const commonFieldsIndex = body.indexOf('### Common fields') const commonFieldsSection = body.slice( @@ -92,7 +84,7 @@ describe('Audit Logs transformer', () => { expect(commonFieldsSection).toContain('`action`') } - // Ensure common fields do not appear in any "Additional fields" section + // Common fields are listed once in their own section, never repeated per event. if (hasAdditionalFields) { const additionalSections = body.split('**Additional fields:**').slice(1) for (const section of additionalSections) { @@ -101,7 +93,6 @@ describe('Audit Logs transformer', () => { } } - // Check for reference section expect(res.body).toContain('**Reference:**') }) diff --git a/src/article-api/tests/bespoke-landing-transformer.ts b/src/article-api/tests/bespoke-landing-transformer.ts index 0e6828ea5c0a..3e300116fedc 100644 --- a/src/article-api/tests/bespoke-landing-transformer.ts +++ b/src/article-api/tests/bespoke-landing-transformer.ts @@ -12,10 +12,8 @@ describe('bespoke landing transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for title expect(res.body).toContain('# Article Grid Bespoke Landing') - // Should have intro expect(res.body).toContain('A test page for testing') }) @@ -23,7 +21,6 @@ describe('bespoke landing transformer', () => { const res = await get(makeURL('/en/get-started/article-grid-bespoke')) expect(res.statusCode).toBe(200) - // Should have Articles section with all descendant articles (recursive) expect(res.body).toContain('## Articles') expect(res.body).toContain('[Grid Article One]') expect(res.body).toContain('[Grid Article Two]') diff --git a/src/article-api/tests/codeql-cli-transformer.ts b/src/article-api/tests/codeql-cli-transformer.ts index 2f82ae5279c1..dca2b457f07f 100644 --- a/src/article-api/tests/codeql-cli-transformer.ts +++ b/src/article-api/tests/codeql-cli-transformer.ts @@ -21,20 +21,16 @@ describe('codeql cli article body api', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for title injection expect(res.body).toContain('# database analyze') - // Check for intro injection expect(res.body).toContain( 'Analyze a database, producing meaningful results in the context of the source code.', ) - // Check for content expect(res.body).toContain('## Synopsis') expect(res.body).toContain('## Description') expect(res.body).toContain('## Options') - // Verify HTML comments are stripped expect(res.body).not.toContain('') expect(res.body).not.toContain('') expect(res.body).not.toContain('') diff --git a/src/article-api/tests/discovery-landing-transformer.ts b/src/article-api/tests/discovery-landing-transformer.ts index fe013bf7f5e6..8c300d0fd713 100644 --- a/src/article-api/tests/discovery-landing-transformer.ts +++ b/src/article-api/tests/discovery-landing-transformer.ts @@ -12,11 +12,9 @@ describe('discovery landing transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for title and intro expect(res.body).toContain('# Landing Page Carousel') expect(res.body).toContain('A test category page for testing the LandingCarousel component') - // Should have Articles section with all descendant articles expect(res.body).toContain('## Articles') expect(res.body).toContain('[Carousel Article One]') expect(res.body).toContain('[Carousel Article Two]') @@ -29,10 +27,8 @@ describe('discovery landing transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for title expect(res.body).toContain('# Article Grid Discovery') - // Should have Articles section with all descendant articles (recursive) expect(res.body).toContain('## Articles') expect(res.body).toContain('[Grid Article One]') expect(res.body).toContain('[Grid Article Two]') @@ -41,14 +37,11 @@ describe('discovery landing transformer', () => { }) test('handles discovery landing structure consistently', async () => { - // Discovery pages should have a consistent structure const res = await get(makeURL('/en/get-started/carousel')) expect(res.statusCode).toBe(200) - // Should have intro expect(res.body).toMatch(/^# .+\n\n.+\n\n/) - // Should have at least one section expect(res.body).toContain('##') }) diff --git a/src/article-api/tests/get-link-data.ts b/src/article-api/tests/get-link-data.ts index fc11254faba3..41f9a16b4e39 100644 --- a/src/article-api/tests/get-link-data.ts +++ b/src/article-api/tests/get-link-data.ts @@ -2,7 +2,6 @@ import { describe, expect, test, vi } from 'vitest' import { getLinkData } from '@/article-api/lib/get-link-data' import type { Context, Page, Permalink } from '@/types' -// Helper to create a minimal mock page function createMockPage(options: { title?: string intro?: string @@ -18,7 +17,6 @@ function createMockPage(options: { return page as unknown as Page } -// Helper to create a minimal context function createContext(currentVersion = 'free-pro-team@latest'): Context { return { currentVersion } as unknown as Context } diff --git a/src/article-api/tests/github-apps-transformer.ts b/src/article-api/tests/github-apps-transformer.ts index 80fc1acfc4bc..d2ff01d2dfcb 100644 --- a/src/article-api/tests/github-apps-transformer.ts +++ b/src/article-api/tests/github-apps-transformer.ts @@ -29,13 +29,10 @@ describe('GitHub Apps transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for the main heading expect(res.body).toContain('# Endpoints available for GitHub App installation access tokens') - // Should have category headings as h2 expect(res.body).toMatch(/^## /m) - // Should not contain HTML comments expect(res.body).not.toMatch(//) }) @@ -46,10 +43,8 @@ describe('GitHub Apps transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for the main heading expect(res.body).toContain('# Endpoints available for GitHub App user access tokens') - // Should have category headings as h2 expect(res.body).toMatch(/^## /m) }) @@ -62,10 +57,8 @@ describe('GitHub Apps transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for the main heading expect(res.body).toContain('# Endpoints available for fine-grained personal access tokens') - // Should have category headings as h2 expect(res.body).toMatch(/^## /m) }) @@ -81,7 +74,7 @@ describe('GitHub Apps transformer', () => { console.log(`[DEBUG] Test response: ${res.statusCode} in ${Date.now() - startTime}ms`) expect(res.statusCode).toBe(200) - // Check for bullet list items with asterisks (per content guidelines) + // Content guidelines require asterisk bullets, not hyphens. expect(res.body).toContain('*') expect(res.body).toMatch(/\* \[`[A-Z]+ \//) }) @@ -94,7 +87,6 @@ describe('GitHub Apps transformer', () => { ) expect(res.statusCode).toBe(200) - // Check for common HTTP verbs expect(res.body).toMatch(/`GET \//) // May also have POST, PUT, PATCH, DELETE depending on data }) @@ -118,10 +110,8 @@ describe('GitHub Apps transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for the main heading expect(res.body).toContain('# Permissions required for GitHub Apps') - // Should have permission group headings as h2 expect(res.body).toMatch(/^## /m) }) @@ -134,10 +124,8 @@ describe('GitHub Apps transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for the main heading expect(res.body).toContain('# Permissions required for fine-grained personal access tokens') - // Should have permission group headings as h2 expect(res.body).toMatch(/^## /m) }) @@ -145,7 +133,6 @@ describe('GitHub Apps transformer', () => { const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) expect(res.statusCode).toBe(200) - // Check for table structure expect(res.body).toContain('| Endpoint | Access | Tokens | Additional Permissions |') expect(res.body).toContain('|----------|--------|--------|------------------------|') }) @@ -154,7 +141,6 @@ describe('GitHub Apps transformer', () => { const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) expect(res.statusCode).toBe(200) - // Check for access levels in table cells expect(res.body).toMatch(/\| read \|/) expect(res.body).toMatch(/\| write \|/) // May also have admin depending on data @@ -164,11 +150,9 @@ describe('GitHub Apps transformer', () => { const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) expect(res.statusCode).toBe(200) - // Check for legend expect(res.body).toContain('UAT = user access token') expect(res.body).toContain('IAT = installation access token') - // Check that token types appear in actual table rows (not just the legend) expect(res.body).toMatch(/\|\s*(?:UAT|IAT|UAT, IAT|None)\s*\|/) }) @@ -176,7 +160,6 @@ describe('GitHub Apps transformer', () => { const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) expect(res.statusCode).toBe(200) - // Check for checkmark (✓) or cross (✗) symbols in Additional Permissions column expect(res.body).toMatch(/\| [✓✗] \|/) }) @@ -184,7 +167,6 @@ describe('GitHub Apps transformer', () => { const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) expect(res.statusCode).toBe(200) - // Should have multiple permission group headings const headings = res.body.match(/^## .* permissions for .*/gm) expect(headings).toBeTruthy() if (headings) { @@ -198,7 +180,6 @@ describe('GitHub Apps transformer', () => { const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) expect(res.statusCode).toBe(200) - // Check for manual content that should be in the markdown expect(res.body).toContain('GitHub Apps are created with a set of permissions') }) @@ -222,7 +203,6 @@ describe('GitHub Apps transformer', () => { const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) expect(res.statusCode).toBe(200) - // Check that AUTOTITLE has been resolved expect(res.body).not.toContain('[AUTOTITLE]') }) @@ -247,7 +227,6 @@ describe('GitHub Apps transformer', () => { test('Missing apiVersion defaults to latest', async () => { const res = await get(makeURL('/en/rest/authentication/permissions-required-for-github-apps')) expect(res.statusCode).toBe(200) - // Should work without explicit apiVersion }) test('Non-GitHub Apps pages are not transformed', async () => { diff --git a/src/article-api/tests/graphql-transformer.ts b/src/article-api/tests/graphql-transformer.ts index f0668c40b88c..127584b86d46 100644 --- a/src/article-api/tests/graphql-transformer.ts +++ b/src/article-api/tests/graphql-transformer.ts @@ -8,7 +8,7 @@ const makeURL = (pathname: string): string => { } describe('GraphQL transformer', { timeout: 10000 }, () => { - // Cache expensive responses to avoid duplicate requests + // Several tests hit the same URL, so cache slow responses to avoid repeated requests. const responseCache = new Map>>() const getCached = async (url: string) => { @@ -32,7 +32,6 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for the main heading expect(res.body).toContain('# Repositories') // Items render as flat alphabetical level 2 headings with a kind suffix @@ -47,10 +46,8 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { // Item headings are now at level 3 expect(res.body).toContain('## repository - query') - // Check for query description expect(res.body).toContain('Lookup a given repository by the owner and repository name.') - // Check for type (without link) expect(res.body).toContain('**Type:** Repository') }) @@ -61,7 +58,6 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { // codeOfConduct query is in the meta category expect(res.body).toContain('### Arguments for `codeOfConduct`') - // Check for specific arguments in bullet format expect(res.body).toContain('`key` (String!)') expect(res.body).toContain("The code of conduct's key.") }) @@ -101,7 +97,6 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { expect(res.body).toContain('## User - object') expect(res.body).toContain('`repositories`') - // Check for nested argument bullets expect(res.body).toContain('`first`') expect(res.body).toContain('Returns the first n elements from the list.') expect(res.body).toContain('`orderBy`') @@ -172,10 +167,8 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { const res = await getCached('/en/graphql/reference') expect(res.statusCode).toBe(200) - // Check for main heading expect(res.body).toContain('# Reference') - // Check for intro with liquid variable rendered expect(res.body).toMatch(/(GitHub|HubGit) GraphQL API schema/) }) }) @@ -185,15 +178,12 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { const res = await getCached('/en/graphql/overview/changelog') expect(res.statusCode).toBe(200) - // Check for main heading expect(res.body).toContain('# Changelog') - // Check for intro expect(res.body).toContain( 'The GraphQL schema changelog is a list of recent and upcoming changes', ) - // Check for manual content expect(res.body).toContain( 'Breaking changes include changes that will break existing queries', ) @@ -201,13 +191,10 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { // Index page shows latest year (2026) entries only expect(res.body).toContain('## Schema changes for 2026-') - // Check for change items expect(res.body).toContain('### The GraphQL schema includes these changes:') - // Should NOT contain entries from other years expect(res.body).not.toContain('## Schema changes for 2025-') - // Check for year navigation expect(res.body).toContain('2026') expect(res.body).toContain('2025') }) @@ -216,23 +203,19 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { const res = await getCached('/en/graphql/overview/changelog/2025') expect(res.statusCode).toBe(200) - // Check for year-specific heading expect(res.body).toContain('# GraphQL changelog for 2025') - // Check for date-based changelog sections from 2025 expect(res.body).toContain('## Schema changes for 2025-') - // Should NOT contain entries from other years expect(res.body).not.toContain('## Schema changes for 2026-') expect(res.body).not.toContain('## Schema changes for 2024-') }) test('changelog removes HTML tags from changes', async () => { - // Use a year page that has the specific test data + // The 2025 fixture is the one whose change descriptions contain HTML. const res = await getCached('/en/graphql/overview/changelog/2025') expect(res.statusCode).toBe(200) - // Check that HTML tags are removed expect(res.body).toContain('Field suggestedReviewerActors was added') expect(res.body).not.toContain('') expect(res.body).not.toContain('') @@ -244,17 +227,13 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { const res = await getCached('/en/graphql/overview/breaking-changes') expect(res.statusCode).toBe(200) - // Check for main heading expect(res.body).toContain('# Breaking changes') - // Check for intro expect(res.body).toContain('Learn about recent and upcoming breaking changes') - // Check for manual content expect(res.body).toContain('## About breaking changes') expect(res.body).toContain('Breaking:** Changes that will break existing queries') - // Check for date-based sections expect(res.body).toContain('## Changes scheduled for 2025-04-01') expect(res.body).toContain('## Changes scheduled for 2026-04-01') }) @@ -263,7 +242,6 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { const res = await getCached('/en/graphql/overview/breaking-changes') expect(res.statusCode).toBe(200) - // Check for breaking criticality expect(res.body).toMatch(/\*\*Breaking\*\*\s+A change will be made to `\w+\.\w+`\./) expect(res.body).toMatch(/\*\*Description:\*\*.*will be removed/) expect(res.body).toMatch(/\*\*Reason:\*\*/) @@ -274,7 +252,6 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { expect(res.statusCode).toBe(200) expect(res.body).toContain('scheduled for') - // Check that HTML tags are removed from descriptions expect(res.body).not.toContain('

') expect(res.body).not.toContain('

') expect(res.body).not.toContain('') @@ -291,7 +268,6 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { const res = await getCached('/en/graphql/reference/repos') expect(res.statusCode).toBe(200) - // Make sure the raw AUTOTITLE tag is not present expect(res.body).not.toContain('[AUTOTITLE]') }) @@ -308,7 +284,6 @@ describe('GraphQL transformer', { timeout: 10000 }, () => { const res = await getCached('/en/graphql/overview/breaking-changes') expect(res.statusCode).toBe(200) - // Check that liquid variables in intro are rendered expect(res.body).toMatch(/(GitHub|HubGit) GraphQL API/) expect(res.body).not.toContain('{% data variables.product.prodname_dotcom %}') }) diff --git a/src/article-api/tests/journey-landing-transformer.ts b/src/article-api/tests/journey-landing-transformer.ts index 09e56d9af8fc..63a4110695ea 100644 --- a/src/article-api/tests/journey-landing-transformer.ts +++ b/src/article-api/tests/journey-landing-transformer.ts @@ -12,7 +12,6 @@ describe('journey landing transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for journey tracks (now under Links section with track title as h3) expect(res.body).toContain('## Links') expect(res.body).toContain('### First Track') expect(res.body).toContain('* [Hello World](/en/get-started/start-your-journey/hello-world)') diff --git a/src/article-api/tests/pageinfo.ts b/src/article-api/tests/pageinfo.ts index f17804619633..5739bc97c2f6 100644 --- a/src/article-api/tests/pageinfo.ts +++ b/src/article-api/tests/pageinfo.ts @@ -47,9 +47,7 @@ describe('pageinfo api', () => { 'Get started using HubGit to manage Git repositories and collaborate with others.', ) expect(meta.documentType).toBe('category') - // Canonical URLs should not have redirectedFrom expect(meta.redirectedFrom).toBeUndefined() - // Check that it can be cached at the CDN expect(res.headers['set-cookie']).toBeUndefined() expect(res.headers['cache-control']).toContain('public') expect(res.headers['cache-control']).toMatch(/max-age=[1-9]/) diff --git a/src/article-api/tests/pagelist.ts b/src/article-api/tests/pagelist.ts index 0cdb55cfcd04..684d64cde4c8 100644 --- a/src/article-api/tests/pagelist.ts +++ b/src/article-api/tests/pagelist.ts @@ -23,7 +23,6 @@ describe.each(allVersionKeys)('pagelist api for %s', async (versionKey) => { } }) - // queries the pagelist API for each version const res = await get(`/api/pagelist/en/${versionKey}`) test('is reachable, returns 200 OK', async () => { @@ -82,7 +81,6 @@ describe('Versions API', () => { const data = JSON.parse(res.body) - // Check top-level keys exist expect(data).toHaveProperty('versions') expect(data).toHaveProperty('ghesVersions') expect(data).toHaveProperty('ghesLatest') @@ -91,20 +89,16 @@ describe('Versions API', () => { expect(data).toHaveProperty('ghesDeprecated') expect(data).toHaveProperty('allVersions') - // Versions array should contain expected values expect(Array.isArray(data.versions)).toBe(true) expect(data.versions).toContain('free-pro-team@latest') expect(data.versions).toContain('enterprise-cloud@latest') - // GHES versions should be an array of version strings expect(Array.isArray(data.ghesVersions)).toBe(true) expect(data.ghesVersions.length).toBeGreaterThan(0) expect(data.ghesVersions[0]).toMatch(/^\d+\.\d+$/) - // ghesLatest should be a valid version string expect(data.ghesLatest).toMatch(/^\d+\.\d+$/) - // allVersions should be an object with version details expect(typeof data.allVersions).toBe('object') expect(data.allVersions['free-pro-team@latest']).toHaveProperty('version') expect(data.allVersions['free-pro-team@latest']).toHaveProperty('versionTitle') @@ -119,17 +113,14 @@ describe('Languages API', () => { const data = JSON.parse(res.body) - // Check top-level keys exist expect(data).toHaveProperty('languages') expect(data).toHaveProperty('allLanguages') - // Languages array should contain expected values expect(Array.isArray(data.languages)).toBe(true) expect(data.languages).toContain('en') expect(data.languages).toContain('ja') expect(data.languages).toContain('es') - // allLanguages should be an object with language details expect(typeof data.allLanguages).toBe('object') expect(data.allLanguages.en).toHaveProperty('name') expect(data.allLanguages.en).toHaveProperty('code') @@ -137,7 +128,7 @@ describe('Languages API', () => { expect(data.allLanguages.en).toHaveProperty('locale') expect(data.allLanguages.en.name).toBe('English') - // Should not contain redirectPatterns (not JSON serializable) + // redirectPatterns is not JSON serializable, so it must not be in the response. expect(data.allLanguages.ja).not.toHaveProperty('redirectPatterns') }) }) diff --git a/src/article-api/tests/resolve-path.ts b/src/article-api/tests/resolve-path.ts index 6156b8c1e689..3fc654f84fd8 100644 --- a/src/article-api/tests/resolve-path.ts +++ b/src/article-api/tests/resolve-path.ts @@ -2,7 +2,6 @@ import { describe, expect, test } from 'vitest' import { resolvePath } from '@/article-api/lib/resolve-path' import type { Context, Page } from '@/types' -// Helper to create a minimal mock page function createMockPage(relativePath: string): Page { return { relativePath, @@ -10,7 +9,6 @@ function createMockPage(relativePath: string): Page { } as unknown as Page } -// Helper to create a minimal context with pages function createContext(pages: Record): Context { return { pages } as unknown as Context } diff --git a/src/article-api/tests/rest-transformer.ts b/src/article-api/tests/rest-transformer.ts index cee19cf3a62c..4673e9a89e2a 100644 --- a/src/article-api/tests/rest-transformer.ts +++ b/src/article-api/tests/rest-transformer.ts @@ -24,13 +24,10 @@ describe('REST transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for the main heading expect(res.body).toContain('# GitHub Actions Artifacts') - // Check for intro (using fixture's prodname_actions which is 'HubGit Actions') expect(res.body).toContain('Use the REST API to interact with artifacts in HubGit Actions.') - // Check for manual content section heading expect(res.body).toContain('## About artifacts in HubGit Actions') }) @@ -38,13 +35,10 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Check for operation heading expect(res.body).toContain('## List artifacts for a repository') - // Check for HTTP method and endpoint expect(res.body).toContain('GET /repos/{owner}/{repo}/actions/artifacts') - // Check for operation description expect(res.body).toContain('Lists all artifacts for a repository.') }) @@ -52,13 +46,10 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Check for parameters heading expect(res.body).toContain('### Parameters') - // Check for headers section expect(res.body).toContain('#### Headers') - // Check for accept header expect(res.body).toContain('**`accept`** (string)') expect(res.body).toContain('Setting to `application/vnd.github+json` is recommended.') }) @@ -67,10 +58,8 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Check for path and query parameters section expect(res.body).toContain('#### Path and query parameters') - // Check for specific parameters expect(res.body).toContain('**`owner`** (string) (required)') expect(res.body).toContain('The account owner of the repository.') @@ -90,10 +79,8 @@ describe('REST transformer', () => { console.log(`[DEBUG] Test response: ${res.statusCode} in ${Date.now() - startTime}ms`) expect(res.statusCode).toBe(200) - // Check for status codes section expect(res.body).toContain('### HTTP response status codes') - // Check for specific status code expect(res.body).toContain('**200**') expect(res.body).toContain('OK') }) @@ -102,14 +89,11 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Check for code examples section expect(res.body).toContain('### Code examples') - // Check for request/response labels expect(res.body).toContain('**Request:**') expect(res.body).toContain('**Response schema (Status: 200):**') - // Check for curl code block expect(res.body).toContain('```curl') expect(res.body).toContain('curl -L \\') expect(res.body).toContain('-X GET \\') @@ -120,7 +104,6 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Check that auth note is at the top using [!NOTE] syntax expect(res.body).toContain('[!NOTE]') expect(res.body).toContain('Authorization: Bearer ') expect(res.body).toContain('application/vnd.github+json') @@ -130,7 +113,6 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Check for API version in the auth note (any valid date format) expect(res.body).toMatch(/X-GitHub-Api-Version: \d{4}-\d{2}-\d{2}/) }) @@ -138,7 +120,6 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts', '2022-11-28')) expect(res.statusCode).toBe(200) - // Check for the specified API version in auth note expect(res.body).toContain('X-GitHub-Api-Version: 2022-11-28') }) @@ -150,7 +131,6 @@ describe('REST transformer', () => { expect(res.body).toContain('HubGit Actions') expect(res.body).not.toContain('{% data variables.product.prodname_actions %}') - // Check in both the intro and the manual content section expect(res.body).toMatch(/Use the REST API to interact with artifacts in HubGit Actions/) expect(res.body).toMatch(/About artifacts in HubGit Actions/) }) @@ -159,15 +139,12 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Check that AUTOTITLE has been resolved to actual link text // The link should have the actual page title, not "AUTOTITLE" expect(res.body).toContain('[Storing workflow data as artifacts]') expect(res.body).toContain('(/en/actions/using-workflows/storing-workflow-data-as-artifacts)') - // Make sure the raw AUTOTITLE tag is not present expect(res.body).not.toContain('[AUTOTITLE]') - // Verify the link appears in the manual content section expect(res.body).toMatch( /About artifacts in HubGit Actions[\s\S]*Storing workflow data as artifacts/, ) @@ -177,7 +154,6 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Check that markdown links are preserved expect(res.body).toMatch(/\[.*?\]\(\/en\/.*?\)/) }) @@ -185,14 +161,12 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Check for markdown-formatted schema expect(res.body).toContain('**Response schema (Status: 200):**') // Schema should be rendered as a markdown bullet list, not JSON expect(res.body).toContain('* `total_count`:') expect(res.body).toContain('* `artifacts`:') - // Should not contain raw JSON Schema keywords expect(res.body).not.toContain('"properties":') }) @@ -240,7 +214,6 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Should include the default API version in auth note (any valid date format) expect(res.body).toMatch(/X-GitHub-Api-Version: \d{4}-\d{2}-\d{2}/) }) @@ -248,7 +221,6 @@ describe('REST transformer', () => { const res = await get(makeURL('/en/rest/actions/artifacts')) expect(res.statusCode).toBe(200) - // Check for multiple operation headings expect(res.body).toContain('## List artifacts for a repository') expect(res.body).toContain('## Get an artifact') expect(res.body).toContain('## Delete an artifact') @@ -281,7 +253,7 @@ describe('REST transformer', () => { // because it looks for 'rest' in the path and gets the category/subcategory after it // e.g. /ja/rest/actions/artifacts should work the same as /en/rest/actions/artifacts - // Verify the operation content is present (in English, since REST data is not translated) + // REST data is not translated, so the operation content is English either way. expect(res.body).toContain('## List artifacts for a repository') expect(res.body).toContain('GET /repos/{owner}/{repo}/actions/artifacts') @@ -294,7 +266,6 @@ describe('REST transformer', () => { // One of them must be present expect(hasJapaneseTitle || hasEnglishTitle).toBe(true) - // Verify the appropriate content based on which language was served if (hasJapaneseTitle) { // If Japanese is loaded, expect Japanese intro text expect(res.body).toContain('アーティファクト') diff --git a/src/article-api/tests/secret-scanning-transformer.ts b/src/article-api/tests/secret-scanning-transformer.ts index be236faf377a..c5daac87568e 100644 --- a/src/article-api/tests/secret-scanning-transformer.ts +++ b/src/article-api/tests/secret-scanning-transformer.ts @@ -13,20 +13,16 @@ describe('secret scanning article body api', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for expected content expect(res.body).toContain('# Supported secret scanning patterns') expect(res.body).toContain('## Supported secrets') - // Verify HTML comments are stripped expect(res.body).not.toMatch(//) - // Verify HTML icon spans are not present (would be replaced with ✓/✗) + // The icon spans are replaced with plain ✓/✗ characters. expect(res.body).not.toMatch(/]*aria-label="Supported"/) expect(res.body).not.toMatch(/]*aria-label="Unsupported"/) - // Verify no raw HTML span tags remain expect(res.body).not.toMatch(/]*>/) - // Verify table content is present with providers expect(res.body).toMatch(/|\s*Provider\s*|/) expect(res.body).toMatch(/\| (Adafruit|AWS|Alibaba|Amazon)/) diff --git a/src/article-api/tests/toc-transformer.ts b/src/article-api/tests/toc-transformer.ts index 4bef199a0879..6edd660fadd0 100644 --- a/src/article-api/tests/toc-transformer.ts +++ b/src/article-api/tests/toc-transformer.ts @@ -12,12 +12,11 @@ describe('toc transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for title and intro expect(res.body).toContain('# Category page of GitHub Actions') expect(res.body).toContain('Learn how to migrate your existing CI/CD workflows') - // Should have Links section with children (uses full title, not shortTitle) expect(res.body).toContain('## Links') + // Child links use the full title, not shortTitle. expect(res.body).toContain('[Subcategory page about Actions](/en/actions/category/subcategory)') }) @@ -27,10 +26,8 @@ describe('toc transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Check for title expect(res.body).toContain('# Subcategory page about Actions') - // Should have Links section with children expect(res.body).toContain('## Links') }) @@ -46,10 +43,8 @@ describe('toc transformer', () => { const res = await get(makeURL('/en/actions/category/subcategory')) expect(res.statusCode).toBe(200) - // Should NOT have href paths as titles expect(res.body).not.toContain('* [/en/actions/category/subcategory/') - // Should have proper article titles (or shortTitle) expect(res.body).toMatch(/\[.*\]\(\/en\/actions\/category\/subcategory\/.*\)/) }) }) diff --git a/src/article-api/tests/webhooks-transformer.ts b/src/article-api/tests/webhooks-transformer.ts index 8c611b285177..32f6db087ac0 100644 --- a/src/article-api/tests/webhooks-transformer.ts +++ b/src/article-api/tests/webhooks-transformer.ts @@ -22,10 +22,8 @@ describe('Webhooks transformer', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Should have title expect(res.body).toContain('# Webhook events and payloads') - // Should have intro expect(res.body).toContain('Learn about when each webhook event occurs') }) @@ -33,7 +31,6 @@ describe('Webhooks transformer', () => { const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) expect(res.statusCode).toBe(200) - // Check for webhook event headers (## webhook_name) expect(res.body).toMatch(/^## \w+/m) }) @@ -41,7 +38,6 @@ describe('Webhooks transformer', () => { const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) expect(res.statusCode).toBe(200) - // Should list action types for webhooks with multiple actions expect(res.body).toContain('**Action type:**') }) @@ -49,7 +45,6 @@ describe('Webhooks transformer', () => { const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) expect(res.statusCode).toBe(200) - // Should show availability as a heading expect(res.body).toContain('### Availability') }) @@ -57,7 +52,6 @@ describe('Webhooks transformer', () => { const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) expect(res.statusCode).toBe(200) - // Check for some known manual content from the markdown file expect(res.body).toContain('About webhook events and payloads') }) @@ -73,7 +67,6 @@ describe('Webhooks transformer', () => { const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) expect(res.statusCode).toBe(200) - // Check that data variables are rendered (not left as Liquid syntax) expect(res.body).not.toContain('{% data') expect(res.body).not.toContain('{{') }) @@ -90,10 +83,8 @@ describe('Webhooks transformer', () => { const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) expect(res.statusCode).toBe(200) - // Should show payload object parameters section expect(res.body).toContain('### Webhook payload object') expect(res.body).toContain('#### Webhook payload object parameters') - // Should have a markdown table with parameter columns (may have extra spacing from formatting) expect(res.body).toMatch(/\|\s*Name\s*\|\s*Type\s*\|\s*Description\s*\|/) }) @@ -101,7 +92,6 @@ describe('Webhooks transformer', () => { const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) expect(res.statusCode).toBe(200) - // Should include webhook descriptions (converted from HTML to plain text) // Using actual descriptions from real webhook data expect(res.body).toContain('A check run was completed') }) @@ -110,11 +100,9 @@ describe('Webhooks transformer', () => { const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) expect(res.statusCode).toBe(200) - // Should show parameter names and types in tables expect(res.body).toContain('`action`') expect(res.body).toContain('`string`') expect(res.body).toContain('`object`') - // Should mark required parameters expect(res.body).toContain('**Required.**') }) @@ -132,7 +120,6 @@ describe('Webhooks transformer', () => { const res = await get(makeURL('/en/webhooks/webhook-events-and-payloads')) expect(res.statusCode).toBe(200) - // Should have a common parameters section at the top expect(res.body).toContain('## Common payload parameters') expect(res.body).toContain('Most webhook events include these standard parameters') diff --git a/src/article-api/transformers/article-transformer.ts b/src/article-api/transformers/article-transformer.ts index bbe81684dee8..94a61e52eab4 100644 --- a/src/article-api/transformers/article-transformer.ts +++ b/src/article-api/transformers/article-transformer.ts @@ -2,14 +2,11 @@ import type { Context, Page } from '@/types' import type { PageTransformer } from './types' /** - * Transformer for regular articles. - * - * This is a catch-all transformer registered last in the registry. - * It renders the page body as markdown and prepends the title and intro. + * Catch-all transformer, registered last. Renders the page body as markdown + * and prepends the title and intro. */ export class ArticleTransformer implements PageTransformer { canTransform(page: Page): boolean { - // Catch-all: handles any page not matched by a more specific transformer. return page != null } diff --git a/src/article-api/transformers/audit-logs-transformer.ts b/src/article-api/transformers/audit-logs-transformer.ts index ad20d022db3d..fd3ff4c6aa7d 100644 --- a/src/article-api/transformers/audit-logs-transformer.ts +++ b/src/article-api/transformers/audit-logs-transformer.ts @@ -7,8 +7,7 @@ import { loadTemplate } from '@/article-api/lib/load-template' import matter from '@gr2m/gray-matter' /** - * Transformer for Audit Logs pages - * Converts audit log events and their data into markdown format using a Liquid template + * Converts audit log events and their data into markdown using a Liquid template. */ export class AuditLogsTransformer implements PageTransformer { templateName = 'audit-logs-page.template.md' @@ -22,7 +21,6 @@ export class AuditLogsTransformer implements PageTransformer { const { getCategorizedAuditLogEvents, getCategoryNotes, resolveReferenceLinksToMarkdown } = await import('@/audit-logs/lib/index') - // Extract version from context const currentVersion = context.currentVersion! let pageType = '' @@ -36,11 +34,9 @@ export class AuditLogsTransformer implements PageTransformer { throw new Error(`Unknown audit log page type for path: ${pathname}`) } - // Get the audit log events data const categorizedEvents = getCategorizedAuditLogEvents(pageType, currentVersion) const categoryNotes = getCategoryNotes() - // Prepare manual content let manualContent = '' if (page.markdown) { const markerIndex = page.markdown.indexOf( @@ -63,7 +59,6 @@ export class AuditLogsTransformer implements PageTransformer { } } - // Prepare data for template const templateData = await this.prepareTemplateData( page, categorizedEvents, @@ -73,10 +68,8 @@ export class AuditLogsTransformer implements PageTransformer { resolveReferenceLinksToMarkdown, ) - // Load and render template const templateContent = loadTemplate(this.templateName) - // Render the template with Liquid const rendered = await renderContent(templateContent, { ...context, ...templateData, @@ -86,9 +79,6 @@ export class AuditLogsTransformer implements PageTransformer { return rendered } - /** - * Prepare data for the Liquid template - */ private async prepareTemplateData( page: Page, categorizedEvents: CategorizedEvents, @@ -100,7 +90,6 @@ export class AuditLogsTransformer implements PageTransformer { context: TitleResolutionContext, ) => Promise, ): Promise> { - // Prepare page intro const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' // Sort categories and events, and compute fields shared by most (≥80%) events diff --git a/src/article-api/transformers/bespoke-landing-transformer.ts b/src/article-api/transformers/bespoke-landing-transformer.ts index 8f3916f390e3..490b2cc1094d 100644 --- a/src/article-api/transformers/bespoke-landing-transformer.ts +++ b/src/article-api/transformers/bespoke-landing-transformer.ts @@ -13,10 +13,9 @@ interface BespokeLandingPage extends Omit { } /** - * Transforms bespoke-landing pages into markdown format. - * Handles carousels and full article listings. - * Note: Unlike discovery-landing, bespoke-landing shows ALL articles - * regardless of includedCategories. + * Transforms bespoke-landing pages into markdown. + * Unlike discovery-landing, this shows every article regardless of + * includedCategories, which only filters discovery-landing pages. */ export class BespokeLandingTransformer implements PageTransformer { templateName = 'landing-page.template.md' @@ -80,7 +79,6 @@ export class BespokeLandingTransformer implements PageTransformer { const validLinks = links.filter((l) => l.href && l.title) if (validLinks.length > 0) { - // Use carousel key as title (capitalize first letter) const sectionTitle = carouselKey.charAt(0).toUpperCase() + carouselKey.slice(1) sections.push({ title: sectionTitle, @@ -90,14 +88,12 @@ export class BespokeLandingTransformer implements PageTransformer { } } - // Articles section: recursively gather ALL descendant articles - // This matches the behavior of the site which uses genericTocFlat/genericTocNested - // Note: For bespoke-landing pages, the site shows ALL articles regardless of includedCategories - // (includedCategories only filters for discovery-landing pages) + // Recursively gather every descendant article, matching the site's + // genericTocFlat/genericTocNested behaviour. if (bespokePage.children && bespokePage.children.length > 0) { const tocItems = await getAllTocItems(page, context) - // Flatten to get all leaf articles (excludeParents: true means only get articles, not category pages) + // excludeParents keeps only leaf TOC items, dropping anything with children. const allArticles = flattenTocItems(tocItems, { excludeParents: true }) if (allArticles.length > 0) { diff --git a/src/article-api/transformers/category-landing-transformer.ts b/src/article-api/transformers/category-landing-transformer.ts index 3678372fb36c..f75cdf08579f 100644 --- a/src/article-api/transformers/category-landing-transformer.ts +++ b/src/article-api/transformers/category-landing-transformer.ts @@ -32,11 +32,8 @@ export class CategoryLandingTransformer implements PageTransformer { }) } - /** - * Recursively collects all descendant articles from the given parent hrefs. - * Traverses the page tree, adding non-index pages and recursing into children. - * Uses a visited set to prevent infinite loops from circular references. - */ + // Walks the page tree from the given parent hrefs, collecting every non-index + // descendant. The visited set guards against circular references. private async getAllDescendantArticles( parentHrefs: string[], languageCode: string, @@ -47,7 +44,6 @@ export class CategoryLandingTransformer implements PageTransformer { const allArticles: LinkData[] = [] for (const href of parentHrefs) { - // Prevent infinite loops from circular references if (visited.has(href)) continue visited.add(href) @@ -56,7 +52,6 @@ export class CategoryLandingTransformer implements PageTransformer { | undefined if (!parentPage) continue - // Add this page if it's an article (not an index) if (!parentPage.relativePath.endsWith('index.md')) { const linkData = await getLinkData(href, languageCode, pathname, context, resolvePath) if (linkData.href) { @@ -64,7 +59,6 @@ export class CategoryLandingTransformer implements PageTransformer { } } - // Recursively get children const children = parentPage.children if (children && Array.isArray(children) && children.length > 0) { // Get the parent's permalink to use as the base path for resolving children @@ -96,7 +90,6 @@ export class CategoryLandingTransformer implements PageTransformer { const languageCode = page.languageCode || 'en' const sections: Section[] = [] - // Spotlight section const spotlight = categoryPage.spotlight if (spotlight && spotlight.length > 0) { const links = await Promise.all( @@ -126,7 +119,6 @@ export class CategoryLandingTransformer implements PageTransformer { } } - // Children - get all descendant articles recursively if (categoryPage.children) { const allArticles = await this.getAllDescendantArticles( categoryPage.children, diff --git a/src/article-api/transformers/codeql-cli-transformer.ts b/src/article-api/transformers/codeql-cli-transformer.ts index f32c8fbc903e..2aa07e4a187b 100644 --- a/src/article-api/transformers/codeql-cli-transformer.ts +++ b/src/article-api/transformers/codeql-cli-transformer.ts @@ -5,10 +5,7 @@ import { loadTemplate } from '@/article-api/lib/load-template' import { stripHtmlCommentsAndNormalizeWhitespace } from '@/article-api/lib/strip-html-comments' /** - * Transformer for CodeQL CLI reference pages. - * Renders autogenerated CodeQL CLI documentation pages as markdown using a Liquid template. - * Sets `markdownRequested` to true in the context to ensure the page is rendered as markdown, - * bypassing the default article type check. + * Renders autogenerated CodeQL CLI reference pages as markdown using a Liquid template. */ export class CodeQLCliTransformer implements PageTransformer { templateName = 'codeql-cli-page.template.md' @@ -25,7 +22,6 @@ export class CodeQLCliTransformer implements PageTransformer { const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' - // Prepare template data const templateData: Record = { page: { title: page.title, @@ -34,7 +30,6 @@ export class CodeQLCliTransformer implements PageTransformer { content, } - // Load and render template const templateContent = loadTemplate(this.templateName) const result = await renderContent(templateContent, { @@ -43,7 +38,7 @@ export class CodeQLCliTransformer implements PageTransformer { markdownRequested: true, }) - // Strip HTML comments (e.g., markdownlint-disable comments) from the output + // Strip markdownlint-disable and any other HTML comments. return stripHtmlCommentsAndNormalizeWhitespace(result) } } diff --git a/src/article-api/transformers/discovery-landing-transformer.ts b/src/article-api/transformers/discovery-landing-transformer.ts index 6cf5a3d9e0fd..bcf16217b4ac 100644 --- a/src/article-api/transformers/discovery-landing-transformer.ts +++ b/src/article-api/transformers/discovery-landing-transformer.ts @@ -80,7 +80,6 @@ export class DiscoveryLandingTransformer implements PageTransformer { const validLinks = links.filter((l) => l.href && l.title) if (validLinks.length > 0) { - // Use carousel key as title (capitalize first letter) const sectionTitle = carouselKey.charAt(0).toUpperCase() + carouselKey.slice(1) sections.push({ title: sectionTitle, @@ -90,7 +89,6 @@ export class DiscoveryLandingTransformer implements PageTransformer { } } - // Intro links (getting started) const rawIntroLinks = discoveryPage.introLinks ?? discoveryPage.rawIntroLinks if (rawIntroLinks) { const { default: getPageLinkData } = await import('@/frame/lib/get-link-data') @@ -134,10 +132,9 @@ export class DiscoveryLandingTransformer implements PageTransformer { if (discoveryPage.children && discoveryPage.children.length > 0) { const tocItems = await getAllTocItems(page, context) - // Flatten to get all leaf articles (excludeParents: true means only get articles, not category pages) + // excludeParents keeps only leaf TOC items, dropping anything with children. let allArticles = flattenTocItems(tocItems, { excludeParents: true }) - // Apply includedCategories filter if specified if (discoveryPage.includedCategories && discoveryPage.includedCategories.length > 0) { const includedCategories = discoveryPage.includedCategories.map((c) => c.toLowerCase()) diff --git a/src/article-api/transformers/github-apps-transformer.ts b/src/article-api/transformers/github-apps-transformer.ts index 72cecd46999b..bcc49cb9eae7 100644 --- a/src/article-api/transformers/github-apps-transformer.ts +++ b/src/article-api/transformers/github-apps-transformer.ts @@ -6,7 +6,6 @@ import matter from '@gr2m/gray-matter' const DEBUG = process.env.RUNNER_DEBUG === '1' || process.env.DEBUG === '1' -// GitHub Apps data types interface GitHubAppsOperation { slug: string subcategory?: string @@ -105,17 +104,14 @@ export class GithubAppsTransformer implements PageTransformer { // Import getAppsData dynamically to avoid circular dependencies const { getAppsData } = await import('@/github-apps/lib/index') - // Extract version from context const currentVersion = context.currentVersion! - // Use the provided apiVersion, or fall back to the latest from context const effectiveApiVersion = apiVersion || (context.currentVersionObj?.apiVersions?.length ? context.currentVersionObj.latestApiVersion : undefined) - // Determine page type from the page's relative path const filename = page.relativePath.split('/').pop() const pageType = filename ? PAGE_TYPE_MAP[filename] : undefined @@ -123,12 +119,10 @@ export class GithubAppsTransformer implements PageTransformer { throw new Error(`Unknown GitHub Apps page type for path: ${page.relativePath}`) } - // Get the GitHub Apps data const appsData = (await getAppsData(pageType, currentVersion, effectiveApiVersion)) as | GitHubAppsListData | GitHubAppsPermissionsData - // Prepare manual content let manualContent = '' if (page.markdown) { const { content } = matter(page.markdown) @@ -139,7 +133,6 @@ export class GithubAppsTransformer implements PageTransformer { markdownRequested: true, }) - // Strip HTML comments and normalize whitespace manualContent = manualContent .replace(//gs, '') .replace(/\n{3,}/g, '\n\n') @@ -147,7 +140,6 @@ export class GithubAppsTransformer implements PageTransformer { } } - // Prepare data for template based on page type const isListPage = LIST_PAGE_TYPES.has(pageType) const isPermissionsPage = PERMISSIONS_PAGE_TYPES.has(pageType) @@ -160,13 +152,11 @@ export class GithubAppsTransformer implements PageTransformer { isPermissionsPage, ) - // Load template const templateContent = loadTemplate(this.templateName) // For permissions pages, we need to construct the tables manually to avoid Liquid escaping let finalContent: string if (isPermissionsPage) { - // Build the intro manually let introMarkdown = `# ${templateData.page.title}\n\n` if (templateData.page.intro) { introMarkdown += `${templateData.page.intro}\n\n` @@ -180,7 +170,6 @@ export class GithubAppsTransformer implements PageTransformer { introMarkdown += `**Token types:** UAT = user access token, IAT = installation access token\n\n` } - // Build the tables manually let tablesMarkdown = '' for (const item of templateData.items as PreparedPermissionItem[]) { tablesMarkdown += `## ${item.displayTitle}\n\n` @@ -229,9 +218,6 @@ export class GithubAppsTransformer implements PageTransformer { return finalContent } - /** - * Prepare data for the Liquid template - */ private async prepareTemplateData( page: Page, appsData: GitHubAppsListData | GitHubAppsPermissionsData, @@ -246,13 +232,10 @@ export class GithubAppsTransformer implements PageTransformer { isPermissionsPage: boolean items: PreparedListItem[] | PreparedPermissionItem[] }> { - // Prepare page intro const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' - // Get categories without subcategories from rest lib const { categoriesWithoutSubcategories } = await import('@/rest/lib/index') - // Prepare items based on page type let preparedItems: PreparedListItem[] | PreparedPermissionItem[] = [] if (isListPage) { @@ -270,7 +253,6 @@ export class GithubAppsTransformer implements PageTransformer { preparedItems = Object.entries(appsData as GitHubAppsPermissionsData).map( ([permissionName, permissionObject]) => { const { displayTitle, permissions } = permissionObject - // Sort by access level (admin, write, read) const adminPermissions = permissions.filter((p) => p.access === 'admin') const writePermissions = permissions.filter((p) => p.access === 'write') const readPermissions = permissions.filter((p) => p.access === 'read') @@ -299,9 +281,6 @@ export class GithubAppsTransformer implements PageTransformer { } } - /** - * Prepare a single operation for list-based rendering (endpoints) - */ private prepareOperation( operation: GitHubAppsOperation, category: string, @@ -321,9 +300,6 @@ export class GithubAppsTransformer implements PageTransformer { } } - /** - * Prepare a single operation for permissions-based rendering (tables) - */ private preparePermissionOperation( operation: GitHubAppsPermissionOperation, categoriesWithoutSubcategories: string[], diff --git a/src/article-api/transformers/graphql-breaking-changes-transformer.ts b/src/article-api/transformers/graphql-breaking-changes-transformer.ts index e0268c7351c5..6a1d6fb62ea6 100644 --- a/src/article-api/transformers/graphql-breaking-changes-transformer.ts +++ b/src/article-api/transformers/graphql-breaking-changes-transformer.ts @@ -8,8 +8,7 @@ import { extractManualContent } from '@/article-api/lib/graphql-helpers' import GithubSlugger from 'github-slugger' /** - * Transformer for GraphQL breaking changes page - * Renders breaking changes organized by date + * Renders the GraphQL breaking changes page, organized by date. */ export class GraphQLBreakingChangesTransformer implements PageTransformer { templateName = 'graphql-breaking-changes.template.md' @@ -32,7 +31,6 @@ export class GraphQLBreakingChangesTransformer implements PageTransformer { const slugger = new GithubSlugger() - // Process breaking changes by date const breakingChangesByDate = Object.keys(schema).map((date) => { const items = schema[date] const heading = `Changes scheduled for ${date}` diff --git a/src/article-api/transformers/graphql-changelog-transformer.ts b/src/article-api/transformers/graphql-changelog-transformer.ts index 53d764cbdb09..513d66f6d73f 100644 --- a/src/article-api/transformers/graphql-changelog-transformer.ts +++ b/src/article-api/transformers/graphql-changelog-transformer.ts @@ -7,8 +7,7 @@ import { fastTextOnly } from '@/content-render/unified/text-only' import { extractManualContent } from '@/article-api/lib/graphql-helpers' /** - * Transformer for GraphQL changelog page - * Renders the changelog with schema changes, preview changes, and upcoming changes + * Renders the GraphQL changelog: schema changes, preview changes, and upcoming changes. */ export class GraphQLChangelogTransformer implements PageTransformer { templateName = 'graphql-changelog.template.md' @@ -25,7 +24,6 @@ export class GraphQLChangelogTransformer implements PageTransformer { const { getGraphqlChangelogByYear, getGraphqlChangelogYears } = await import('@/graphql/lib/index') - // Determine if this is a year-specific page const yearMatch = page.relativePath.match(/changelog\/(\d{4})\.md$/) const year = yearMatch ? Number(yearMatch[1]) : null const years = getGraphqlChangelogYears(currentVersion) @@ -42,13 +40,11 @@ export class GraphQLChangelogTransformer implements PageTransformer { const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' const manualContent = await extractManualContent(page, context) - // Process changelog items const changelogItems = schema.map((item) => { const processChanges = (changes: Array<{ title: string; changes: string[] }>) => changes.map((change) => ({ title: change.title, changes: change.changes.map((html: string) => { - // Remove wrapping

tags if present if (html.startsWith('

') && html.endsWith('

')) { return fastTextOnly(html.slice(3, -4)) } @@ -64,7 +60,6 @@ export class GraphQLChangelogTransformer implements PageTransformer { } }) - // Build year navigation links const displayYear = year || years[0] const yearNavItems = years.map((y) => ({ year: y, diff --git a/src/article-api/transformers/graphql-index-transformer.ts b/src/article-api/transformers/graphql-index-transformer.ts index b46b41cf9100..dd400a8173c7 100644 --- a/src/article-api/transformers/graphql-index-transformer.ts +++ b/src/article-api/transformers/graphql-index-transformer.ts @@ -5,8 +5,7 @@ import { loadTemplate } from '@/article-api/lib/load-template' import { extractManualContent } from '@/article-api/lib/graphql-helpers' /** - * Transformer for GraphQL reference index page - * Renders the index page with links to child pages + * Renders the GraphQL reference index page with links to its child pages. */ export class GraphQLIndexTransformer implements PageTransformer { templateName = 'graphql-index.template.md' @@ -14,7 +13,6 @@ export class GraphQLIndexTransformer implements PageTransformer { canTransform(page: Page): boolean { if (page.autogenerated !== 'graphql') return false - // Match the reference index page (no specific page type after /reference) return page.relativePath.endsWith('graphql/reference/index.md') } @@ -23,7 +21,6 @@ export class GraphQLIndexTransformer implements PageTransformer { const manualContent = await extractManualContent(page, context) - // Get children links from page metadata const children = page.children || [] const childrenLinks = children .map((child) => { diff --git a/src/article-api/transformers/graphql-reference-transformer.ts b/src/article-api/transformers/graphql-reference-transformer.ts index bde951e507a0..73989be04107 100644 --- a/src/article-api/transformers/graphql-reference-transformer.ts +++ b/src/article-api/transformers/graphql-reference-transformer.ts @@ -17,8 +17,7 @@ import { fastTextOnly } from '@/content-render/unified/text-only' import { extractManualContent } from '@/article-api/lib/graphql-helpers' /** - * Transformer for GraphQL reference pages (queries, mutations, objects, etc.) - * Renders schema items with their fields and arguments + * Renders GraphQL reference pages: schema items with their fields and arguments. */ export class GraphQLReferenceTransformer implements PageTransformer { templateName = 'graphql-reference.template.md' @@ -26,7 +25,6 @@ export class GraphQLReferenceTransformer implements PageTransformer { canTransform(page: Page): boolean { if (page.autogenerated !== 'graphql') return false - // Match reference pages that have a specific page type (not index) const isReference = page.relativePath.includes('graphql/reference/') const isNotIndex = !page.relativePath.endsWith('index.md') @@ -36,7 +34,6 @@ export class GraphQLReferenceTransformer implements PageTransformer { async transform(page: Page, pathname: string, context: Context): Promise { const currentVersion = context.currentVersion! - // Determine the page slug from the pathname const pathParts = pathname.split('/').filter(Boolean) const graphqlIndex = pathParts.indexOf('graphql') const pageType = pathParts[graphqlIndex + 2] // category slug like 'repos', 'issues', etc. @@ -300,10 +297,7 @@ export class GraphQLReferenceTransformer implements PageTransformer { private static STANDARD_PAGINATION_ARGS = new Set(['after', 'before', 'first', 'last']) - /** - * Check if a field has only the standard pagination arguments - * (after, before, first, last) with no additional args. - */ + // True when the field's only arguments are after, before, first and last. private hasOnlyStandardPaginationArgs(field: FieldT): boolean { if (!field.arguments || field.arguments.length !== 4) return false return field.arguments.every((arg) => diff --git a/src/article-api/transformers/index.ts b/src/article-api/transformers/index.ts index d5efd9407235..a6fc2d634860 100644 --- a/src/article-api/transformers/index.ts +++ b/src/article-api/transformers/index.ts @@ -18,10 +18,7 @@ import { SearchPageTransformer } from './search-page-transformer' import { ReleaseNotesTransformer } from './release-notes-transformer' import { ArticleTransformer } from './article-transformer' -/** - * Global transformer registry - * Registers all available page-to-markdown transformers - */ +// Every page-to-markdown transformer is registered here. export const transformerRegistry = new TransformerRegistry() transformerRegistry.register(new RestTransformer()) @@ -41,7 +38,7 @@ transformerRegistry.register(new CategoryLandingTransformer()) transformerRegistry.register(new DiscoveryLandingTransformer()) transformerRegistry.register(new SearchPageTransformer()) transformerRegistry.register(new ReleaseNotesTransformer()) -// ArticleTransformer is the catch-all — must be registered last. +// ArticleTransformer is the catch-all, so it must be registered last. transformerRegistry.register(new ArticleTransformer()) export { TransformerRegistry } from './types' diff --git a/src/article-api/transformers/journey-landing-transformer.ts b/src/article-api/transformers/journey-landing-transformer.ts index 959b28deaf6a..e966d2b58a7f 100644 --- a/src/article-api/transformers/journey-landing-transformer.ts +++ b/src/article-api/transformers/journey-landing-transformer.ts @@ -23,9 +23,9 @@ interface JourneyPage extends Page { } /** - * Transforms journey-landing pages into markdown format. - * Handles journey tracks (grouped learning paths) with guides, - * falling back to children listings when tracks aren't available. + * Transforms journey-landing pages into markdown. Renders journey tracks + * (grouped learning paths), falling back to a children listing when no track + * produces a renderable link. */ export class JourneyLandingTransformer implements PageTransformer { templateName = 'landing-page.template.md' @@ -54,7 +54,6 @@ export class JourneyLandingTransformer implements PageTransformer { const languageCode = page.languageCode || 'en' const sections: Section[] = [] - // Journey tracks const journeyTracks = journeyPage.journeyTracks if (journeyTracks) { const groups: LinkGroup[] = [] @@ -87,7 +86,6 @@ export class JourneyLandingTransformer implements PageTransformer { } } - // Children fallback if (sections.length === 0 && journeyPage.children) { const links = await Promise.all( journeyPage.children.map(async (childHref) => { diff --git a/src/article-api/transformers/rest-transformer.ts b/src/article-api/transformers/rest-transformer.ts index 3685f5a87b4f..c3af44277ed8 100644 --- a/src/article-api/transformers/rest-transformer.ts +++ b/src/article-api/transformers/rest-transformer.ts @@ -52,15 +52,13 @@ type PreparedTemplateData = { } /** - * Transformer for REST API pages - * Converts REST operations and their data into markdown format using a Liquid template + * Converts REST operations and their data into markdown using a Liquid template. */ export class RestTransformer implements PageTransformer { templateName = 'rest-page.template.md' canTransform(page: Page): boolean { - // Only transform REST pages that are not landing pages - // Landing pages (like /en/rest) will be handled by a separate transformer + // Landing pages like /en/rest are handled by a different transformer. return page.autogenerated === 'rest' && !page.relativePath.endsWith('index.md') } @@ -76,17 +74,14 @@ export class RestTransformer implements PageTransformer { // Import getRest dynamically to avoid circular dependencies const { default: getRest } = await import('@/rest/lib/index') - // Extract version from context const currentVersion = context.currentVersion! - // Use the provided apiVersion, or fall back to the latest from context const effectiveApiVersion = apiVersion || (context.currentVersionObj?.apiVersions?.length ? context.currentVersionObj.latestApiVersion : undefined) - // Parse the category and subcategory from the page path // e.g. /en/rest/actions/artifacts -> category: actions, subcategory: artifacts const pathParts = pathname.split('/').filter(Boolean) const restIndex = pathParts.indexOf('rest') @@ -98,7 +93,6 @@ export class RestTransformer implements PageTransformer { const category = pathParts[restIndex + 1] const subcategory = pathParts[restIndex + 2] // May be undefined for category-only pages - // Get the REST operations data const categoryData = await getRest(currentVersion, effectiveApiVersion, category) let operations: Operation[] = [] @@ -106,12 +100,10 @@ export class RestTransformer implements PageTransformer { if (subcategory && categoryData?.[subcategory]) { operations = categoryData[subcategory] } else if (category && categoryData) { - // For categories without subcategories, operations are nested directly - // Flatten all operations from all subcategories + // Categories without subcategories nest their operations one level deeper. operations = Object.values(categoryData).flat() } - // Prepare manual content let manualContent = '' if (page.markdown) { const markerIndex = page.markdown.indexOf( @@ -134,7 +126,6 @@ export class RestTransformer implements PageTransformer { } } - // Prepare data for template const templateData = await this.prepareTemplateData( page, operations, @@ -143,7 +134,6 @@ export class RestTransformer implements PageTransformer { effectiveApiVersion, ) - // Load and render template const templateContent = loadTemplate(this.templateName) // Render the template with Liquid. templateData intentionally replaces @@ -159,9 +149,6 @@ export class RestTransformer implements PageTransformer { return rendered } - /** - * Prepare data for the Liquid template - */ private async prepareTemplateData( page: Page, operations: Operation[], @@ -169,10 +156,8 @@ export class RestTransformer implements PageTransformer { manualContent: string, apiVersion?: string, ): Promise { - // Prepare page intro const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' - // Prepare operations for the template const preparedOperations = await Promise.all( operations.map(async (operation) => await this.prepareOperation(operation)), ) @@ -211,35 +196,26 @@ export class RestTransformer implements PageTransformer { } } - /** - * Prepare a single operation for template rendering - */ private async prepareOperation(operation: Operation): Promise { - // Convert HTML description to text const description = operation.descriptionHTML ? fastTextOnly(operation.descriptionHTML) : '' - // Determine header settings const needsContentTypeHeader = operation.subcategory === 'inference' const omitHeaders = operation.subcategory === 'management-console' || operation.subcategory === 'manage-ghes' const showHeaders = !omitHeaders - // Check if operation has parameters const hasParameters = (operation.parameters?.length || 0) > 0 || (operation.bodyParameters?.length || 0) > 0 - // Process status codes to convert HTML descriptions to plain text const statusCodes = operation.statusCodes?.map((statusCode) => ({ ...statusCode, description: statusCode.description ? fastTextOnly(statusCode.description) : undefined, })) - // Prepare code examples with processed URLs const codeExamples = operation.codeExamples?.map((example) => { let url = `${operation.serverUrl}${operation.requestPath}` - // Replace path parameters in URL if (example.request?.parameters && Object.keys(example.request.parameters).length > 0) { for (const [key, value] of Object.entries(example.request.parameters)) { url = url.replace(`{${key}}`, String(value)) diff --git a/src/article-api/transformers/search-page-transformer.ts b/src/article-api/transformers/search-page-transformer.ts index c3756298ecc5..ed5b7e7a8871 100644 --- a/src/article-api/transformers/search-page-transformer.ts +++ b/src/article-api/transformers/search-page-transformer.ts @@ -2,15 +2,13 @@ import type { Context, Page } from '@/types' import type { PageTransformer } from './types' /** - * Transformer for the search page (/en/search). - * This is a special UI-only page with no markdown content. - * Returns minimal markdown with just the title. + * /en/search is a UI-only page with no markdown content, so this returns the + * title plus a pointer to the Search API. */ export class SearchPageTransformer implements PageTransformer { templateName = '' canTransform(page: Page): boolean { - // Only match the search page specifically return page.relativePath === 'search/index.md' } diff --git a/src/article-api/transformers/secret-scanning-transformer.ts b/src/article-api/transformers/secret-scanning-transformer.ts index 2d8550e9b50d..e1ecaeed4bbf 100644 --- a/src/article-api/transformers/secret-scanning-transformer.ts +++ b/src/article-api/transformers/secret-scanning-transformer.ts @@ -8,9 +8,7 @@ import { loadTemplate } from '@/article-api/lib/load-template' import { getSecretScanningData } from '@/secret-scanning/lib/get-secret-scanning-data' /** - * Transformer for Secret Scanning pages. - * Loads pattern data and converts secret scanning documentation into markdown format. - * Used by the Article API to render Secret Scanning documentation dynamically. + * Loads secret scanning pattern data and converts it into markdown. */ export class SecretScanningTransformer implements PageTransformer { templateName = 'secret-scanning-page.template.md' @@ -38,7 +36,6 @@ export class SecretScanningTransformer implements PageTransformer { try { const data = await getSecretScanningData(filepath) - // Process Liquid in values for (const entry of data) { // Process Liquid for the hasValidityCheck field, as in the middleware if (typeof entry.hasValidityCheck === 'string' && entry.hasValidityCheck.includes('{%')) { @@ -104,13 +101,10 @@ export class SecretScanningTransformer implements PageTransformer { content += table } - // Strip HTML comments from the rendered content content = content.replace(//gs, '') - // Replace HTML icon spans with plain text equivalents content = content.replace(/]*aria-label="Supported"[^>]*>[^<]*<\/span>/g, '✓') content = content.replace(/]*aria-label="Unsupported"[^>]*>[^<]*<\/span>/g, '✗') - // Convert
tags to newlines and text to markdown links content = content.replace(//gi, '\n') content = content.replace(/]*>([^<]*)<\/a>/gi, '[$2]($1)') // Strip any remaining HTML tags. Loop until stable to handle nested or @@ -125,12 +119,11 @@ export class SecretScanningTransformer implements PageTransformer { iterations++ } - // Normalize whitespace after stripping comments content = content.replace(/\n{3,}/g, '\n\n').trim() const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' - // Render the template with Liquid only — page.render() already ran + // Render the template with Liquid only. page.render() already ran // rewriteLocalLinks on all markdown links, and the regex cleanup above // only creates fragment links (e.g. #token-versions) which don't need // link rewriting. So we skip the expensive remark re-parse. diff --git a/src/article-api/transformers/toc-transformer.ts b/src/article-api/transformers/toc-transformer.ts index 1ff9f79f1f9c..cbe51d4204ba 100644 --- a/src/article-api/transformers/toc-transformer.ts +++ b/src/article-api/transformers/toc-transformer.ts @@ -10,16 +10,14 @@ interface CategoryPage extends Page { } /** - * Transformer for table of contents (TOC) landing pages - pages with children but no specific layout. - * These are simple navigation pages (category/subcategory/product/homepage) that list child pages with titles and intros. - * Corresponds to TocLanding component in the web UI. + * Transformer for pages that have children but no specific layout: category, + * subcategory, product and homepage. Lists each child with its title and intro. + * Corresponds to the TocLanding component in the web UI. */ export class TocTransformer implements PageTransformer { templateName = 'landing-page.template.md' canTransform(page: Page): boolean { - // Transform pages that have children but no layout specified - // These are typically category, subcategory, product, or homepage pages const categoryPage = page as CategoryPage const validDocTypes = ['category', 'subcategory', 'product', 'homepage'] return ( @@ -50,7 +48,6 @@ export class TocTransformer implements PageTransformer { const languageCode = page.languageCode || 'en' const sections: Section[] = [] - // Get all child pages if (mapPage.children?.length) { const links = await Promise.all( mapPage.children.map(async (childHref) => { diff --git a/src/article-api/transformers/types.ts b/src/article-api/transformers/types.ts index aa2441f816e2..cc43d421b52d 100644 --- a/src/article-api/transformers/types.ts +++ b/src/article-api/transformers/types.ts @@ -9,17 +9,11 @@ export interface LinkData { intro?: string } -/** - * Group of links with an optional title - */ export interface LinkGroup { title: string | null links: LinkData[] } -/** - * Section containing multiple link groups - */ export interface Section { title: string | null groups: LinkGroup[] @@ -35,106 +29,34 @@ export interface TemplateData { } /** - * Base interface for page-to-markdown transformers - * - * Transformers convert autogenerated pages (REST, webhooks, etc.) - * into markdown format for the Article API + * Converts a page into markdown. */ export interface PageTransformer { - /** - * Optional: The name of the template file to use for rendering - * If provided, can be used by helper functions to load the template - * Example: 'landing-page.template.md' - */ + /** Template file to render with, e.g. 'landing-page.template.md'. */ templateName?: string - /** - * Check if this transformer can handle the given page - */ canTransform(page: Page): boolean - /** - * Transform the page into markdown format - * @param page - The page to transform - * @param pathname - The pathname of the page - * @param context - The rendering context - * @param apiVersion - Optional API version (e.g., '2022-11-28' for REST API calendar versioning) - */ + /** `apiVersion` is the REST calendar version, e.g. '2022-11-28'. */ transform(page: Page, pathname: string, context: Context, apiVersion?: string): Promise } /** - * Registry of available transformers for converting pages to markdown - * - * The TransformerRegistry manages a collection of PageTransformer instances - * and provides a mechanism to find the appropriate transformer for a given page. - * - * Transformers are evaluated in registration order. The first transformer - * whose `canTransform()` method returns true will be selected. - * - * @example - * ```typescript - * const registry = new TransformerRegistry() - * - * // Register transformers in priority order - * registry.register(new RestTransformer()) - * registry.register(new WebhookTransformer()) - * registry.register(new GraphQLTransformer()) - * - * // Find and use a transformer - * const transformer = registry.findTransformer(page) - * if (transformer) { - * const markdown = await transformer.transform(page, pathname, context) - * } - * ``` + * Transformers are evaluated in registration order, and the first one whose + * `canTransform()` returns true wins. Register the specific ones before the + * general ones. * - * @remarks - * This class is not thread-safe. In server environments with concurrent requests, - * register all transformers during initialization before handling requests. + * This class is not thread-safe, so register everything during initialization + * rather than while handling requests. */ export class TransformerRegistry { private transformers: PageTransformer[] = [] - /** - * Register a new transformer - * - * Transformers are evaluated in registration order when finding a match. - * Register more specific transformers before more general ones. - * - * @param transformer - The transformer to register - * - * @example - * ```typescript - * const registry = new TransformerRegistry() - * registry.register(new RestTransformer()) - * ``` - */ register(transformer: PageTransformer): void { this.transformers.push(transformer) } - /** - * Find a transformer that can handle the given page - * - * Iterates through registered transformers in registration order and returns - * the first transformer whose `canTransform()` method returns true. - * - * @param page - The page to find a transformer for - * @returns The first matching transformer, or null if: - * - The page is null/undefined - * - No registered transformer can handle the page - * - * @example - * ```typescript - * const transformer = registry.findTransformer(page) - * if (transformer) { - * const markdown = await transformer.transform(page, pathname, context) - * } else { - * // Handle case where no transformer is available - * console.warn('No transformer found for page:', page.relativePath) - * } - * ``` - */ + /** Returns null when `page` is nullish or nothing can handle it. */ findTransformer(page: Page): PageTransformer | null { if (page == null) { return null diff --git a/src/article-api/transformers/webhooks-transformer.ts b/src/article-api/transformers/webhooks-transformer.ts index ba2a4c623bd5..d780665852fb 100644 --- a/src/article-api/transformers/webhooks-transformer.ts +++ b/src/article-api/transformers/webhooks-transformer.ts @@ -6,8 +6,7 @@ import { loadTemplate } from '@/article-api/lib/load-template' import matter from '@gr2m/gray-matter' /** - * Transformer for Webhooks pages. - * Converts webhook events and payloads into markdown format using a Liquid template. + * Converts webhook events and payloads into markdown using a Liquid template. */ export class WebhooksTransformer implements PageTransformer { templateName = 'webhooks-page.template.md' @@ -20,16 +19,12 @@ export class WebhooksTransformer implements PageTransformer { // Import getInitialPageWebhooks dynamically to avoid circular dependencies const { getInitialPageWebhooks } = await import('@/webhooks/lib/index') - // Extract version from context const currentVersion = context.currentVersion! - // Get the webhook data const webhooksData = await getInitialPageWebhooks(currentVersion) - // Prepare page intro const intro = page.intro ? await page.renderProp('intro', context, { textOnly: true }) : '' - // Prepare manual content let manualContent = '' if (page.markdown) { const { content } = matter(page.markdown) @@ -88,7 +83,6 @@ export class WebhooksTransformer implements PageTransformer { ) } - // Prepare template data const templateData: Record = { page: { title: page.title, @@ -99,7 +93,6 @@ export class WebhooksTransformer implements PageTransformer { commonParams, } - // Load and render template const templateContent = loadTemplate(this.templateName) return await renderContent(templateContent, { diff --git a/src/audit-logs/data/fpt/organization.json b/src/audit-logs/data/fpt/organization.json index fad1c30d62e3..f60139009b56 100644 --- a/src/audit-logs/data/fpt/organization.json +++ b/src/audit-logs/data/fpt/organization.json @@ -425,6 +425,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -595,6 +596,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -629,6 +631,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -733,6 +736,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -1860,6 +1864,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -2146,6 +2151,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2296,6 +2302,38 @@ "previous_value" ] }, + { + "action": "copilot.code_review_organization_settings_updated", + "description": "Copilot code review settings were updated for an organization.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type" + ] + }, { "action": "copilot.code_review_repository_settings_updated", "description": "Copilot code review settings were updated for a repository.", @@ -2361,6 +2399,7 @@ "actor_is_bot", "created_at", "excluded_paths", + "oauth_application_id", "operation_type", "owner_type", "public_repo", @@ -3275,6 +3314,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -3313,10 +3353,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3354,6 +3396,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3387,6 +3430,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3889,6 +3933,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -4565,6 +4610,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -4601,6 +4647,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4635,6 +4682,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -5315,6 +5363,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -5536,7 +5587,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -5620,6 +5672,43 @@ ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, + { + "action": "integration.update", + "description": "A GitHub App was updated.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "application_client_id", + "created_at", + "integration", + "name", + "oauth_application_id", + "operation_type" + ] + }, { "action": "ip_allow_list.disable", "description": "An IP allow list was disabled.", @@ -6992,7 +7081,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" }, @@ -7165,6 +7255,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing repository management policies in your enterprise" @@ -8013,6 +8104,41 @@ ], "docs_reference_titles": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app" }, + { + "action": "oauth_application.update_token_expiration", + "description": "The token expiration setting for an OAuth application was updated.", + "docs_reference_links": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "oauth_application", + "oauth_application_id", + "operation_type" + ], + "docs_reference_titles": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app" + }, { "action": "org.accept_business_invitation", "description": "An invitation sent to an organization to join an enterprise was accepted.", @@ -8075,6 +8201,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -8218,7 +8345,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -8888,6 +9016,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -8920,6 +9049,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -9484,6 +9614,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9517,8 +9648,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -9549,6 +9682,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9616,9 +9750,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -9649,6 +9785,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9717,6 +9854,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10177,6 +10315,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10353,6 +10492,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -10386,6 +10526,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization" @@ -10513,10 +10654,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -12269,7 +12412,8 @@ "user_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "topic" ] }, { @@ -12333,6 +12477,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12368,10 +12513,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -12402,8 +12549,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12532,8 +12681,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12870,7 +13021,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -12905,7 +13057,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -13393,6 +13546,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13428,10 +13582,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -13499,6 +13655,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13607,6 +13764,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -13682,7 +13840,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -13749,6 +13908,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -13784,6 +13944,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -14697,7 +14858,7 @@ }, { "action": "organization_moderators.add_team", - "description": "N/A", + "description": "A team was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14730,7 +14891,7 @@ }, { "action": "organization_moderators.add_user", - "description": "N/A", + "description": "A user was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14762,7 +14923,7 @@ }, { "action": "organization_moderators.remove_team", - "description": "N/A", + "description": "A team was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14795,7 +14956,7 @@ }, { "action": "organization_moderators.remove_user", - "description": "N/A", + "description": "A user was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -15054,7 +15215,8 @@ "owner", "owner_id", "owner_type", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Permissions of custom organization roles" }, @@ -16182,6 +16344,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -17082,10 +17245,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -17123,7 +17288,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -18251,6 +18417,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -18930,6 +19097,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -19405,8 +19573,8 @@ ] }, { - "action": "repo.code_scanning_ai_findings_disabled", - "description": "AI-powered findings for code scanning were disabled for a repository.", + "action": "repo.code_quality_disabled", + "description": "Code Quality was disabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -19433,13 +19601,16 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "topic", + "user_programmatic_access_name" ] }, { - "action": "repo.code_scanning_ai_findings_enabled", - "description": "AI-powered findings for code scanning were enabled for a repository.", + "action": "repo.code_quality_enabled", + "description": "Code Quality was enabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -19464,16 +19635,19 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { - "action": "repo.code_scanning_analysis_deleted", - "description": "Code scanning analysis for a repository was deleted.", - "docs_reference_links": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository", + "action": "repo.code_quality_updated", + "description": "Code Quality was updated for a repository.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -19499,19 +19673,16 @@ "user_agent", "actor_is_agent", "actor_is_bot", - "category", "created_at", "oauth_application_id", "operation_type", "public_repo", - "tool", "user_programmatic_access_name" - ], - "docs_reference_titles": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository" + ] }, { - "action": "repo.code_scanning_autofix_disabled", - "description": "Autofix for code scanning alerts was disabled for a repository.", + "action": "repo.code_scanning_ai_findings_disabled", + "description": "AI-powered findings for code scanning were disabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -19538,13 +19709,14 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "public_repo" ] }, { - "action": "repo.code_scanning_autofix_enabled", - "description": "Autofix for code scanning alerts was enabled for a repository.", + "action": "repo.code_scanning_ai_findings_enabled", + "description": "AI-powered findings for code scanning were enabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -19571,14 +19743,15 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "public_repo" ] }, { - "action": "repo.code_scanning_autofix_third_party_tools_disabled", - "description": "Autofix for third party tools for code scanning alerts was disabled for a repository.", - "docs_reference_links": "N/A", + "action": "repo.code_scanning_analysis_deleted", + "description": "Code scanning analysis for a repository was deleted.", + "docs_reference_links": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository", "fields": [ "@timestamp", "_document_id", @@ -19602,15 +19775,21 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", + "category", "created_at", + "oauth_application_id", "operation_type", - "public_repo" - ] + "public_repo", + "tool", + "user_programmatic_access_name" + ], + "docs_reference_titles": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository" }, { - "action": "repo.code_scanning_autofix_third_party_tools_enabled", - "description": "Autofix for third party tools for code scanning alerts was enabled for a repository.", + "action": "repo.code_scanning_autofix_disabled", + "description": "Autofix for code scanning alerts was disabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -19642,9 +19821,9 @@ ] }, { - "action": "repo.code_scanning_configuration_for_branch_deleted", - "description": "A code scanning configuration for a branch of a repository was deleted.", - "docs_reference_links": "/code-security/code-scanning/managing-code-scanning-alerts/managing-code-scanning-alerts-for-your-repository#removing-stale-configurations-and-alerts-from-a-branch", + "action": "repo.code_scanning_autofix_enabled", + "description": "Autofix for code scanning alerts was enabled for a repository.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -19669,17 +19848,116 @@ "user_id", "user_agent", "actor_is_bot", - "branch", - "category", "created_at", "operation_type", - "public_repo", - "tool" - ], - "docs_reference_titles": "Resolving code scanning alerts" + "public_repo" + ] }, { - "action": "repo.code_scanning_delegated_alert_dismissal_disabled", + "action": "repo.code_scanning_autofix_third_party_tools_disabled", + "description": "Autofix for third party tools for code scanning alerts was disabled for a repository.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type", + "public_repo" + ] + }, + { + "action": "repo.code_scanning_autofix_third_party_tools_enabled", + "description": "Autofix for third party tools for code scanning alerts was enabled for a repository.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type", + "public_repo" + ] + }, + { + "action": "repo.code_scanning_configuration_for_branch_deleted", + "description": "A code scanning configuration for a branch of a repository was deleted.", + "docs_reference_links": "/code-security/code-scanning/managing-code-scanning-alerts/managing-code-scanning-alerts-for-your-repository#removing-stale-configurations-and-alerts-from-a-branch", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "branch", + "category", + "created_at", + "operation_type", + "public_repo", + "tool" + ], + "docs_reference_titles": "Resolving code scanning alerts" + }, + { + "action": "repo.code_scanning_delegated_alert_dismissal_disabled", "description": "Prevention of direct alert dismissal for code scanning was disabled for a repository.", "docs_reference_links": "N/A", "fields": [ @@ -21376,6 +21654,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -21419,6 +21698,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -21570,6 +21850,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -21651,7 +21932,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -22149,6 +22431,42 @@ ], "docs_reference_titles": "Repository security advisories" }, + { + "action": "repository_advisory.create_confidential_comment", + "description": "Someone created a confidential comment on a repository security advisory.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type", + "public_repo", + "repository_advisory", + "repository_advisory_comment_id", + "repository_advisory_id" + ] + }, { "action": "repository_advisory.cve_request", "description": "Someone requested a CVE (Common Vulnerabilities and Exposures) number from GitHub for a draft security advisory.", @@ -22321,6 +22639,43 @@ "user_programmatic_access_name" ] }, + { + "action": "repository_advisory.read_confidential_comments", + "description": "Confidential comments on a repository security advisory were read by someone.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "confidential_comment_count", + "created_at", + "operation_type", + "public_repo", + "repository_advisory", + "repository_advisory_id", + "surface" + ] + }, { "action": "repository_advisory.reopen", "description": "Someone reopened as draft security advisory.", @@ -22353,7 +22708,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { @@ -23214,6 +23570,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], @@ -23541,7 +23898,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23574,8 +23932,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23712,7 +24072,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -24123,7 +24484,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -24945,6 +25307,7 @@ "user_id", "user_agent", "active", + "actor_is_agent", "actor_is_bot", "alert_id", "alert_number", @@ -25132,6 +25495,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -25169,6 +25533,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -25278,6 +25643,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -25395,7 +25761,8 @@ "oauth_application_id", "operation_type", "owner", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Managing custom repository roles for an organization" }, @@ -25442,9 +25809,9 @@ "docs_reference_titles": "Managing custom repository roles for an organization" }, { - "action": "secret_scanning_alert.assign", - "description": "A user was assigned to a secret scanning alert.", - "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "action": "sandbox.add_port", + "description": "A forwarded port was added to a sandbox.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -25469,18 +25836,14 @@ "user_id", "user_agent", "created_at", - "multi_repo", - "number", - "publicly_leaked", - "secret_type", - "secret_type_display_name" - ], - "docs_reference_titles": "Manage secret scanning alerts" + "operation_type", + "sandbox_id" + ] }, { - "action": "secret_scanning_alert.create", - "description": "GitHub detected a secret and created a secret scanning alert.", - "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "action": "sandbox.create", + "description": "A sandbox was created.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -25505,18 +25868,14 @@ "user_id", "user_agent", "created_at", - "multi_repo", - "number", - "publicly_leaked", - "secret_type", - "secret_type_display_name" - ], - "docs_reference_titles": "Manage secret scanning alerts" + "operation_type", + "sandbox_id" + ] }, { - "action": "secret_scanning_alert.delete", - "description": "A secret scanning alert was deleted by GitHub. Note that deletions from custom patterns are not logged.", - "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "action": "sandbox.delete", + "description": "A sandbox was deleted.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -25541,19 +25900,14 @@ "user_id", "user_agent", "created_at", - "multi_repo", - "number", - "publicly_leaked", - "reason", - "secret_type", - "secret_type_display_name" - ], - "docs_reference_titles": "Manage secret scanning alerts" + "operation_type", + "sandbox_id" + ] }, { - "action": "secret_scanning_alert.public_leak", - "description": "A secret scanning alert was leaked in a public repo.", - "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "action": "sandbox.generate_token", + "description": "A token was generated for a sandbox.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -25578,17 +25932,13 @@ "user_id", "user_agent", "created_at", - "multi_repo", - "number", - "publicly_leaked", - "secret_type", - "secret_type_display_name" - ], - "docs_reference_titles": "Manage secret scanning alerts" + "operation_type", + "sandbox_id" + ] }, { - "action": "secret_scanning_alert.reopen", - "description": "A secret scanning alert was reopened.", + "action": "sandbox.remove_port", + "description": "A forwarded port was removed from a sandbox.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -25613,17 +25963,330 @@ "user", "user_id", "user_agent", - "actor_is_agent", - "actor_is_bot", "created_at", - "multi_repo", - "number", - "oauth_application_id", "operation_type", - "publicly_leaked", - "public_repo", - "resolution", - "secret_type", + "sandbox_id" + ] + }, + { + "action": "sandbox.resume", + "description": "A sandbox was resumed.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, + { + "action": "sandbox.stop", + "description": "A sandbox was stopped.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, + { + "action": "secret_scanning_alert.assign", + "description": "A user was assigned to a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.create", + "description": "GitHub detected a secret and created a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.delete", + "description": "A secret scanning alert was deleted by GitHub. Note that deletions from custom patterns are not logged.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "reason", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.metadata_create", + "description": "Metadata was added to a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.metadata_remove", + "description": "Metadata was removed from a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.public_leak", + "description": "A secret scanning alert was leaked in a public repo.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.reopen", + "description": "A secret scanning alert was reopened.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "multi_repo", + "number", + "oauth_application_id", + "operation_type", + "publicly_leaked", + "public_repo", + "resolution", + "secret_type", "secret_type_display_name", "user_programmatic_access_name" ] @@ -26369,6 +27032,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -29199,6 +29863,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -29206,6 +29871,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], @@ -29255,6 +29921,71 @@ ], "docs_reference_titles": "Understanding GitHub Actions" }, + { + "action": "workflows.debugger_session_completed", + "description": "An Actions job with the debugger enabled completed its debug session. Includes the repository, ref, workflow file, actor, and session duration.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "completed_at", + "created_at", + "operation_type", + "started_at" + ] + }, + { + "action": "workflows.debugger_session_started", + "description": "An Actions job with the debugger enabled started a debug session. Includes the repository, ref, workflow file, and actor.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "started_at" + ] + }, { "action": "workflows.delete_workflow_run", "description": "A workflow run was deleted.", diff --git a/src/audit-logs/data/fpt/user.json b/src/audit-logs/data/fpt/user.json index c4b66f719bf9..a35f7517e21c 100644 --- a/src/audit-logs/data/fpt/user.json +++ b/src/audit-logs/data/fpt/user.json @@ -307,6 +307,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -718,6 +719,40 @@ "operation_type" ] }, + { + "action": "business.add_member", + "description": "A member was added to an enterprise.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "name", + "operation_type" + ] + }, { "action": "business.add_support_entitlee", "description": "A support entitlement was added to a member of an enterprise.", @@ -1069,6 +1104,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -1138,6 +1174,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -1210,6 +1247,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -1243,6 +1281,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -1316,7 +1355,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -1758,6 +1798,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1904,6 +1945,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2019,6 +2061,38 @@ "seat_assignment" ] }, + { + "action": "copilot.code_review_organization_settings_updated", + "description": "Copilot code review settings were updated for an organization.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type" + ] + }, { "action": "copilot.code_review_repository_settings_updated", "description": "Copilot code review settings were updated for a repository.", @@ -2505,6 +2579,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -2543,10 +2618,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -2584,6 +2661,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3550,6 +3628,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3586,6 +3665,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3620,6 +3700,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3692,6 +3773,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -4297,6 +4379,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -4518,7 +4603,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -4602,6 +4688,43 @@ ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, + { + "action": "integration.update", + "description": "A GitHub App was updated.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "application_client_id", + "created_at", + "integration", + "name", + "oauth_application_id", + "operation_type" + ] + }, { "action": "issue_dependencies.blocked_by_add", "description": "An issue was marked as blocked by another issue.", @@ -6178,6 +6301,41 @@ ], "docs_reference_titles": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app" }, + { + "action": "oauth_application.update_token_expiration", + "description": "The token expiration setting for an OAuth application was updated.", + "docs_reference_links": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "oauth_application", + "oauth_application_id", + "operation_type" + ], + "docs_reference_titles": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app" + }, { "action": "oauth_authorization.create", "description": "An authorization for an OAuth application was created.", @@ -6284,8 +6442,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -6706,6 +6866,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6741,10 +6902,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -6812,6 +6975,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6888,6 +7052,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -6963,7 +7128,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -7558,6 +7724,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -8592,10 +8759,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -8633,7 +8802,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -8827,6 +8997,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -10569,6 +10740,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10612,6 +10784,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -10763,6 +10936,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -10844,7 +11018,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -11727,7 +11902,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11758,7 +11934,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11789,7 +11966,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11820,7 +11998,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11851,7 +12030,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11882,7 +12062,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11913,7 +12094,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -13132,6 +13314,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -13932,6 +14115,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -14105,6 +14289,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -14270,7 +14455,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14297,12 +14482,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14328,12 +14514,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14359,6 +14546,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -14430,7 +14618,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14457,12 +14645,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14488,13 +14677,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14520,6 +14710,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -15472,6 +15663,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", diff --git a/src/audit-logs/data/ghec/enterprise.json b/src/audit-logs/data/ghec/enterprise.json index 4a0d5deadb70..b23efaa6d4e8 100644 --- a/src/audit-logs/data/ghec/enterprise.json +++ b/src/audit-logs/data/ghec/enterprise.json @@ -469,13 +469,16 @@ "audit_log_stream_sink_details", "created_at", "new_azure_blob_container", + "new_datadog_site", "new_event_hub_instance", "new_gc_bucket", "new_s3_arn_role", "new_s3_bucket", "new_splunk_domain", "new_splunk_port", + "oauth_application_id", "old_azure_blob_container", + "old_datadog_site", "old_event_hub_instance", "old_gc_bucket", "old_s3_arn_role", @@ -626,6 +629,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -796,6 +800,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -830,6 +835,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -934,6 +940,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -1244,6 +1251,40 @@ "two_factor_method" ] }, + { + "action": "business.add_member", + "description": "A member was added to an enterprise.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "name", + "operation_type" + ] + }, { "action": "business.add_organization", "description": "An organization was added to an enterprise.", @@ -1854,6 +1895,7 @@ "email", "invitation_id", "name", + "oauth_application_id", "operation_type" ] }, @@ -2907,41 +2949,8 @@ ] }, { - "action": "business.enable_oidc", - "description": "OIDC single sign-on was enabled for an enterprise.", - "docs_reference_links": "/admin/identity-and-access-management/using-enterprise-managed-users-for-iam/configuring-oidc-for-enterprise-managed-users", - "fields": [ - "@timestamp", - "_document_id", - "action", - "actor", - "actor_id", - "business", - "business_id", - "hashed_token", - "org", - "org_id", - "programmatic_access_type", - "repo", - "repo_id", - "repository", - "repository_id", - "request_access_security_header", - "request_id", - "token_id", - "token_scopes", - "user", - "user_id", - "user_agent", - "actor_is_bot", - "created_at", - "operation_type" - ], - "docs_reference_titles": "Configuring OIDC for Enterprise Managed Users" - }, - { - "action": "business.enable_open_scim", - "description": "SCIM provisioning for custom integrations that use the REST API was enabled for the enterprise.", + "action": "business.enable_app_delegated_credential_authorizations", + "description": "App-delegated credential authorizations were enabled for an enterprise.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -2972,44 +2981,9 @@ ] }, { - "action": "business.enable_saml", - "description": "SAML single sign-on was enabled for an enterprise.", - "docs_reference_links": "N/A", - "fields": [ - "@timestamp", - "_document_id", - "action", - "actor", - "actor_id", - "business", - "business_id", - "hashed_token", - "org", - "org_id", - "programmatic_access_type", - "repo", - "repo_id", - "repository", - "repository_id", - "request_access_security_header", - "request_id", - "token_id", - "token_scopes", - "user", - "user_id", - "user_agent", - "actor_is_bot", - "created_at", - "issuer", - "name", - "operation_type", - "sso_url" - ] - }, - { - "action": "business.enable_source_ip_disclosure", - "description": "Display of IP addresses within audit log events for the enterprise was enabled.", - "docs_reference_links": "/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise", + "action": "business.enable_oidc", + "description": "OIDC single sign-on was enabled for an enterprise.", + "docs_reference_links": "/admin/identity-and-access-management/using-enterprise-managed-users-for-iam/configuring-oidc-for-enterprise-managed-users", "fields": [ "@timestamp", "_document_id", @@ -3037,77 +3011,11 @@ "created_at", "operation_type" ], - "docs_reference_titles": "Displaying IP addresses in the audit log for your enterprise" - }, - { - "action": "business.enable_two_factor_requirement", - "description": "The requirement for members to have two-factor authentication enabled to access an enterprise was enabled.", - "docs_reference_links": "N/A", - "fields": [ - "@timestamp", - "_document_id", - "action", - "actor", - "actor_id", - "business", - "business_id", - "hashed_token", - "org", - "org_id", - "programmatic_access_type", - "repo", - "repo_id", - "repository", - "repository_id", - "request_access_security_header", - "request_id", - "token_id", - "token_scopes", - "user", - "user_id", - "user_agent", - "actor_is_bot", - "created_at", - "name", - "oauth_application_id", - "operation_type" - ] - }, - { - "action": "business.enterprise_server_license_download", - "description": "A GitHub Enterprise Server license was downloaded.", - "docs_reference_links": "N/A", - "fields": [ - "@timestamp", - "_document_id", - "action", - "actor", - "actor_id", - "business", - "business_id", - "hashed_token", - "org", - "org_id", - "programmatic_access_type", - "repo", - "repo_id", - "repository", - "repository_id", - "request_access_security_header", - "request_id", - "token_id", - "token_scopes", - "user", - "user_id", - "user_agent", - "actor_is_bot", - "created_at", - "operation_type" - ] + "docs_reference_titles": "Configuring OIDC for Enterprise Managed Users" }, { - "action": "business.enterprise_teams_limit_reached", - "description": "An enterprise has reached its enterprise teams limit.", + "action": "business.enable_open_scim", + "description": "SCIM provisioning for custom integrations that use the REST API was enabled for the enterprise.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3133,16 +3041,13 @@ "user_id", "user_agent", "actor_is_bot", - "count", "created_at", - "limit", - "name", "operation_type" ] }, { - "action": "business.enterprise_teams_limit_warning", - "description": "An enterprise is approaching its enterprise teams limit.", + "action": "business.enable_saml", + "description": "SAML single sign-on was enabled for an enterprise.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3168,17 +3073,17 @@ "user_id", "user_agent", "actor_is_bot", - "count", "created_at", - "limit", + "issuer", "name", - "operation_type" + "operation_type", + "sso_url" ] }, { - "action": "business.expire_trial", - "description": "The trial of GitHub Enterprise Cloud expired.", - "docs_reference_links": "/admin/overview/setting-up-a-trial-of-github-enterprise-cloud", + "action": "business.enable_source_ip_disclosure", + "description": "Display of IP addresses within audit log events for the enterprise was enabled.", + "docs_reference_links": "/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise", "fields": [ "@timestamp", "_document_id", @@ -3204,14 +3109,13 @@ "user_agent", "actor_is_bot", "created_at", - "name", "operation_type" ], - "docs_reference_titles": "Setting up a trial of GitHub Enterprise Cloud" + "docs_reference_titles": "Displaying IP addresses in the audit log for your enterprise" }, { - "action": "business.github_models_billing_disabled", - "description": "GitHub Models billing was disabled for the business.", + "action": "business.enable_two_factor_requirement", + "description": "The requirement for members to have two-factor authentication enabled to access an enterprise was enabled.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3239,12 +3143,13 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ] }, { - "action": "business.github_models_billing_enabled", - "description": "GitHub Models billing was enabled for the business.", + "action": "business.enterprise_server_license_download", + "description": "A GitHub Enterprise Server license was downloaded.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3271,48 +3176,12 @@ "user_agent", "actor_is_bot", "created_at", - "name", "operation_type" ] }, { - "action": "business.import_license_usage", - "description": "License usage information was imported from a GitHub Enterprise Server instance to an enterprise account on GitHub.com.", - "docs_reference_links": "/billing/managing-your-license-for-github-enterprise/syncing-license-usage-between-github-enterprise-server-and-github-enterprise-cloud#manually-uploading-github-enterprise-server-license-usage", - "fields": [ - "@timestamp", - "_document_id", - "action", - "actor", - "actor_id", - "business", - "business_id", - "hashed_token", - "org", - "org_id", - "programmatic_access_type", - "repo", - "repo_id", - "repository", - "repository_id", - "request_access_security_header", - "request_id", - "token_id", - "token_scopes", - "user", - "user_id", - "user_agent", - "actor_is_agent", - "actor_is_bot", - "created_at", - "name", - "operation_type" - ], - "docs_reference_titles": "Syncing license usage from GitHub Enterprise Server to Cloud" - }, - { - "action": "business.invite_admin", - "description": "An invitation for someone to be an enterprise owner of an enterprise was sent.", + "action": "business.enterprise_teams_limit_reached", + "description": "An enterprise has reached its enterprise teams limit.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3337,19 +3206,17 @@ "user", "user_id", "user_agent", - "actor_is_agent", "actor_is_bot", + "count", "created_at", - "email", - "invitation_id", + "limit", "name", - "oauth_application_id", "operation_type" ] }, { - "action": "business.invite_billing_manager", - "description": "An invitation for someone to be a billing manager of an enterprise was sent.", + "action": "business.enterprise_teams_limit_warning", + "description": "An enterprise is approaching its enterprise teams limit.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3374,20 +3241,18 @@ "user", "user_id", "user_agent", - "actor_is_agent", "actor_is_bot", + "count", "created_at", - "email", - "invitation_id", + "limit", "name", - "oauth_application_id", "operation_type" ] }, { - "action": "business.invite_unaffiliated_member", - "description": "An invitation for someone to join an enterprise was sent.", - "docs_reference_links": "N/A", + "action": "business.expire_trial", + "description": "The trial of GitHub Enterprise Cloud expired.", + "docs_reference_links": "/admin/overview/setting-up-a-trial-of-github-enterprise-cloud", "fields": [ "@timestamp", "_document_id", @@ -3411,19 +3276,16 @@ "user", "user_id", "user_agent", - "actor_is_agent", "actor_is_bot", "created_at", - "email", - "invitation_id", "name", - "oauth_application_id", "operation_type" - ] + ], + "docs_reference_titles": "Setting up a trial of GitHub Enterprise Cloud" }, { - "action": "business.members_can_update_protected_branches.clear", - "description": "An enterprise owner unset a policy for whether members of an enterprise can update protected branches on repositories for individual organizations. Organization owners can choose whether to allow updating protected branches settings.", + "action": "business.github_models_billing_disabled", + "description": "GitHub Models billing was disabled for the business.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3455,8 +3317,8 @@ ] }, { - "action": "business.members_can_update_protected_branches.disable", - "description": "The ability for enterprise members to update branch protection rules was disabled. Only enterprise owners can update protected branches.", + "action": "business.github_models_billing_enabled", + "description": "GitHub Models billing was enabled for the business.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3484,14 +3346,13 @@ "actor_is_bot", "created_at", "name", - "oauth_application_id", "operation_type" ] }, { - "action": "business.members_can_update_protected_branches.enable", - "description": "The ability for enterprise members to update branch protection rules was enabled. Enterprise owners and members can update protected branches.", - "docs_reference_links": "N/A", + "action": "business.import_license_usage", + "description": "License usage information was imported from a GitHub Enterprise Server instance to an enterprise account on GitHub.com.", + "docs_reference_links": "/billing/managing-your-license-for-github-enterprise/syncing-license-usage-between-github-enterprise-server-and-github-enterprise-cloud#manually-uploading-github-enterprise-server-license-usage", "fields": [ "@timestamp", "_document_id", @@ -3515,14 +3376,17 @@ "user", "user_id", "user_agent", + "actor_is_agent", + "actor_is_bot", "created_at", "name", "operation_type" - ] + ], + "docs_reference_titles": "Syncing license usage from GitHub Enterprise Server to Cloud" }, { - "action": "business.members_limit_reached", - "description": "An enterprise has reached its members limit.", + "action": "business.invite_admin", + "description": "An invitation for someone to be an enterprise owner of an enterprise was sent.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3547,17 +3411,19 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", - "count", "created_at", - "limit", + "email", + "invitation_id", "name", + "oauth_application_id", "operation_type" ] }, { - "action": "business.organizations_limit_reached", - "description": "An enterprise has reached its organizations limit.", + "action": "business.invite_billing_manager", + "description": "An invitation for someone to be a billing manager of an enterprise was sent.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3582,17 +3448,19 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", - "count", "created_at", - "limit", + "email", + "invitation_id", "name", + "oauth_application_id", "operation_type" ] }, { - "action": "business.organizations_limit_warning", - "description": "An enterprise is approaching its organizations limit.", + "action": "business.invite_unaffiliated_member", + "description": "An invitation for someone to join an enterprise was sent.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3617,17 +3485,19 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", - "count", "created_at", - "limit", + "email", + "invitation_id", "name", + "oauth_application_id", "operation_type" ] }, { - "action": "business.proxy_security_header_disabled", - "description": "The proxy security header was disabled for an enterprise. All users on the network can now access GitHub, unless blocked by other means.", + "action": "business.members_can_update_protected_branches.clear", + "description": "An enterprise owner unset a policy for whether members of an enterprise can update protected branches on repositories for individual organizations. Organization owners can choose whether to allow updating protected branches settings.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3654,12 +3524,13 @@ "user_agent", "actor_is_bot", "created_at", + "name", "operation_type" ] }, { - "action": "business.proxy_security_header_enabled", - "description": "The proxy security header was enabled for an enterprise. When the header is provided in requests, only Enterprise Managed Users matching the header will be able to access GitHub.", + "action": "business.members_can_update_protected_branches.disable", + "description": "The ability for enterprise members to update branch protection rules was disabled. Only enterprise owners can update protected branches.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3686,12 +3557,14 @@ "user_agent", "actor_is_bot", "created_at", + "name", + "oauth_application_id", "operation_type" ] }, { - "action": "business.proxy_security_header_unsatisfied", - "description": "A user outside the enterprise tried to access GitHub while the proxy security header was enabled and provided in the request.", + "action": "business.members_can_update_protected_branches.enable", + "description": "The ability for enterprise members to update branch protection rules was enabled. Enterprise owners and members can update protected branches.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -3719,14 +3592,13 @@ "actor_is_bot", "created_at", "name", - "oauth_application_id", "operation_type" ] }, { - "action": "business.recovery_code_failed", - "description": "An enterprise owner failed to sign into a enterprise with an external identity provider (IdP) using a recovery code.", - "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/accessing-your-enterprise-account-if-your-identity-provider-is-unavailable", + "action": "business.members_limit_reached", + "description": "An enterprise has reached its members limit.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -3751,17 +3623,17 @@ "user_id", "user_agent", "actor_is_bot", + "count", "created_at", + "limit", "name", - "operation_type", - "reason" - ], - "docs_reference_titles": "Accessing your enterprise account if your identity provider is unavailable" + "operation_type" + ] }, { - "action": "business.recovery_code_used", - "description": "An enterprise owner successfully signed into an enterprise with an external identity provider (IdP) using a recovery code.", - "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/accessing-your-enterprise-account-if-your-identity-provider-is-unavailable", + "action": "business.members_limit_warning", + "description": "An enterprise is approaching its members limit.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -3786,16 +3658,17 @@ "user_id", "user_agent", "actor_is_bot", + "count", "created_at", + "limit", "name", "operation_type" - ], - "docs_reference_titles": "Accessing your enterprise account if your identity provider is unavailable" + ] }, { - "action": "business.recovery_codes_downloaded", - "description": "An enterprise owner downloaded the enterprise's SSO recovery codes.", - "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes", + "action": "business.organizations_limit_reached", + "description": "An enterprise has reached its organizations limit.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -3820,16 +3693,17 @@ "user_id", "user_agent", "actor_is_bot", + "count", "created_at", + "limit", "name", "operation_type" - ], - "docs_reference_titles": "Downloading your enterprise account's single sign-on recovery codes" + ] }, { - "action": "business.recovery_codes_generated", - "description": "An enterprise owner generated the enterprise's SSO recovery codes.", - "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes", + "action": "business.organizations_limit_warning", + "description": "An enterprise is approaching its organizations limit.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -3854,16 +3728,17 @@ "user_id", "user_agent", "actor_is_bot", + "count", "created_at", + "limit", "name", "operation_type" - ], - "docs_reference_titles": "Downloading your enterprise account's single sign-on recovery codes" + ] }, { - "action": "business.recovery_codes_printed", - "description": "An enterprise owner printed the enterprise's SSO recovery codes.", - "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes", + "action": "business.proxy_security_header_disabled", + "description": "The proxy security header was disabled for an enterprise. All users on the network can now access GitHub, unless blocked by other means.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -3889,15 +3764,13 @@ "user_agent", "actor_is_bot", "created_at", - "name", "operation_type" - ], - "docs_reference_titles": "Downloading your enterprise account's single sign-on recovery codes" + ] }, { - "action": "business.recovery_codes_viewed", - "description": "An enterprise owner viewed the enterprise's SSO recovery codes.", - "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes", + "action": "business.proxy_security_header_enabled", + "description": "The proxy security header was enabled for an enterprise. When the header is provided in requests, only Enterprise Managed Users matching the header will be able to access GitHub.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -3923,15 +3796,13 @@ "user_agent", "actor_is_bot", "created_at", - "name", "operation_type" - ], - "docs_reference_titles": "Downloading your enterprise account's single sign-on recovery codes" + ] }, { - "action": "business.remove_admin", - "description": "An enterprise owner was removed from an enterprise.", - "docs_reference_links": "/admin/user-management/managing-users-in-your-enterprise/inviting-people-to-manage-your-enterprise", + "action": "business.proxy_security_header_unsatisfied", + "description": "A user outside the enterprise tried to access GitHub while the proxy security header was enabled and provided in the request.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -3955,19 +3826,52 @@ "user", "user_id", "user_agent", - "actor_is_agent", "actor_is_bot", "created_at", "name", "oauth_application_id", "operation_type" + ] + }, + { + "action": "business.recovery_code_failed", + "description": "An enterprise owner failed to sign into a enterprise with an external identity provider (IdP) using a recovery code.", + "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/accessing-your-enterprise-account-if-your-identity-provider-is-unavailable", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "name", + "operation_type", + "reason" ], - "docs_reference_titles": "Inviting people to manage your enterprise" + "docs_reference_titles": "Accessing your enterprise account if your identity provider is unavailable" }, { - "action": "business.remove_billing_manager", - "description": "A billing manager was removed from an enterprise.", - "docs_reference_links": "N/A", + "action": "business.recovery_code_used", + "description": "An enterprise owner successfully signed into an enterprise with an external identity provider (IdP) using a recovery code.", + "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/accessing-your-enterprise-account-if-your-identity-provider-is-unavailable", "fields": [ "@timestamp", "_document_id", @@ -3991,18 +3895,17 @@ "user", "user_id", "user_agent", - "actor_is_agent", "actor_is_bot", "created_at", "name", - "oauth_application_id", "operation_type" - ] + ], + "docs_reference_titles": "Accessing your enterprise account if your identity provider is unavailable" }, { - "action": "business.remove_disallowed_two_factor_method", - "description": "Removed a two-factor authentication method restriction for an enterprise.", - "docs_reference_links": "N/A", + "action": "business.recovery_codes_downloaded", + "description": "An enterprise owner downloaded the enterprise's SSO recovery codes.", + "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes", "fields": [ "@timestamp", "_document_id", @@ -4029,14 +3932,14 @@ "actor_is_bot", "created_at", "name", - "operation_type", - "two_factor_method" - ] + "operation_type" + ], + "docs_reference_titles": "Downloading your enterprise account's single sign-on recovery codes" }, { - "action": "business.remove_member", - "description": "A member was removed from an enterprise.", - "docs_reference_links": "N/A", + "action": "business.recovery_codes_generated", + "description": "An enterprise owner generated the enterprise's SSO recovery codes.", + "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes", "fields": [ "@timestamp", "_document_id", @@ -4060,19 +3963,17 @@ "user", "user_id", "user_agent", - "actor_is_agent", "actor_is_bot", "created_at", "name", - "oauth_application_id", - "operation_type", - "user_programmatic_access_name" - ] + "operation_type" + ], + "docs_reference_titles": "Downloading your enterprise account's single sign-on recovery codes" }, { - "action": "business.remove_organization", - "description": "An organization was removed from an enterprise.", - "docs_reference_links": "N/A", + "action": "business.recovery_codes_printed", + "description": "An enterprise owner printed the enterprise's SSO recovery codes.", + "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes", "fields": [ "@timestamp", "_document_id", @@ -4096,18 +3997,228 @@ "user", "user_id", "user_agent", - "actor_is_agent", "actor_is_bot", "created_at", "name", - "oauth_application_id", "operation_type" - ] + ], + "docs_reference_titles": "Downloading your enterprise account's single sign-on recovery codes" }, { - "action": "business.remove_support_entitlee", - "description": "A support entitlement was removed from a member of an enterprise.", - "docs_reference_links": "/admin/user-management/managing-users-in-your-enterprise/managing-support-entitlements-for-your-enterprise", + "action": "business.recovery_codes_viewed", + "description": "An enterprise owner viewed the enterprise's SSO recovery codes.", + "docs_reference_links": "/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "name", + "operation_type" + ], + "docs_reference_titles": "Downloading your enterprise account's single sign-on recovery codes" + }, + { + "action": "business.remove_admin", + "description": "An enterprise owner was removed from an enterprise.", + "docs_reference_links": "/admin/user-management/managing-users-in-your-enterprise/inviting-people-to-manage-your-enterprise", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "name", + "oauth_application_id", + "operation_type" + ], + "docs_reference_titles": "Inviting people to manage your enterprise" + }, + { + "action": "business.remove_billing_manager", + "description": "A billing manager was removed from an enterprise.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "name", + "oauth_application_id", + "operation_type" + ] + }, + { + "action": "business.remove_disallowed_two_factor_method", + "description": "Removed a two-factor authentication method restriction for an enterprise.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "name", + "operation_type", + "two_factor_method" + ] + }, + { + "action": "business.remove_member", + "description": "A member was removed from an enterprise.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "name", + "oauth_application_id", + "operation_type", + "user_programmatic_access_name" + ] + }, + { + "action": "business.remove_organization", + "description": "An organization was removed from an enterprise.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "name", + "oauth_application_id", + "operation_type", + "user_programmatic_access_name" + ] + }, + { + "action": "business.remove_support_entitlee", + "description": "A support entitlement was removed from a member of an enterprise.", + "docs_reference_links": "/admin/user-management/managing-users-in-your-enterprise/managing-support-entitlements-for-your-enterprise", "fields": [ "@timestamp", "_document_id", @@ -4658,6 +4769,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -4691,6 +4803,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -5019,6 +5132,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -5052,6 +5166,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -5363,6 +5478,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -5432,6 +5548,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -5504,6 +5621,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -5537,6 +5655,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -5610,7 +5729,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -6002,6 +6122,7 @@ "created_at", "name", "new_repo_runners_policy", + "oauth_application_id", "old_repo_runners_policy", "operation_type" ] @@ -7067,6 +7188,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -7419,6 +7541,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -7632,6 +7755,7 @@ "actor_is_bot", "created_at", "excluded_paths", + "oauth_application_id", "operation_type", "owner_type", "public_repo", @@ -8333,6 +8457,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -8371,10 +8496,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -8412,6 +8539,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -8445,6 +8573,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8947,6 +9076,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -9134,6 +9264,7 @@ "actor_is_bot", "created_at", "domain_name", + "oauth_application_id", "operation_type", "owner", "owner_type" @@ -9338,6 +9469,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "enterprise_role_id", @@ -10783,6 +10915,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "message", "oauth_application_id", "operation_type", @@ -10826,6 +10959,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "oauth_application_id", "operation_type", "query_string", @@ -11263,6 +11397,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -11299,6 +11434,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11333,6 +11469,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -12013,6 +12150,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -12234,7 +12374,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -12319,8 +12460,8 @@ "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, { - "action": "ip_allow_list.disable", - "description": "An IP allow list was disabled.", + "action": "integration.update", + "description": "A GitHub App was updated.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12345,15 +12486,19 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", + "application_client_id", "created_at", + "integration", + "name", "oauth_application_id", "operation_type" ] }, { - "action": "ip_allow_list.disable_for_installed_apps", - "description": "An IP allow list was disabled for installed GitHub Apps.", + "action": "ip_allow_list.disable", + "description": "An IP allow list was disabled.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12385,8 +12530,8 @@ ] }, { - "action": "ip_allow_list.disable_idp_ip_allowlist_for_web", - "description": "Identity Provider based IP allow list for web interactions was disabled.", + "action": "ip_allow_list.disable_for_installed_apps", + "description": "An IP allow list was disabled for installed GitHub Apps.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12413,12 +12558,45 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, { - "action": "ip_allow_list.disable_skip_idp_ip_allowlist_app_access", - "description": "N/A", + "action": "ip_allow_list.disable_idp_ip_allowlist_for_web", + "description": "Identity Provider based IP allow list for web interactions was disabled.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type" + ] + }, + { + "action": "ip_allow_list.disable_skip_idp_ip_allowlist_app_access", + "description": "N/A", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13803,6 +13981,78 @@ ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" }, + { + "action": "members_can_create_private_pages.disable", + "description": "The ability for members to publish private GitHub Pages was disabled Members cannot publish private GitHub Pages in an organization.", + "docs_reference_links": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "oauth_application_id", + "operation_type", + "user_programmatic_access_name" + ], + "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" + }, + { + "action": "members_can_create_private_pages.enable", + "description": "The ability for members to publish private GitHub Pages was enabled Members can publish private GitHub Pages in an organization.", + "docs_reference_links": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "oauth_application_id", + "operation_type", + "user_programmatic_access_name" + ], + "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" + }, { "action": "members_can_create_public_pages.disable", "description": "The ability for members to publish public GitHub Pages was disabled Members cannot publish public GitHub Pages in an organization.", @@ -13972,6 +14222,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing repository management policies in your enterprise" @@ -14820,6 +15071,41 @@ ], "docs_reference_titles": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app" }, + { + "action": "oauth_application.update_token_expiration", + "description": "The token expiration setting for an OAuth application was updated.", + "docs_reference_links": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "oauth_application", + "oauth_application_id", + "operation_type" + ], + "docs_reference_titles": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app" + }, { "action": "org.accept_business_invitation", "description": "An invitation sent to an organization to join an enterprise was accepted.", @@ -14882,6 +15168,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -14992,7 +15279,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -15501,6 +15789,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -15533,6 +15822,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -16032,6 +16322,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -16065,8 +16356,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -16097,6 +16390,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -16164,9 +16458,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -16197,6 +16493,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -16265,6 +16562,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -16798,6 +17096,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -16925,10 +17224,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -18549,6 +18850,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -18584,10 +18886,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -18618,8 +18922,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -18748,8 +19054,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -19086,7 +19394,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -19121,7 +19430,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -19465,6 +19775,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -19500,10 +19811,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -19571,6 +19884,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -19679,6 +19993,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -19754,7 +20069,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -19821,6 +20137,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -19856,6 +20173,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -20406,6 +20724,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "allowed_values", "created_at", @@ -20790,7 +21109,7 @@ }, { "action": "organization_moderators.add_team", - "description": "N/A", + "description": "A team was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -20823,7 +21142,7 @@ }, { "action": "organization_moderators.add_user", - "description": "N/A", + "description": "A user was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -20855,7 +21174,7 @@ }, { "action": "organization_moderators.remove_team", - "description": "N/A", + "description": "A team was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -20888,7 +21207,7 @@ }, { "action": "organization_moderators.remove_user", - "description": "N/A", + "description": "A user was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -21147,7 +21466,8 @@ "owner", "owner_id", "owner_type", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Permissions of custom organization roles" }, @@ -22339,6 +22659,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -23239,10 +23560,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -23280,7 +23603,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -24332,6 +24656,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -25011,6 +25336,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -25486,8 +25812,8 @@ ] }, { - "action": "repo.code_scanning_ai_findings_disabled", - "description": "AI-powered findings for code scanning were disabled for a repository.", + "action": "repo.code_quality_disabled", + "description": "Code Quality was disabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -25514,13 +25840,16 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "topic", + "user_programmatic_access_name" ] }, { - "action": "repo.code_scanning_ai_findings_enabled", - "description": "AI-powered findings for code scanning were enabled for a repository.", + "action": "repo.code_quality_enabled", + "description": "Code Quality was enabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -25545,16 +25874,19 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { - "action": "repo.code_scanning_analysis_deleted", - "description": "Code scanning analysis for a repository was deleted.", - "docs_reference_links": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository", + "action": "repo.code_quality_updated", + "description": "Code Quality was updated for a repository.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -25580,19 +25912,16 @@ "user_agent", "actor_is_agent", "actor_is_bot", - "category", "created_at", "oauth_application_id", "operation_type", "public_repo", - "tool", "user_programmatic_access_name" - ], - "docs_reference_titles": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository" + ] }, { - "action": "repo.code_scanning_autofix_disabled", - "description": "Autofix for code scanning alerts was disabled for a repository.", + "action": "repo.code_scanning_ai_findings_disabled", + "description": "AI-powered findings for code scanning were disabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -25619,13 +25948,14 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "public_repo" ] }, { - "action": "repo.code_scanning_autofix_enabled", - "description": "Autofix for code scanning alerts was enabled for a repository.", + "action": "repo.code_scanning_ai_findings_enabled", + "description": "AI-powered findings for code scanning were enabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -25652,14 +25982,15 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "public_repo" ] }, { - "action": "repo.code_scanning_autofix_third_party_tools_disabled", - "description": "Autofix for third party tools for code scanning alerts was disabled for a repository.", - "docs_reference_links": "N/A", + "action": "repo.code_scanning_analysis_deleted", + "description": "Code scanning analysis for a repository was deleted.", + "docs_reference_links": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository", "fields": [ "@timestamp", "_document_id", @@ -25683,15 +26014,21 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", + "category", "created_at", + "oauth_application_id", "operation_type", - "public_repo" - ] + "public_repo", + "tool", + "user_programmatic_access_name" + ], + "docs_reference_titles": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository" }, { - "action": "repo.code_scanning_autofix_third_party_tools_enabled", - "description": "Autofix for third party tools for code scanning alerts was enabled for a repository.", + "action": "repo.code_scanning_autofix_disabled", + "description": "Autofix for code scanning alerts was disabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -25723,9 +26060,108 @@ ] }, { - "action": "repo.code_scanning_configuration_for_branch_deleted", - "description": "A code scanning configuration for a branch of a repository was deleted.", - "docs_reference_links": "/code-security/code-scanning/managing-code-scanning-alerts/managing-code-scanning-alerts-for-your-repository#removing-stale-configurations-and-alerts-from-a-branch", + "action": "repo.code_scanning_autofix_enabled", + "description": "Autofix for code scanning alerts was enabled for a repository.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type", + "public_repo" + ] + }, + { + "action": "repo.code_scanning_autofix_third_party_tools_disabled", + "description": "Autofix for third party tools for code scanning alerts was disabled for a repository.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type", + "public_repo" + ] + }, + { + "action": "repo.code_scanning_autofix_third_party_tools_enabled", + "description": "Autofix for third party tools for code scanning alerts was enabled for a repository.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type", + "public_repo" + ] + }, + { + "action": "repo.code_scanning_configuration_for_branch_deleted", + "description": "A code scanning configuration for a branch of a repository was deleted.", + "docs_reference_links": "/code-security/code-scanning/managing-code-scanning-alerts/managing-code-scanning-alerts-for-your-repository#removing-stale-configurations-and-alerts-from-a-branch", "fields": [ "@timestamp", "_document_id", @@ -27457,6 +27893,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -27500,6 +27937,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -27651,6 +28089,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -27732,7 +28171,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -28266,8 +28706,8 @@ "docs_reference_titles": "Repository security advisories" }, { - "action": "repository_advisory.cve_request", - "description": "Someone requested a CVE (Common Vulnerabilities and Exposures) number from GitHub for a draft security advisory.", + "action": "repository_advisory.create_confidential_comment", + "description": "Someone created a confidential comment on a repository security advisory.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28292,18 +28732,18 @@ "user", "user_id", "user_agent", - "actor_is_agent", "actor_is_bot", "created_at", - "oauth_application_id", "operation_type", "public_repo", - "user_programmatic_access_name" + "repository_advisory", + "repository_advisory_comment_id", + "repository_advisory_id" ] }, { - "action": "repository_advisory.github_broadcast", - "description": "GitHub made a security advisory public in the GitHub Advisory Database.", + "action": "repository_advisory.cve_request", + "description": "Someone requested a CVE (Common Vulnerabilities and Exposures) number from GitHub for a draft security advisory.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28328,14 +28768,18 @@ "user", "user_id", "user_agent", + "actor_is_agent", + "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { - "action": "repository_advisory.github_withdraw", - "description": "GitHub withdrew a security advisory that was published in error.", + "action": "repository_advisory.github_broadcast", + "description": "GitHub made a security advisory public in the GitHub Advisory Database.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28366,8 +28810,8 @@ ] }, { - "action": "repository_advisory.open", - "description": "Someone opened a draft security advisory.", + "action": "repository_advisory.github_withdraw", + "description": "GitHub withdrew a security advisory that was published in error.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28392,18 +28836,14 @@ "user", "user_id", "user_agent", - "actor_is_agent", - "actor_is_bot", "created_at", - "oauth_application_id", "operation_type", - "public_repo", - "user_programmatic_access_name" + "public_repo" ] }, { - "action": "repository_advisory.publish", - "description": "Someone published a security advisory.", + "action": "repository_advisory.open", + "description": "Someone opened a draft security advisory.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28438,8 +28878,8 @@ ] }, { - "action": "repository_advisory.reopen", - "description": "Someone reopened as draft security advisory.", + "action": "repository_advisory.publish", + "description": "Someone published a security advisory.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28469,12 +28909,13 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { - "action": "repository_advisory.update", - "description": "Someone edited a draft or published security advisory.", + "action": "repository_advisory.read_confidential_comments", + "description": "Confidential comments on a repository security advisory were read by someone.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28499,85 +28940,19 @@ "user", "user_id", "user_agent", - "actor_is_agent", "actor_is_bot", + "confidential_comment_count", "created_at", - "oauth_application_id", "operation_type", "public_repo", - "title", - "user_programmatic_access_name" + "repository_advisory", + "repository_advisory_id", + "surface" ] }, { - "action": "repository_branch_protection_evaluation.disable", - "description": "Branch protections were disabled for the repository.", - "docs_reference_links": "/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule", - "fields": [ - "@timestamp", - "_document_id", - "action", - "actor", - "actor_id", - "business", - "business_id", - "hashed_token", - "org", - "org_id", - "programmatic_access_type", - "repo", - "repo_id", - "repository", - "repository_id", - "request_access_security_header", - "request_id", - "token_id", - "token_scopes", - "user", - "user_id", - "user_agent", - "actor_is_bot", - "created_at", - "operation_type" - ], - "docs_reference_titles": "/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule" - }, - { - "action": "repository_branch_protection_evaluation.enable", - "description": "Branch protections were enabled for this repository.", - "docs_reference_links": "/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule", - "fields": [ - "@timestamp", - "_document_id", - "action", - "actor", - "actor_id", - "business", - "business_id", - "hashed_token", - "org", - "org_id", - "programmatic_access_type", - "repo", - "repo_id", - "repository", - "repository_id", - "request_access_security_header", - "request_id", - "token_id", - "token_scopes", - "user", - "user_id", - "user_agent", - "actor_is_bot", - "created_at", - "operation_type" - ], - "docs_reference_titles": "/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule" - }, - { - "action": "repository_code_security.disable", - "description": "Code security was disabled for a repository.", + "action": "repository_advisory.reopen", + "description": "Someone reopened as draft security advisory.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28608,13 +28983,12 @@ "oauth_application_id", "operation_type", "public_repo", - "topic", "user_programmatic_access_name" ] }, { - "action": "repository_code_security.enable", - "description": "Code security was enabled for a repository.", + "action": "repository_advisory.update", + "description": "Someone edited a draft or published security advisory.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28645,14 +29019,14 @@ "oauth_application_id", "operation_type", "public_repo", - "topic", + "title", "user_programmatic_access_name" ] }, { - "action": "repository_content_analysis.disable", - "description": "Data use settings were disabled for a private repository.", - "docs_reference_links": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories", + "action": "repository_branch_protection_evaluation.disable", + "description": "Branch protections were disabled for the repository.", + "docs_reference_links": "/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule", "fields": [ "@timestamp", "_document_id", @@ -28676,15 +29050,16 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], - "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories" + "docs_reference_titles": "/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule" }, { - "action": "repository_content_analysis.enable", - "description": "Data use settings were enabled for a private repository.", - "docs_reference_links": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories", + "action": "repository_branch_protection_evaluation.enable", + "description": "Branch protections were enabled for this repository.", + "docs_reference_links": "/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule", "fields": [ "@timestamp", "_document_id", @@ -28708,14 +29083,15 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], - "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories" + "docs_reference_titles": "/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule" }, { - "action": "repository_dependency_graph_autosubmit.disable", - "description": "Automatic dependency submission was disabled for a repository.", + "action": "repository_code_security.disable", + "description": "Code security was disabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28751,8 +29127,8 @@ ] }, { - "action": "repository_dependency_graph_autosubmit.enable", - "description": "Automatic dependency submission was enabled for a repository.", + "action": "repository_code_security.enable", + "description": "Code security was enabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28788,9 +29164,147 @@ ] }, { - "action": "repository_dependency_graph.disable", - "description": "The dependency graph was disabled for a private repository.", - "docs_reference_links": "/repositories/managing-your-repositorys-settings-and-features/enabling-fea tures-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories", + "action": "repository_content_analysis.disable", + "description": "Data use settings were disabled for a private repository.", + "docs_reference_links": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type" + ], + "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories" + }, + { + "action": "repository_content_analysis.enable", + "description": "Data use settings were enabled for a private repository.", + "docs_reference_links": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type" + ], + "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories" + }, + { + "action": "repository_dependency_graph_autosubmit.disable", + "description": "Automatic dependency submission was disabled for a repository.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "oauth_application_id", + "operation_type", + "public_repo", + "topic", + "user_programmatic_access_name" + ] + }, + { + "action": "repository_dependency_graph_autosubmit.enable", + "description": "Automatic dependency submission was enabled for a repository.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "oauth_application_id", + "operation_type", + "public_repo", + "topic", + "user_programmatic_access_name" + ] + }, + { + "action": "repository_dependency_graph.disable", + "description": "The dependency graph was disabled for a private repository.", + "docs_reference_links": "/repositories/managing-your-repositorys-settings-and-features/enabling-fea tures-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories", "fields": [ "@timestamp", "_document_id", @@ -29254,6 +29768,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], @@ -29581,7 +30096,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -29614,8 +30130,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -29752,7 +30270,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -30163,7 +30682,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -30985,6 +31505,7 @@ "user_id", "user_agent", "active", + "actor_is_agent", "actor_is_bot", "alert_id", "alert_number", @@ -31172,6 +31693,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -31209,6 +31731,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -31318,6 +31841,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -31435,7 +31959,8 @@ "oauth_application_id", "operation_type", "owner", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Managing custom repository roles for an organization" }, @@ -31481,6 +32006,230 @@ ], "docs_reference_titles": "Managing custom repository roles for an organization" }, + { + "action": "sandbox.add_port", + "description": "A forwarded port was added to a sandbox.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, + { + "action": "sandbox.create", + "description": "A sandbox was created.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, + { + "action": "sandbox.delete", + "description": "A sandbox was deleted.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, + { + "action": "sandbox.generate_token", + "description": "A token was generated for a sandbox.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, + { + "action": "sandbox.remove_port", + "description": "A forwarded port was removed from a sandbox.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, + { + "action": "sandbox.resume", + "description": "A sandbox was resumed.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, + { + "action": "sandbox.stop", + "description": "A sandbox was stopped.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, { "action": "secret_scanning_alert.assign", "description": "A user was assigned to a secret scanning alert.", @@ -31590,6 +32339,78 @@ ], "docs_reference_titles": "Manage secret scanning alerts" }, + { + "action": "secret_scanning_alert.metadata_create", + "description": "Metadata was added to a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.metadata_remove", + "description": "Metadata was removed from a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, { "action": "secret_scanning_alert.public_leak", "description": "A secret scanning alert was leaked in a public repo.", @@ -32409,6 +33230,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -35112,6 +35934,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -35119,6 +35942,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], @@ -35168,6 +35992,71 @@ ], "docs_reference_titles": "Understanding GitHub Actions" }, + { + "action": "workflows.debugger_session_completed", + "description": "An Actions job with the debugger enabled completed its debug session. Includes the repository, ref, workflow file, actor, and session duration.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "completed_at", + "created_at", + "operation_type", + "started_at" + ] + }, + { + "action": "workflows.debugger_session_started", + "description": "An Actions job with the debugger enabled started a debug session. Includes the repository, ref, workflow file, and actor.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "started_at" + ] + }, { "action": "workflows.delete_workflow_run", "description": "A workflow run was deleted.", diff --git a/src/audit-logs/data/ghec/organization.json b/src/audit-logs/data/ghec/organization.json index fad1c30d62e3..f60139009b56 100644 --- a/src/audit-logs/data/ghec/organization.json +++ b/src/audit-logs/data/ghec/organization.json @@ -425,6 +425,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -595,6 +596,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -629,6 +631,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -733,6 +736,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -1860,6 +1864,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -2146,6 +2151,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2296,6 +2302,38 @@ "previous_value" ] }, + { + "action": "copilot.code_review_organization_settings_updated", + "description": "Copilot code review settings were updated for an organization.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type" + ] + }, { "action": "copilot.code_review_repository_settings_updated", "description": "Copilot code review settings were updated for a repository.", @@ -2361,6 +2399,7 @@ "actor_is_bot", "created_at", "excluded_paths", + "oauth_application_id", "operation_type", "owner_type", "public_repo", @@ -3275,6 +3314,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -3313,10 +3353,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3354,6 +3396,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3387,6 +3430,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3889,6 +3933,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -4565,6 +4610,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -4601,6 +4647,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4635,6 +4682,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -5315,6 +5363,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -5536,7 +5587,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -5620,6 +5672,43 @@ ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, + { + "action": "integration.update", + "description": "A GitHub App was updated.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "application_client_id", + "created_at", + "integration", + "name", + "oauth_application_id", + "operation_type" + ] + }, { "action": "ip_allow_list.disable", "description": "An IP allow list was disabled.", @@ -6992,7 +7081,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" }, @@ -7165,6 +7255,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing repository management policies in your enterprise" @@ -8013,6 +8104,41 @@ ], "docs_reference_titles": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app" }, + { + "action": "oauth_application.update_token_expiration", + "description": "The token expiration setting for an OAuth application was updated.", + "docs_reference_links": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "oauth_application", + "oauth_application_id", + "operation_type" + ], + "docs_reference_titles": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app" + }, { "action": "org.accept_business_invitation", "description": "An invitation sent to an organization to join an enterprise was accepted.", @@ -8075,6 +8201,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -8218,7 +8345,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -8888,6 +9016,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -8920,6 +9049,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -9484,6 +9614,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9517,8 +9648,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -9549,6 +9682,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9616,9 +9750,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -9649,6 +9785,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9717,6 +9854,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10177,6 +10315,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10353,6 +10492,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -10386,6 +10526,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization" @@ -10513,10 +10654,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -12269,7 +12412,8 @@ "user_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "topic" ] }, { @@ -12333,6 +12477,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12368,10 +12513,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -12402,8 +12549,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12532,8 +12681,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12870,7 +13021,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -12905,7 +13057,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -13393,6 +13546,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13428,10 +13582,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -13499,6 +13655,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13607,6 +13764,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -13682,7 +13840,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -13749,6 +13908,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -13784,6 +13944,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -14697,7 +14858,7 @@ }, { "action": "organization_moderators.add_team", - "description": "N/A", + "description": "A team was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14730,7 +14891,7 @@ }, { "action": "organization_moderators.add_user", - "description": "N/A", + "description": "A user was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14762,7 +14923,7 @@ }, { "action": "organization_moderators.remove_team", - "description": "N/A", + "description": "A team was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14795,7 +14956,7 @@ }, { "action": "organization_moderators.remove_user", - "description": "N/A", + "description": "A user was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -15054,7 +15215,8 @@ "owner", "owner_id", "owner_type", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Permissions of custom organization roles" }, @@ -16182,6 +16344,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -17082,10 +17245,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -17123,7 +17288,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -18251,6 +18417,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -18930,6 +19097,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -19405,8 +19573,8 @@ ] }, { - "action": "repo.code_scanning_ai_findings_disabled", - "description": "AI-powered findings for code scanning were disabled for a repository.", + "action": "repo.code_quality_disabled", + "description": "Code Quality was disabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -19433,13 +19601,16 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "topic", + "user_programmatic_access_name" ] }, { - "action": "repo.code_scanning_ai_findings_enabled", - "description": "AI-powered findings for code scanning were enabled for a repository.", + "action": "repo.code_quality_enabled", + "description": "Code Quality was enabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -19464,16 +19635,19 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { - "action": "repo.code_scanning_analysis_deleted", - "description": "Code scanning analysis for a repository was deleted.", - "docs_reference_links": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository", + "action": "repo.code_quality_updated", + "description": "Code Quality was updated for a repository.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -19499,19 +19673,16 @@ "user_agent", "actor_is_agent", "actor_is_bot", - "category", "created_at", "oauth_application_id", "operation_type", "public_repo", - "tool", "user_programmatic_access_name" - ], - "docs_reference_titles": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository" + ] }, { - "action": "repo.code_scanning_autofix_disabled", - "description": "Autofix for code scanning alerts was disabled for a repository.", + "action": "repo.code_scanning_ai_findings_disabled", + "description": "AI-powered findings for code scanning were disabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -19538,13 +19709,14 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "public_repo" ] }, { - "action": "repo.code_scanning_autofix_enabled", - "description": "Autofix for code scanning alerts was enabled for a repository.", + "action": "repo.code_scanning_ai_findings_enabled", + "description": "AI-powered findings for code scanning were enabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -19571,14 +19743,15 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "public_repo" ] }, { - "action": "repo.code_scanning_autofix_third_party_tools_disabled", - "description": "Autofix for third party tools for code scanning alerts was disabled for a repository.", - "docs_reference_links": "N/A", + "action": "repo.code_scanning_analysis_deleted", + "description": "Code scanning analysis for a repository was deleted.", + "docs_reference_links": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository", "fields": [ "@timestamp", "_document_id", @@ -19602,15 +19775,21 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", + "category", "created_at", + "oauth_application_id", "operation_type", - "public_repo" - ] + "public_repo", + "tool", + "user_programmatic_access_name" + ], + "docs_reference_titles": "/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository" }, { - "action": "repo.code_scanning_autofix_third_party_tools_enabled", - "description": "Autofix for third party tools for code scanning alerts was enabled for a repository.", + "action": "repo.code_scanning_autofix_disabled", + "description": "Autofix for code scanning alerts was disabled for a repository.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -19642,9 +19821,9 @@ ] }, { - "action": "repo.code_scanning_configuration_for_branch_deleted", - "description": "A code scanning configuration for a branch of a repository was deleted.", - "docs_reference_links": "/code-security/code-scanning/managing-code-scanning-alerts/managing-code-scanning-alerts-for-your-repository#removing-stale-configurations-and-alerts-from-a-branch", + "action": "repo.code_scanning_autofix_enabled", + "description": "Autofix for code scanning alerts was enabled for a repository.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -19669,17 +19848,116 @@ "user_id", "user_agent", "actor_is_bot", - "branch", - "category", "created_at", "operation_type", - "public_repo", - "tool" - ], - "docs_reference_titles": "Resolving code scanning alerts" + "public_repo" + ] }, { - "action": "repo.code_scanning_delegated_alert_dismissal_disabled", + "action": "repo.code_scanning_autofix_third_party_tools_disabled", + "description": "Autofix for third party tools for code scanning alerts was disabled for a repository.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type", + "public_repo" + ] + }, + { + "action": "repo.code_scanning_autofix_third_party_tools_enabled", + "description": "Autofix for third party tools for code scanning alerts was enabled for a repository.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type", + "public_repo" + ] + }, + { + "action": "repo.code_scanning_configuration_for_branch_deleted", + "description": "A code scanning configuration for a branch of a repository was deleted.", + "docs_reference_links": "/code-security/code-scanning/managing-code-scanning-alerts/managing-code-scanning-alerts-for-your-repository#removing-stale-configurations-and-alerts-from-a-branch", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "branch", + "category", + "created_at", + "operation_type", + "public_repo", + "tool" + ], + "docs_reference_titles": "Resolving code scanning alerts" + }, + { + "action": "repo.code_scanning_delegated_alert_dismissal_disabled", "description": "Prevention of direct alert dismissal for code scanning was disabled for a repository.", "docs_reference_links": "N/A", "fields": [ @@ -21376,6 +21654,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -21419,6 +21698,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -21570,6 +21850,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -21651,7 +21932,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -22149,6 +22431,42 @@ ], "docs_reference_titles": "Repository security advisories" }, + { + "action": "repository_advisory.create_confidential_comment", + "description": "Someone created a confidential comment on a repository security advisory.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type", + "public_repo", + "repository_advisory", + "repository_advisory_comment_id", + "repository_advisory_id" + ] + }, { "action": "repository_advisory.cve_request", "description": "Someone requested a CVE (Common Vulnerabilities and Exposures) number from GitHub for a draft security advisory.", @@ -22321,6 +22639,43 @@ "user_programmatic_access_name" ] }, + { + "action": "repository_advisory.read_confidential_comments", + "description": "Confidential comments on a repository security advisory were read by someone.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "confidential_comment_count", + "created_at", + "operation_type", + "public_repo", + "repository_advisory", + "repository_advisory_id", + "surface" + ] + }, { "action": "repository_advisory.reopen", "description": "Someone reopened as draft security advisory.", @@ -22353,7 +22708,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { @@ -23214,6 +23570,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], @@ -23541,7 +23898,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23574,8 +23932,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23712,7 +24072,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -24123,7 +24484,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -24945,6 +25307,7 @@ "user_id", "user_agent", "active", + "actor_is_agent", "actor_is_bot", "alert_id", "alert_number", @@ -25132,6 +25495,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -25169,6 +25533,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -25278,6 +25643,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -25395,7 +25761,8 @@ "oauth_application_id", "operation_type", "owner", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Managing custom repository roles for an organization" }, @@ -25442,9 +25809,9 @@ "docs_reference_titles": "Managing custom repository roles for an organization" }, { - "action": "secret_scanning_alert.assign", - "description": "A user was assigned to a secret scanning alert.", - "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "action": "sandbox.add_port", + "description": "A forwarded port was added to a sandbox.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -25469,18 +25836,14 @@ "user_id", "user_agent", "created_at", - "multi_repo", - "number", - "publicly_leaked", - "secret_type", - "secret_type_display_name" - ], - "docs_reference_titles": "Manage secret scanning alerts" + "operation_type", + "sandbox_id" + ] }, { - "action": "secret_scanning_alert.create", - "description": "GitHub detected a secret and created a secret scanning alert.", - "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "action": "sandbox.create", + "description": "A sandbox was created.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -25505,18 +25868,14 @@ "user_id", "user_agent", "created_at", - "multi_repo", - "number", - "publicly_leaked", - "secret_type", - "secret_type_display_name" - ], - "docs_reference_titles": "Manage secret scanning alerts" + "operation_type", + "sandbox_id" + ] }, { - "action": "secret_scanning_alert.delete", - "description": "A secret scanning alert was deleted by GitHub. Note that deletions from custom patterns are not logged.", - "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "action": "sandbox.delete", + "description": "A sandbox was deleted.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -25541,19 +25900,14 @@ "user_id", "user_agent", "created_at", - "multi_repo", - "number", - "publicly_leaked", - "reason", - "secret_type", - "secret_type_display_name" - ], - "docs_reference_titles": "Manage secret scanning alerts" + "operation_type", + "sandbox_id" + ] }, { - "action": "secret_scanning_alert.public_leak", - "description": "A secret scanning alert was leaked in a public repo.", - "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "action": "sandbox.generate_token", + "description": "A token was generated for a sandbox.", + "docs_reference_links": "N/A", "fields": [ "@timestamp", "_document_id", @@ -25578,17 +25932,13 @@ "user_id", "user_agent", "created_at", - "multi_repo", - "number", - "publicly_leaked", - "secret_type", - "secret_type_display_name" - ], - "docs_reference_titles": "Manage secret scanning alerts" + "operation_type", + "sandbox_id" + ] }, { - "action": "secret_scanning_alert.reopen", - "description": "A secret scanning alert was reopened.", + "action": "sandbox.remove_port", + "description": "A forwarded port was removed from a sandbox.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -25613,17 +25963,330 @@ "user", "user_id", "user_agent", - "actor_is_agent", - "actor_is_bot", "created_at", - "multi_repo", - "number", - "oauth_application_id", "operation_type", - "publicly_leaked", - "public_repo", - "resolution", - "secret_type", + "sandbox_id" + ] + }, + { + "action": "sandbox.resume", + "description": "A sandbox was resumed.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, + { + "action": "sandbox.stop", + "description": "A sandbox was stopped.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "sandbox_id" + ] + }, + { + "action": "secret_scanning_alert.assign", + "description": "A user was assigned to a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.create", + "description": "GitHub detected a secret and created a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.delete", + "description": "A secret scanning alert was deleted by GitHub. Note that deletions from custom patterns are not logged.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "reason", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.metadata_create", + "description": "Metadata was added to a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.metadata_remove", + "description": "Metadata was removed from a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.public_leak", + "description": "A secret scanning alert was leaked in a public repo.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.reopen", + "description": "A secret scanning alert was reopened.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "multi_repo", + "number", + "oauth_application_id", + "operation_type", + "publicly_leaked", + "public_repo", + "resolution", + "secret_type", "secret_type_display_name", "user_programmatic_access_name" ] @@ -26369,6 +27032,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -29199,6 +29863,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -29206,6 +29871,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], @@ -29255,6 +29921,71 @@ ], "docs_reference_titles": "Understanding GitHub Actions" }, + { + "action": "workflows.debugger_session_completed", + "description": "An Actions job with the debugger enabled completed its debug session. Includes the repository, ref, workflow file, actor, and session duration.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "completed_at", + "created_at", + "operation_type", + "started_at" + ] + }, + { + "action": "workflows.debugger_session_started", + "description": "An Actions job with the debugger enabled started a debug session. Includes the repository, ref, workflow file, and actor.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "operation_type", + "started_at" + ] + }, { "action": "workflows.delete_workflow_run", "description": "A workflow run was deleted.", diff --git a/src/audit-logs/data/ghec/user.json b/src/audit-logs/data/ghec/user.json index c4b66f719bf9..a35f7517e21c 100644 --- a/src/audit-logs/data/ghec/user.json +++ b/src/audit-logs/data/ghec/user.json @@ -307,6 +307,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -718,6 +719,40 @@ "operation_type" ] }, + { + "action": "business.add_member", + "description": "A member was added to an enterprise.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "created_at", + "name", + "operation_type" + ] + }, { "action": "business.add_support_entitlee", "description": "A support entitlement was added to a member of an enterprise.", @@ -1069,6 +1104,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -1138,6 +1174,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -1210,6 +1247,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -1243,6 +1281,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -1316,7 +1355,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -1758,6 +1798,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1904,6 +1945,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2019,6 +2061,38 @@ "seat_assignment" ] }, + { + "action": "copilot.code_review_organization_settings_updated", + "description": "Copilot code review settings were updated for an organization.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "operation_type" + ] + }, { "action": "copilot.code_review_repository_settings_updated", "description": "Copilot code review settings were updated for a repository.", @@ -2505,6 +2579,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -2543,10 +2618,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -2584,6 +2661,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3550,6 +3628,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3586,6 +3665,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3620,6 +3700,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3692,6 +3773,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -4297,6 +4379,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -4518,7 +4603,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -4602,6 +4688,43 @@ ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, + { + "action": "integration.update", + "description": "A GitHub App was updated.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_agent", + "actor_is_bot", + "application_client_id", + "created_at", + "integration", + "name", + "oauth_application_id", + "operation_type" + ] + }, { "action": "issue_dependencies.blocked_by_add", "description": "An issue was marked as blocked by another issue.", @@ -6178,6 +6301,41 @@ ], "docs_reference_titles": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app" }, + { + "action": "oauth_application.update_token_expiration", + "description": "The token expiration setting for an OAuth application was updated.", + "docs_reference_links": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "created_at", + "oauth_application", + "oauth_application_id", + "operation_type" + ], + "docs_reference_titles": "/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app" + }, { "action": "oauth_authorization.create", "description": "An authorization for an OAuth application was created.", @@ -6284,8 +6442,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -6706,6 +6866,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6741,10 +6902,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -6812,6 +6975,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6888,6 +7052,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -6963,7 +7128,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -7558,6 +7724,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -8592,10 +8759,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -8633,7 +8802,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -8827,6 +8997,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -10569,6 +10740,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10612,6 +10784,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -10763,6 +10936,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -10844,7 +11018,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -11727,7 +11902,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11758,7 +11934,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11789,7 +11966,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11820,7 +11998,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11851,7 +12030,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11882,7 +12062,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -11913,7 +12094,8 @@ "user_id", "user_agent", "created_at", - "operation_type" + "operation_type", + "sandbox_id" ] }, { @@ -13132,6 +13314,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -13932,6 +14115,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -14105,6 +14289,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -14270,7 +14455,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14297,12 +14482,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14328,12 +14514,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14359,6 +14546,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -14430,7 +14618,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14457,12 +14645,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14488,13 +14677,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14520,6 +14710,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -15472,6 +15663,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", diff --git a/src/audit-logs/data/ghes-3.17/enterprise.json b/src/audit-logs/data/ghes-3.17/enterprise.json index 0a402974b44a..5eb83165b22d 100644 --- a/src/audit-logs/data/ghes-3.17/enterprise.json +++ b/src/audit-logs/data/ghes-3.17/enterprise.json @@ -415,13 +415,16 @@ "audit_log_stream_sink_details", "created_at", "new_azure_blob_container", + "new_datadog_site", "new_event_hub_instance", "new_gc_bucket", "new_s3_arn_role", "new_s3_bucket", "new_splunk_domain", "new_splunk_port", + "oauth_application_id", "old_azure_blob_container", + "old_datadog_site", "old_event_hub_instance", "old_gc_bucket", "old_s3_arn_role", @@ -1644,6 +1647,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "name", "operation_type" @@ -1717,7 +1721,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -2106,6 +2111,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2139,6 +2145,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2403,6 +2410,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2436,6 +2444,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2682,6 +2691,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -2754,6 +2764,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -2787,6 +2798,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -2860,7 +2872,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -3836,6 +3849,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3982,6 +3996,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -5172,6 +5187,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -5359,6 +5375,7 @@ "actor_is_bot", "created_at", "domain_name", + "oauth_application_id", "operation_type", "owner", "owner_type" @@ -6687,6 +6704,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "message", "oauth_application_id", "operation_type", @@ -6730,6 +6748,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "oauth_application_id", "operation_type", "query_string", @@ -7352,6 +7371,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -7388,6 +7408,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -7422,6 +7443,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -7494,6 +7516,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -8174,6 +8197,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -8395,7 +8421,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -9919,11 +9946,13 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -10102,8 +10131,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -10169,6 +10200,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -10279,7 +10311,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -10946,6 +10979,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11013,9 +11047,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -11046,6 +11082,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11114,6 +11151,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11361,6 +11399,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -11488,10 +11527,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -12432,6 +12473,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12467,10 +12509,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -12501,8 +12545,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12631,8 +12677,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12907,7 +12955,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -12942,7 +12991,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -13402,6 +13452,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13510,6 +13561,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -13585,7 +13637,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -14918,6 +14971,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -16020,10 +16074,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -16061,7 +16117,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -17189,6 +17246,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -17868,6 +17926,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -18765,6 +18824,7 @@ "user_agent", "created_at", "operation_type", + "public_repo", "visibility" ] }, @@ -19416,6 +19476,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type", "public_repo", @@ -20420,6 +20481,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -20501,7 +20563,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -21529,7 +21592,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -21562,8 +21626,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -21700,7 +21766,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -21961,7 +22028,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -22715,6 +22783,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -22752,6 +22821,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -22785,6 +22855,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -23349,6 +23420,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -25001,6 +25073,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -26422,6 +26495,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -26691,6 +26765,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -26856,7 +26931,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -26883,12 +26958,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -26914,12 +26990,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -26945,6 +27022,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -27016,7 +27094,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -27043,12 +27121,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -27074,13 +27153,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -27106,6 +27186,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -28286,6 +28367,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", @@ -28873,6 +28955,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -28880,6 +28963,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.17/organization.json b/src/audit-logs/data/ghes-3.17/organization.json index e52b65ab4c3f..1958541bd6eb 100644 --- a/src/audit-logs/data/ghes-3.17/organization.json +++ b/src/audit-logs/data/ghes-3.17/organization.json @@ -1445,6 +1445,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1731,6 +1732,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -1912,6 +1914,7 @@ "actor_is_bot", "created_at", "excluded_paths", + "oauth_application_id", "operation_type", "owner_type", "public_repo", @@ -3339,6 +3342,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -4015,6 +4019,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -4051,6 +4056,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4085,6 +4091,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -4765,6 +4772,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -4986,7 +4996,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -6110,7 +6121,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" }, @@ -6283,6 +6295,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing repository management policies in your enterprise" @@ -7193,6 +7206,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -7303,7 +7317,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -8311,6 +8326,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8344,8 +8360,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -8376,6 +8394,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8443,9 +8462,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -8476,6 +8497,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8544,6 +8566,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9109,6 +9132,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -9142,6 +9166,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization" @@ -9269,10 +9294,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -10958,6 +10985,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10993,10 +11021,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -11027,8 +11057,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -11157,8 +11189,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -11495,7 +11529,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -11530,7 +11565,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -11990,6 +12026,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12098,6 +12135,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -12173,7 +12211,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -12240,6 +12279,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -12275,6 +12315,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -13040,7 +13081,7 @@ }, { "action": "organization_moderators.add_team", - "description": "N/A", + "description": "A team was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13073,7 +13114,7 @@ }, { "action": "organization_moderators.add_user", - "description": "N/A", + "description": "A user was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13105,7 +13146,7 @@ }, { "action": "organization_moderators.remove_team", - "description": "N/A", + "description": "A team was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13138,7 +13179,7 @@ }, { "action": "organization_moderators.remove_user", - "description": "N/A", + "description": "A user was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13397,7 +13438,8 @@ "owner", "owner_id", "owner_type", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Permissions of custom organization roles" }, @@ -14525,6 +14567,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -15425,10 +15468,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -15466,7 +15511,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -16594,6 +16640,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -17273,6 +17320,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -19699,6 +19747,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -19780,7 +19829,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -20482,7 +20532,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { @@ -21046,6 +21097,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], @@ -21373,7 +21425,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -21406,8 +21459,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -21544,7 +21599,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -21879,7 +21935,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -22731,6 +22788,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -22768,6 +22826,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -22877,6 +22936,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -22994,7 +23054,8 @@ "oauth_application_id", "operation_type", "owner", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Managing custom repository roles for an organization" }, @@ -23789,6 +23850,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -26453,6 +26515,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -26460,6 +26523,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.17/user.json b/src/audit-logs/data/ghes-3.17/user.json index 1a4923449495..716859e29392 100644 --- a/src/audit-logs/data/ghes-3.17/user.json +++ b/src/audit-logs/data/ghes-3.17/user.json @@ -578,6 +578,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -650,6 +651,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -683,6 +685,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -756,7 +759,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -1198,6 +1202,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1344,6 +1349,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2729,6 +2735,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -2765,6 +2772,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -2799,6 +2807,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -2871,6 +2880,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -3476,6 +3486,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -3697,7 +3710,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -5029,8 +5043,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -5488,6 +5504,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -5564,6 +5581,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -5639,7 +5657,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -6234,6 +6253,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -7268,10 +7288,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -7309,7 +7331,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -7503,6 +7526,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -9365,6 +9389,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -9446,7 +9471,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -11421,6 +11447,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -12221,6 +12248,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -12394,6 +12422,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -12559,7 +12588,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12586,12 +12615,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12617,12 +12647,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12648,6 +12679,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -12719,7 +12751,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12746,12 +12778,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12777,13 +12810,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12809,6 +12843,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -13761,6 +13796,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", diff --git a/src/audit-logs/data/ghes-3.18/enterprise.json b/src/audit-logs/data/ghes-3.18/enterprise.json index 3fcb978d16e8..330b08cb7f93 100644 --- a/src/audit-logs/data/ghes-3.18/enterprise.json +++ b/src/audit-logs/data/ghes-3.18/enterprise.json @@ -415,13 +415,16 @@ "audit_log_stream_sink_details", "created_at", "new_azure_blob_container", + "new_datadog_site", "new_event_hub_instance", "new_gc_bucket", "new_s3_arn_role", "new_s3_bucket", "new_splunk_domain", "new_splunk_port", + "oauth_application_id", "old_azure_blob_container", + "old_datadog_site", "old_event_hub_instance", "old_gc_bucket", "old_s3_arn_role", @@ -1644,6 +1647,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "name", "operation_type" @@ -1717,7 +1721,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -2106,6 +2111,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2139,6 +2145,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2403,6 +2410,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2436,6 +2444,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2682,6 +2691,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -2754,6 +2764,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -2787,6 +2798,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -2860,7 +2872,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -3836,6 +3849,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3982,6 +3996,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -4727,6 +4742,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -5252,6 +5268,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -5439,6 +5456,7 @@ "actor_is_bot", "created_at", "domain_name", + "oauth_application_id", "operation_type", "owner", "owner_type" @@ -6767,6 +6785,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "message", "oauth_application_id", "operation_type", @@ -6810,6 +6829,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "oauth_application_id", "operation_type", "query_string", @@ -7432,6 +7452,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -7468,6 +7489,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -7502,6 +7524,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -7574,6 +7597,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -8254,6 +8278,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -8475,7 +8502,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -9999,11 +10027,13 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -10182,8 +10212,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -10249,6 +10281,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -10359,7 +10392,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -11026,6 +11060,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11093,9 +11128,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -11126,6 +11163,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11194,6 +11232,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11441,6 +11480,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -11568,10 +11608,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -12512,6 +12554,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12547,10 +12590,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -12581,8 +12626,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12711,8 +12758,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12987,7 +13036,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -13022,7 +13072,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -13482,6 +13533,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13590,6 +13642,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -13665,7 +13718,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -14998,6 +15052,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -16100,10 +16155,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -16141,7 +16198,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -17269,6 +17327,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -17948,6 +18007,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -18845,6 +18905,7 @@ "user_agent", "created_at", "operation_type", + "public_repo", "visibility" ] }, @@ -19496,6 +19557,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type", "public_repo", @@ -20500,6 +20562,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -20581,7 +20644,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -21683,7 +21747,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -21716,8 +21781,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -21854,7 +21921,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -22115,7 +22183,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -22869,6 +22938,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -22906,6 +22976,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -22939,6 +23010,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -23503,6 +23575,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -25155,6 +25228,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -26576,6 +26650,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -26845,6 +26920,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -27010,7 +27086,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -27037,12 +27113,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -27068,12 +27145,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -27099,6 +27177,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -27170,7 +27249,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -27197,12 +27276,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -27228,13 +27308,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -27260,6 +27341,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -28440,6 +28522,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", @@ -29027,6 +29110,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -29034,6 +29118,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.18/organization.json b/src/audit-logs/data/ghes-3.18/organization.json index be8181bc2196..1b150d651e8d 100644 --- a/src/audit-logs/data/ghes-3.18/organization.json +++ b/src/audit-logs/data/ghes-3.18/organization.json @@ -1445,6 +1445,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1731,6 +1732,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -1912,6 +1914,7 @@ "actor_is_bot", "created_at", "excluded_paths", + "oauth_application_id", "operation_type", "owner_type", "public_repo", @@ -2784,6 +2787,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3419,6 +3423,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -4095,6 +4100,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -4131,6 +4137,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4165,6 +4172,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -4845,6 +4853,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -5066,7 +5077,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -6312,7 +6324,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" }, @@ -6485,6 +6498,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing repository management policies in your enterprise" @@ -7395,6 +7409,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -7538,7 +7553,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -8578,6 +8594,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8611,8 +8628,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -8643,6 +8662,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8710,9 +8730,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -8743,6 +8765,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8811,6 +8834,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9376,6 +9400,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -9409,6 +9434,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization" @@ -9536,10 +9562,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -11258,6 +11286,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11293,10 +11322,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -11327,8 +11358,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -11457,8 +11490,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -11795,7 +11830,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -11830,7 +11866,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -12290,6 +12327,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12398,6 +12436,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -12473,7 +12512,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -12540,6 +12580,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -12575,6 +12616,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -13340,7 +13382,7 @@ }, { "action": "organization_moderators.add_team", - "description": "N/A", + "description": "A team was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13373,7 +13415,7 @@ }, { "action": "organization_moderators.add_user", - "description": "N/A", + "description": "A user was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13405,7 +13447,7 @@ }, { "action": "organization_moderators.remove_team", - "description": "N/A", + "description": "A team was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13438,7 +13480,7 @@ }, { "action": "organization_moderators.remove_user", - "description": "N/A", + "description": "A user was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13697,7 +13739,8 @@ "owner", "owner_id", "owner_type", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Permissions of custom organization roles" }, @@ -14825,6 +14868,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -15725,10 +15769,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -15766,7 +15812,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -16894,6 +16941,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -17573,6 +17621,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -19999,6 +20048,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -20080,7 +20130,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -20782,7 +20833,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { @@ -21420,6 +21472,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], @@ -21747,7 +21800,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -21780,8 +21834,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -21918,7 +21974,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -22253,7 +22310,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -23105,6 +23163,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -23142,6 +23201,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -23251,6 +23311,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -23368,7 +23429,8 @@ "oauth_application_id", "operation_type", "owner", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Managing custom repository roles for an organization" }, @@ -24233,6 +24295,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -26897,6 +26960,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -26904,6 +26968,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.18/user.json b/src/audit-logs/data/ghes-3.18/user.json index e3d4a23fdb66..9ed73d08f6ca 100644 --- a/src/audit-logs/data/ghes-3.18/user.json +++ b/src/audit-logs/data/ghes-3.18/user.json @@ -578,6 +578,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -650,6 +651,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -683,6 +685,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -756,7 +759,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -1198,6 +1202,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1344,6 +1349,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2774,6 +2780,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -2810,6 +2817,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -2844,6 +2852,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -2916,6 +2925,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -3521,6 +3531,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -3742,7 +3755,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -5074,8 +5088,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -5533,6 +5549,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -5609,6 +5626,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -5684,7 +5702,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -6279,6 +6298,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -7313,10 +7333,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -7354,7 +7376,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -7548,6 +7571,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -9410,6 +9434,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -9491,7 +9516,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -11466,6 +11492,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -12266,6 +12293,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -12439,6 +12467,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -12604,7 +12633,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12631,12 +12660,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12662,12 +12692,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12693,6 +12724,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -12764,7 +12796,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12791,12 +12823,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12822,13 +12855,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -12854,6 +12888,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -13806,6 +13841,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", diff --git a/src/audit-logs/data/ghes-3.19/enterprise.json b/src/audit-logs/data/ghes-3.19/enterprise.json index d521c4bac40d..2387c70f32b9 100644 --- a/src/audit-logs/data/ghes-3.19/enterprise.json +++ b/src/audit-logs/data/ghes-3.19/enterprise.json @@ -415,13 +415,16 @@ "audit_log_stream_sink_details", "created_at", "new_azure_blob_container", + "new_datadog_site", "new_event_hub_instance", "new_gc_bucket", "new_s3_arn_role", "new_s3_bucket", "new_splunk_domain", "new_splunk_port", + "oauth_application_id", "old_azure_blob_container", + "old_datadog_site", "old_event_hub_instance", "old_gc_bucket", "old_s3_arn_role", @@ -508,6 +511,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -1854,6 +1858,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "name", "operation_type" @@ -1927,7 +1932,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -2316,6 +2322,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2349,6 +2356,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2613,6 +2621,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2646,6 +2655,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2957,6 +2967,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -3026,6 +3037,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -3098,6 +3110,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -3131,6 +3144,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -3204,7 +3218,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -4180,6 +4195,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4326,6 +4342,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -5071,6 +5088,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -5596,6 +5614,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -5783,6 +5802,7 @@ "actor_is_bot", "created_at", "domain_name", + "oauth_application_id", "operation_type", "owner", "owner_type" @@ -5920,6 +5940,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "enterprise_role_id", @@ -7298,6 +7319,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "message", "oauth_application_id", "operation_type", @@ -7341,6 +7363,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "oauth_application_id", "operation_type", "query_string", @@ -7963,6 +7986,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -7999,6 +8023,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8033,6 +8058,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -8105,6 +8131,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -8785,6 +8812,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -9006,7 +9036,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -10678,11 +10709,13 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -10861,8 +10894,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -10928,6 +10963,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -11038,7 +11074,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -11705,6 +11742,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11772,9 +11810,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -11805,6 +11845,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11873,6 +11914,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12120,6 +12162,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -12247,10 +12290,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -13191,6 +13236,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13226,10 +13272,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -13260,8 +13308,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -13390,8 +13440,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -13666,7 +13718,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -13701,7 +13754,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -14189,6 +14243,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -14224,10 +14279,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -14295,6 +14352,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -14403,6 +14461,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -14478,7 +14537,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -14909,6 +14969,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "allowed_values", "created_at", @@ -16013,6 +16074,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -17115,10 +17177,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -17156,7 +17220,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -18284,6 +18349,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -18963,6 +19029,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -19860,6 +19927,7 @@ "user_agent", "created_at", "operation_type", + "public_repo", "visibility" ] }, @@ -20511,6 +20579,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type", "public_repo", @@ -21395,6 +21464,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -21438,6 +21508,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -21589,6 +21660,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -21670,7 +21742,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -22772,7 +22845,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -22805,8 +22879,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -22943,7 +23019,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23204,7 +23281,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -23958,6 +24036,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -23995,6 +24074,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -24028,6 +24108,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -24664,6 +24745,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -26412,6 +26494,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -27905,6 +27988,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -28214,6 +28298,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -28379,7 +28464,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28406,12 +28491,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28437,12 +28523,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28468,6 +28555,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -28539,7 +28627,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28566,12 +28654,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28597,13 +28686,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28629,6 +28719,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -29809,6 +29900,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", @@ -30396,6 +30488,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -30403,6 +30496,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.19/organization.json b/src/audit-logs/data/ghes-3.19/organization.json index 9e0dfb21a1ad..396534e72375 100644 --- a/src/audit-logs/data/ghes-3.19/organization.json +++ b/src/audit-logs/data/ghes-3.19/organization.json @@ -425,6 +425,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -1655,6 +1656,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1941,6 +1943,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2122,6 +2125,7 @@ "actor_is_bot", "created_at", "excluded_paths", + "oauth_application_id", "operation_type", "owner_type", "public_repo", @@ -3028,6 +3032,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3663,6 +3668,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -4339,6 +4345,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -4375,6 +4382,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4409,6 +4417,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -5089,6 +5098,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -5310,7 +5322,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -6704,7 +6717,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" }, @@ -6877,6 +6891,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing repository management policies in your enterprise" @@ -7787,6 +7802,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -7930,7 +7946,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -9035,6 +9052,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9068,8 +9086,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -9100,6 +9120,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9167,9 +9188,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -9200,6 +9223,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9268,6 +9292,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9833,6 +9858,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -9866,6 +9892,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization" @@ -9993,10 +10020,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -11715,7 +11744,8 @@ "user_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "topic" ] }, { @@ -11779,6 +11809,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11814,10 +11845,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -11848,8 +11881,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -11978,8 +12013,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12316,7 +12353,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -12351,7 +12389,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -12839,6 +12878,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12874,10 +12914,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -12945,6 +12987,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13053,6 +13096,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -13128,7 +13172,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -13195,6 +13240,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -13230,6 +13276,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -14108,7 +14155,7 @@ }, { "action": "organization_moderators.add_team", - "description": "N/A", + "description": "A team was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14141,7 +14188,7 @@ }, { "action": "organization_moderators.add_user", - "description": "N/A", + "description": "A user was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14173,7 +14220,7 @@ }, { "action": "organization_moderators.remove_team", - "description": "N/A", + "description": "A team was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14206,7 +14253,7 @@ }, { "action": "organization_moderators.remove_user", - "description": "N/A", + "description": "A user was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14465,7 +14512,8 @@ "owner", "owner_id", "owner_type", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Permissions of custom organization roles" }, @@ -15593,6 +15641,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -16493,10 +16542,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -16534,7 +16585,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -17662,6 +17714,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -18341,6 +18394,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -20721,6 +20775,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -20764,6 +20819,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -20915,6 +20971,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -20996,7 +21053,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -21698,7 +21756,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { @@ -22336,6 +22395,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], @@ -22663,7 +22723,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -22696,8 +22757,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -22834,7 +22897,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23169,7 +23233,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -24021,6 +24086,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -24058,6 +24124,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -24167,6 +24234,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -24284,7 +24352,8 @@ "oauth_application_id", "operation_type", "owner", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Managing custom repository roles for an organization" }, @@ -25258,6 +25327,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -28034,6 +28104,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -28041,6 +28112,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.19/user.json b/src/audit-logs/data/ghes-3.19/user.json index 4b408ede09e3..2da764234c97 100644 --- a/src/audit-logs/data/ghes-3.19/user.json +++ b/src/audit-logs/data/ghes-3.19/user.json @@ -307,6 +307,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -788,6 +789,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -857,6 +859,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -929,6 +932,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -962,6 +966,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -1035,7 +1040,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -1477,6 +1483,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1623,6 +1630,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -3053,6 +3061,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3089,6 +3098,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3123,6 +3133,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3195,6 +3206,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -3800,6 +3812,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -4021,7 +4036,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -5501,8 +5517,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -5923,6 +5941,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -5958,10 +5977,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -6029,6 +6050,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6105,6 +6127,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -6180,7 +6203,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -6775,6 +6799,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -7809,10 +7834,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -7850,7 +7877,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -8044,6 +8072,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -9786,6 +9815,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9829,6 +9859,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -9980,6 +10011,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -10061,7 +10093,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -12132,6 +12165,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -12932,6 +12966,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -13105,6 +13140,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -13270,7 +13306,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13297,12 +13333,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13328,12 +13365,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13359,6 +13397,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -13430,7 +13469,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13457,12 +13496,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13488,13 +13528,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13520,6 +13561,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -14472,6 +14514,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", diff --git a/src/audit-logs/data/ghes-3.20/enterprise.json b/src/audit-logs/data/ghes-3.20/enterprise.json index 41141e7d2b85..175d0e0bbea2 100644 --- a/src/audit-logs/data/ghes-3.20/enterprise.json +++ b/src/audit-logs/data/ghes-3.20/enterprise.json @@ -415,13 +415,16 @@ "audit_log_stream_sink_details", "created_at", "new_azure_blob_container", + "new_datadog_site", "new_event_hub_instance", "new_gc_bucket", "new_s3_arn_role", "new_s3_bucket", "new_splunk_domain", "new_splunk_port", + "oauth_application_id", "old_azure_blob_container", + "old_datadog_site", "old_event_hub_instance", "old_gc_bucket", "old_s3_arn_role", @@ -508,6 +511,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -1887,6 +1891,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "name", "operation_type" @@ -1960,7 +1965,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -2349,6 +2355,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2382,6 +2389,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2646,6 +2654,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2679,6 +2688,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2990,6 +3000,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -3059,6 +3070,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -3131,6 +3143,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -3164,6 +3177,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -3237,7 +3251,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -4213,6 +4228,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4359,6 +4375,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -5104,6 +5121,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -5629,6 +5647,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -5816,6 +5835,7 @@ "actor_is_bot", "created_at", "domain_name", + "oauth_application_id", "operation_type", "owner", "owner_type" @@ -5953,6 +5973,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "enterprise_role_id", @@ -7331,6 +7352,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "message", "oauth_application_id", "operation_type", @@ -7374,6 +7396,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "oauth_application_id", "operation_type", "query_string", @@ -7996,6 +8019,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -8032,6 +8056,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8066,6 +8091,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -8138,6 +8164,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -8818,6 +8845,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -9039,7 +9069,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -10711,11 +10742,13 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -10894,8 +10927,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -10961,6 +10996,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -11071,7 +11107,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -11738,6 +11775,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11805,9 +11843,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -11838,6 +11878,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11906,6 +11947,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12153,6 +12195,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -12280,10 +12323,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -13224,6 +13269,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13259,10 +13305,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -13293,8 +13341,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -13423,8 +13473,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -13699,7 +13751,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -13734,7 +13787,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -14222,6 +14276,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -14257,10 +14312,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -14328,6 +14385,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -14436,6 +14494,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -14511,7 +14570,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -14942,6 +15002,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "allowed_values", "created_at", @@ -16046,6 +16107,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -17148,10 +17210,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -17189,7 +17253,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -18317,6 +18382,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -18996,6 +19062,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -19893,6 +19960,7 @@ "user_agent", "created_at", "operation_type", + "public_repo", "visibility" ] }, @@ -20544,6 +20612,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type", "public_repo", @@ -21428,6 +21497,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -21471,6 +21541,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -21622,6 +21693,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -21703,7 +21775,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -22805,7 +22878,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -22838,8 +22912,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -22976,7 +23052,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23237,7 +23314,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -23991,6 +24069,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -24028,6 +24107,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -24061,6 +24141,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -24697,6 +24778,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -26445,6 +26527,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -27938,6 +28021,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -28247,6 +28331,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -28412,7 +28497,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28439,12 +28524,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28470,12 +28556,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28501,6 +28588,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -28572,7 +28660,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28599,12 +28687,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28630,13 +28719,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -28662,6 +28752,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -29842,6 +29933,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", @@ -30429,6 +30521,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -30436,6 +30529,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.20/organization.json b/src/audit-logs/data/ghes-3.20/organization.json index dbd370519e0b..5b7313601621 100644 --- a/src/audit-logs/data/ghes-3.20/organization.json +++ b/src/audit-logs/data/ghes-3.20/organization.json @@ -425,6 +425,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -1688,6 +1689,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1974,6 +1976,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2155,6 +2158,7 @@ "actor_is_bot", "created_at", "excluded_paths", + "oauth_application_id", "operation_type", "owner_type", "public_repo", @@ -2965,6 +2969,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3600,6 +3605,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -4276,6 +4282,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -4312,6 +4319,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4346,6 +4354,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -5026,6 +5035,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -5247,7 +5259,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -6641,7 +6654,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" }, @@ -6814,6 +6828,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing repository management policies in your enterprise" @@ -7724,6 +7739,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -7867,7 +7883,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -8972,6 +8989,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9005,8 +9023,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -9037,6 +9057,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9104,9 +9125,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -9137,6 +9160,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9205,6 +9229,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9770,6 +9795,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -9803,6 +9829,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization" @@ -9930,10 +9957,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -11652,7 +11681,8 @@ "user_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "topic" ] }, { @@ -11716,6 +11746,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -11751,10 +11782,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -11785,8 +11818,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -11915,8 +11950,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12253,7 +12290,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -12288,7 +12326,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -12776,6 +12815,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12811,10 +12851,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -12882,6 +12924,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12990,6 +13033,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -13065,7 +13109,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -13132,6 +13177,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -13167,6 +13213,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -14045,7 +14092,7 @@ }, { "action": "organization_moderators.add_team", - "description": "N/A", + "description": "A team was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14078,7 +14125,7 @@ }, { "action": "organization_moderators.add_user", - "description": "N/A", + "description": "A user was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14110,7 +14157,7 @@ }, { "action": "organization_moderators.remove_team", - "description": "N/A", + "description": "A team was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14143,7 +14190,7 @@ }, { "action": "organization_moderators.remove_user", - "description": "N/A", + "description": "A user was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14402,7 +14449,8 @@ "owner", "owner_id", "owner_type", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Permissions of custom organization roles" }, @@ -15530,6 +15578,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -16430,10 +16479,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -16471,7 +16522,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -17599,6 +17651,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -18278,6 +18331,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -20658,6 +20712,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -20701,6 +20756,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -20852,6 +20908,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -20933,7 +20990,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -21635,7 +21693,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { @@ -22273,6 +22332,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], @@ -22600,7 +22660,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -22633,8 +22694,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -22771,7 +22834,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23106,7 +23170,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -23958,6 +24023,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -23995,6 +24061,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -24104,6 +24171,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -24221,7 +24289,8 @@ "oauth_application_id", "operation_type", "owner", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Managing custom repository roles for an organization" }, @@ -25195,6 +25264,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -27971,6 +28041,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -27978,6 +28049,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.20/user.json b/src/audit-logs/data/ghes-3.20/user.json index 54d72dab2725..44db7f4fc469 100644 --- a/src/audit-logs/data/ghes-3.20/user.json +++ b/src/audit-logs/data/ghes-3.20/user.json @@ -307,6 +307,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -821,6 +822,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -890,6 +892,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -962,6 +965,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -995,6 +999,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -1068,7 +1073,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -1510,6 +1516,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1656,6 +1663,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -3086,6 +3094,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3122,6 +3131,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3156,6 +3166,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3228,6 +3239,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -3833,6 +3845,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -4054,7 +4069,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -5534,8 +5550,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -5956,6 +5974,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -5991,10 +6010,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -6062,6 +6083,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6138,6 +6160,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -6213,7 +6236,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -6808,6 +6832,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -7842,10 +7867,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -7883,7 +7910,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -8077,6 +8105,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -9819,6 +9848,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9862,6 +9892,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -10013,6 +10044,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -10094,7 +10126,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -12165,6 +12198,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -12965,6 +12999,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -13138,6 +13173,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -13303,7 +13339,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13330,12 +13366,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13361,12 +13398,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13392,6 +13430,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -13463,7 +13502,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13490,12 +13529,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13521,13 +13561,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -13553,6 +13594,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -14505,6 +14547,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", diff --git a/src/audit-logs/data/ghes-3.21/enterprise.json b/src/audit-logs/data/ghes-3.21/enterprise.json index d4c5d9e56406..74402136c677 100644 --- a/src/audit-logs/data/ghes-3.21/enterprise.json +++ b/src/audit-logs/data/ghes-3.21/enterprise.json @@ -415,13 +415,16 @@ "audit_log_stream_sink_details", "created_at", "new_azure_blob_container", + "new_datadog_site", "new_event_hub_instance", "new_gc_bucket", "new_s3_arn_role", "new_s3_bucket", "new_splunk_domain", "new_splunk_port", + "oauth_application_id", "old_azure_blob_container", + "old_datadog_site", "old_event_hub_instance", "old_gc_bucket", "old_s3_arn_role", @@ -508,6 +511,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -2094,6 +2098,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "name", "operation_type" @@ -2134,6 +2139,41 @@ "operation_type" ] }, + { + "action": "business.members_limit_warning", + "description": "An enterprise is approaching its members limit.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "count", + "created_at", + "limit", + "name", + "operation_type" + ] + }, { "action": "business.organizations_limit_reached", "description": "An enterprise has reached its organizations limit.", @@ -2343,7 +2383,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -2768,6 +2809,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2801,6 +2843,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -3065,6 +3108,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -3098,6 +3142,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -3409,6 +3454,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -3478,6 +3524,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -3550,6 +3597,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -3583,6 +3631,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -3656,7 +3705,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -4632,6 +4682,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4778,6 +4829,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -5593,6 +5645,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -5631,10 +5684,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -5672,6 +5727,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -5705,6 +5761,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6097,6 +6154,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -6284,6 +6342,7 @@ "actor_is_bot", "created_at", "domain_name", + "oauth_application_id", "operation_type", "owner", "owner_type" @@ -6421,6 +6480,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "enterprise_role_id", @@ -7799,6 +7859,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "message", "oauth_application_id", "operation_type", @@ -7842,6 +7903,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "oauth_application_id", "operation_type", "query_string", @@ -8464,6 +8526,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -8500,6 +8563,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8534,6 +8598,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -8606,6 +8671,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -9286,6 +9352,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -9507,7 +9576,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -11432,11 +11502,13 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -11615,8 +11687,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -11682,6 +11756,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -11792,7 +11867,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -12459,6 +12535,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12526,9 +12603,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -12559,6 +12638,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12627,6 +12707,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12874,6 +12955,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -13001,10 +13083,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -13979,6 +14063,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -14014,10 +14099,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -14048,8 +14135,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -14178,8 +14267,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -14454,7 +14545,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -14489,7 +14581,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -14977,6 +15070,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -15012,10 +15106,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -15083,6 +15179,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -15191,6 +15288,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -15266,7 +15364,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -15697,6 +15796,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "allowed_values", "created_at", @@ -16801,6 +16901,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -17903,10 +18004,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -17944,7 +18047,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -19072,6 +19176,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -19751,6 +19856,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -20648,6 +20754,7 @@ "user_agent", "created_at", "operation_type", + "public_repo", "visibility" ] }, @@ -21299,6 +21406,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type", "public_repo", @@ -22183,6 +22291,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -22226,6 +22335,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -22377,6 +22487,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -22458,7 +22569,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -23560,7 +23672,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23593,8 +23706,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23731,7 +23846,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -24068,7 +24184,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -24716,6 +24833,7 @@ "user_id", "user_agent", "active", + "actor_is_agent", "actor_is_bot", "alert_id", "alert_number", @@ -24903,6 +25021,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -24940,6 +25059,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -24973,6 +25093,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -25609,6 +25730,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -27357,6 +27479,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -28865,6 +28988,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -29174,6 +29298,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -29339,7 +29464,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29366,12 +29491,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29397,12 +29523,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29428,6 +29555,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -29499,7 +29627,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29526,12 +29654,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29557,13 +29686,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29589,6 +29719,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -30769,6 +30900,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", @@ -31356,6 +31488,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -31363,6 +31496,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.21/organization.json b/src/audit-logs/data/ghes-3.21/organization.json index 0d70e6106f08..d19d5cc6aec7 100644 --- a/src/audit-logs/data/ghes-3.21/organization.json +++ b/src/audit-logs/data/ghes-3.21/organization.json @@ -425,6 +425,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -595,6 +596,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -629,6 +631,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -733,6 +736,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -1860,6 +1864,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -2146,6 +2151,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2327,6 +2333,7 @@ "actor_is_bot", "created_at", "excluded_paths", + "oauth_application_id", "operation_type", "owner_type", "public_repo", @@ -3207,6 +3214,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -3245,10 +3253,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3286,6 +3296,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3319,6 +3330,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3821,6 +3833,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -4497,6 +4510,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -4533,6 +4547,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4567,6 +4582,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -5247,6 +5263,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -5468,7 +5487,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -6924,7 +6944,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" }, @@ -7097,6 +7118,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing repository management policies in your enterprise" @@ -8007,6 +8029,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -8150,7 +8173,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -8820,6 +8844,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -8852,6 +8877,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -9352,6 +9378,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9385,8 +9412,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -9417,6 +9446,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9484,9 +9514,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -9517,6 +9549,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9585,6 +9618,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10045,6 +10079,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10221,6 +10256,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -10254,6 +10290,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization" @@ -10381,10 +10418,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -12137,7 +12176,8 @@ "user_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "topic" ] }, { @@ -12201,6 +12241,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12236,10 +12277,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -12270,8 +12313,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12400,8 +12445,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12738,7 +12785,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -12773,7 +12821,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -13261,6 +13310,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13296,10 +13346,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -13367,6 +13419,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13475,6 +13528,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -13550,7 +13604,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -13617,6 +13672,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -13652,6 +13708,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -14565,7 +14622,7 @@ }, { "action": "organization_moderators.add_team", - "description": "N/A", + "description": "A team was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14598,7 +14655,7 @@ }, { "action": "organization_moderators.add_user", - "description": "N/A", + "description": "A user was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14630,7 +14687,7 @@ }, { "action": "organization_moderators.remove_team", - "description": "N/A", + "description": "A team was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14663,7 +14720,7 @@ }, { "action": "organization_moderators.remove_user", - "description": "N/A", + "description": "A user was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14922,7 +14979,8 @@ "owner", "owner_id", "owner_type", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Permissions of custom organization roles" }, @@ -16050,6 +16108,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -16950,10 +17009,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -16991,7 +17052,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -18119,6 +18181,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -18798,6 +18861,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -19301,6 +19365,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "public_repo" ] @@ -19334,6 +19399,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "public_repo" ] @@ -21244,6 +21310,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -21287,6 +21354,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -21438,6 +21506,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -21519,7 +21588,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -22221,7 +22291,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { @@ -23008,6 +23079,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], @@ -23335,7 +23407,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23368,8 +23441,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23506,7 +23581,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23917,7 +23993,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -24739,6 +24816,7 @@ "user_id", "user_agent", "active", + "actor_is_agent", "actor_is_bot", "alert_id", "alert_number", @@ -24926,6 +25004,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -24963,6 +25042,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -25072,6 +25152,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -25189,7 +25270,8 @@ "oauth_application_id", "operation_type", "owner", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Managing custom repository roles for an organization" }, @@ -26163,6 +26245,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -28954,6 +29037,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -28961,6 +29045,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.21/user.json b/src/audit-logs/data/ghes-3.21/user.json index 66b82f3add73..380168b1894a 100644 --- a/src/audit-logs/data/ghes-3.21/user.json +++ b/src/audit-logs/data/ghes-3.21/user.json @@ -307,6 +307,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -1069,6 +1070,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -1138,6 +1140,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -1210,6 +1213,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -1243,6 +1247,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -1316,7 +1321,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -1758,6 +1764,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1904,6 +1911,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2471,6 +2479,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -2509,10 +2518,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -2550,6 +2561,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3516,6 +3528,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3552,6 +3565,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3586,6 +3600,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3658,6 +3673,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -4263,6 +4279,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -4484,7 +4503,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -6217,8 +6237,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -6639,6 +6661,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6674,10 +6697,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -6745,6 +6770,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6821,6 +6847,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -6896,7 +6923,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -7491,6 +7519,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -8525,10 +8554,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -8566,7 +8597,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -8760,6 +8792,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -10502,6 +10535,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10545,6 +10579,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -10696,6 +10731,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -10777,7 +10813,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -12848,6 +12885,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -13648,6 +13686,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -13821,6 +13860,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -13986,7 +14026,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14013,12 +14053,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14044,12 +14085,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14075,6 +14117,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -14146,7 +14189,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14173,12 +14216,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14204,13 +14248,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14236,6 +14281,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -15188,6 +15234,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", diff --git a/src/audit-logs/data/ghes-3.22/enterprise.json b/src/audit-logs/data/ghes-3.22/enterprise.json index da5bf87de046..780528b4b32d 100644 --- a/src/audit-logs/data/ghes-3.22/enterprise.json +++ b/src/audit-logs/data/ghes-3.22/enterprise.json @@ -449,13 +449,16 @@ "audit_log_stream_sink_details", "created_at", "new_azure_blob_container", + "new_datadog_site", "new_event_hub_instance", "new_gc_bucket", "new_s3_arn_role", "new_s3_bucket", "new_splunk_domain", "new_splunk_port", + "oauth_application_id", "old_azure_blob_container", + "old_datadog_site", "old_event_hub_instance", "old_gc_bucket", "old_s3_arn_role", @@ -542,6 +545,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -2162,6 +2166,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "name", "operation_type" @@ -2202,6 +2207,41 @@ "operation_type" ] }, + { + "action": "business.members_limit_warning", + "description": "An enterprise is approaching its members limit.", + "docs_reference_links": "N/A", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "actor_is_bot", + "count", + "created_at", + "limit", + "name", + "operation_type" + ] + }, { "action": "business.organizations_limit_reached", "description": "An enterprise has reached its organizations limit.", @@ -2411,7 +2451,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -2836,6 +2877,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -2869,6 +2911,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -3133,6 +3176,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -3166,6 +3210,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise" @@ -3477,6 +3522,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -3546,6 +3592,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -3618,6 +3665,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -3651,6 +3699,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -3724,7 +3773,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -4700,6 +4750,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4846,6 +4897,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -5695,6 +5747,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -5733,10 +5786,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -5774,6 +5829,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -5807,6 +5863,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6199,6 +6256,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -6386,6 +6444,7 @@ "actor_is_bot", "created_at", "domain_name", + "oauth_application_id", "operation_type", "owner", "owner_type" @@ -6523,6 +6582,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "enterprise_role_id", @@ -7901,6 +7961,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "message", "oauth_application_id", "operation_type", @@ -7944,6 +8005,7 @@ "actor_is_bot", "api_request_body", "created_at", + "large_group_warning", "oauth_application_id", "operation_type", "query_string", @@ -8566,6 +8628,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -8602,6 +8665,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -8636,6 +8700,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -8708,6 +8773,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -9388,6 +9454,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -9609,7 +9678,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -11567,11 +11637,13 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { @@ -11750,8 +11822,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -11817,6 +11891,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -11927,7 +12002,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -12594,6 +12670,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12661,9 +12738,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -12694,6 +12773,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12762,6 +12842,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13009,6 +13090,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -13136,10 +13218,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -14114,6 +14198,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -14149,10 +14234,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -14183,8 +14270,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -14313,8 +14402,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -14589,7 +14680,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -14624,7 +14716,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -15112,6 +15205,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -15147,10 +15241,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -15218,6 +15314,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -15326,6 +15423,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -15401,7 +15499,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -15832,6 +15931,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "allowed_values", "created_at", @@ -16936,6 +17036,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -18038,10 +18139,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -18079,7 +18182,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -19207,6 +19311,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -19886,6 +19991,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -20783,6 +20889,7 @@ "user_agent", "created_at", "operation_type", + "public_repo", "visibility" ] }, @@ -21434,6 +21541,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type", "public_repo", @@ -22318,6 +22426,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -22361,6 +22470,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -22512,6 +22622,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -22593,7 +22704,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -23695,7 +23807,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23728,8 +23841,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23866,7 +23981,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -24203,7 +24319,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -24851,6 +24968,7 @@ "user_id", "user_agent", "active", + "actor_is_agent", "actor_is_bot", "alert_id", "alert_number", @@ -25038,6 +25156,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -25075,6 +25194,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -25108,6 +25228,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -25744,6 +25865,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -27492,6 +27614,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -29000,6 +29123,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -29309,6 +29433,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -29474,7 +29599,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29501,12 +29626,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29532,12 +29658,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29563,6 +29690,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -29634,7 +29762,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29661,12 +29789,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29692,13 +29821,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -29724,6 +29854,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -30904,6 +31035,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", @@ -31491,6 +31623,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -31498,6 +31631,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.22/organization.json b/src/audit-logs/data/ghes-3.22/organization.json index 37b5038161d1..00c4103541e5 100644 --- a/src/audit-logs/data/ghes-3.22/organization.json +++ b/src/audit-logs/data/ghes-3.22/organization.json @@ -459,6 +459,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -629,6 +630,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -663,6 +665,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -767,6 +770,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -1894,6 +1898,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -2180,6 +2185,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2395,6 +2401,7 @@ "actor_is_bot", "created_at", "excluded_paths", + "oauth_application_id", "operation_type", "owner_type", "public_repo", @@ -3309,6 +3316,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -3347,10 +3355,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3388,6 +3398,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3421,6 +3432,7 @@ "user_id", "user_agent", "access_level", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3923,6 +3935,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner", "owner_type", @@ -4599,6 +4612,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -4635,6 +4649,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -4669,6 +4684,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -5349,6 +5365,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -5570,7 +5589,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -7026,7 +7046,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization" }, @@ -7199,6 +7220,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing repository management policies in your enterprise" @@ -8109,6 +8131,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization" @@ -8252,7 +8275,8 @@ "created_at", "oauth_application_id", "operation_type", - "team" + "team", + "user_programmatic_access_name" ] }, { @@ -8922,6 +8946,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -8954,6 +8979,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -9518,6 +9544,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9551,8 +9578,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -9583,6 +9612,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9650,9 +9680,11 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization" }, @@ -9683,6 +9715,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -9751,6 +9784,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10211,6 +10245,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10387,6 +10422,7 @@ "actor_is_bot", "created_at", "issuer", + "oauth_application_id", "operation_type", "sso_url" ] @@ -10420,6 +10456,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization" @@ -10547,10 +10584,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization" }, @@ -12303,7 +12342,8 @@ "user_agent", "actor_is_bot", "created_at", - "operation_type" + "operation_type", + "topic" ] }, { @@ -12367,6 +12407,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -12402,10 +12443,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -12436,8 +12479,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12566,8 +12611,10 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Defining custom patterns for secret scanning" @@ -12904,7 +12951,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -12939,7 +12987,8 @@ "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -13427,6 +13476,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13462,10 +13512,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -13533,6 +13585,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -13641,6 +13694,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -13716,7 +13770,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -13783,6 +13838,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -13818,6 +13874,7 @@ "actor_is_bot", "created_at", "from_business", + "oauth_application_id", "operation_type", "to_business" ], @@ -14731,7 +14788,7 @@ }, { "action": "organization_moderators.add_team", - "description": "N/A", + "description": "A team was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14764,7 +14821,7 @@ }, { "action": "organization_moderators.add_user", - "description": "N/A", + "description": "A user was added as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14796,7 +14853,7 @@ }, { "action": "organization_moderators.remove_team", - "description": "N/A", + "description": "A team was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14829,7 +14886,7 @@ }, { "action": "organization_moderators.remove_user", - "description": "N/A", + "description": "A user was removed as an organization moderator.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -15088,7 +15145,8 @@ "owner", "owner_id", "owner_type", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Permissions of custom organization roles" }, @@ -16216,6 +16274,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type" ] }, @@ -17116,10 +17175,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -17157,7 +17218,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -18285,6 +18347,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -18964,6 +19027,7 @@ "oauth_application_id", "operation_type", "public_repo", + "topic", "user_programmatic_access_name" ] }, @@ -19467,6 +19531,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "public_repo" ] @@ -19500,6 +19565,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "public_repo" ] @@ -21410,6 +21476,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -21453,6 +21520,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -21604,6 +21672,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -21685,7 +21754,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -22387,7 +22457,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ] }, { @@ -23248,6 +23319,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ], @@ -23575,7 +23647,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23608,8 +23681,10 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -23746,7 +23821,8 @@ "created_at", "oauth_application_id", "operation_type", - "public_repo" + "public_repo", + "user_programmatic_access_name" ], "docs_reference_titles": "Defining custom patterns for secret scanning" }, @@ -24157,7 +24233,8 @@ "oauth_application_id", "operation_type", "public_repo", - "topic" + "topic", + "user_programmatic_access_name" ], "docs_reference_titles": "Push protection" }, @@ -24979,6 +25056,7 @@ "user_id", "user_agent", "active", + "actor_is_agent", "actor_is_bot", "alert_id", "alert_number", @@ -25166,6 +25244,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -25203,6 +25282,7 @@ "oauth_application_id", "operation_type", "public_repo", + "reason", "topic", "user_programmatic_access_name" ] @@ -25312,6 +25392,7 @@ "user_agent", "actor_is_bot", "created_at", + "oauth_application_id", "operation_type", "owner" ], @@ -25429,7 +25510,8 @@ "oauth_application_id", "operation_type", "owner", - "role_permissions" + "role_permissions", + "user_programmatic_access_name" ], "docs_reference_titles": "Managing custom repository roles for an organization" }, @@ -25584,6 +25666,78 @@ ], "docs_reference_titles": "Manage secret scanning alerts" }, + { + "action": "secret_scanning_alert.metadata_create", + "description": "Metadata was added to a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, + { + "action": "secret_scanning_alert.metadata_remove", + "description": "Metadata was removed from a secret scanning alert.", + "docs_reference_links": "/code-security/secret-scanning/managing-alerts-from-secret-scanning", + "fields": [ + "@timestamp", + "_document_id", + "action", + "actor", + "actor_id", + "business", + "business_id", + "hashed_token", + "org", + "org_id", + "programmatic_access_type", + "repo", + "repo_id", + "repository", + "repository_id", + "request_access_security_header", + "request_id", + "token_id", + "token_scopes", + "user", + "user_id", + "user_agent", + "created_at", + "multi_repo", + "number", + "publicly_leaked", + "secret_type", + "secret_type_display_name" + ], + "docs_reference_titles": "Manage secret scanning alerts" + }, { "action": "secret_scanning_alert.public_leak", "description": "A secret scanning alert was leaked in a public repo.", @@ -26403,6 +26557,7 @@ "source", "source_slug", "started_at", + "topic", "type", "type_slug" ], @@ -29194,6 +29349,7 @@ "head_branch", "head_sha", "name", + "oauth_application_id", "operation_type", "public_repo", "run_attempt", @@ -29201,6 +29357,7 @@ "started_at", "topic", "trigger_id", + "user_programmatic_access_name", "workflow_id", "workflow_run_id" ], diff --git a/src/audit-logs/data/ghes-3.22/user.json b/src/audit-logs/data/ghes-3.22/user.json index 1ebf20afcb1d..4ad7d06fde4a 100644 --- a/src/audit-logs/data/ghes-3.22/user.json +++ b/src/audit-logs/data/ghes-3.22/user.json @@ -341,6 +341,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_enabled", "budget_limit_type", @@ -1103,6 +1104,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -1172,6 +1174,7 @@ "actor_is_bot", "created_at", "name", + "oauth_application_id", "operation_type", "policy" ], @@ -1244,6 +1247,7 @@ "created_at", "limit", "name", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" @@ -1277,6 +1281,7 @@ "user_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "name", "oauth_application_id", "operation_type" @@ -1350,7 +1355,8 @@ "created_at", "name", "oauth_application_id", - "operation_type" + "operation_type", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "Enforcing policies for GitHub Actions in your enterprise" }, @@ -1792,6 +1798,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -1938,6 +1945,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "operation_type", @@ -2539,6 +2547,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", @@ -2577,10 +2586,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -2618,6 +2629,7 @@ "alert_number", "created_at", "number", + "oauth_application_id", "operation_type", "public_repo" ], @@ -3584,6 +3596,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3620,6 +3633,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -3654,6 +3668,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "name", @@ -3726,6 +3741,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "key", @@ -4331,6 +4347,9 @@ "actor_is_bot", "application_client_id", "created_at", + "events_added", + "events_removed", + "events_unchanged", "integration", "name", "operation_type", @@ -4552,7 +4571,8 @@ "integration", "name", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/apps/maintaining-github-apps/suspending-a-github-app-installation" }, @@ -6318,8 +6338,10 @@ "user_agent", "actor_is_bot", "created_at", + "integration", "oauth_application_name", - "operation_type" + "operation_type", + "topic" ], "docs_reference_titles": "/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps" }, @@ -6740,6 +6762,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6775,10 +6798,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization" }, @@ -6846,6 +6871,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -6922,6 +6948,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "user_programmatic_access_name" @@ -6997,7 +7024,8 @@ "created_at", "oauth_application_id", "operation_type", - "user_programmatic_access_name" + "user_programmatic_access_name", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -7592,6 +7620,7 @@ "actor_is_bot", "created_at", "explanation", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -8626,10 +8655,12 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ], "docs_reference_titles": "/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views" }, @@ -8667,7 +8698,8 @@ "project_id", "project_kind", "project_name", - "public_project" + "public_project", + "user_programmatic_access_name" ] }, { @@ -8861,6 +8893,7 @@ "fingerprint", "key", "operation_type", + "public_repo", "read_only", "title" ], @@ -10603,6 +10636,7 @@ "user", "user_id", "user_agent", + "actor_is_agent", "actor_is_bot", "created_at", "oauth_application_id", @@ -10646,6 +10680,7 @@ "oauth_application_id", "operation_type", "public_repo", + "user_programmatic_access_name", "visibility" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository" @@ -10797,6 +10832,7 @@ "actor_is_agent", "actor_is_bot", "created_at", + "default_workflow_permissions_value", "oauth_application_id", "operation_type", "public_repo", @@ -10878,7 +10914,8 @@ "operation_type", "public_repo", "user_programmatic_access_name", - "visibility" + "visibility", + "workflow_permission_can_approve_pr_value" ], "docs_reference_titles": "/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests" }, @@ -12949,6 +12986,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ], "docs_reference_titles": "Maintaining ownership continuity of your personal account's repositories" @@ -13749,6 +13787,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "oauth_application_id", "operation_type", @@ -13922,6 +13961,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "created_at", "operation_type" ] @@ -14087,7 +14127,7 @@ }, { "action": "user.disable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14114,12 +14154,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.disable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14145,12 +14186,13 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type" ] }, { "action": "user.disable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was disabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14176,6 +14218,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -14247,7 +14290,7 @@ }, { "action": "user.enable_collaborators_only", - "description": "N/A", + "description": "The interaction limit for collaborators only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14274,12 +14317,13 @@ "user_agent", "created_at", "oauth_application_id", - "operation_type" + "operation_type", + "user_programmatic_access_name" ] }, { "action": "user.enable_contributors_only", - "description": "N/A", + "description": "The interaction limit for prior contributors only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14305,13 +14349,14 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] }, { "action": "user.enable_sockpuppet_disallowed", - "description": "N/A", + "description": "The interaction limit for existing users only was enabled for a personal account.", "docs_reference_links": "N/A", "fields": [ "@timestamp", @@ -14337,6 +14382,7 @@ "user_id", "user_agent", "created_at", + "oauth_application_id", "operation_type", "user_programmatic_access_name" ] @@ -15289,6 +15335,7 @@ "user", "user_id", "user_agent", + "actor_is_bot", "blocked_user", "created_at", "oauth_application_id", diff --git a/src/audit-logs/data/shared/entries.json b/src/audit-logs/data/shared/entries.json index 77da93f771fa..fd7f619182e6 100644 --- a/src/audit-logs/data/shared/entries.json +++ b/src/audit-logs/data/shared/entries.json @@ -1 +1 @@ -[{"action":"account.billing_date_change","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"account.plan_change","description":"The account's plan changed.","docs_reference_links":"/billing/managing-the-plan-for-your-github-account/about-billing-for-plans","docs_reference_titles":"How GitHub billing works","fieldsIndex":1},{"action":"actions_cache.delete","description":"A GitHub Actions cache was deleted using the REST API.","docs_reference_links":"N/A","fieldsIndex":2},{"action":"advisory_credit.accept","description":"Credit was accepted for a security advisory.","docs_reference_links":"/code-security/security-advisories/working-with-repository-security-advisories/editing-a-repository-security-advisory","docs_reference_titles":"Editing a repository security advisory","fieldsIndex":3},{"action":"advisory_credit.create","description":"Someone was added to the credit section of a security advisory.","docs_reference_links":"N/A","fieldsIndex":4},{"action":"advisory_credit.decline","description":"Credit was declined for a security advisory.","docs_reference_links":"N/A","fieldsIndex":5},{"action":"advisory_credit.destroy","description":"Someone was removed from the credit section of a security advisory.","docs_reference_links":"N/A","fieldsIndex":6},{"action":"artifact.destroy","description":"A workflow run artifact was manually deleted.","docs_reference_links":"N/A","fieldsIndex":7},{"action":"auto_approve_personal_access_token_requests.disable","description":"Triggered when the organization must approve fine-grained personal access tokens before the tokens can access organization resources. See also: personal_access_token.auto_approve_grant_requests_disabled","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization","fieldsIndex":0},{"action":"auto_approve_personal_access_token_requests.enable","description":"Triggered when fine-grained personal access tokens can access organization resources without prior approval. See also: personal_access_token.auto_approve_grant_requests_enabled","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization","fieldsIndex":0},{"action":"billing.budget_create","description":"A billing budget was created for a business or organization. Includes details about the budget limit, alerting preferences, and recipients.","docs_reference_links":"N/A","fieldsIndex":8},{"action":"billing.budget_delete","description":"A billing budget was deleted for a business or organization. Includes details about the removed budget and any alerting settings.","docs_reference_links":"N/A","fieldsIndex":9},{"action":"billing.budget_update","description":"A billing budget was updated for a business or organization. Includes details about the updated limit and alerting settings.","docs_reference_links":"N/A","fieldsIndex":10},{"action":"billing.change_billing_type","description":"The way the account pays for GitHub was changed.","docs_reference_links":"/billing/managing-your-github-billing-settings/adding-or-editing-a-payment-method","docs_reference_titles":"Managing your payment and billing information","fieldsIndex":11},{"action":"billing.change_email","description":"The billing email address changed.","docs_reference_links":"/billing/managing-your-github-billing-settings/setting-your-billing-email","docs_reference_titles":"Managing your payment and billing information","fieldsIndex":12},{"action":"billing.cost_center_create","description":"A cost center was created for a business or organization.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"billing.cost_center_delete","description":"A cost center was deleted from a business or organization.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"billing.cost_center_resource_added","description":"A resource was added to a cost center for a business or organization.","docs_reference_links":"N/A","fieldsIndex":14},{"action":"billing.cost_center_resource_removed","description":"A resource was removed from a cost center for a business or organization.","docs_reference_links":"N/A","fieldsIndex":14},{"action":"billing.cost_center_update","description":"A cost center was updated for a business or organization.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"billing_customer.azure_subscription_linked","description":"Azure subscription has been linked on this account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"billing_customer.azure_subscription_unlinked","description":"Azure subscription has been unlinked on this account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"billing.lock","description":"N/A","docs_reference_links":"N/A","fieldsIndex":1},{"action":"billing.overage_policy_updated","description":"The premium request paid usage policy for your GitHub account was changed.","docs_reference_links":"/copilot/how-tos/manage-and-track-spending/manage-request-allowances#setting-a-policy-for-paid-usage","docs_reference_titles":"Optimizing your budget configuration","fieldsIndex":15},{"action":"billing.unlock","description":"N/A","docs_reference_links":"N/A","fieldsIndex":16},{"action":"checks.auto_trigger_disabled","description":"Automatic creation of check suites was disabled on a repository in the organization or enterprise.","docs_reference_links":"/rest/checks#update-repository-preferences-for-check-suites","docs_reference_titles":"/rest/checks#update-repository-preferences-for-check-suites","fieldsIndex":17},{"action":"checks.auto_trigger_enabled","description":"Automatic creation of check suites was enabled on a repository in the organization or enterprise.","docs_reference_links":"/rest/checks#update-repository-preferences-for-check-suites","docs_reference_titles":"/rest/checks#update-repository-preferences-for-check-suites","fieldsIndex":17},{"action":"checks.delete_logs","description":"Logs in a check suite were deleted.","docs_reference_links":"N/A","fieldsIndex":18},{"action":"code_scanning.alert_appeared_in_branch","description":"Existing code scanning alerts appeared in a branch.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":19},{"action":"code_scanning.alert_closed_became_fixed","description":"Code scanning alerts were fixed.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":19},{"action":"code_scanning.alert_closed_became_outdated","description":"Code scanning alerts were closed as outdated (all configurations they were detected in were deleted).","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":20},{"action":"code_scanning.alert_closed_by_user","description":"Code scanning alerts were manually dismissed.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":21},{"action":"code_scanning.alert_closure_approved","description":"Dismissal of code scanning alerts was approved.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":22},{"action":"code_scanning.alert_closure_denied","description":"Dismissal of code scanning alerts was denied.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":22},{"action":"code_scanning.alert_closure_requested","description":"Dismissal of code scanning alerts was requested.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":22},{"action":"code_scanning.alert_created","description":"Code scanning alerts were seen for the first time.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":19},{"action":"code_scanning.alert_reappeared","description":"Code scanning alerts that were previously fixed reappeared.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":19},{"action":"code_scanning.alert_reopened_by_user","description":"Code scanning alerts that were previously dismissed were reopened.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":23},{"action":"codespaces.allow_permissions","description":"A codespace using custom permissions from its devcontainer.json file was launched.","docs_reference_links":"N/A","fieldsIndex":24},{"action":"codespaces.attempted_to_create_from_prebuild","description":"An attempt to create a codespace from a prebuild was made.","docs_reference_links":"N/A","fieldsIndex":25},{"action":"codespaces.business_enablement_updated","description":"Enterprise setting for Codespaces ownership was updated.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization","docs_reference_titles":"/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization","fieldsIndex":26},{"action":"codespaces.connect","description":"Credentials for a codespace were refreshed.","docs_reference_links":"N/A","fieldsIndex":27},{"action":"codespaces.create","description":"A codespace was created","docs_reference_links":"/codespaces/developing-in-codespaces/creating-a-codespace-for-a-repository","docs_reference_titles":"Creating a codespace for a repository","fieldsIndex":27},{"action":"codespaces.destroy","description":"A user deleted a codespace.","docs_reference_links":"/codespaces/developing-in-codespaces/deleting-a-codespace","docs_reference_titles":"Deleting a codespace","fieldsIndex":28},{"action":"codespaces.export_environment","description":"A codespace was exported to a branch on GitHub.","docs_reference_links":"N/A","fieldsIndex":29},{"action":"codespaces.policy_group_created","description":"Policies were applied to codespaces in an organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"codespaces.policy_group_deleted","description":"Policies were removed from codespaces in an organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"codespaces.policy_group_updated","description":"Policies were updated for codespaces in an organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"codespaces.restore","description":"A codespace was restored.","docs_reference_links":"N/A","fieldsIndex":30},{"action":"codespaces.start_environment","description":"A codespace was started.","docs_reference_links":"N/A","fieldsIndex":27},{"action":"codespaces.suspend_environment","description":"A codespace was stopped.","docs_reference_links":"N/A","fieldsIndex":31},{"action":"codespaces.trusted_repositories_access_update","description":"A personal account's access and security setting for Codespaces were updated.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces","docs_reference_titles":"Managing access to other repositories within your codespace","fieldsIndex":11},{"action":"commit_comment.destroy","description":"A commit comment was deleted.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"commit_comment.update","description":"A commit comment was updated.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"copilot.access_revoked","description":"Copilot access was revoked for the organization or enterprise due to its Copilot subscription ending, an issue with billing the entity, the entity being marked spammy, or the entity being suspended.","docs_reference_links":"N/A","fieldsIndex":33},{"action":"copilot.cfb_org_settings_changed","description":"Copilot feature settings were changed at the organization level.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.cfb_seat_added","description":"A Copilot Business or Copilot Enterprise seat was added for a user and they have received access to GitHub Copilot. This can occur as the result of directly assigning a seat for a user, assigning a seat for a team, or setting the organization to allow access for all members.","docs_reference_links":"N/A","fieldsIndex":34},{"action":"copilot.cfb_seat_assignment_created","description":"A Copilot Business or Copilot Enterprise seat assignment was newly created for a user or a team, and seats are being created.","docs_reference_links":"/copilot/overview-of-github-copilot/about-github-copilot-for-business","docs_reference_titles":"What is GitHub Copilot?","fieldsIndex":34},{"action":"copilot.cfb_seat_assignment_refreshed","description":"A seat assignment that was previously pending cancellation was re-assigned and the user will retain access to Copilot.","docs_reference_links":"N/A","fieldsIndex":34},{"action":"copilot.cfb_seat_assignment_reused","description":"A Copilot Business or Copilot Enterprise seat assignment was re-created for a user who already had a seat with no pending cancellation date, and the user will retain access to Copilot.","docs_reference_links":"N/A","fieldsIndex":35},{"action":"copilot.cfb_seat_assignment_unassigned","description":"A user or team's Copilot Business or Copilot Enterprise seat assignment was unassigned, and the user(s) will lose access to Copilot at the end of the current billing cycle.","docs_reference_links":"N/A","fieldsIndex":34},{"action":"copilot.cfb_seat_cancelled","description":"A user's Copilot Business or Copilot Enterprise seat was canceled, and the user no longer has access to Copilot.","docs_reference_links":"N/A","fieldsIndex":36},{"action":"copilot.cfb_seat_cancelled_by_staff","description":"A user's Copilot Business or Copilot Enterprise seat was canceled manually by GitHub staff, and the user no longer has access to Copilot.","docs_reference_links":"N/A","fieldsIndex":37},{"action":"copilot.cfb_seat_management_changed","description":"The seat management setting was changed at the organization level to either enable or disable Copilot access for all members of the organization, or to enable Copilot access for selected members or teams.","docs_reference_links":"N/A","fieldsIndex":38},{"action":"copilot.code_review_repository_settings_updated","description":"Copilot code review settings were updated for a repository.","docs_reference_links":"N/A","fieldsIndex":39},{"action":"copilot.content_exclusion_changed","description":"The excluded paths for GitHub Copilot were updated.","docs_reference_links":"N/A","fieldsIndex":40},{"action":"copilot.custom_instructions_created","description":"Copilot custom instructions were created for the organization.","docs_reference_links":"N/A","fieldsIndex":41},{"action":"copilot.custom_instructions_updated","description":"Copilot custom instructions were updated for the organization.","docs_reference_links":"N/A","fieldsIndex":41},{"action":"copilot.memory_user_opt_out","description":"A user opted out of Copilot Memory.","docs_reference_links":"N/A","fieldsIndex":42},{"action":"copilot.plan_changed","description":"The plan for GitHub Copilot was updated.","docs_reference_links":"/billing/managing-billing-for-github-copilot/about-billing-for-github-copilot","docs_reference_titles":"GitHub Copilot licenses","fieldsIndex":43},{"action":"copilot.plan_downgrade_scheduled","description":"The plan for GitHub Copilot was scheduled to be downgraded.","docs_reference_links":"N/A","fieldsIndex":44},{"action":"copilot.swe_agent_firewall_allowlist_updated","description":"Firewall allowlist for Copilot coding agent was updated for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.swe_agent_mcp_config_updated","description":"MCP Configuration for Copilot coding agent was updated for a specific repository.","docs_reference_links":"N/A","fieldsIndex":45},{"action":"copilot.swe_agent_repo_disabled","description":"Specific repositories were disabled from using Copilot coding agent.","docs_reference_links":"N/A","fieldsIndex":46},{"action":"copilot.swe_agent_repo_enabled","description":"Specific repositories were enabled to use Copilot coding agent.","docs_reference_links":"N/A","fieldsIndex":46},{"action":"copilot.swe_agent_repo_enablement_updated","description":"Copilot coding agent access was updated for the organization's or user's repositories.","docs_reference_links":"N/A","fieldsIndex":47},{"action":"custom_hosted_runner.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":48},{"action":"custom_hosted_runner.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"custom_hosted_runner.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":48},{"action":"custom_property_definition.create","description":"A new custom property definition was created.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":49},{"action":"custom_property_definition.destroy","description":"A custom property definition was deleted.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":49},{"action":"custom_property_definition.update","description":"A custom property definition was updated.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":50},{"action":"custom_property_value.create","description":"A repository's custom property value was manually set for the first time.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":51},{"action":"custom_property_value.destroy","description":"A repository's custom property value was deleted.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":51},{"action":"custom_property_value.update","description":"A repository's custom property value was updated.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":52},{"action":"dependabot_alerts.disable","description":"Dependabot alerts were disabled for all existing repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-for-all-existing-repositories","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-for-all-existing-repositories","fieldsIndex":11},{"action":"dependabot_alerts.enable","description":"Dependabot alerts were enabled for all existing repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-for-all-existing-repositories","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-for-all-existing-repositories","fieldsIndex":53},{"action":"dependabot_alerts_new_repos.disable","description":"Dependabot alerts were disabled for all new repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-automatically-when-new-repositories-are-added","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-automatically-when-new-repositories-are-added","fieldsIndex":53},{"action":"dependabot_alerts_new_repos.enable","description":"Dependabot alerts were enabled for all new repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-automatically-when-new-repositories-are-added","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-automatically-when-new-repositories-are-added","fieldsIndex":53},{"action":"dependabot_closure_request.approve","description":"Dismissal of Dependabot alerts was approved.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/about-dependabot-alerts","docs_reference_titles":"Dependabot alerts","fieldsIndex":54},{"action":"dependabot_closure_request.cancel","description":"Dismissal request for Dependabot alerts was canceled.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/about-dependabot-alerts","docs_reference_titles":"Dependabot alerts","fieldsIndex":55},{"action":"dependabot_closure_request.create","description":"Dismissal of Dependabot alerts was requested.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/about-dependabot-alerts","docs_reference_titles":"Dependabot alerts","fieldsIndex":56},{"action":"dependabot_closure_request.deny","description":"Dismissal of Dependabot alerts was denied.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/about-dependabot-alerts","docs_reference_titles":"Dependabot alerts","fieldsIndex":57},{"action":"dependabot_repository_access.default_access_level_updated","description":"The default repository access for Dependabot was updated.","docs_reference_links":"N/A","fieldsIndex":58},{"action":"dependabot_repository_access.repositories_updated","description":"The repositories that Dependabot can access were updated.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"dependabot_security_updates.disable","description":"Dependabot security updates were disabled for all existing repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","fieldsIndex":11},{"action":"dependabot_security_updates.enable","description":"Dependabot security updates were enabled for all existing repositories.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"dependabot_security_updates_new_repos.disable","description":" Dependabot security updates were disabled for all new repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","fieldsIndex":53},{"action":"dependabot_security_updates_new_repos.enable","description":"Dependabot security updates were enabled for all new repositories.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"dependency_graph.disable","description":"The dependency graph was disabled for all existing repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","fieldsIndex":11},{"action":"dependency_graph.enable","description":"The dependency graph was enabled for all existing repositories.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"dependency_graph_new_repos.disable","description":"The dependency graph was disabled for all new repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","fieldsIndex":53},{"action":"dependency_graph_new_repos.enable","description":"The dependency graph was enabled for all new repositories.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"discussion_comment.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":32},{"action":"discussion_comment.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":32},{"action":"discussion.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":59},{"action":"enterprise_announcement.create","description":"A global announcement banner was created for the enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/communicating-information-to-users-in-your-enterprise/customizing-user-messages-for-your-enterprise#creating-a-global-announcement-banner","docs_reference_titles":"Customizing user messages for your enterprise","fieldsIndex":60},{"action":"enterprise_announcement.destroy","description":"A global announcement banner was removed from the enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/communicating-information-to-users-in-your-enterprise/customizing-user-messages-for-your-enterprise","docs_reference_titles":"Customizing user messages for your enterprise","fieldsIndex":61},{"action":"enterprise_announcement.update","description":"A global announcement banner was updated for the enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/communicating-information-to-users-in-your-enterprise/customizing-user-messages-for-your-enterprise","docs_reference_titles":"Customizing user messages for your enterprise","fieldsIndex":62},{"action":"enterprise_installation.create","description":"The GitHub App associated with a GitHub Connect connection was created.","docs_reference_links":"/admin/configuration/configuring-github-connect/managing-github-connect","docs_reference_titles":"Enabling GitHub Connect for GitHub.com","fieldsIndex":15},{"action":"enterprise_installation.destroy","description":"The GitHub App associated with a GitHub Connect connection was deleted.","docs_reference_links":"/admin/configuration/configuring-github-connect/managing-github-connect","docs_reference_titles":"Enabling GitHub Connect for GitHub.com","fieldsIndex":63},{"action":"environment.add_protection_rule","description":"A GitHub Actions deployment protection rule was created via the API.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules","docs_reference_titles":"Managing environments for deployment","fieldsIndex":64},{"action":"environment.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":65},{"action":"environment.create_actions_secret","description":"A secret was created for a GitHub Actions environment.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#environment-secrets","docs_reference_titles":"Managing environments for deployment","fieldsIndex":66},{"action":"environment.create_actions_variable","description":"A variable was created for a GitHub Actions environment.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-environment","docs_reference_titles":"Store information in variables","fieldsIndex":66},{"action":"environment.delete","description":"An environment was deleted.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#deleting-an-environment","docs_reference_titles":"Managing environments for deployment","fieldsIndex":67},{"action":"environment.remove_actions_secret","description":"A secret was deleted for a GitHub Actions environment.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#environment-secrets","docs_reference_titles":"Managing environments for deployment","fieldsIndex":68},{"action":"environment.remove_actions_variable","description":"A variable was deleted for a GitHub Actions environment.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-environment","docs_reference_titles":"Store information in variables","fieldsIndex":68},{"action":"environment.remove_protection_rule","description":"A GitHub Actions deployment protection rule was deleted via the API.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules","docs_reference_titles":"Managing environments for deployment","fieldsIndex":69},{"action":"environment.update_actions_secret","description":"A secret was updated for a GitHub Actions environment.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#environment-secrets","docs_reference_titles":"Managing environments for deployment","fieldsIndex":66},{"action":"environment.update_actions_variable","description":"A variable was updated for a GitHub Actions environment.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-environment","docs_reference_titles":"Store information in variables","fieldsIndex":66},{"action":"environment.update_protection_rule","description":"A GitHub Actions deployment protection rule was updated via the API.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules","docs_reference_titles":"Managing environments for deployment","fieldsIndex":70},{"action":"git.clone","description":"A repository was cloned. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"N/A","fieldsIndex":71},{"action":"git.fetch","description":"Changes were fetched from a repository. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"N/A","fieldsIndex":71},{"action":"git.push","description":"Changes were pushed to a repository. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"N/A","fieldsIndex":71},{"action":"github_hosted_runner.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":72},{"action":"github_hosted_runner.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":16},{"action":"github_hosted_runner.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":72},{"action":"hook.active_changed","description":"A hook's active status was updated.","docs_reference_links":"N/A","fieldsIndex":73},{"action":"hook.config_changed","description":"A hook's configuration was changed.","docs_reference_links":"N/A","fieldsIndex":74},{"action":"hook.create","description":"A new hook was added.","docs_reference_links":"/get-started/exploring-integrations/about-webhooks","docs_reference_titles":"About webhooks","fieldsIndex":75},{"action":"hook.destroy","description":"A hook was deleted.","docs_reference_links":"N/A","fieldsIndex":74},{"action":"hook.events_changed","description":"A hook's configured events were changed.","docs_reference_links":"N/A","fieldsIndex":76},{"action":"integration.create","description":"A GitHub App was created.","docs_reference_links":"N/A","fieldsIndex":77},{"action":"integration.destroy","description":"A GitHub App was deleted.","docs_reference_links":"N/A","fieldsIndex":78},{"action":"integration.generate_client_secret","description":"N/A","docs_reference_links":"N/A","fieldsIndex":79},{"action":"integration_installation.create","description":"A GitHub App was installed.","docs_reference_links":"/apps/using-github-apps/authorizing-github-apps","docs_reference_titles":"/apps/using-github-apps/authorizing-github-apps","fieldsIndex":80},{"action":"integration_installation.destroy","description":"A GitHub App was uninstalled.","docs_reference_links":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","docs_reference_titles":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","fieldsIndex":81},{"action":"integration_installation.repositories_added","description":"Repositories were added to a GitHub App.","docs_reference_links":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#modifying-repository-access","docs_reference_titles":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#modifying-repository-access","fieldsIndex":82},{"action":"integration_installation.repositories_removed","description":"Repositories were removed from a GitHub App.","docs_reference_links":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#modifying-repository-access","docs_reference_titles":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#modifying-repository-access","fieldsIndex":83},{"action":"integration_installation_request.close","description":"A request to install a GitHub App was either approved or denied by an owner, or canceled by the member who opened the request.","docs_reference_links":"/apps/using-github-apps/requesting-a-github-app-from-your-organization-owner","docs_reference_titles":"/apps/using-github-apps/requesting-a-github-app-from-your-organization-owner","fieldsIndex":84},{"action":"integration_installation_request.create","description":"A member requested that an owner install a GitHub App.","docs_reference_links":"/apps/using-github-apps/requesting-a-github-app-from-your-organization-owner","docs_reference_titles":"/apps/using-github-apps/requesting-a-github-app-from-your-organization-owner","fieldsIndex":85},{"action":"integration_installation.suspend","description":"A GitHub App was suspended.","docs_reference_links":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","docs_reference_titles":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","fieldsIndex":86},{"action":"integration_installation.unsuspend","description":"A GitHub App was unsuspended.","docs_reference_links":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","docs_reference_titles":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","fieldsIndex":86},{"action":"integration_installation.version_updated","description":"Permissions for a GitHub App were updated.","docs_reference_links":"/apps/using-github-apps/approving-updated-permissions-for-a-github-app","docs_reference_titles":"/apps/using-github-apps/approving-updated-permissions-for-a-github-app","fieldsIndex":86},{"action":"integration.manager_added","description":"A member of an enterprise or organization was added as a GitHub App manager.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/adding-and-removing-github-app-managers-in-your-organization#giving-someone-the-ability-to-manage-all-github-apps-owned-by-the-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/adding-and-removing-github-app-managers-in-your-organization#giving-someone-the-ability-to-manage-all-github-apps-owned-by-the-organization","fieldsIndex":87},{"action":"integration.manager_removed","description":"A member of an enterprise or organization was removed from being a GitHub App manager.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/adding-and-removing-github-app-managers-in-your-organization#removing-a-github-app-managers-permissions-for-the-entire-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/adding-and-removing-github-app-managers-in-your-organization#removing-a-github-app-managers-permissions-for-the-entire-organization","fieldsIndex":87},{"action":"integration.remove_client_secret","description":"A client secret for a GitHub App was removed.","docs_reference_links":"N/A","fieldsIndex":78},{"action":"integration.revoke_all_tokens","description":"All user tokens for a GitHub App were requested to be revoked.","docs_reference_links":"N/A","fieldsIndex":88},{"action":"integration.revoke_tokens","description":"Token(s) for a GitHub App were revoked.","docs_reference_links":"N/A","fieldsIndex":88},{"action":"integration.suspend","description":"A GitHub App was suspended.","docs_reference_links":"/apps/maintaining-github-apps/suspending-a-github-app-installation","docs_reference_titles":"/apps/maintaining-github-apps/suspending-a-github-app-installation","fieldsIndex":79},{"action":"integration.transfer","description":"Ownership of a GitHub App was transferred to another user or organization.","docs_reference_links":"/apps/maintaining-github-apps/transferring-ownership-of-a-github-app","docs_reference_titles":"/apps/maintaining-github-apps/transferring-ownership-of-a-github-app","fieldsIndex":89},{"action":"integration.unsuspend","description":"A GitHub App was unsuspended.","docs_reference_links":"/apps/maintaining-github-apps/suspending-a-github-app-installation","docs_reference_titles":"/apps/maintaining-github-apps/suspending-a-github-app-installation","fieldsIndex":88},{"action":"ip_allow_list.disable","description":"An IP allow list was disabled.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list.disable_for_installed_apps","description":"An IP allow list was disabled for installed GitHub Apps.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list.enable","description":"An IP allow list was enabled.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list.enable_for_installed_apps","description":"An IP allow list was enabled for installed GitHub Apps.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list_entry.create","description":"An IP address was added to an IP allow list.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"ip_allow_list_entry.destroy","description":"An IP address was deleted from an IP allow list.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"ip_allow_list_entry.update","description":"An IP address or its description was changed.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"issue_comment.destroy","description":"A comment on an issue was deleted from the repository.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"issue_comment.pinned","description":"A comment on an issue was pinned to a repository.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"issue_comment.unpinned","description":"A comment on an issue was unpinned from a repository.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"issue_comment.update","description":"A comment on an issue (other than the initial one) changed.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"issue_dependencies.blocked_by_add","description":"An issue was marked as blocked by another issue.","docs_reference_links":"N/A","fieldsIndex":91},{"action":"issue_dependencies.blocked_by_remove","description":"The blocked by relationship between an issue and another issue was removed.","docs_reference_links":"N/A","fieldsIndex":91},{"action":"issue_dependencies.blocking_add","description":"An issue was marked as blocking another issue.","docs_reference_links":"N/A","fieldsIndex":91},{"action":"issue_dependencies.blocking_remove","description":"The blocking relationship between an issue and another issue was removed.","docs_reference_links":"N/A","fieldsIndex":91},{"action":"issue.destroy","description":"An issue was deleted from the repository.","docs_reference_links":"/issues/tracking-your-work-with-issues/deleting-an-issue","docs_reference_titles":"Deleting an issue","fieldsIndex":92},{"action":"issue.pinned","description":"An issue was pinned to a repository.","docs_reference_links":"/issues/tracking-your-work-with-issues/pinning-an-issue-to-your-repository","docs_reference_titles":"Pinning an issue to your repository","fieldsIndex":93},{"action":"issue.transfer","description":"An issue was transferred to another repository.","docs_reference_links":"/issues/tracking-your-work-with-issues/transferring-an-issue-to-another-repository","docs_reference_titles":"Transferring an issue to another repository","fieldsIndex":94},{"action":"issue_type.create","description":"An issue type was created.","docs_reference_links":"N/A","fieldsIndex":95},{"action":"issue_type.destroy","description":"An issue type was deleted.","docs_reference_links":"N/A","fieldsIndex":96},{"action":"issue_type.update","description":"An issue type was updated.","docs_reference_links":"N/A","fieldsIndex":97},{"action":"issue.unpinned","description":"An issue was unpinned from a repository.","docs_reference_links":"/issues/tracking-your-work-with-issues/pinning-an-issue-to-your-repository","docs_reference_titles":"Pinning an issue to your repository","fieldsIndex":93},{"action":"issues.deletes_disabled","description":"The ability for enterprise members to delete issues was disabled Members cannot delete issues in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-deleting-issues","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":11},{"action":"issues.deletes_enabled","description":"The ability for enterprise members to delete issues was enabled Members can delete issues in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-deleting-issues","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":15},{"action":"issues.deletes_policy_cleared","description":"An enterprise owner cleared the policy setting for allowing members to delete issues in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-deleting-issues","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":15},{"action":"marketplace_agreement_signature.create","description":"The GitHub Marketplace Developer Agreement was signed.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"marketplace_listing.approve","description":"A listing was approved for inclusion in GitHub Marketplace.","docs_reference_links":"N/A","fieldsIndex":98},{"action":"marketplace_listing.change_category","description":"A category for a listing for an app in GitHub Marketplace was changed.","docs_reference_links":"N/A","fieldsIndex":99},{"action":"marketplace_listing.create","description":"A listing for an app in GitHub Marketplace was created.","docs_reference_links":"N/A","fieldsIndex":98},{"action":"marketplace_listing.delist","description":"A listing was removed from GitHub Marketplace.","docs_reference_links":"N/A","fieldsIndex":100},{"action":"marketplace_listing.redraft","description":"A listing was sent back to draft state.","docs_reference_links":"N/A","fieldsIndex":98},{"action":"marketplace_listing.reject","description":"A listing was not accepted for inclusion in GitHub Marketplace.","docs_reference_links":"N/A","fieldsIndex":98},{"action":"mcp_registry.allowlist_assign","description":"An MCP registry allowlist was assigned to an organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":101},{"action":"mcp_registry.allowlist_remove_assignment","description":"An MCP registry allowlist assignment was removed from an organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":101},{"action":"members_can_create_pages.disable","description":"The ability for members to publish GitHub Pages sites was disabled.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_create_pages.enable","description":"The ability for members to publish GitHub Pages sites was enabled.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_create_private_pages.disable","description":"The ability for members to publish private GitHub Pages was disabled Members cannot publish private GitHub Pages in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_create_private_pages.enable","description":"The ability for members to publish private GitHub Pages was enabled Members can publish private GitHub Pages in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":1},{"action":"members_can_create_public_pages.disable","description":"The ability for members to publish public GitHub Pages was disabled Members cannot publish public GitHub Pages in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_create_public_pages.enable","description":"The ability for members to publish public GitHub Pages was enabled Members can publish public GitHub Pages in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_delete_repos.clear","description":"An enterprise owner cleared the policy setting for deleting or transferring repositories in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-repository-deletion-and-transfer","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":11},{"action":"members_can_delete_repos.disable","description":"The ability for enterprise members to delete repositories was disabled Members cannot delete or transfer repositories in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-repository-deletion-and-transfer","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":11},{"action":"members_can_delete_repos.enable","description":"The ability for enterprise members to delete repositories was enabled Members can delete or transfer repositories in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-repository-deletion-and-transfer","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":15},{"action":"members_can_view_dependency_insights.clear","description":"An enterprise owner cleared the policy setting for viewing dependency insights in any organizations in an enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"members_can_view_dependency_insights.disable","description":"The ability for enterprise members to view dependency insights was disabled. Members cannot view dependency insights in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-dependency-insights-in-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":15},{"action":"members_can_view_dependency_insights.enable","description":"The ability for enterprise members to view dependency insights was enabled. Members can view dependency insights in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-dependency-insights-in-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":11},{"action":"merge_queue.pull_request_dequeued","description":"A pull request was removed from a merge queue.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"merge_queue.pull_request_queue_jump","description":"A pull request was moved ahead in a merge queue.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"merge_queue.queue_cleared","description":"A merge queue was cleared.","docs_reference_links":"N/A","fieldsIndex":102},{"action":"merge_queue.update_settings","description":"The settings for a merge queue were updated.","docs_reference_links":"N/A","fieldsIndex":103},{"action":"metered_billing_configuration.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"metered_billing_configuration.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"metered_billing_configuration.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"migration.create","description":"A migration file was created for transferring data from a source location (such as a GitHub.com organization or a GitHub Enterprise Server instance) to a target GitHub Enterprise Server instance.","docs_reference_links":"N/A","fieldsIndex":104},{"action":"migration.destroy_file","description":"A migration file for transferring data from a source location (such as a GitHub.com organization or a GitHub Enterprise Server instance) to a target GitHub Enterprise Server instance was deleted.","docs_reference_links":"N/A","fieldsIndex":104},{"action":"migration.download","description":"A migration file for transferring data from a source location (such as a GitHub.com organization or a GitHub Enterprise Server instance) to a target GitHub Enterprise Server instance was downloaded.","docs_reference_links":"N/A","fieldsIndex":104},{"action":"network_configuration.create","description":"A network configuration for a hosted compute service was created.","docs_reference_links":"/admin/configuration/configuring-private-networking-for-hosted-compute-products/about-networking-for-hosted-compute-products","docs_reference_titles":"About networking for hosted compute products in your enterprise","fieldsIndex":105},{"action":"network_configuration.delete","description":"A network configuration for a hosted compute service was deleted.","docs_reference_links":"/admin/configuration/configuring-private-networking-for-hosted-compute-products/about-networking-for-hosted-compute-products","docs_reference_titles":"About networking for hosted compute products in your enterprise","fieldsIndex":106},{"action":"network_configuration.update","description":"A network configuration for a hosted compute service was updated.","docs_reference_links":"/admin/configuration/configuring-private-networking-for-hosted-compute-products/about-networking-for-hosted-compute-products","docs_reference_titles":"About networking for hosted compute products in your enterprise","fieldsIndex":107},{"action":"oauth_application.create","description":"An OAuth application was created.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":108},{"action":"oauth_application.destroy","description":"An OAuth application was deleted.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":108},{"action":"oauth_application.generate_client_secret","description":"An OAuth application's secret key was generated.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":108},{"action":"oauth_application.remove_client_secret","description":"An OAuth application's secret key was deleted.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":108},{"action":"oauth_application.reset_secret","description":"The secret key for an OAuth application was reset.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":109},{"action":"oauth_application.revoke_all_tokens","description":"All user tokens for an OAuth application were requested to be revoked.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":108},{"action":"oauth_application.revoke_tokens","description":"Token(s) for an OAuth application were revoked.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":108},{"action":"oauth_application.transfer","description":"An OAuth application was transferred from one account to another.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":108},{"action":"org.accept_business_invitation","description":"An invitation sent to an organization to join an enterprise was accepted.","docs_reference_links":"/admin/user-management/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise#inviting-an-organization-to-join-your-enterprise-account","docs_reference_titles":"Adding organizations to your enterprise","fieldsIndex":15},{"action":"org.add_billing_manager","description":"A billing manager was added to an organization.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization","docs_reference_titles":"/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization","fieldsIndex":15},{"action":"org.add_disallowed_two_factor_method","description":"An organization prevented access to resources by users with the given two-factor method.","docs_reference_links":"N/A","fieldsIndex":110},{"action":"org.add_member","description":"A user joined an organization.","docs_reference_links":"N/A","fieldsIndex":111},{"action":"org.add_outside_collaborator","description":"An outside collaborator was added to a repository.","docs_reference_links":"N/A","fieldsIndex":112},{"action":"org.add_security_manager","description":"N/A","docs_reference_links":"N/A","fieldsIndex":113},{"action":"org.advanced_security_disabled_for_new_repos","description":"GitHub Advanced Security was disabled for new repositories in an organization.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"org.advanced_security_disabled_on_all_repos","description":"GitHub Advanced Security was disabled for all repositories in an organization.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"org.advanced_security_enabled_for_new_repos","description":"GitHub Advanced Security was enabled for new repositories in an organization.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"org.advanced_security_enabled_on_all_repos","description":"GitHub Advanced Security was enabled for all repositories in an organization.","docs_reference_links":"N/A","fieldsIndex":1},{"action":"org.advanced_security_entity_policy_update","description":"An enterprise owner updated the GitHub Advanced Security access policy for repositories owned by the organization.","docs_reference_links":"/admin/policies/enforcing-policies-for-advanced-security-in-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":114},{"action":"org.advanced_security_policy_selected_member_disabled","description":"An enterprise owner prevented GitHub Advanced Security features from being enabled for repositories owned by the organization.","docs_reference_links":"/admin/policies/enforcing-policies-for-advanced-security-in-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":15},{"action":"org.advanced_security_policy_selected_member_enabled","description":"An enterprise owner allowed GitHub Advanced Security features to be enabled for repositories owned by the organization.","docs_reference_links":"/admin/policies/enforcing-policies-for-advanced-security-in-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":15},{"action":"org.allow_third_party_access_requests_from_outside_collaborators_disabled","description":"Third-party application access for outside collaborators was disabled for the organization.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/limiting-oauth-app-and-github-app-access-requests#enabling-or-disabling-integration-access-requests","docs_reference_titles":"Limiting OAuth app and GitHub App access requests and installations","fieldsIndex":0},{"action":"org.allow_third_party_access_requests_from_outside_collaborators_enabled","description":"Third-party application access for outside collaborators was enabled for the organization.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/limiting-oauth-app-and-github-app-access-requests-and-installations#enabling-or-disabling-app-access-requests","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/limiting-oauth-app-and-github-app-access-requests-and-installations#enabling-or-disabling-app-access-requests","fieldsIndex":0},{"action":"org.archive","description":"The organization was archived.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.audit_log_export","description":"An export of the organization audit log was created. If the export included a query, the log will list the query used and the number of audit log entries matching that query.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization#exporting-the-audit-log","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization#exporting-the-audit-log","fieldsIndex":115},{"action":"org.audit_log_git_event_export","description":"An export of the organization's Git events was created.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/audit-log-events-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/audit-log-events-for-your-organization","fieldsIndex":116},{"action":"org.billing_signup_error","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.block_user","description":"An organization owner blocked a user from accessing the organization's repositories.","docs_reference_links":"/communities/maintaining-your-safety-on-github/blocking-a-user-from-your-organization","docs_reference_titles":"/communities/maintaining-your-safety-on-github/blocking-a-user-from-your-organization","fieldsIndex":117},{"action":"org.cancel_business_invitation","description":"An invitation for an organization to join an enterprise was revoked","docs_reference_links":"/admin/user-management/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise#inviting-an-organization-to-join-your-enterprise-account","docs_reference_titles":"Adding organizations to your enterprise","fieldsIndex":118},{"action":"org.cancel_invitation","description":"An invitation sent to a user to join an organization was revoked.","docs_reference_links":"N/A","fieldsIndex":119},{"action":"org.clear_custom_invitation_rate_limit","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"org.clear_disallowed_two_factor_methods","description":"Cleared two-factor authentication restrictions for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_quality_entity_policy_update","description":"An organization owner updated the Code Quality entity policy for repositories owned by the organization.","docs_reference_links":"N/A","fieldsIndex":114},{"action":"org.code_scanning_ai_findings_disabled","description":"AI-powered findings for code scanning were disabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_ai_findings_enabled","description":"AI-powered findings for code scanning were enabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_autofix_disabled","description":"Autofix for code scanning alerts was disabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_autofix_enabled","description":"Autofix for code scanning alerts was enabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_autofix_third_party_tools_disabled","description":"Autofix for third party tools for code scanning alerts was disabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_autofix_third_party_tools_enabled","description":"Autofix for third party tools for code scanning alerts was enabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_scan_inactive_repos_disabled","description":"Scanning inactive repositories was disabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_scan_inactive_repos_enabled","description":"Scanning inactive repositories was enabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_security_metered_usage_lock","description":"Enablement for Code Security features on new repositories has been locked for this organization.","docs_reference_links":"N/A","fieldsIndex":120},{"action":"org.code_security_metered_usage_unlock","description":"Enablement for Code Security features on new repositories has been unlocked for this organization.","docs_reference_links":"N/A","fieldsIndex":121},{"action":"org.codeql_disabled","description":"Code scanning using the default setup was disabled for an organization.","docs_reference_links":"/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning-at-scale","docs_reference_titles":"Configuring default setup for code scanning at scale","fieldsIndex":11},{"action":"org.codeql_enabled","description":"Code scanning using the default setup was enabled for an organization.","docs_reference_links":"/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning-at-scale","docs_reference_titles":"Configuring default setup for code scanning at scale","fieldsIndex":1},{"action":"org.codespaces_access_updated","description":"Access to use Codespaces on internal and private repositories was updated for an organization.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization","docs_reference_titles":"/codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization","fieldsIndex":122},{"action":"org.codespaces_ownership_updated","description":"Ownership and payment for codespaces was updated for an organization.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization","docs_reference_titles":"/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization","fieldsIndex":123},{"action":"org.codespaces_team_access_allowed","description":"A team has been allowed to use Codespaces for an organization.","docs_reference_links":"N/A","fieldsIndex":124},{"action":"org.codespaces_team_access_revoked","description":"A team has been prevented from using Codespaces for an organization.","docs_reference_links":"N/A","fieldsIndex":124},{"action":"org.codespaces_trusted_repo_access_granted","description":"GitHub Codespaces was granted trusted repository access to all other repositories in an organization.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces","docs_reference_titles":"Managing access to other repositories within your codespace","fieldsIndex":32},{"action":"org.codespaces_trusted_repo_access_revoked","description":"GitHub Codespaces trusted repository access to all other repositories in an organization was revoked.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces","docs_reference_titles":"Managing access to other repositories within your codespace","fieldsIndex":121},{"action":"org.codespaces_user_access_allowed","description":"A user has been allowed to use Codespaces for an organization.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"org.codespaces_user_access_revoked","description":"A user has been prevented from using Codespaces for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.config.disable_collaborators_only","description":"The interaction limit for collaborators only for an organization was disabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":11},{"action":"org.config.disable_contributors_only","description":"The interaction limit for prior contributors only for an organization was disabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":15},{"action":"org.config.disable_sockpuppet_disallowed","description":"The interaction limit for existing users only for an organization was disabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":15},{"action":"org.config.enable_collaborators_only","description":"The interaction limit for collaborators only for an organization was enabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":16},{"action":"org.config.enable_contributors_only","description":"The interaction limit for prior contributors only for an organization was enabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":15},{"action":"org.config.enable_sockpuppet_disallowed","description":"The interaction limit for existing users only for an organization was enabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":16},{"action":"org.configure_self_hosted_jit_runner","description":"A new just-in-time GitHub Actions self-hosted runner was configured","docs_reference_links":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-an-organization","docs_reference_titles":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-an-organization","fieldsIndex":53},{"action":"org.confirm_business_invitation","description":"An invitation for an organization to join an enterprise was confirmed.","docs_reference_links":"/admin/user-management/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise#inviting-an-organization-to-join-your-enterprise-account","docs_reference_titles":"Adding organizations to your enterprise","fieldsIndex":125},{"action":"org.connect_usage_metrics_export","description":"Server statistics were exported for the organization.","docs_reference_links":"/admin/monitoring-activity-in-your-enterprise/analyzing-how-your-team-works-with-server-statistics/exporting-server-statistics","docs_reference_titles":"Exporting Server Statistics","fieldsIndex":0},{"action":"org.create","description":"An organization was created.","docs_reference_links":"/organizations/collaborating-with-groups-in-organizations/creating-a-new-organization-from-scratch","docs_reference_titles":"/organizations/collaborating-with-groups-in-organizations/creating-a-new-organization-from-scratch","fieldsIndex":1},{"action":"org.create_actions_secret","description":"A GitHub Actions secret was created for an organization.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-an-organization","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":126},{"action":"org.create_actions_variable","description":"A GitHub Actions variable was created for an organization.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-organization","docs_reference_titles":"Store information in variables","fieldsIndex":126},{"action":"org.create_integration_secret","description":"A Codespaces or Dependabot secret was created for an organization.","docs_reference_links":"N/A","fieldsIndex":127},{"action":"org_credential_authorization.deauthorize","description":"A member removed the SSO (SAML or OIDC) authorization from a credential that had access to your organization.","docs_reference_links":"/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on","docs_reference_titles":"Authorizing a personal access token for use with single sign-on","fieldsIndex":128},{"action":"org_credential_authorization.grant","description":"A member authorized credentials for use with SAML or OIDC single sign-on.","docs_reference_links":"/authentication/authenticating-with-saml-single-sign-on","docs_reference_titles":"Authenticating with single sign-on","fieldsIndex":128},{"action":"org_credential_authorization.revoke","description":"An owner revoked authorized credentials.","docs_reference_links":"/organizations/granting-access-to-your-organization-with-saml-single-sign-on/viewing-and-managing-a-members-saml-access-to-your-organization","docs_reference_titles":"Viewing and managing a member's SAML access to your organization","fieldsIndex":129},{"action":"org.delete","description":"An organization was deleted by a user or staff.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"org.delete_custom_image","description":"A custom image was deleted for an organization.","docs_reference_links":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","docs_reference_titles":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","fieldsIndex":16},{"action":"org.delete_custom_image_version","description":"A custom image version was deleted for an organization.","docs_reference_links":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","docs_reference_titles":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","fieldsIndex":53},{"action":"org.disable_member_team_creation_permission","description":"Team creation was limited to owners.","docs_reference_links":"/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization","fieldsIndex":53},{"action":"org.disable_oauth_app_restrictions","description":"Third-party application access restrictions for an organization were disabled.","docs_reference_links":"/organizations/managing-oauth-access-to-your-organizations-data/disabling-oauth-app-access-restrictions-for-your-organization","docs_reference_titles":"/organizations/managing-oauth-access-to-your-organizations-data/disabling-oauth-app-access-restrictions-for-your-organization","fieldsIndex":15},{"action":"org.disable_reader_discussion_creation_permission","description":"An organization owner limited discussion creation to users with at least triage permission in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-discussion-creation-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-discussion-creation-for-repositories-in-your-organization","fieldsIndex":15},{"action":"org.disable_saml","description":"SAML single sign-on was disabled for an organization.","docs_reference_links":"N/A","fieldsIndex":130},{"action":"org.disable_source_ip_disclosure","description":"Display of IP addresses within audit log events for the organization was disabled.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization","fieldsIndex":15},{"action":"org.disable_two_factor_requirement","description":"A two-factor authentication requirement was disabled for the organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.display_commenter_full_name_disabled","description":"An organization owner disabled the display of a commenter's full name in an organization. Members cannot see a comment author's full name.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.display_commenter_full_name_enabled","description":"An organization owner enabled the display of a commenter's full name in an organization. Members can see a comment author's full name.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.enable_member_team_creation_permission","description":"Team creation by members was allowed.","docs_reference_links":"/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization","fieldsIndex":11},{"action":"org.enable_oauth_app_restrictions","description":"Third-party application access restrictions for an organization were enabled.","docs_reference_links":"/organizations/managing-oauth-access-to-your-organizations-data/enabling-oauth-app-access-restrictions-for-your-organization","docs_reference_titles":"/organizations/managing-oauth-access-to-your-organizations-data/enabling-oauth-app-access-restrictions-for-your-organization","fieldsIndex":15},{"action":"org.enable_reader_discussion_creation_permission","description":"An organization owner allowed users with read access to create discussions in an organization","docs_reference_links":"/organizations/managing-organization-settings/managing-discussion-creation-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-discussion-creation-for-repositories-in-your-organization","fieldsIndex":15},{"action":"org.enable_saml","description":"SAML single sign-on was enabled for the organization.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/enabling-and-testing-saml-single-sign-on-for-your-organization","docs_reference_titles":"Enabling and testing SAML single sign-on for your organization","fieldsIndex":130},{"action":"org.enable_source_ip_disclosure","description":"Display of IP addresses within audit log events for the organization was enabled.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization","fieldsIndex":15},{"action":"org.enable_two_factor_requirement","description":"Two-factor authentication is now required for the organization.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization","fieldsIndex":11},{"action":"org.integration_manager_added","description":"An organization owner granted a member access to manage all GitHub Apps owned by an organization.","docs_reference_links":"N/A","fieldsIndex":131},{"action":"org.integration_manager_removed","description":"An organization owner removed access to manage all GitHub Apps owned by an organization from an organization member.","docs_reference_links":"N/A","fieldsIndex":131},{"action":"org.invite_member","description":"A new user was invited to join an organization.","docs_reference_links":"/organizations/managing-membership-in-your-organization/inviting-users-to-join-your-organization","docs_reference_titles":"/organizations/managing-membership-in-your-organization/inviting-users-to-join-your-organization","fieldsIndex":119},{"action":"org.invite_to_business","description":"An organization was invited to join an enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.members_can_update_protected_branches.disable","description":"The ability for enterprise members to update protected branches was disabled. Only enterprise owners can update protected branches.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.members_can_update_protected_branches.enable","description":"The ability for enterprise members to update protected branches was enabled. Members of an organization can update protected branches.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.members_limit_warning","description":"An organization is approaching its members limit.","docs_reference_links":"N/A","fieldsIndex":132},{"action":"org.oauth_app_access_approved","description":"Access to an organization was granted for an OAuth App.","docs_reference_links":"/organizations/managing-oauth-access-to-your-organizations-data/approving-oauth-apps-for-your-organization","docs_reference_titles":"/organizations/managing-oauth-access-to-your-organizations-data/approving-oauth-apps-for-your-organization","fieldsIndex":133},{"action":"org.oauth_app_access_blocked","description":"N/A","docs_reference_links":"N/A","fieldsIndex":133},{"action":"org.oauth_app_access_denied","description":"Access was disabled for an OAuth App that was previously approved.","docs_reference_links":"/organizations/managing-oauth-access-to-your-organizations-data/denying-access-to-a-previously-approved-oauth-app-for-your-organization","docs_reference_titles":"/organizations/managing-oauth-access-to-your-organizations-data/denying-access-to-a-previously-approved-oauth-app-for-your-organization","fieldsIndex":133},{"action":"org.oauth_app_access_requested","description":"An organization member requested that an owner grant an OAuth App access to an organization.","docs_reference_links":"N/A","fieldsIndex":133},{"action":"org.oauth_app_access_unblocked","description":"N/A","docs_reference_links":"N/A","fieldsIndex":133},{"action":"org.rate_limited_invites","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.recovery_code_failed","description":"An organization owner failed to sign into a organization with an external identity provider (IdP) using a recovery code.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/accessing-your-organization-if-your-identity-provider-is-unavailable","docs_reference_titles":"Accessing your organization if your identity provider is unavailable","fieldsIndex":134},{"action":"org.recovery_code_used","description":"An organization owner successfully signed into an organization with an external identity provider (IdP) using a recovery code.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/accessing-your-organization-if-your-identity-provider-is-unavailable","docs_reference_titles":"Accessing your organization if your identity provider is unavailable","fieldsIndex":15},{"action":"org.recovery_codes_downloaded","description":"An organization owner downloaded the organization's SSO recovery codes.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/downloading-your-organizations-saml-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your organization's SAML single sign-on recovery codes","fieldsIndex":15},{"action":"org.recovery_codes_generated","description":"An organization owner generated the organization's SSO recovery codes.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/downloading-your-organizations-saml-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your organization's SAML single sign-on recovery codes","fieldsIndex":15},{"action":"org.recovery_codes_printed","description":"An organization owner printed the organization's SSO recovery codes.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/downloading-your-organizations-saml-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your organization's SAML single sign-on recovery codes","fieldsIndex":15},{"action":"org.recovery_codes_viewed","description":"An organization owner viewed the organization's SSO recovery codes.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/downloading-your-organizations-saml-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your organization's SAML single sign-on recovery codes","fieldsIndex":15},{"action":"org.register_self_hosted_runner","description":"A new self-hosted runner was registered.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-an-organization","docs_reference_titles":"Adding self-hosted runners","fieldsIndex":63},{"action":"org.remove_actions_secret","description":"A GitHub Actions secret was removed from an organization.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-an-organization","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":135},{"action":"org.remove_actions_variable","description":"A GitHub Actions variable was removed from an organization.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-organization","docs_reference_titles":"Store information in variables","fieldsIndex":135},{"action":"org.remove_billing_manager","description":"A billing manager was removed from an organization, either manually or due to a two-factor authentication requirement.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/removing-a-billing-manager-from-your-organization, /organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization","docs_reference_titles":"/organizations/managing-peoples-access-to-your-organization-with-roles/removing-a-billing-manager-from-your-organization, /organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization","fieldsIndex":53},{"action":"org.remove_disallowed_two_factor_method","description":"Removed a two-factor authentication method restriction for an organization.","docs_reference_links":"N/A","fieldsIndex":110},{"action":"org.remove_integration_secret","description":"A Codespaces or Dependabot secret was removed from an organization.","docs_reference_links":"N/A","fieldsIndex":136},{"action":"org.remove_member","description":"A member was removed from an organization, either manually or due to a two-factor authentication requirement.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"org.remove_outside_collaborator","description":"An outside collaborator was removed from an organization, either manually or due to a two-factor authentication requirement.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"org.remove_security_manager","description":"N/A","docs_reference_links":"N/A","fieldsIndex":137},{"action":"org.remove_self_hosted_runner","description":"A self-hosted runner was removed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners#removing-a-runner-from-an-organization","docs_reference_titles":"Removing self-hosted runners","fieldsIndex":53},{"action":"org.rename","description":"An organization was renamed.","docs_reference_links":"N/A","fieldsIndex":138},{"action":"org.required_workflow_create","description":"Triggered when a required workflow is created.","docs_reference_links":"/actions/using-workflows/required-workflows","docs_reference_titles":"/actions/using-workflows/required-workflows","fieldsIndex":0},{"action":"org.required_workflow_delete","description":"Triggered when a required workflow is deleted.","docs_reference_links":"/actions/using-workflows/required-workflows","docs_reference_titles":"/actions/using-workflows/required-workflows","fieldsIndex":0},{"action":"org.required_workflow_update","description":"Triggered when a required workflow is updated.","docs_reference_links":"/actions/using-workflows/required-workflows","docs_reference_titles":"/actions/using-workflows/required-workflows","fieldsIndex":0},{"action":"org.restore_member","description":"An organization member was restored.","docs_reference_links":"/organizations/managing-membership-in-your-organization/reinstating-a-former-member-of-your-organization","docs_reference_titles":"/organizations/managing-membership-in-your-organization/reinstating-a-former-member-of-your-organization","fieldsIndex":1},{"action":"org.revoke_external_identity","description":"A member's linked identity was revoked.","docs_reference_links":"/organizations/granting-access-to-your-organization-with-saml-single-sign-on/viewing-and-managing-a-members-saml-access-to-your-organization#viewing-and-revoking-a-linked-identity","docs_reference_titles":"Viewing and managing a member's SAML access to your organization","fieldsIndex":15},{"action":"org.revoke_sso_session","description":"A member's SAML session was revoked.","docs_reference_links":"/organizations/granting-access-to-your-organization-with-saml-single-sign-on/viewing-and-managing-a-members-saml-access-to-your-organization#viewing-and-revoking-a-linked-identity","docs_reference_titles":"Viewing and managing a member's SAML access to your organization","fieldsIndex":15},{"action":"org.runner_group_created","description":"A self-hosted runner group was created.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#creating-a-self-hosted-runner-group-for-an-organization","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":139},{"action":"org.runner_group_removed","description":"A self-hosted runner group was removed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#removing-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":140},{"action":"org.runner_group_renamed","description":"A self-hosted runner group was renamed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#changing-the-access-policy-of-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":141},{"action":"org.runner_group_runner_removed","description":"The REST API was used to remove a self-hosted runner from a group.","docs_reference_links":"/rest/actions#remove-a-self-hosted-runner-from-a-group-for-an-organization","docs_reference_titles":"/rest/actions#remove-a-self-hosted-runner-from-a-group-for-an-organization","fieldsIndex":142},{"action":"org.runner_group_runners_added","description":"A self-hosted runner was added to a group.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#moving-a-self-hosted-runner-to-a-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":140},{"action":"org.runner_group_runners_updated","description":"A runner group's list of members was updated.","docs_reference_links":"/rest/actions#set-self-hosted-runners-in-a-group-for-an-organization","docs_reference_titles":"/rest/actions#set-self-hosted-runners-in-a-group-for-an-organization","fieldsIndex":140},{"action":"org.runner_group_updated","description":"The configuration of a self-hosted runner group was changed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#changing-the-access-policy-of-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":139},{"action":"org.runner_group_visiblity_updated","description":"The visibility of a self-hosted runner group was updated via the REST API.","docs_reference_links":"/rest/actions#update-a-self-hosted-runner-group-for-an-organization","docs_reference_titles":"/rest/actions#update-a-self-hosted-runner-group-for-an-organization","fieldsIndex":143},{"action":"org.secret_protection_metered_usage_lock","description":"Enablement for Secret Protection features on new repositories has been locked for this organization.","docs_reference_links":"N/A","fieldsIndex":120},{"action":"org.secret_protection_metered_usage_unlock","description":"Enablement for Secret Protection features on new repositories has been unlocked for this organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org_secret_scanning_automatic_validity_checks.disabled","description":"Automatic partner validation checks have been disabled at the organization level","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#allowing-validity-checks-for-partner-patterns-in-an-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#allowing-validity-checks-for-partner-patterns-in-an-organization","fieldsIndex":11},{"action":"org_secret_scanning_automatic_validity_checks.enabled","description":"Automatic partner validation checks have been enabled at the organization level","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#allowing-validity-checks-for-partner-patterns-in-an-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#allowing-validity-checks-for-partner-patterns-in-an-organization","fieldsIndex":16},{"action":"org_secret_scanning_custom_pattern.create","description":"A custom pattern was created for secret scanning in an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-organization","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":11},{"action":"org_secret_scanning_custom_pattern.delete","description":"A custom pattern was removed from secret scanning in an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#removing-a-custom-pattern","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":15},{"action":"org_secret_scanning_custom_pattern.publish","description":"A custom pattern was published for secret scanning in an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-organization","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":15},{"action":"org.secret_scanning_custom_pattern_push_protection_disabled","description":"Push protection for a custom pattern for secret scanning was disabled for an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-organization","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":0},{"action":"org.secret_scanning_custom_pattern_push_protection_enabled","description":"Push protection for a custom pattern for secret scanning was enabled for an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-organization","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":0},{"action":"org_secret_scanning_custom_pattern.update","description":"Changes to a custom pattern were saved and a dry run was executed for secret scanning in an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#editing-a-custom-pattern","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":15},{"action":"org_secret_scanning_generic_secrets.disabled","description":"Generic secrets have been disabled at the organization level","docs_reference_links":"N/A","fieldsIndex":0},{"action":"org_secret_scanning_generic_secrets.enabled","description":"Generic secrets have been enabled at the organization level","docs_reference_links":"N/A","fieldsIndex":0},{"action":"org_secret_scanning_non_provider_patterns.disabled","description":"Secret scanning for non-provider patterns was disabled at the organization level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":15},{"action":"org_secret_scanning_non_provider_patterns.enabled","description":"Secret scanning for non-provider patterns was enabled at the organization level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":15},{"action":"org_secret_scanning_push_protection_bypass_list.add","description":"A role or team was added to the push protection bypass list at the organization level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org_secret_scanning_push_protection_bypass_list.disable","description":"Push protection settings for \"Users who can bypass push protection for secret scanning\" changed from \"Specific roles or teams\" to \"Anyone with write access\" at the organization level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":15},{"action":"org_secret_scanning_push_protection_bypass_list.enable","description":"Push protection settings for \"Users who can bypass push protection for secret scanning\" changed from \"Anyone with write access\" to \"Specific roles or teams\" at the organization level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":15},{"action":"org_secret_scanning_push_protection_bypass_list.remove","description":"A role or team was removed from the push protection bypass list at the organization level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org.secret_scanning_push_protection_custom_message_disabled","description":"The custom message triggered by an attempted push to a push-protected repository was disabled for an organization.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning#enabling-secret-scanning-as-a-push-protection-for-an-organization","docs_reference_titles":"Push protection","fieldsIndex":1},{"action":"org.secret_scanning_push_protection_custom_message_enabled","description":"The custom message triggered by an attempted push to a push-protected repository was enabled for an organization.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning#enabling-secret-scanning-as-a-push-protection-for-an-organization","docs_reference_titles":"Push protection","fieldsIndex":1},{"action":"org.secret_scanning_push_protection_custom_message_updated","description":"The custom message triggered by an attempted push to a push-protected repository was updated for an organization.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning#enabling-secret-scanning-as-a-push-protection-for-an-organization","docs_reference_titles":"Push protection","fieldsIndex":1},{"action":"org.secret_scanning_push_protection_disable","description":"Push protection for secret scanning was disabled.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning","docs_reference_titles":"Push protection","fieldsIndex":11},{"action":"org.secret_scanning_push_protection_enable","description":"Push protection for secret scanning was enabled.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org.secret_scanning_push_protection_new_repos_disable","description":"Push protection for secret scanning was disabled for all new repositories in the organization.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org.secret_scanning_push_protection_new_repos_enable","description":"Push protection for secret scanning was enabled for all new repositories in the organization.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org_secret_scanning_push_protection_pattern_configuration.push_protection_setting_changed","description":"The push protection setting was updated for a secret type for your organization.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations","docs_reference_titles":"Push protection","fieldsIndex":144},{"action":"org_secret_scanning_push_protection_pattern_configuration.updated","description":"The push protection pattern configuration was updated for your organization.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations","docs_reference_titles":"Push protection","fieldsIndex":145},{"action":"org.security_center_export_code_scanning_metrics","description":"A CSV export was requested on the CodeQL pull request alerts page.","docs_reference_links":"N/A","fieldsIndex":146},{"action":"org.security_center_export_coverage","description":"A CSV export was requested on the Coverage page.","docs_reference_links":"N/A","fieldsIndex":147},{"action":"org.security_center_export_overview_dashboard","description":"A CSV export was requested on the Overview Dashboard page.","docs_reference_links":"N/A","fieldsIndex":146},{"action":"org.security_center_export_risk","description":"A CSV export was requested on the Risk page.","docs_reference_links":"N/A","fieldsIndex":147},{"action":"org.self_hosted_runner_offline","description":"The runner application was stopped. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":148},{"action":"org.self_hosted_runner_online","description":"The runner application was started. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":148},{"action":"org.self_hosted_runner_updated","description":"The runner application was updated. This event is not included in the JSON/CSV export.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#about-self-hosted-runners","docs_reference_titles":"Self-hosted runners","fieldsIndex":149},{"action":"org.set_actions_cache_retention_policy","description":"The cache retention policy for GitHub Actions was set for an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization","fieldsIndex":16},{"action":"org.set_actions_cache_storage_policy","description":"The cache storage policy for GitHub Actions was set for an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization","fieldsIndex":11},{"action":"org.set_actions_fork_pr_approvals_policy","description":"The setting for requiring approvals for workflows from public forks was changed for an organization.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#requiring-approval-for-workflows-from-public-forks","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#requiring-approval-for-workflows-from-public-forks","fieldsIndex":150},{"action":"org.set_actions_private_fork_pr_approvals_policy","description":"The policy for requiring approval for fork pull request workflows from collaborators without write access to private repos was changed for an organization.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#enabling-workflows-for-private-repository-forks","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#enabling-workflows-for-private-repository-forks","fieldsIndex":151},{"action":"org.set_actions_retention_limit","description":"The retention period for GitHub Actions artifacts and logs in an organization was changed.","docs_reference_links":"/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization","fieldsIndex":152},{"action":"org.set_custom_invitation_rate_limit","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.set_default_workflow_permissions","description":"The default permissions granted to the GITHUB_TOKEN when running workflows were changed for an organization.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#setting-the-permissions-of-the-github_token-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#setting-the-permissions-of-the-github_token-for-your-organization","fieldsIndex":53},{"action":"org.set_fork_pr_workflows_policy","description":"The policy for workflows on private repository forks was changed.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#enabling-workflows-for-private-repository-forks","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#enabling-workflows-for-private-repository-forks","fieldsIndex":150},{"action":"org.set_workflow_permission_can_approve_pr","description":"The policy for allowing GitHub Actions to create and approve pull requests was changed for an organization.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests","fieldsIndex":53},{"action":"org.sso_response","description":"A SAML single sign-on (SSO) response was generated when a member attempted to authenticate with your organization. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"N/A","fieldsIndex":153},{"action":"org.transfer","description":"An organization was transferred between enterprise accounts.","docs_reference_links":"/admin/user-management/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise#transferring-an-organization-between-enterprise-accounts","docs_reference_titles":"Adding organizations to your enterprise","fieldsIndex":154},{"action":"org.transfer_outgoing","description":"An organization was transferred between enterprise accounts.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise#transferring-an-organization-between-enterprise-accounts","docs_reference_titles":"Adding organizations to your enterprise","fieldsIndex":154},{"action":"org.unarchive","description":"The organization was unarchived.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.unblock_user","description":"A user was unblocked from an organization.","docs_reference_links":"/communities/maintaining-your-safety-on-github/unblocking-a-user-from-your-organization","docs_reference_titles":"/communities/maintaining-your-safety-on-github/unblocking-a-user-from-your-organization","fieldsIndex":117},{"action":"org.update_actions_secret","description":"A GitHub Actions secret was updated for an organization.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-an-organization","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":126},{"action":"org.update_actions_settings","description":"An organization owner or site administrator updated GitHub Actions policy settings for an organization.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization","fieldsIndex":155},{"action":"org.update_actions_variable","description":"A GitHub Actions variable was updated for an organization.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-organization","docs_reference_titles":"Store information in variables","fieldsIndex":126},{"action":"org.update_custom_images_policy","description":"The enterprise updated GitHub Actions custom image policy settings for an organization.","docs_reference_links":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","docs_reference_titles":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","fieldsIndex":156},{"action":"org.update_default_repository_permission","description":"The default repository permission level for organization members was changed.","docs_reference_links":"N/A","fieldsIndex":157},{"action":"org.update_immutable_releases_settings_policy","description":"The settings policy for immutable releases was updated for an organization.","docs_reference_links":"N/A","fieldsIndex":158},{"action":"org.update_integration_secret","description":"A Codespaces or Dependabot secret was updated for an organization.","docs_reference_links":"N/A","fieldsIndex":127},{"action":"org.update_member","description":"A person's role was changed from owner to member or member to owner.","docs_reference_links":"N/A","fieldsIndex":157},{"action":"org.update_member_repository_creation_permission","description":"The create repository permission for organization members was changed.","docs_reference_links":"N/A","fieldsIndex":159},{"action":"org.update_member_repository_invitation_permission","description":"An organization owner changed the policy setting for organization members inviting outside collaborators to repositories.","docs_reference_links":"/organizations/managing-organization-settings/setting-permissions-for-adding-outside-collaborators","docs_reference_titles":"Setting permissions for adding outside collaborators","fieldsIndex":160},{"action":"org.update_new_repository_default_branch_setting","description":"The name of the default branch was changed for new repositories in the organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-default-branch-name-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-default-branch-name-for-repositories-in-your-organization","fieldsIndex":15},{"action":"org.update_repo_self_hosted_runners_policy","description":"The repository self-hosted runners policy was updated","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#limiting-the-use-of-self-hosted-runners","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#limiting-the-use-of-self-hosted-runners","fieldsIndex":161},{"action":"org.update_saml_provider_settings","description":"An organization's SAML provider settings were updated.","docs_reference_links":"N/A","fieldsIndex":130},{"action":"org.update_terms_of_service","description":"An organization changed between the Standard Terms of Service and the GitHub Customer Agreement.","docs_reference_links":"/organizations/managing-organization-settings/upgrading-to-the-github-customer-agreement","docs_reference_titles":"/organizations/managing-organization-settings/upgrading-to-the-github-customer-agreement","fieldsIndex":11},{"action":"organization_custom_property_value.create","description":"An organization's custom property value was manually set for the first time.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","docs_reference_titles":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","fieldsIndex":162},{"action":"organization_custom_property_value.destroy","description":"An organization's custom property value was deleted.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","docs_reference_titles":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","fieldsIndex":162},{"action":"organization_default_label.create","description":"A default label was created for repositories in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#creating-a-default-label","docs_reference_titles":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#creating-a-default-label","fieldsIndex":1},{"action":"organization_default_label.destroy","description":"A default label was deleted for repositories in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#deleting-a-default-label","docs_reference_titles":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#deleting-a-default-label","fieldsIndex":15},{"action":"organization_default_label.update","description":"A default label was edited for repositories in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#editing-a-default-label","docs_reference_titles":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#editing-a-default-label","fieldsIndex":15},{"action":"organization_domain.approve","description":"A domain was approved for an organization.","docs_reference_links":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#approving-a-domain-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#approving-a-domain-for-your-organization","fieldsIndex":163},{"action":"organization_domain.create","description":"A domain was added to an organization.","docs_reference_links":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#verifying-a-domain-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#verifying-a-domain-for-your-organization","fieldsIndex":163},{"action":"organization_domain.destroy","description":"A domain was removed from an organization.","docs_reference_links":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#removing-an-approved-or-verified-domain","docs_reference_titles":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#removing-an-approved-or-verified-domain","fieldsIndex":163},{"action":"organization_domain.verify","description":"A domain was verified for an organization.","docs_reference_links":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#verifying-a-domain-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#verifying-a-domain-for-your-organization","fieldsIndex":163},{"action":"organization_moderators.add_team","description":"N/A","docs_reference_links":"N/A","fieldsIndex":124},{"action":"organization_moderators.add_user","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"organization_moderators.remove_team","description":"N/A","docs_reference_links":"N/A","fieldsIndex":124},{"action":"organization_moderators.remove_user","description":"N/A","docs_reference_links":"N/A","fieldsIndex":53},{"action":"organization_projects_change.clear","description":"An enterprise owner cleared the policy setting for organization-wide project boards in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-projects-in-your-enterprise#enforcing-a-policy-for-organization-wide-project-boards","docs_reference_titles":"Enforcing policies for projects in your enterprise","fieldsIndex":11},{"action":"organization_projects_change.disable","description":"Organization projects were disabled for all organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-projects-in-your-enterprise#enforcing-a-policy-for-organization-wide-project-boards","docs_reference_titles":"Enforcing policies for projects in your enterprise","fieldsIndex":53},{"action":"organization_projects_change.enable","description":"Organization projects were enabled for all organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-projects-in-your-enterprise#enforcing-a-policy-for-organization-wide-project-boards","docs_reference_titles":"Enforcing policies for projects in your enterprise","fieldsIndex":53},{"action":"organization_role.assign","description":"An organization role was assigned to a user or team.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/about-custom-organization-roles","docs_reference_titles":"Permissions of custom organization roles","fieldsIndex":164},{"action":"organization_role.create","description":"A custom organization role was created in an organization.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/about-custom-organization-roles","docs_reference_titles":"Permissions of custom organization roles","fieldsIndex":165},{"action":"organization_role.destroy","description":"A custom organization role was deleted in an organization.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/about-custom-organization-roles","docs_reference_titles":"Permissions of custom organization roles","fieldsIndex":166},{"action":"organization_role.revoke","description":"A user or team was unassigned an organization role.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/about-custom-organization-roles","docs_reference_titles":"Permissions of custom organization roles","fieldsIndex":164},{"action":"organization_role.update","description":"A custom organization role was edited in an organization.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/about-custom-organization-roles","docs_reference_titles":"Permissions of custom organization roles","fieldsIndex":167},{"action":"organization_wide_project_base_role.update","description":"An organization's default project base role was updated.","docs_reference_links":"N/A","fieldsIndex":168},{"action":"packages.package_deleted","description":"An entire package was deleted.","docs_reference_links":"/packages/learn-github-packages/deleting-and-restoring-a-package","docs_reference_titles":"/packages/learn-github-packages/deleting-and-restoring-a-package","fieldsIndex":169},{"action":"packages.package_published","description":"A package was published or republished to an organization.","docs_reference_links":"N/A","fieldsIndex":170},{"action":"packages.package_version_deleted","description":"A specific package version was deleted.","docs_reference_links":"/packages/learn-github-packages/deleting-and-restoring-a-package","docs_reference_titles":"/packages/learn-github-packages/deleting-and-restoring-a-package","fieldsIndex":171},{"action":"packages.package_version_published","description":"A specific package version was published or republished to a package.","docs_reference_links":"N/A","fieldsIndex":172},{"action":"pages_protected_domain.create","description":"A GitHub Pages verified domain was created for an organization or enterprise.","docs_reference_links":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","docs_reference_titles":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","fieldsIndex":173},{"action":"pages_protected_domain.delete","description":"A GitHub Pages verified domain was deleted from an organization or enterprise.","docs_reference_links":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","docs_reference_titles":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","fieldsIndex":173},{"action":"pages_protected_domain.verify","description":"A GitHub Pages domain was verified for an organization or enterprise.","docs_reference_links":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","docs_reference_titles":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","fieldsIndex":173},{"action":"payment_method.create","description":"A new payment method was added, such as a new credit card or PayPal account.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"payment_method.remove","description":"A payment method was removed.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"payment_method.update","description":"An existing payment method was updated.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.access_granted","description":"A fine-grained personal access token was granted access to resources.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","fieldsIndex":174},{"action":"personal_access_token.access_restriction_disabled","description":"The configured restriction for access to resources via personal access tokens was disabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.access_restriction_enabled","description":"The configured restriction for access to resources via personal access tokens was enabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.access_revoked","description":"A fine-grained personal access token was revoked. The token can still read public organization resources.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/reviewing-and-revoking-personal-access-tokens-in-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/reviewing-and-revoking-personal-access-tokens-in-your-organization","fieldsIndex":175},{"action":"personal_access_token.auto_approve_grant_requests_disabled","description":"Triggered when fine-grained personal access tokens can access organization resources without prior approval.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.auto_approve_grant_requests_enabled","description":"Triggered when the organization must approve fine-grained personal access tokens before the tokens can access organization resources.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.expiration_limit_set","description":"A personal access token expiration limit was set.","docs_reference_links":"N/A","fieldsIndex":176},{"action":"personal_access_token.expiration_limit_unset","description":"A personal access token expiration limit was unset.","docs_reference_links":"N/A","fieldsIndex":177},{"action":"personal_access_token.request_cancelled","description":"A pending request for a fine-grained personal access token to access organization resources was canceled.","docs_reference_links":"N/A","fieldsIndex":178},{"action":"personal_access_token.request_created","description":"Triggered when a fine-grained personal access token was created to access organization resources and the organization requires approval before the token can access organization resources.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","fieldsIndex":179},{"action":"personal_access_token.request_denied","description":"A request for a fine-grained personal access token to access organization resources was denied.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","fieldsIndex":180},{"action":"prebuild_configuration.create","description":"A GitHub Codespaces prebuild configuration for a repository was created.","docs_reference_links":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","docs_reference_titles":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","fieldsIndex":181},{"action":"prebuild_configuration.destroy","description":"A GitHub Codespaces prebuild configuration for a repository was deleted.","docs_reference_links":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","docs_reference_titles":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","fieldsIndex":181},{"action":"prebuild_configuration.run_triggered","description":"A user initiated a run of a GitHub Codespaces prebuild configuration for a repository branch.","docs_reference_links":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","docs_reference_titles":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","fieldsIndex":181},{"action":"prebuild_configuration.update","description":"A GitHub Codespaces prebuild configuration for a repository was edited.","docs_reference_links":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","docs_reference_titles":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","fieldsIndex":181},{"action":"premium_runner.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":48},{"action":"premium_runner.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"premium_runner.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":48},{"action":"private_repository_forking.clear","description":"An enterprise owner cleared the policy setting for allowing forks of private and internal repositories, for a repository, organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"private_repository_forking.disable","description":"An enterprise owner disabled the policy setting for allowing forks of private and internal repositories, for a repository, organization or enterprise. Private and internal repositories are never allowed to be forked.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"private_repository_forking.enable","description":"An enterprise owner enabled the policy setting for allowing forks of private and internal repositories, for a repository, organization or enterprise. Private and internal repositories are always allowed to be forked.","docs_reference_links":"N/A","fieldsIndex":182},{"action":"private_vulnerability_reporting.disable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"private_vulnerability_reporting.enable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"private_vulnerability_reporting_new_repos.disable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"private_vulnerability_reporting_new_repos.enable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"profile_picture.update","description":"A profile picture was updated.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/personalizing-your-profile","docs_reference_titles":"Personalize your profile","fieldsIndex":183},{"action":"project.access","description":"A project board visibility was changed.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"project_base_role.update","description":"A project's base role was updated.","docs_reference_links":"N/A","fieldsIndex":184},{"action":"project.close","description":"A project board was closed.","docs_reference_links":"/issues/organizing-your-work-with-project-boards/managing-project-boards/closing-a-project-board","docs_reference_titles":"Planning and tracking with Projects","fieldsIndex":185},{"action":"project_collaborator.add","description":"A collaborator was added to a project.","docs_reference_links":"N/A","fieldsIndex":186},{"action":"project_collaborator.remove","description":"A collaborator was removed from a project.","docs_reference_links":"N/A","fieldsIndex":186},{"action":"project_collaborator.update","description":"A project collaborator's permission level was changed.","docs_reference_links":"N/A","fieldsIndex":186},{"action":"project.create","description":"A project board was created.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"project.delete","description":"A project board was deleted.","docs_reference_links":"N/A","fieldsIndex":187},{"action":"project_field.create","description":"A field was created in a project board.","docs_reference_links":"/issues/planning-and-tracking-with-projects/understanding-fields","docs_reference_titles":"/issues/planning-and-tracking-with-projects/understanding-fields","fieldsIndex":53},{"action":"project_field.delete","description":"A field was deleted in a project board.","docs_reference_links":"/issues/planning-and-tracking-with-projects/understanding-fields/deleting-custom-fields","docs_reference_titles":"/issues/planning-and-tracking-with-projects/understanding-fields/deleting-custom-fields","fieldsIndex":188},{"action":"project.link","description":"A repository was linked to a project board.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"project.open","description":"A project board was reopened.","docs_reference_links":"/issues/organizing-your-work-with-project-boards/managing-project-boards/reopening-a-closed-project-board","docs_reference_titles":"Planning and tracking with Projects","fieldsIndex":185},{"action":"project.rename","description":"A project board was renamed.","docs_reference_links":"N/A","fieldsIndex":189},{"action":"project.unlink","description":"A repository was unlinked from a project board.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"project.update_org_permission","description":"The project's base-level permission for all organization members was changed or removed.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"project.update_team_permission","description":"A team's project board permission level was changed or when a team was added or removed from a project board.","docs_reference_links":"N/A","fieldsIndex":190},{"action":"project.update_user_permission","description":"A user was added to or removed from a project board or had their permission level changed.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"project_view.create","description":"A view was created in a project board.","docs_reference_links":"/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views","docs_reference_titles":"/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views","fieldsIndex":53},{"action":"project_view.delete","description":"A view was deleted in a project board.","docs_reference_links":"/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views","docs_reference_titles":"/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views","fieldsIndex":11},{"action":"project.visibility_private","description":"A project's visibility was changed from public to private.","docs_reference_links":"N/A","fieldsIndex":191},{"action":"project.visibility_public","description":"A project's visibility was changed from private to public.","docs_reference_links":"N/A","fieldsIndex":192},{"action":"protected_branch.authorized_users_teams","description":"The users, teams, or integrations allowed to bypass a branch protection were changed.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches","fieldsIndex":193},{"action":"protected_branch.branch_allowances","description":"A protected branch allowance was given to a specific user, team or integration.","docs_reference_links":"N/A","fieldsIndex":194},{"action":"protected_branch.create","description":"Branch protection was enabled on a branch.","docs_reference_links":"N/A","fieldsIndex":195},{"action":"protected_branch.destroy","description":"Branch protection was disabled on a branch.","docs_reference_links":"N/A","fieldsIndex":195},{"action":"protected_branch.dismiss_stale_reviews","description":"Enforcement of dismissing stale pull requests was updated on a branch.","docs_reference_links":"N/A","fieldsIndex":196},{"action":"protected_branch.dismissal_restricted_users_teams","description":"Enforcement of restricting users and/or teams who can dismiss reviews was updated on a branch.","docs_reference_links":"N/A","fieldsIndex":197},{"action":"protected_branch.policy_override","description":"A branch protection requirement was overridden by a repository administrator.","docs_reference_links":"N/A","fieldsIndex":198},{"action":"protected_branch.rejected_ref_update","description":"A branch update attempt was rejected.","docs_reference_links":"N/A","fieldsIndex":198},{"action":"protected_branch.update_admin_enforced","description":"Branch protection was enforced for repository administrators.","docs_reference_links":"N/A","fieldsIndex":199},{"action":"protected_branch.update_allow_deletions_enforcement_level","description":"Branch deletion was enabled or disabled for a protected branch.","docs_reference_links":"N/A","fieldsIndex":200},{"action":"protected_branch.update_allow_force_pushes_enforcement_level","description":"Force pushes were enabled or disabled for a branch.","docs_reference_links":"N/A","fieldsIndex":201},{"action":"protected_branch.update_ignore_approvals_from_contributors","description":"Ignoring of approvals from contributors to a pull request was enabled or disabled for a branch.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","fieldsIndex":202},{"action":"protected_branch.update_linear_history_requirement_enforcement_level","description":"Required linear commit history was enabled or disabled for a branch.","docs_reference_links":"N/A","fieldsIndex":203},{"action":"protected_branch.update_lock_allows_fetch_and_merge","description":"Fork syncing was enabled or disabled for a read-only branch","docs_reference_links":"repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#lock-branch","docs_reference_titles":"repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#lock-branch","fieldsIndex":204},{"action":"protected_branch.update_lock_branch_enforcement_level","description":"The enforcement of a branch lock was updated.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#lock-branch","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#lock-branch","fieldsIndex":205},{"action":"protected_branch.update_merge_queue_enforcement_level","description":"Enforcement of the merge queue was modified for a branch.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-merge-queue","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-merge-queue","fieldsIndex":206},{"action":"protected_branch.update_name","description":"A branch name pattern was updated for a branch.","docs_reference_links":"N/A","fieldsIndex":207},{"action":"protected_branch.update_pull_request_reviews_enforcement_level","description":"Enforcement of required pull request reviews was updated for a branch. Can be 0 (deactivated), 1 (non-admins), or 2 (everyone).","docs_reference_links":"N/A","fieldsIndex":208},{"action":"protected_branch.update_require_code_owner_review","description":"Enforcement of required code owner review was updated for a branch.","docs_reference_links":"N/A","fieldsIndex":209},{"action":"protected_branch.update_require_last_push_approval","description":"Someone other than the person who pushed the last code-modifying commit to the branch must approve pull requests for the branch.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-pull-request-reviews-before-merging","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-pull-request-reviews-before-merging","fieldsIndex":210},{"action":"protected_branch.update_required_approving_review_count","description":"Enforcement of the required number of approvals before merging was updated on a branch.","docs_reference_links":"N/A","fieldsIndex":211},{"action":"protected_branch.update_required_status_checks_enforcement_level","description":"Enforcement of required status checks was updated for a branch.","docs_reference_links":"N/A","fieldsIndex":212},{"action":"protected_branch.update_signature_requirement_enforcement_level","description":"Enforcement of required commit signing was updated for a branch.","docs_reference_links":"N/A","fieldsIndex":213},{"action":"protected_branch.update_strict_required_status_checks_policy","description":"Enforcement of required status checks was updated for a branch.","docs_reference_links":"N/A","fieldsIndex":214},{"action":"public_key.create","description":"An SSH key was added to a user account or a deploy key was added to a repository.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account","fieldsIndex":215},{"action":"public_key.delete","description":"An SSH key was removed from a user account or a deploy key was removed from a repository.","docs_reference_links":"/authentication/keeping-your-account-and-data-secure/reviewing-your-ssh-keys","docs_reference_titles":"/authentication/keeping-your-account-and-data-secure/reviewing-your-ssh-keys","fieldsIndex":216},{"action":"public_key.unverification_failure","description":"A user account's SSH key or a repository's deploy key was unable to be unverified.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","fieldsIndex":217},{"action":"public_key.unverify","description":"A user account's SSH key or a repository's deploy key was unverified.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","fieldsIndex":218},{"action":"public_key.update","description":"A user account's SSH key or a repository's deploy key was updated.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","fieldsIndex":215},{"action":"public_key.verification_failure","description":"A user account's SSH key or a repository's deploy key was unable to be verified.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","fieldsIndex":215},{"action":"public_key.verify","description":"A user account's SSH key or a repository's deploy key was verified.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","fieldsIndex":215},{"action":"pull_request.close","description":"A pull request was closed without being merged.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/closing-a-pull-request","docs_reference_titles":"Closing a pull request","fieldsIndex":219},{"action":"pull_request.converted_to_draft","description":"A pull request was converted to a draft.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft","docs_reference_titles":"Changing the stage of a pull request","fieldsIndex":220},{"action":"pull_request.create","description":"A pull request was created.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request","docs_reference_titles":"Creating a pull request","fieldsIndex":221},{"action":"pull_request.create_review_request","description":"A review was requested on a pull request.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews","docs_reference_titles":"Pull request reviews","fieldsIndex":222},{"action":"pull_request.in_progress","description":"A pull request was marked as in progress.","docs_reference_links":"N/A","fieldsIndex":223},{"action":"pull_request.indirect_merge","description":"A pull request was considered merged because the pull request's commits were merged into the target branch.","docs_reference_links":"N/A","fieldsIndex":219},{"action":"pull_request.merge","description":"A pull request was merged.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request","docs_reference_titles":"Merging a pull request","fieldsIndex":219},{"action":"pull_request.ready_for_review","description":"A pull request was marked as ready for review.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#marking-a-pull-request-as-ready-for-review","docs_reference_titles":"Changing the stage of a pull request","fieldsIndex":220},{"action":"pull_request.rebase","description":"A pull request was rebased.","docs_reference_links":"N/A","fieldsIndex":220},{"action":"pull_request.remove_review_request","description":"A review request was removed from a pull request.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews","docs_reference_titles":"Pull request reviews","fieldsIndex":222},{"action":"pull_request.reopen","description":"A pull request was reopened after previously being closed.","docs_reference_links":"N/A","fieldsIndex":220},{"action":"pull_request_review_comment.create","description":"A review comment was added to a pull request.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews","docs_reference_titles":"Pull request reviews","fieldsIndex":224},{"action":"pull_request_review_comment.delete","description":"A review comment on a pull request was deleted.","docs_reference_links":"N/A","fieldsIndex":225},{"action":"pull_request_review_comment.update","description":"A review comment on a pull request was changed.","docs_reference_links":"N/A","fieldsIndex":226},{"action":"pull_request_review.delete","description":"A review on a pull request was deleted.","docs_reference_links":"N/A","fieldsIndex":227},{"action":"pull_request_review.dismiss","description":"A review on a pull request was dismissed.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/dismissing-a-pull-request-review","docs_reference_titles":"Dismissing a pull request review","fieldsIndex":227},{"action":"pull_request_review.submit","description":"A review on a pull request was submitted.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-proposed-changes-in-a-pull-request#submitting-your-review","docs_reference_titles":"Reviewing proposed changes in a pull request","fieldsIndex":227},{"action":"repo.access","description":"The visibility of a repository changed.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/setting-repository-visibility","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/setting-repository-visibility","fieldsIndex":228},{"action":"repo.actions_enabled","description":"GitHub Actions was enabled for a repository.","docs_reference_links":"organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization#using-the-audit-log-api","docs_reference_titles":"organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization#using-the-audit-log-api","fieldsIndex":229},{"action":"repo.add_member","description":"A collaborator was added to a repository.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/inviting-collaborators-to-a-personal-repository","docs_reference_titles":"Inviting collaborators to a personal repository","fieldsIndex":230},{"action":"repo.add_topic","description":"A topic was added to a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics","fieldsIndex":231},{"action":"repo.advanced_security_disabled","description":"GitHub Advanced Security was disabled for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository","fieldsIndex":232},{"action":"repo.advanced_security_enabled","description":"GitHub Advanced Security was enabled for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository","fieldsIndex":232},{"action":"repo.archived","description":"A repository was archived.","docs_reference_links":"/repositories/archiving-a-github-repository","docs_reference_titles":"/repositories/archiving-a-github-repository","fieldsIndex":233},{"action":"repo.change_merge_setting","description":"Pull request merge options were changed for a repository.","docs_reference_links":"N/A","fieldsIndex":233},{"action":"repo.code_scanning_ai_findings_disabled","description":"AI-powered findings for code scanning were disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.code_scanning_ai_findings_enabled","description":"AI-powered findings for code scanning were enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.code_scanning_analysis_deleted","description":"Code scanning analysis for a repository was deleted.","docs_reference_links":"/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository","docs_reference_titles":"/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository","fieldsIndex":235},{"action":"repo.code_scanning_autofix_disabled","description":"Autofix for code scanning alerts was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.code_scanning_autofix_enabled","description":"Autofix for code scanning alerts was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.code_scanning_autofix_third_party_tools_disabled","description":"Autofix for third party tools for code scanning alerts was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.code_scanning_autofix_third_party_tools_enabled","description":"Autofix for third party tools for code scanning alerts was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.code_scanning_configuration_for_branch_deleted","description":"A code scanning configuration for a branch of a repository was deleted.","docs_reference_links":"/code-security/code-scanning/managing-code-scanning-alerts/managing-code-scanning-alerts-for-your-repository#removing-stale-configurations-and-alerts-from-a-branch","docs_reference_titles":"Resolving code scanning alerts","fieldsIndex":236},{"action":"repo.code_scanning_delegated_alert_dismissal_disabled","description":"Prevention of direct alert dismissal for code scanning was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.code_scanning_delegated_alert_dismissal_enabled","description":"Prevention of direct alert dismissal for code scanning was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.codeql_disabled","description":"Code scanning using the default setup was disabled for a repository.","docs_reference_links":"/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning","docs_reference_titles":"Configuring default setup for code scanning","fieldsIndex":231},{"action":"repo.codeql_enabled","description":"Code scanning using the default setup was enabled for a repository.","docs_reference_links":"/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning","docs_reference_titles":"Configuring default setup for code scanning","fieldsIndex":237},{"action":"repo.codeql_updated","description":"Code scanning using the default setup was updated for a repository.","docs_reference_links":"/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning","docs_reference_titles":"Configuring default setup for code scanning","fieldsIndex":237},{"action":"repo.codespaces_trusted_repo_access_granted","description":"GitHub Codespaces was granted trusted repository access to this repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.codespaces_trusted_repo_access_revoked","description":"GitHub Codespaces trusted repository access to this repository was revoked.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"repo.config.disable_collaborators_only","description":"The interaction limit for collaborators only was disabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":238},{"action":"repo.config.disable_contributors_only","description":"The interaction limit for prior contributors only was disabled in a repository.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":239},{"action":"repo.config.disable_sockpuppet_disallowed","description":"The interaction limit for existing users only was disabled in a repository.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":238},{"action":"repo.config.enable_collaborators_only","description":"The interaction limit for collaborators only was enabled in a repository Users that are not collaborators or organization members were unable to interact with a repository for a set duration.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":32},{"action":"repo.config.enable_contributors_only","description":"The interaction limit for prior contributors only was enabled in a repository Users that are not prior contributors, collaborators or organization members were unable to interact with a repository for a set duration.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":104},{"action":"repo.config.enable_sockpuppet_disallowed","description":"The interaction limit for existing users was enabled in a repository New users aren't able to interact with a repository for a set duration Existing users of the repository, contributors, collaborators or organization members are able to interact with a repository.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":18},{"action":"repo.configure_self_hosted_jit_runner","description":"A new just-in-time GitHub Actions self-hosted runner was configured","docs_reference_links":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-a-repository","docs_reference_titles":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-a-repository","fieldsIndex":32},{"action":"repo.create","description":"A repository was created.","docs_reference_links":"/repositories/creating-and-managing-repositories/creating-a-new-repository","docs_reference_titles":"/repositories/creating-and-managing-repositories/creating-a-new-repository","fieldsIndex":240},{"action":"repo.create_actions_secret","description":"A GitHub Actions secret was created for a repository.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":241},{"action":"repo.create_actions_variable","description":"A GitHub Actions variable was created for a repository.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-a-repository","docs_reference_titles":"Store information in variables","fieldsIndex":241},{"action":"repo.create_integration_secret","description":"A Codespaces or Dependabot secret was created for a repository.","docs_reference_links":"N/A","fieldsIndex":242},{"action":"repo.destroy","description":"A repository was deleted.","docs_reference_links":"/repositories/creating-and-managing-repositories/deleting-a-repository","docs_reference_titles":"/repositories/creating-and-managing-repositories/deleting-a-repository","fieldsIndex":240},{"action":"repo.download_zip","description":"A source code archive of a repository was downloaded as a ZIP file.","docs_reference_links":"/repositories/working-with-files/using-files/downloading-source-code-archives","docs_reference_titles":"/repositories/working-with-files/using-files/downloading-source-code-archives","fieldsIndex":233},{"action":"repo.immutable_releases_settings_disabled","description":"The setting for immutable releases was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":233},{"action":"repo.immutable_releases_settings_enabled","description":"The setting for immutable releases was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":233},{"action":"repo.pages_cname","description":"A GitHub Pages custom domain was modified in a repository.","docs_reference_links":"N/A","fieldsIndex":243},{"action":"repo.pages_create","description":"A GitHub Pages site was created.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_destroy","description":"A GitHub Pages site was deleted.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_https_redirect_disabled","description":"HTTPS redirects were disabled for a GitHub Pages site.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_https_redirect_enabled","description":"HTTPS redirects were enabled for a GitHub Pages site.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_private","description":"A GitHub Pages site visibility was changed to private.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_public","description":"A GitHub Pages site visibility was changed to public.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_soft_delete","description":"A GitHub Pages site was soft-deleted because its owner's plan changed.","docs_reference_links":"N/A","fieldsIndex":244},{"action":"repo.pages_soft_delete_restore","description":"A GitHub Pages site that was previously soft-deleted was restored.","docs_reference_links":"N/A","fieldsIndex":233},{"action":"repo.pages_source","description":"A GitHub Pages source was modified.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.register_self_hosted_runner","description":"A new self-hosted runner was registered.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-a-repository","docs_reference_titles":"Adding self-hosted runners","fieldsIndex":245},{"action":"repo.remove_actions_secret","description":"A GitHub Actions secret was deleted for a repository.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":246},{"action":"repo.remove_actions_variable","description":"A GitHub Actions variable was deleted for a repository.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-a-repository","docs_reference_titles":"Store information in variables","fieldsIndex":246},{"action":"repo.remove_integration_secret","description":"A Codespaces or Dependabot secret was deleted for a repository.","docs_reference_links":"N/A","fieldsIndex":247},{"action":"repo.remove_member","description":"A collaborator was removed from a repository.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/removing-a-collaborator-from-a-personal-repository","docs_reference_titles":"Removing a collaborator from a personal repository","fieldsIndex":233},{"action":"repo.remove_self_hosted_runner","description":"A self-hosted runner was removed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners#removing-a-runner-from-a-repository","docs_reference_titles":"Removing self-hosted runners","fieldsIndex":32},{"action":"repo.remove_topic","description":"A topic was removed from a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repo.rename","description":"A repository was renamed.","docs_reference_links":"/repositories/creating-and-managing-repositories/renaming-a-repository","docs_reference_titles":"/repositories/creating-and-managing-repositories/renaming-a-repository","fieldsIndex":248},{"action":"repo.rename_branch","description":"A branch was renamed.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch","fieldsIndex":249},{"action":"repo.restore","description":"N/A","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.self_hosted_runner_offline","description":"The runner application was stopped. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":148},{"action":"repo.self_hosted_runner_online","description":"The runner application was started. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":148},{"action":"repo.self_hosted_runner_updated","description":"The runner application was updated. This event is not included in the JSON/CSV export.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#about-self-hosted-runners","docs_reference_titles":"Self-hosted runners","fieldsIndex":149},{"action":"repo.set_actions_cache_retention_policy","description":"The cache retention policy for GitHub Actions was set for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository","fieldsIndex":250},{"action":"repo.set_actions_cache_storage_policy","description":"The cache storage policy for GitHub Actions was set for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository","fieldsIndex":251},{"action":"repo.set_actions_fork_pr_approvals_policy","description":"The setting for requiring approvals for workflows from public forks was changed for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#configuring-required-approval-for-workflows-from-public-forks","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#configuring-required-approval-for-workflows-from-public-forks","fieldsIndex":252},{"action":"repo.set_actions_private_fork_pr_approvals_policy","description":"The policy for requiring approval for fork pull request workflows from collaborators without write access to private repos was changed for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#enabling-workflows-for-forks-of-private-repositories","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#enabling-workflows-for-forks-of-private-repositories","fieldsIndex":252},{"action":"repo.set_actions_retention_limit","description":"The retention period for GitHub Actions artifacts and logs in a repository was changed.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-repository","fieldsIndex":253},{"action":"repo.set_default_workflow_permissions","description":"The default permissions granted to the GITHUB_TOKEN when running workflows were changed for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#setting-the-permissions-of-the-github_token-for-your-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#setting-the-permissions-of-the-github_token-for-your-repository","fieldsIndex":233},{"action":"repo.set_fork_pr_workflows_policy","description":"Triggered when the policy for workflows on private repository forks is changed.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#enabling-workflows-for-private-repository-forks","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#enabling-workflows-for-private-repository-forks","fieldsIndex":252},{"action":"repo.set_workflow_permission_can_approve_pr","description":"The policy for allowing GitHub Actions to create and approve pull requests was changed for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests","fieldsIndex":233},{"action":"repo.staff_unlock","description":"An enterprise owner or GitHub staff (with permission from a repository administrator) temporarily unlocked the repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.transfer","description":"A user accepted a request to receive a transferred repository.","docs_reference_links":"/repositories/creating-and-managing-repositories/transferring-a-repository","docs_reference_titles":"/repositories/creating-and-managing-repositories/transferring-a-repository","fieldsIndex":254},{"action":"repo.transfer_outgoing","description":"A repository was transferred to another repository network.","docs_reference_links":"N/A","fieldsIndex":255},{"action":"repo.transfer_start","description":"A user sent a request to transfer a repository to another user or organization.","docs_reference_links":"N/A","fieldsIndex":244},{"action":"repo.unarchived","description":"A repository was unarchived.","docs_reference_links":"/repositories/archiving-a-github-repository","docs_reference_titles":"/repositories/archiving-a-github-repository","fieldsIndex":233},{"action":"repo.update_actions_access_settings","description":"The setting to control how a repository was used by GitHub Actions workflows in other repositories was changed.","docs_reference_links":"N/A","fieldsIndex":256},{"action":"repo.update_actions_secret","description":"A GitHub Actions secret was updated for a repository.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":241},{"action":"repo.update_actions_settings","description":"A repository administrator changed GitHub Actions policy settings for a repository.","docs_reference_links":"N/A","fieldsIndex":257},{"action":"repo.update_actions_variable","description":"A GitHub Actions variable was updated for a repository.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-a-repository","docs_reference_titles":"Store information in variables","fieldsIndex":241},{"action":"repo.update_default_branch","description":"The default branch for a repository was changed.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.update_integration_secret","description":"A Codespaces or Dependabot secret was updated for a repository.","docs_reference_links":"N/A","fieldsIndex":242},{"action":"repo.update_member","description":"A user's permission to a repository was changed.","docs_reference_links":"N/A","fieldsIndex":258},{"action":"repository_advisory.close","description":"Someone closed a security advisory.","docs_reference_links":"/code-security/security-advisories/working-with-repository-security-advisories/about-repository-security-advisories","docs_reference_titles":"Repository security advisories","fieldsIndex":32},{"action":"repository_advisory.cve_request","description":"Someone requested a CVE (Common Vulnerabilities and Exposures) number from GitHub for a draft security advisory.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_advisory.github_broadcast","description":"GitHub made a security advisory public in the GitHub Advisory Database.","docs_reference_links":"N/A","fieldsIndex":187},{"action":"repository_advisory.github_withdraw","description":"GitHub withdrew a security advisory that was published in error.","docs_reference_links":"N/A","fieldsIndex":187},{"action":"repository_advisory.open","description":"Someone opened a draft security advisory.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_advisory.publish","description":"Someone published a security advisory.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_advisory.reopen","description":"Someone reopened as draft security advisory.","docs_reference_links":"N/A","fieldsIndex":259},{"action":"repository_advisory.update","description":"Someone edited a draft or published security advisory.","docs_reference_links":"N/A","fieldsIndex":91},{"action":"repository_branch_protection_evaluation.disable","description":"Branch protections were disabled for the repository.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","fieldsIndex":15},{"action":"repository_branch_protection_evaluation.enable","description":"Branch protections were enabled for this repository.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","fieldsIndex":15},{"action":"repository_code_security.disable","description":"Code security was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_code_security.enable","description":"Code security was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_content_analysis.disable","description":"Data use settings were disabled for a private repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","fieldsIndex":0},{"action":"repository_content_analysis.enable","description":"Data use settings were enabled for a private repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","fieldsIndex":0},{"action":"repository_dependency_graph_autosubmit.disable","description":"Automatic dependency submission was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_dependency_graph_autosubmit.enable","description":"Automatic dependency submission was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_dependency_graph.disable","description":"The dependency graph was disabled for a private repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-fea tures-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-fea, tures-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","fieldsIndex":231},{"action":"repository_dependency_graph.enable","description":"The dependency graph was enabled for a private repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_dependency_updates_self_hosted.disabled","description":"Dependency updates on self-hosted runners was disabled.","docs_reference_links":"code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-dependabot-on-self-hosted-runners","docs_reference_titles":"Configuring Dependabot on self-hosted runners","fieldsIndex":238},{"action":"repository_dependency_updates_self_hosted.enabled","description":"Dependency updates on self-hosted runners was enabled.","docs_reference_links":"code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-dependabot-on-self-hosted-runners","docs_reference_titles":"Configuring Dependabot on self-hosted runners","fieldsIndex":231},{"action":"repository_image.create","description":"An image to represent a repository was uploaded.","docs_reference_links":"N/A","fieldsIndex":260},{"action":"repository_image.destroy","description":"An image to represent a repository was deleted.","docs_reference_links":"N/A","fieldsIndex":260},{"action":"repository_invitation.accept","description":"An invitation to join a repository was accepted.","docs_reference_links":"N/A","fieldsIndex":261},{"action":"repository_invitation.cancel","description":"An invitation to join a repository was canceled.","docs_reference_links":"N/A","fieldsIndex":262},{"action":"repository_invitation.create","description":"An invitation to join a repository was sent.","docs_reference_links":"N/A","fieldsIndex":262},{"action":"repository_invitation.reject","description":"An invitation to join a repository was declined.","docs_reference_links":"N/A","fieldsIndex":261},{"action":"repository_limit.reached","description":"An organization has reached their repository limit.","docs_reference_links":"repositories/creating-and-managing-repositories/repository-limits","docs_reference_titles":"repositories/creating-and-managing-repositories/repository-limits","fieldsIndex":263},{"action":"repository_limit.warning","description":"An organization is approaching their repository limit.","docs_reference_links":"repositories/creating-and-managing-repositories/repository-limits","docs_reference_titles":"repositories/creating-and-managing-repositories/repository-limits","fieldsIndex":264},{"action":"repository_malware_alerts.disable","description":"Dependabot malware alerts was disabled.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_malware_alerts.enable","description":"Dependabot malware alerts was enabled.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_projects_change.clear","description":"The repository projects policy was removed for an organization, or all organizations in the enterprise Organization owners can now control their repository projects settings.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-projects-in-your-enterprise","docs_reference_titles":"Enforcing policies for projects in your enterprise","fieldsIndex":0},{"action":"repository_projects_change.disable","description":"Repository projects were disabled for a repository, all repositories in an organization, or all organizations in an enterprise.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_projects_change.enable","description":"Repository projects were enabled for a repository, all repositories in an organization, or all organizations in an enterprise.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_ruleset.create","description":"A repository ruleset was created.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/creating-rulesets-for-a-repository","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/creating-rulesets-for-a-repository","fieldsIndex":265},{"action":"repository_ruleset.destroy","description":"A repository ruleset was deleted.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/managing-rulesets-for-a-repository#deleting-a-ruleset","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/managing-rulesets-for-a-repository#deleting-a-ruleset","fieldsIndex":265},{"action":"repository_ruleset.update","description":"A repository ruleset was edited.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/managing-rulesets-for-a-repository#editing-a-ruleset","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/managing-rulesets-for-a-repository#editing-a-ruleset","fieldsIndex":266},{"action":"repository_secret_scanning_automatic_validity_checks.disabled","description":"Automatic partner validation checks have been disabled at the repository level","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#allowing-validity-checks-for-partner-patterns-in-a-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#allowing-validity-checks-for-partner-patterns-in-a-repository","fieldsIndex":231},{"action":"repository_secret_scanning_automatic_validity_checks.enabled","description":"Automatic partner validation checks have been enabled at the repository level","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#allowing-validity-checks-for-partner-patterns-in-a-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#allowing-validity-checks-for-partner-patterns-in-a-repository","fieldsIndex":231},{"action":"repository_secret_scanning_custom_pattern.create","description":"A custom pattern was created for secret scanning in a repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-a-repository","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":104},{"action":"repository_secret_scanning_custom_pattern.delete","description":"A custom pattern was removed from secret scanning in a repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#removing-a-custom-pattern","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":234},{"action":"repository_secret_scanning_custom_pattern.publish","description":"A custom pattern was published for secret scanning in a repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-a-repository","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":234},{"action":"repository_secret_scanning_custom_pattern_push_protection.disabled","description":"Push protection for a custom pattern for secret scanning was disabled for your repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-a-repository","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":234},{"action":"repository_secret_scanning_custom_pattern_push_protection.enabled","description":"Push protection for a custom pattern for secret scanning was enabled for your repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-a-repository","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":234},{"action":"repository_secret_scanning_custom_pattern.update","description":"Changes to a custom pattern were saved and a dry run was executed for secret scanning in a repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#editing-a-custom-pattern","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":104},{"action":"repository_secret_scanning.disable","description":"Secret scanning was disabled for a repository.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":231},{"action":"repository_secret_scanning.enable","description":"Secret scanning was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_secret_scanning_extended_metadata.disabled","description":"Metadata for secret scanning alerts has been disabled at the repository level","docs_reference_links":"/code-security/secret-scanning/enabling-secret-scanning-features/enabling-extended-metadata-checks-for-your-repository","docs_reference_titles":"Enabling extended metadata checks for your repository","fieldsIndex":231},{"action":"repository_secret_scanning_extended_metadata.enabled","description":"Metadata for secret scanning alerts has been enabled at the repository level","docs_reference_links":"/code-security/secret-scanning/enabling-secret-scanning-features/enabling-extended-metadata-checks-for-your-repository","docs_reference_titles":"Enabling extended metadata checks for your repository","fieldsIndex":231},{"action":"repository_secret_scanning_generic_secrets.disabled","description":"Generic secrets have been disabled at the repository level","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_secret_scanning_generic_secrets.enabled","description":"Generic secrets have been enabled at the repository level","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_secret_scanning_non_provider_patterns.disabled","description":"Secret scanning for non-provider patterns was disabled at the repository level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":231},{"action":"repository_secret_scanning_non_provider_patterns.enabled","description":"Secret scanning for non-provider patterns was enabled at the repository level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":231},{"action":"repository_secret_scanning_push_protection_bypass_list.add","description":"A role or team was added to the push protection bypass list at the repository level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":104},{"action":"repository_secret_scanning_push_protection_bypass_list.disable","description":"Push protection settings for \"Users who can bypass push protection for secret scanning\" changed from \"Specific roles or teams\" to \"Anyone with write access\" at the repository level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":231},{"action":"repository_secret_scanning_push_protection_bypass_list.enable","description":"Push protection settings for \"Users who can bypass push protection for secret scanning\" changed from \"Anyone with write access\" to \"Specific roles or teams\" at the repository level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":102},{"action":"repository_secret_scanning_push_protection_bypass_list.remove","description":"A role or team was removed from the push protection bypass list at the repository level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":234},{"action":"repository_secret_scanning_push_protection.disable","description":"Secret scanning push protection was disabled for a repository.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning","docs_reference_titles":"Push protection","fieldsIndex":231},{"action":"repository_secret_scanning_push_protection.enable","description":"Secret scanning push protection was enabled for a repository.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning","docs_reference_titles":"Push protection","fieldsIndex":231},{"action":"repository_security_configuration.applied","description":"A code security configuration was applied to a repository.","docs_reference_links":"N/A","fieldsIndex":267},{"action":"repository_security_configuration.failed","description":"A code security configuration failed to attach to the repository.","docs_reference_links":"N/A","fieldsIndex":267},{"action":"repository_security_configuration.removed","description":"A code security configuration was removed from a repository.","docs_reference_links":"N/A","fieldsIndex":267},{"action":"repository_security_configuration.removed_by_settings_change","description":"A code security configuration was removed due to a change in repository or enterprise settings.","docs_reference_links":"N/A","fieldsIndex":267},{"action":"repository_security_updates.disable","description":"Dependabot security updates was disabled.","docs_reference_links":"/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates","docs_reference_titles":"Configuring Dependabot security updates","fieldsIndex":231},{"action":"repository_security_updates.enable","description":"Dependabot security updates was enabled.","docs_reference_links":"/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates","docs_reference_titles":"Configuring Dependabot security updates","fieldsIndex":231},{"action":"repository_visibility_change.clear","description":"The repository visibility change setting was cleared for an organization or enterprise.","docs_reference_links":"/organizations/managing-organization-settings/restricting-repository-visibility-changes-in-your-organization, /admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-changes-to-repository-visibility","docs_reference_titles":"/organizations/managing-organization-settings/restricting-repository-visibility-changes-in-your-organization, Enforcing repository management policies in your enterprise","fieldsIndex":15},{"action":"repository_visibility_change.disable","description":"The ability for enterprise members to update a repository's visibility was disabled. Members are unable to change repository visibilities in an organization, or all organizations in an enterprise.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"repository_visibility_change.enable","description":"The ability for enterprise members to update a repository's visibility was enabled. Members are able to change repository visibilities in an organization, or all organizations in an enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"repository_vulnerability_alert.assign","description":"A user was assigned to a Dependabot alert.","docs_reference_links":"N/A","fieldsIndex":268},{"action":"repository_vulnerability_alert.auto_dismiss","description":"A Dependabot alert was automatically dismissed because its metadata matches an enabled Dependabot rule.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/using-alert-rules-to-prioritize-dependabot-alerts","docs_reference_titles":"Dependabot auto-triage rules","fieldsIndex":269},{"action":"repository_vulnerability_alert.auto_reopen","description":"A previously auto-dismissed Dependabot alert was automatically reopened because its metadata no longer matches an enabled Dependabot rule.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/using-alert-rules-to-prioritize-dependabot-alerts","docs_reference_titles":"Dependabot auto-triage rules","fieldsIndex":269},{"action":"repository_vulnerability_alert.create","description":"GitHub created a Dependabot alert because the repository uses a vulnerable dependency.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/about-dependabot-alerts","docs_reference_titles":"Dependabot alerts","fieldsIndex":270},{"action":"repository_vulnerability_alert.dismiss","description":"A Dependabot alert was manually dismissed.","docs_reference_links":"N/A","fieldsIndex":271},{"action":"repository_vulnerability_alert.reintroduce","description":"A Dependabot alert was automatically reopened because the repository resumed use of a vulnerable dependency.","docs_reference_links":"N/A","fieldsIndex":270},{"action":"repository_vulnerability_alert.reopen","description":"A Dependabot alert was manually reopened.","docs_reference_links":"N/A","fieldsIndex":268},{"action":"repository_vulnerability_alert.resolve","description":"Changes were pushed to update and resolve a Dependabot alert in a project dependency.","docs_reference_links":"N/A","fieldsIndex":270},{"action":"repository_vulnerability_alert.unassign","description":"A user was unassigned to a Dependabot alert.","docs_reference_links":"N/A","fieldsIndex":272},{"action":"repository_vulnerability_alert.withdraw","description":"A Dependabot alert was withdrawn.","docs_reference_links":"N/A","fieldsIndex":273},{"action":"repository_vulnerability_alerts.authorized_users_teams","description":"The list of people or teams authorized to receive Dependabot alerts for the repository was updated.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#granting-access-to-security-alerts","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#granting-access-to-security-alerts","fieldsIndex":234},{"action":"repository_vulnerability_alerts_auto_dismissal.disable","description":"Automatic dismissal of low-impact Dependabot alerts was disabled for the repository.","docs_reference_links":"N/A","fieldsIndex":187},{"action":"repository_vulnerability_alerts_auto_dismissal.enable","description":"Automatic dismissal of low-impact Dependabot alerts was enabled for the repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_vulnerability_alerts.disable","description":"Dependabot alerts was disabled.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_vulnerability_alerts.enable","description":"Dependabot alerts was enabled.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"required_status_check.create","description":"A status check was marked as required for a protected branch.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-status-checks-before-merging","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-status-checks-before-merging","fieldsIndex":274},{"action":"required_status_check.destroy","description":"A status check was no longer marked as required for a protected branch.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-status-checks-before-merging","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-status-checks-before-merging","fieldsIndex":274},{"action":"restrict_notification_delivery.disable","description":"Email notification restrictions for an organization or enterprise were disabled.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/restricting-email-notifications-for-your-organization, /admin/policies/enforcing-policies-for-your-enterprise/restricting-email-notifications-for-your-enterprise","docs_reference_titles":"Restricting email notifications for your organization, Restricting email notifications for your enterprise","fieldsIndex":275},{"action":"restrict_notification_delivery.enable","description":"Email notification restrictions for an organization or enterprise were enabled.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/restricting-email-notifications-for-your-organization, /admin/policies/enforcing-policies-for-your-enterprise/restricting-email-notifications-for-your-enterprise","docs_reference_titles":"Restricting email notifications for your organization, Restricting email notifications for your enterprise","fieldsIndex":276},{"action":"role.create","description":"A new custom repository role was created.","docs_reference_links":"/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-custom-repository-roles-for-an-organization","docs_reference_titles":"Managing custom repository roles for an organization","fieldsIndex":277},{"action":"role.destroy","description":"A custom repository role was deleted.","docs_reference_links":"/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-custom-repository-roles-for-an-organization","docs_reference_titles":"Managing custom repository roles for an organization","fieldsIndex":278},{"action":"role.update","description":"A custom repository role was edited.","docs_reference_links":"/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-custom-repository-roles-for-an-organization","docs_reference_titles":"Managing custom repository roles for an organization","fieldsIndex":279},{"action":"secret_scanning_alert.assign","description":"A user was assigned to a secret scanning alert.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":280},{"action":"secret_scanning_alert.create","description":"GitHub detected a secret and created a secret scanning alert.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":280},{"action":"secret_scanning_alert.delete","description":"A secret scanning alert was deleted by GitHub. Note that deletions from custom patterns are not logged.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":281},{"action":"secret_scanning_alert.public_leak","description":"A secret scanning alert was leaked in a public repo.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":280},{"action":"secret_scanning_alert.reopen","description":"A secret scanning alert was reopened.","docs_reference_links":"N/A","fieldsIndex":282},{"action":"secret_scanning_alert.report","description":"A leaked secret was reported to the secret's provider by secret scanning.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning/resolving-alerts","docs_reference_titles":"Resolving alerts from secret scanning","fieldsIndex":283},{"action":"secret_scanning_alert.resolve","description":"A secret scanning alert was resolved.","docs_reference_links":"N/A","fieldsIndex":282},{"action":"secret_scanning_alert.revoke","description":"A secret scanning alert was revoked.","docs_reference_links":"N/A","fieldsIndex":284},{"action":"secret_scanning_alert.unassign","description":"A user was unassigned from a secret scanning alert.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":280},{"action":"secret_scanning_alert.validate","description":"A secret scanning alert was validated.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":285},{"action":"secret_scanning_closure_request.approve","description":"A request to close a secret scanning alert was approved by a user.","docs_reference_links":"N/A","fieldsIndex":286},{"action":"secret_scanning_closure_request.cancel","description":"N/A","docs_reference_links":"A reqeust to close a secret scanning alert was canceled by a user.","docs_reference_titles":"A, reqeust, to, close, a, secret, scanning, alert, was, canceled, by, a, user.","fieldsIndex":56},{"action":"secret_scanning_closure_request.create","description":"N/A","docs_reference_links":"A user requested to close a secret scanning alert.","docs_reference_titles":"A, user, requested, to, close, a, secret, scanning, alert.","fieldsIndex":287},{"action":"secret_scanning_closure_request.deny","description":"A request to close a secret scanning alert was denied by a user.","docs_reference_links":"N/A","fieldsIndex":286},{"action":"secret_scanning.disable","description":"Secret scanning was disabled for all existing repositories.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":11},{"action":"secret_scanning.enable","description":"Secret scanning was enabled for all existing repositories.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":53},{"action":"secret_scanning_new_repos.disable","description":"Secret scanning was disabled for all new repositories.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":53},{"action":"secret_scanning_new_repos.enable","description":"Secret scanning was enabled for all new repositories.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":53},{"action":"secret_scanning_push_protection.bypass","description":"Triggered when a user bypasses the push protection on a secret detected by secret scanning.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning#bypassing-push-protection-for-a-secret","docs_reference_titles":"Push protection","fieldsIndex":288},{"action":"secret_scanning_push_protection_request.approve","description":"A request to bypass secret scanning push protection was approved by a user.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#managing-requests-to-bypass-push-protection","docs_reference_titles":"Push protection","fieldsIndex":289},{"action":"secret_scanning_push_protection_request.cancel","description":"A user canceled a request to bypass secret scanning push protection.","docs_reference_links":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","docs_reference_titles":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","fieldsIndex":290},{"action":"secret_scanning_push_protection_request.complete","description":"A user pushed a commit containing a secret for which there is an approved secret scanning push protection bypass request.","docs_reference_links":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","docs_reference_titles":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","fieldsIndex":290},{"action":"secret_scanning_push_protection_request.deny","description":"A request to bypass secret scanning push protection was denied by a user.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#managing-requests-to-bypass-push-protection","docs_reference_titles":"Push protection","fieldsIndex":291},{"action":"secret_scanning_push_protection_request.request","description":"A user requested to bypass secret scanning push protection.","docs_reference_links":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","docs_reference_titles":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","fieldsIndex":292},{"action":"secret_scanning_scan.completed","description":"A secret scanning scan has completed on this repository.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":293},{"action":"security_configuration.create","description":"A security configuration was created","docs_reference_links":"N/A","fieldsIndex":294},{"action":"security_configuration_default.delete","description":"A default security configuration setting for new repositories was removed.","docs_reference_links":"N/A","fieldsIndex":295},{"action":"security_configuration_default.update","description":"A default security configuration setting for new repositories was updated.","docs_reference_links":"N/A","fieldsIndex":295},{"action":"security_configuration.delete","description":"A security configuration was deleted","docs_reference_links":"N/A","fieldsIndex":294},{"action":"security_configuration_policy.update","description":"A security configuration policy was updated","docs_reference_links":"N/A","fieldsIndex":296},{"action":"security_configuration.update","description":"A security configuration was updated","docs_reference_links":"N/A","fieldsIndex":297},{"action":"sponsors.agreement_sign","description":"A GitHub Sponsors agreement was signed on behalf of an organization.","docs_reference_links":"N/A","fieldsIndex":298},{"action":"sponsors.custom_amount_settings_change","description":"Custom amounts for GitHub Sponsors were enabled or disabled, or the suggested custom amount was changed.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers","fieldsIndex":298},{"action":"sponsors.fiscal_host_change","description":"The fiscal host for a GitHub Sponsors listing was updated.","docs_reference_links":"N/A","fieldsIndex":299},{"action":"sponsors.invoiced_agreement_sign","description":"An agreement for invoiced billing for GitHub Sponsors was signed.","docs_reference_links":"/sponsors/sponsoring-open-source-contributors/paying-for-github-sponsors-by-invoice","docs_reference_titles":"/sponsors/sponsoring-open-source-contributors/paying-for-github-sponsors-by-invoice","fieldsIndex":0},{"action":"sponsors.repo_funding_links_file_action","description":"The FUNDING file in a repository was changed.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository","fieldsIndex":300},{"action":"sponsors.sponsor_sponsorship_cancel","description":"A sponsorship was canceled.","docs_reference_links":"/billing/managing-billing-for-github-sponsors/downgrading-a-sponsorship","docs_reference_titles":"Downgrading a sponsorship","fieldsIndex":301},{"action":"sponsors.sponsor_sponsorship_create","description":"A sponsorship was created, by sponsoring an account.","docs_reference_links":"/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes","docs_reference_titles":"/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes","fieldsIndex":302},{"action":"sponsors.sponsor_sponsorship_payment_complete","description":"After you sponsor an account and a payment has been processed, the sponsorship payment was marked as complete.","docs_reference_links":"/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes","docs_reference_titles":"/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes","fieldsIndex":302},{"action":"sponsors.sponsor_sponsorship_preference_change","description":"The option to receive email updates from a sponsored account was changed.","docs_reference_links":"/sponsors/sponsoring-open-source-contributors/managing-your-sponsorship","docs_reference_titles":"/sponsors/sponsoring-open-source-contributors/managing-your-sponsorship","fieldsIndex":301},{"action":"sponsors.sponsor_sponsorship_tier_change","description":"A sponsorship was upgraded or downgraded.","docs_reference_links":"/billing/managing-billing-for-github-sponsors/upgrading-a-sponsorship, /billing/managing-billing-for-github-sponsors/downgrading-a-sponsorship","docs_reference_titles":"Upgrading a sponsorship, Downgrading a sponsorship","fieldsIndex":302},{"action":"sponsors.sponsored_developer_approve","description":"A GitHub Sponsors account was approved.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","fieldsIndex":299},{"action":"sponsors.sponsored_developer_create","description":"A GitHub Sponsors account was created.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","fieldsIndex":303},{"action":"sponsors.sponsored_developer_disable","description":"A GitHub Sponsors account was disabled.","docs_reference_links":"N/A","fieldsIndex":299},{"action":"sponsors.sponsored_developer_profile_update","description":"The profile for GitHub Sponsors account was edited.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/editing-your-profile-details-for-github-sponsors","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/editing-your-profile-details-for-github-sponsors","fieldsIndex":303},{"action":"sponsors.sponsored_developer_redraft","description":"A GitHub Sponsors account was returned to draft state from approved state.","docs_reference_links":"N/A","fieldsIndex":299},{"action":"sponsors.sponsored_developer_request_approval","description":"An application for GitHub Sponsors was submitted for approval.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","fieldsIndex":299},{"action":"sponsors.sponsored_developer_tier_description_update","description":"The description for a sponsorship tier was changed.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers","fieldsIndex":304},{"action":"sponsors.sponsors_patreon_user_create","description":"A Patreon account was linked to a user account for use with GitHub Sponsors.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/enabling-sponsorships-through-patreon#linking-your-patreon-account-to-your-github-account","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/enabling-sponsorships-through-patreon#linking-your-patreon-account-to-your-github-account","fieldsIndex":305},{"action":"sponsors.sponsors_patreon_user_destroy","description":"A Patreon account for use with GitHub Sponsors was unlinked from a user account.","docs_reference_links":"/sponsors/sponsoring-open-source-contributors/unlinking-your-patreon-account-from-your-github-account","docs_reference_titles":"Unlinking your Patreon account from GitHub","fieldsIndex":305},{"action":"sponsors.update_tier_repository","description":"A GitHub Sponsors tier changed access for a repository.","docs_reference_links":"N/A","fieldsIndex":304},{"action":"sponsors.update_tier_welcome_message","description":"The welcome message for a GitHub Sponsors tier for an organization was updated.","docs_reference_links":"N/A","fieldsIndex":304},{"action":"sponsors.withdraw_agreement_signature","description":"A signature was withdrawn from a GitHub Sponsors agreement that applies to an organization.","docs_reference_links":"N/A","fieldsIndex":298},{"action":"ssh_certificate_authority.create","description":"An SSH certificate authority for an organization or enterprise was created.","docs_reference_links":"/organizations/managing-git-access-to-your-organizations-repositories/managing-your-organizations-ssh-certificate-authorities, /admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-security-settings-in-your-enterprise#managing-ssh-certificate-authorities-for-your-enterprise","docs_reference_titles":"Managing your organization's SSH certificate authorities, Enforcing policies for security settings in your enterprise","fieldsIndex":306},{"action":"ssh_certificate_authority.destroy","description":"An SSH certificate authority for an organization or enterprise was deleted.","docs_reference_links":"/organizations/managing-git-access-to-your-organizations-repositories/managing-your-organizations-ssh-certificate-authorities, /admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-security-settings-in-your-enterprise#managing-ssh-certificate-authorities-for-your-enterprise","docs_reference_titles":"Managing your organization's SSH certificate authorities, Enforcing policies for security settings in your enterprise","fieldsIndex":306},{"action":"ssh_certificate_requirement.disable","description":"The requirement for members to use SSH certificates to access an organization resources was disabled.","docs_reference_links":"/organizations/managing-git-access-to-your-organizations-repositories/managing-your-organizations-ssh-certificate-authorities, /admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-security-settings-in-your-enterprise#managing-ssh-certificate-authorities-for-your-enterprise","docs_reference_titles":"Managing your organization's SSH certificate authorities, Enforcing policies for security settings in your enterprise","fieldsIndex":15},{"action":"ssh_certificate_requirement.enable","description":"The requirement for members to use SSH certificates to access an organization resources was enabled.","docs_reference_links":"/organizations/managing-git-access-to-your-organizations-repositories/managing-your-organizations-ssh-certificate-authorities, /admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-security-settings-in-your-enterprise#managing-ssh-certificate-authorities-for-your-enterprise","docs_reference_titles":"Managing your organization's SSH certificate authorities, Enforcing policies for security settings in your enterprise","fieldsIndex":15},{"action":"staff.dependabot_debug_credentials_generated","description":"Dependabot encrypted config was read.","docs_reference_links":"N/A","fieldsIndex":187},{"action":"staff.set_domain_token_expiration","description":"The verification code expiry time for an organization or enterprise domain was set.","docs_reference_links":"N/A","fieldsIndex":307},{"action":"staff.unverify_domain","description":"An organization or enterprise domain was unverified.","docs_reference_links":"N/A","fieldsIndex":308},{"action":"staff.verify_domain","description":"An organization or enterprise domain was verified.","docs_reference_links":"N/A","fieldsIndex":309},{"action":"sub_issues.parent_issue_add","description":"A parent issue was added to an issue.","docs_reference_links":"N/A","fieldsIndex":91},{"action":"sub_issues.parent_issue_remove","description":"A parent issue was removed from an issue.","docs_reference_links":"N/A","fieldsIndex":91},{"action":"sub_issues.sub_issue_add","description":"A sub-issue was added to an issue.","docs_reference_links":"N/A","fieldsIndex":91},{"action":"sub_issues.sub_issue_remove","description":"A sub-issue was removed from an issue.","docs_reference_links":"N/A","fieldsIndex":91},{"action":"team.add_member","description":"A member of an organization was added to a team.","docs_reference_links":"/organizations/organizing-members-into-teams/adding-organization-members-to-a-team","docs_reference_titles":"/organizations/organizing-members-into-teams/adding-organization-members-to-a-team","fieldsIndex":310},{"action":"team.add_repository","description":"A team was given access and permissions to a repository.","docs_reference_links":"N/A","fieldsIndex":311},{"action":"team.add_to_organization","description":"A team was added to an organization.","docs_reference_links":"N/A","fieldsIndex":312},{"action":"team.change_parent_team","description":"A child team was created or a child team's parent was changed.","docs_reference_links":"/organizations/organizing-members-into-teams/moving-a-team-in-your-organizations-hierarchy","docs_reference_titles":"/organizations/organizing-members-into-teams/moving-a-team-in-your-organizations-hierarchy","fieldsIndex":310},{"action":"team.change_privacy","description":"A team's privacy level was changed.","docs_reference_links":"/organizations/organizing-members-into-teams/changing-team-visibility","docs_reference_titles":"/organizations/organizing-members-into-teams/changing-team-visibility","fieldsIndex":310},{"action":"team.create","description":"A new team is created.","docs_reference_links":"N/A","fieldsIndex":310},{"action":"team.demote_maintainer","description":"A user was demoted from a team maintainer to a team member.","docs_reference_links":"/organizations/organizing-members-into-teams/assigning-the-team-maintainer-role-to-a-team-member","docs_reference_titles":"/organizations/organizing-members-into-teams/assigning-the-team-maintainer-role-to-a-team-member","fieldsIndex":310},{"action":"team.destroy","description":"A team was deleted.","docs_reference_links":"N/A","fieldsIndex":310},{"action":"team_group_mapping.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":313},{"action":"team_group_mapping.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":313},{"action":"team_group_mapping.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":313},{"action":"team.members_limit_warning","description":"A team is approaching its members limit.","docs_reference_links":"N/A","fieldsIndex":314},{"action":"team.organization_assignments_limit_reached","description":"A team has reached its organization assignments limit.","docs_reference_links":"N/A","fieldsIndex":314},{"action":"team.organization_assignments_limit_warning","description":"A team is approaching its organization assignments limit.","docs_reference_links":"N/A","fieldsIndex":314},{"action":"team.promote_maintainer","description":"A user was promoted from a team member to a team maintainer.","docs_reference_links":"/organizations/organizing-members-into-teams/assigning-the-team-maintainer-role-to-a-team-member#promoting-an-organization-member-to-team-maintainer","docs_reference_titles":"/organizations/organizing-members-into-teams/assigning-the-team-maintainer-role-to-a-team-member#promoting-an-organization-member-to-team-maintainer","fieldsIndex":310},{"action":"team.remove_from_organization","description":"A team was removed from an organization.","docs_reference_links":"N/A","fieldsIndex":312},{"action":"team.remove_member","description":"An organization member was removed from a team.","docs_reference_links":"/organizations/organizing-members-into-teams/removing-organization-members-from-a-team","docs_reference_titles":"/organizations/organizing-members-into-teams/removing-organization-members-from-a-team","fieldsIndex":310},{"action":"team.remove_repository","description":"A repository was removed from a team's control.","docs_reference_links":"N/A","fieldsIndex":315},{"action":"team.rename","description":"A team's name was changed.","docs_reference_links":"N/A","fieldsIndex":316},{"action":"team_sync_tenant.disabled","description":"Team synchronization with a tenant was disabled.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/managing-team-synchronization-for-your-organization, /admin/identity-and-access-management/using-saml-for-enterprise-iam/managing-team-synchronization-for-organizations-in-your-enterprise","docs_reference_titles":"Managing team synchronization for your organization, Managing team synchronization for organizations in your enterprise","fieldsIndex":15},{"action":"team_sync_tenant.enabled","description":"Team synchronization with a tenant was enabled.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/managing-team-synchronization-for-your-organization, /admin/identity-and-access-management/using-saml-for-enterprise-iam/managing-team-synchronization-for-organizations-in-your-enterprise","docs_reference_titles":"Managing team synchronization for your organization, Managing team synchronization for organizations in your enterprise","fieldsIndex":15},{"action":"team_sync_tenant.update_okta_credentials","description":"The Okta credentials for team synchronization with a tenant were changed.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"team.update_repository_permission","description":"A team's permission to a repository was changed.","docs_reference_links":"N/A","fieldsIndex":317},{"action":"user_content_edit.delete","description":"Triggered when a user content edit is deleted.","docs_reference_links":"N/A","fieldsIndex":318},{"action":"vulnerability_alert_rule.create","description":"A Dependabot rule was created.","docs_reference_links":"N/A","fieldsIndex":319},{"action":"vulnerability_alert_rule.delete","description":"A Dependabot rule was deleted.","docs_reference_links":"N/A","fieldsIndex":320},{"action":"vulnerability_alert_rule.disable","description":"A Dependabot rule was disabled for a single repository or disabled by default for an organization.","docs_reference_links":"N/A","fieldsIndex":319},{"action":"vulnerability_alert_rule.enable","description":"A Dependabot rule was enabled for a single repository or enabled by default for an organization.","docs_reference_links":"N/A","fieldsIndex":321},{"action":"vulnerability_alert_rule.force_disable","description":"A Dependabot rule was enabled for an organization and cannot be disabled for its repositories.","docs_reference_links":"N/A","fieldsIndex":322},{"action":"vulnerability_alert_rule.force_enable","description":"A Dependabot rule was disabled for an organization and cannot be enabled for its repositories.","docs_reference_links":"N/A","fieldsIndex":322},{"action":"vulnerability_alert_rule.update","description":"A Dependabot rule's conditions, actions, or metadata changed.","docs_reference_links":"N/A","fieldsIndex":319},{"action":"workflows.actions_policy_violation","description":"A workflow run produced one or more workflow execution protection policy violations.","docs_reference_links":"N/A","fieldsIndex":323},{"action":"workflows.approve_workflow_job","description":"A workflow job was approved.","docs_reference_links":"/actions/managing-workflow-runs/reviewing-deployments","docs_reference_titles":"Reviewing deployments","fieldsIndex":324},{"action":"workflows.bypass_protection_rules","description":"N/A","docs_reference_links":"N/A","fieldsIndex":325},{"action":"workflows.cancel_workflow_run","description":"A workflow run was cancelled.","docs_reference_links":"/actions/managing-workflow-runs/canceling-a-workflow","docs_reference_titles":"Canceling a workflow run","fieldsIndex":326},{"action":"workflows.comment_workflow_job","description":"N/A","docs_reference_links":"N/A","fieldsIndex":327},{"action":"workflows.completed_workflow_run","description":"A workflow status changed to completed. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/monitoring-and-troubleshooting-workflows/viewing-workflow-run-history","docs_reference_titles":"Viewing workflow run history","fieldsIndex":328},{"action":"workflows.created_workflow_run","description":"A workflow run was create. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/learn-github-actions/understanding-github-actions#create-an-example-workflow","docs_reference_titles":"Understanding GitHub Actions","fieldsIndex":329},{"action":"workflows.delete_workflow_run","description":"A workflow run was deleted.","docs_reference_links":"/actions/managing-workflow-runs/deleting-a-workflow-run","docs_reference_titles":"Deleting a workflow run","fieldsIndex":330},{"action":"workflows.disable_workflow","description":"A workflow was disabled.","docs_reference_links":"N/A","fieldsIndex":331},{"action":"workflows.enable_workflow","description":"A workflow was enabled, after previously being disabled by disable_workflow.","docs_reference_links":"N/A","fieldsIndex":331},{"action":"workflows.pin_workflow","description":"A workflow was pinned.","docs_reference_links":"N/A","fieldsIndex":332},{"action":"workflows.prepared_workflow_job","description":"A workflow job was started. Includes the list of secrets that were provided to the job. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/using-workflows/events-that-trigger-workflows","docs_reference_titles":"Events that trigger workflows","fieldsIndex":333},{"action":"workflows.reject_workflow_job","description":"A workflow job was rejected.","docs_reference_links":"/actions/managing-workflow-runs/reviewing-deployments","docs_reference_titles":"Reviewing deployments","fieldsIndex":334},{"action":"workflows.rerun_workflow_run","description":"A workflow run was re-run.","docs_reference_links":"/actions/managing-workflow-runs/re-running-workflows-and-jobs","docs_reference_titles":"Re-running workflows and jobs","fieldsIndex":335},{"action":"workflows.unpin_workflow","description":"A workflow was unpinned after previously being pinned.","docs_reference_links":"N/A","fieldsIndex":332},{"action":"account_recovery_token.confirm","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"account_recovery_token.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"account_recovery_token.recover","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"billing.update_bill_cycle_day","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.add_admin","description":"An enterprise owner was added to an enterprise.","docs_reference_links":"/admin/user-management/managing-users-in-your-enterprise/inviting-people-to-manage-your-enterprise","docs_reference_titles":"Inviting people to manage your enterprise","fieldsIndex":336},{"action":"business.add_billing_manager","description":"A billing manager was added to an enterprise.","docs_reference_links":"N/A","fieldsIndex":336},{"action":"business.add_support_entitlee","description":"A support entitlement was added to a member of an enterprise.","docs_reference_links":"/admin/user-management/managing-users-in-your-enterprise/managing-support-entitlements-for-your-enterprise","docs_reference_titles":"Managing support entitlements for your enterprise","fieldsIndex":337},{"action":"business.remove_admin","description":"An enterprise owner was removed from an enterprise.","docs_reference_links":"/admin/user-management/managing-users-in-your-enterprise/inviting-people-to-manage-your-enterprise","docs_reference_titles":"Inviting people to manage your enterprise","fieldsIndex":336},{"action":"business.remove_billing_manager","description":"A billing manager was removed from an enterprise.","docs_reference_links":"N/A","fieldsIndex":336},{"action":"business.remove_member","description":"A member was removed from an enterprise.","docs_reference_links":"N/A","fieldsIndex":338},{"action":"business.remove_support_entitlee","description":"A support entitlement was removed from a member of an enterprise.","docs_reference_links":"/admin/user-management/managing-users-in-your-enterprise/managing-support-entitlements-for-your-enterprise","docs_reference_titles":"Managing support entitlements for your enterprise","fieldsIndex":336},{"action":"business.security_center_export_code_scanning_metrics","description":"A CSV export was requested on the \"CodeQL pull request alerts\" page.","docs_reference_links":"N/A","fieldsIndex":146},{"action":"business.security_center_export_coverage","description":"A CSV export was requested on the \"Coverage\" page.","docs_reference_links":"N/A","fieldsIndex":147},{"action":"business.security_center_export_overview_dashboard","description":"A CSV export was requested on the \"Overview Dashboard\" page.","docs_reference_links":"N/A","fieldsIndex":146},{"action":"business.security_center_export_risk","description":"A CSV export was requested on the \"Risk\" page.","docs_reference_links":"N/A","fieldsIndex":147},{"action":"business.set_actions_cache_retention_policy","description":"The cache retention policy for GitHub Actions was set for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":337},{"action":"business.set_actions_cache_storage_policy","description":"The cache storage policy for GitHub Actions was set for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":13},{"action":"business.set_actions_fork_pr_approvals_policy","description":"The policy for requiring approvals for workflows from public forks was changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#enforcing-a-policy-for-fork-pull-requests-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":339},{"action":"business.set_actions_private_fork_pr_approvals_policy","description":"The policy for requiring approval for fork pull request workflows from collaborators without write access to private repos was changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#enforcing-a-policy-for-fork-pull-requests-in-private-repositories","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":340},{"action":"business.set_actions_retention_limit","description":"The retention period for GitHub Actions artifacts and logs was changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#enforcing-a-policy-for-artifact-and-log-retention-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":341},{"action":"business.set_default_workflow_permissions","description":"The default permissions granted to the GITHUB_TOKEN when running workflows were changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#enforcing-a-policy-for-workflow-permissions-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":13},{"action":"business.set_fork_pr_workflows_policy","description":"The policy for fork pull request workflows was changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#enforcing-a-policy-for-fork-pull-requests-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":340},{"action":"business.set_workflow_permission_can_approve_pr","description":"The policy for allowing GitHub Actions to create and approve pull requests was changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#preventing-github-actions-from-creating-or-approving-pull-requests","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":13},{"action":"gist.create","description":"A gist was created.","docs_reference_links":"N/A","fieldsIndex":342},{"action":"gist.destroy","description":"A gist was deleted.","docs_reference_links":"N/A","fieldsIndex":342},{"action":"gist.visibility_change","description":"The visibility of a gist was updated.","docs_reference_links":"N/A","fieldsIndex":342},{"action":"git_signing_ssh_public_key.create","description":"An SSH key was added to a user account as a Git commit signing key.","docs_reference_links":"/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key","docs_reference_titles":"/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key","fieldsIndex":343},{"action":"git_signing_ssh_public_key.delete","description":"An SSH key was removed from a user account as a Git commit signing key.","docs_reference_links":"/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key","docs_reference_titles":"/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key","fieldsIndex":344},{"action":"gpg_key.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":345},{"action":"gpg_key.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":345},{"action":"marketplace_listing_plan.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":346},{"action":"marketplace_listing_plan.publish","description":"N/A","docs_reference_links":"N/A","fieldsIndex":346},{"action":"marketplace_listing_plan.retire","description":"N/A","docs_reference_links":"N/A","fieldsIndex":346},{"action":"marketplace_listing_plan.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":346},{"action":"mcp_registry.allowlist_add_server","description":"A server was added to an MCP registry allowlist.","docs_reference_links":"N/A","fieldsIndex":347},{"action":"mcp_registry.allowlist_create","description":"An MCP registry allowlist was created.","docs_reference_links":"N/A","fieldsIndex":348},{"action":"mcp_registry.allowlist_delete","description":"An MCP registry allowlist was deleted.","docs_reference_links":"N/A","fieldsIndex":349},{"action":"mcp_registry.allowlist_remove_server","description":"A server was removed from an MCP registry allowlist.","docs_reference_links":"N/A","fieldsIndex":347},{"action":"mcp_registry.allowlist_set_server_entries","description":"Entries were set for a server in an MCP registry allowlist.","docs_reference_links":"N/A","fieldsIndex":350},{"action":"mcp_registry.allowlist_update","description":"An MCP registry allowlist was updated.","docs_reference_links":"N/A","fieldsIndex":351},{"action":"mcp_registry.settings_update","description":"An MCP policy setting for the business was updated.","docs_reference_links":"N/A","fieldsIndex":352},{"action":"oauth_access.create","description":"An OAuth access token was generated.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps, /authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps, Managing your personal access tokens","fieldsIndex":353},{"action":"oauth_access.destroy","description":"An OAuth access token was deleted.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps","fieldsIndex":354},{"action":"oauth_access.regenerate","description":"An OAuth access token was regenerated.","docs_reference_links":"N/A","fieldsIndex":353},{"action":"oauth_access.revoke","description":"An OAuth access token was revoked.","docs_reference_links":"N/A","fieldsIndex":355},{"action":"oauth_access.update","description":"An OAuth access token was updated.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"oauth_authorization.create","description":"An authorization for an OAuth application was created.","docs_reference_links":"/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps","docs_reference_titles":"/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps","fieldsIndex":353},{"action":"oauth_authorization.destroy","description":"An authorization for an OAuth application was deleted.","docs_reference_links":"/apps/using-github-apps/reviewing-your-authorized-integrations","docs_reference_titles":"Reviewing and revoking authorization of GitHub Apps","fieldsIndex":356},{"action":"oauth_authorization.update","description":"An authorization for an OAuth application was updated.","docs_reference_links":"/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps","docs_reference_titles":"/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps","fieldsIndex":357},{"action":"passkey.register","description":"A new passkey was added.","docs_reference_links":"N/A","fieldsIndex":358},{"action":"passkey.remove","description":"A new passkey was removed.","docs_reference_links":"N/A","fieldsIndex":358},{"action":"personal_access_token.create","description":"Triggered when you create a fine-grained personal access token.","docs_reference_links":"N/A","fieldsIndex":359},{"action":"personal_access_token.credential_regenerated","description":"Triggered when you regenerate a fine-grained personal access token.","docs_reference_links":"N/A","fieldsIndex":360},{"action":"personal_access_token.credential_revoked","description":"A fine-grained personal access token was revoked by GitHub Advanced Security.","docs_reference_links":"/code-security/getting-started/github-security-features#secret-scanning-alerts-for-users","docs_reference_titles":"/code-security/getting-started/github-security-features#secret-scanning-alerts-for-users","fieldsIndex":361},{"action":"personal_access_token.destroy","description":"Triggered when you delete a fine-grained personal access token.","docs_reference_links":"N/A","fieldsIndex":362},{"action":"personal_access_token.update","description":"A fine-grained personal access token was updated.","docs_reference_links":"/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#fine-grained-personal-access-tokens","docs_reference_titles":"/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#fine-grained-personal-access-tokens","fieldsIndex":363},{"action":"repo.temporary_access_granted","description":"Temporary access was enabled for a repository.","docs_reference_links":"/admin/user-management/managing-repositories-in-your-enterprise/accessing-user-owned-repositories-in-your-enterprise","docs_reference_titles":"Accessing user-owned repositories in your enterprise","fieldsIndex":104},{"action":"sandbox.add_port","description":"A forwarded port was added to a sandbox.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"sandbox.create","description":"A sandbox was created.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"sandbox.delete","description":"A sandbox was deleted.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"sandbox.generate_token","description":"A token was generated for a sandbox.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"sandbox.remove_port","description":"A forwarded port was removed from a sandbox.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"sandbox.resume","description":"A sandbox was resumed.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"sandbox.stop","description":"A sandbox was stopped.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"security_key.register","description":"A security key was registered for an account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"security_key.remove","description":"A security key was removed from an account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"social_identity.linked","description":"A user linked a social identity to their account.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"social_identity.unlinked","description":"A user unlinked a social identity from their account.","docs_reference_links":"N/A","fieldsIndex":16},{"action":"social_identity.unlinked_all","description":"A user unlinked all social identities from their account.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"sponsors.sponsored_developer_update_newsletter_send","description":"Triggered when you send an email update to your sponsors.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/contacting-your-sponsors","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/contacting-your-sponsors","fieldsIndex":15},{"action":"sponsors.waitlist_join","description":"You join the waitlist to join GitHub Sponsors.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","fieldsIndex":303},{"action":"successor_invitation.accept","description":"Triggered when you accept a succession invitation.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories","docs_reference_titles":"Maintaining ownership continuity of your personal account's repositories","fieldsIndex":0},{"action":"successor_invitation.cancel","description":"Triggered when you cancel a succession invitation.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories","docs_reference_titles":"Maintaining ownership continuity of your personal account's repositories","fieldsIndex":0},{"action":"successor_invitation.create","description":"Triggered when you create a succession invitation.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories","docs_reference_titles":"Maintaining ownership continuity of your personal account's repositories","fieldsIndex":0},{"action":"successor_invitation.decline","description":"Triggered when you decline a succession invitation.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories","docs_reference_titles":"Maintaining ownership continuity of your personal account's repositories","fieldsIndex":0},{"action":"successor_invitation.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"successor_invitation.revoke","description":"Triggered when you revoke a succession invitation.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories","docs_reference_titles":"Maintaining ownership continuity of your personal account's repositories","fieldsIndex":364},{"action":"trusted_device.register","description":"A new trusted device was added.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"trusted_device.remove","description":"A trusted device was removed.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.abort","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.complete","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.ignore","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.staff_approve","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.staff_decline","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.start","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"two_factor_account_recovery.two_factor_destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_authentication.add_factor","description":"A secondary authentication factor was added to a user account.","docs_reference_links":"/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication","docs_reference_titles":"/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication","fieldsIndex":15},{"action":"two_factor_authentication.disabled","description":"Two-factor authentication was disabled for a user account.","docs_reference_links":"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/disabling-two-factor-authentication-for-your-personal-account","docs_reference_titles":"Disabling two-factor authentication for your personal account","fieldsIndex":15},{"action":"two_factor_authentication.enabled","description":"Two-factor authentication was enabled for a user account.","docs_reference_links":"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication","docs_reference_titles":"Configuring two-factor authentication","fieldsIndex":15},{"action":"two_factor_authentication.password_reset_fallback_sms","description":"A one-time password code was sent to a user account fallback phone number.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_authentication.recovery_codes_regenerated","description":"Two factor recovery codes were regenerated for a user account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"two_factor_authentication.remove_factor","description":"A secondary authentication factor was removed from a user account.","docs_reference_links":"/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication","docs_reference_titles":"/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication","fieldsIndex":15},{"action":"two_factor_authentication.sign_in_fallback_sms","description":"A one-time password code was sent to a user account fallback phone number.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_authentication.update_fallback","description":"The two-factor authentication fallback for a user account was changed.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.add_email","description":"An email address was added to a user account.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/adding-an-email-address-to-your-github-account","docs_reference_titles":"Adding an email address to your GitHub account","fieldsIndex":365},{"action":"user.async_delete","description":"An asynchronous job was started to destroy a user account, eventually triggering a user.delete event.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.audit_log_export","description":"Audit log entries were exported.","docs_reference_links":"N/A","fieldsIndex":115},{"action":"user.block_user","description":"A user was blocked by another user.","docs_reference_links":"N/A","fieldsIndex":117},{"action":"user.change_password","description":"A user changed their password.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.codespaces_trusted_repo_access_granted","description":"Triggered when you allow the codespaces you create for a repository to access other repositories owned by your personal account.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces","docs_reference_titles":"Managing access to other repositories within your codespace","fieldsIndex":366},{"action":"user.codespaces_trusted_repo_access_revoked","description":"Triggered when you disallow the codespaces you create for a repository to access other repositories owned by your personal account.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces","docs_reference_titles":"Managing access to other repositories within your codespace","fieldsIndex":120},{"action":"user.create","description":"A new user account was created.","docs_reference_links":"N/A","fieldsIndex":367},{"action":"user.create_integration_secret","description":"A user secret for Codespaces was created.","docs_reference_links":"N/A","fieldsIndex":368},{"action":"user.creation_rate_limit_exceeded","description":"The rate of creation of user accounts, applications, issues, pull requests or other resources exceeded the configured rate limits, or too many users were followed too quickly.","docs_reference_links":"N/A","fieldsIndex":16},{"action":"user.delete","description":"A user account was destroyed by an asynchronous job.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.demote","description":"A site administrator was demoted to an ordinary user account.","docs_reference_links":"N/A","fieldsIndex":364},{"action":"user.destroy","description":"A user deleted his or her account, triggering user.async_delete.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.device_verification_failure","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.device_verification_requested","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.device_verification_success","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.disable_collaborators_only","description":"N/A","docs_reference_links":"N/A","fieldsIndex":364},{"action":"user.disable_contributors_only","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.disable_sockpuppet_disallowed","description":"N/A","docs_reference_links":"N/A","fieldsIndex":369},{"action":"user_email.confirm_claim","description":"An enterprise managed user claimed an email address.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user_email.mark_as_unclaimed","description":"N/A","docs_reference_links":"An enterprise managed user unclaimed an email address.","docs_reference_titles":"An, GitHub Help Documentation, managed, user, unclaimed, an, email, address.","fieldsIndex":15},{"action":"user.enable_collaborators_only","description":"N/A","docs_reference_links":"N/A","fieldsIndex":364},{"action":"user.enable_contributors_only","description":"N/A","docs_reference_links":"N/A","fieldsIndex":369},{"action":"user.enable_sockpuppet_disallowed","description":"N/A","docs_reference_links":"N/A","fieldsIndex":369},{"action":"user.failed_login","description":"A user tried to sign in with an incorrect username, password, or two-factor authentication code.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.forgot_password","description":"A user requested a password reset.","docs_reference_links":"/authentication/keeping-your-account-and-data-secure/updating-your-github-access-credentials","docs_reference_titles":"/authentication/keeping-your-account-and-data-secure/updating-your-github-access-credentials","fieldsIndex":370},{"action":"user.grant_github_developer","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.hide_private_contributions_count","description":"A user changed the visibility of their private contributions. The number of contributions to private repositories on the user's profile are now hidden.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-github-profile/managing-contribution-settings-on-your-profile/showing-your-private-contributions-and-achievements-on-your-profile","docs_reference_titles":"Manage visibility settings for private contributions","fieldsIndex":15},{"action":"user.login","description":"A user signed in.","docs_reference_links":"N/A","fieldsIndex":371},{"action":"user.logout","description":"A user signed out.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.new_device_used","description":"A user signed in from a new device.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.promote","description":"An ordinary user account was promoted to a site administrator.","docs_reference_links":"N/A","fieldsIndex":364},{"action":"user.recreate","description":"A user's account was restored.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.remove_email","description":"An email address was removed from a user account.","docs_reference_links":"N/A","fieldsIndex":365},{"action":"user.remove_integration_secret","description":"A user secret for Codespaces was deleted.","docs_reference_links":"N/A","fieldsIndex":372},{"action":"user.rename","description":"A username was changed.","docs_reference_links":"N/A","fieldsIndex":373},{"action":"user.reset_password","description":"A user reset their account password.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user_session.country_change","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.show_private_contributions_count","description":"A user changed the visibility of their private contributions. The number of contributions to private repositories on the user's profile are now shown.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-github-profile/managing-contribution-settings-on-your-profile/showing-your-private-contributions-and-achievements-on-your-profile","docs_reference_titles":"Manage visibility settings for private contributions","fieldsIndex":15},{"action":"user.sign_in_from_unrecognized_device","description":"A user signed in from an unrecognized device.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.sign_in_from_unrecognized_device_and_location","description":"A user signed in from an unrecognized device and location.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user_status.destroy","description":"Triggered when you clear the status on your profile.","docs_reference_links":"N/A","fieldsIndex":374},{"action":"user_status.update","description":"Triggered when you set or change the status on your profile.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/personalizing-your-profile#setting-a-status","docs_reference_titles":"Personalize your profile","fieldsIndex":375},{"action":"user.suspend","description":"A user account was suspended.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"user.toggle_warn_private_email","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.two_factor_challenge_failure","description":"A 2FA challenge issued for a user account failed.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_challenge_success","description":"A 2FA challenge issued for a user account succeeded.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_recover","description":"A user used their 2FA recovery codes.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_recovery_codes_downloaded","description":"A user downloaded 2FA recovery codes for their account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_recovery_codes_printed","description":"A user printed 2FA recovery codes for their account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_recovery_codes_viewed","description":"A user viewed 2FA recovery codes for their account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_requested","description":"A user was prompted for a two-factor authentication code.","docs_reference_links":"/authentication/securing-your-account-with-two-factor-authentication-2fa/accessing-github-using-two-factor-authentication","docs_reference_titles":"/authentication/securing-your-account-with-two-factor-authentication-2fa/accessing-github-using-two-factor-authentication","fieldsIndex":15},{"action":"user.unblock_user","description":"A user was unblocked by another user.","docs_reference_links":"N/A","fieldsIndex":376},{"action":"user.unsuspend","description":"A user account was unsuspended.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"user.update_integration_secret","description":"A user secret for Codespaces was updated.","docs_reference_links":"N/A","fieldsIndex":368},{"action":"user.update_new_repository_default_branch_setting","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"api.request","description":"An API request was made to an endpoint for the enterprise, or an enterprise owned resource. This event is only included if API Request Events is enabled in the enterprise's audit log settings. This event is only available via audit log streaming.","docs_reference_links":"/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/streaming-the-audit-log-for-your-enterprise#enabling-audit-log-streaming-of-api-requests","docs_reference_titles":"Streaming the audit log for your enterprise","fieldsIndex":377},{"action":"audit_log_streaming.check","description":"A manual check of the endpoint configured for audit log streaming was performed.","docs_reference_links":"N/A","fieldsIndex":378},{"action":"audit_log_streaming.create","description":"An endpoint was added for audit log streaming.","docs_reference_links":"N/A","fieldsIndex":379},{"action":"audit_log_streaming.destroy","description":"An audit log streaming endpoint was deleted.","docs_reference_links":"N/A","fieldsIndex":380},{"action":"audit_log_streaming.update","description":"An endpoint configuration was updated for audit log streaming, such as the stream was paused, enabled, or disabled.","docs_reference_links":"N/A","fieldsIndex":381},{"action":"business.add_disallowed_two_factor_method","description":"An enterprise prevented access to resources by users with the given two-factor method.","docs_reference_links":"N/A","fieldsIndex":382},{"action":"business.add_organization","description":"An organization was added to an enterprise.","docs_reference_links":"N/A","fieldsIndex":383},{"action":"business_advanced_security.disabled","description":"GitHub Advanced Security was disabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_advanced_security.disabled_for_new_repos","description":"GitHub Advanced Security was disabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_advanced_security.disabled_for_new_user_namespace_repos","description":"GitHub Advanced Security was disabled for new user namespace repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_advanced_security.enabled","description":"GitHub Advanced Security was enabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_advanced_security.enabled_for_new_repos","description":"GitHub Advanced Security was enabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_advanced_security.enabled_for_new_user_namespace_repos","description":"GitHub Advanced Security was enabled for new user namespace repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business.advanced_security_metered_usage_lock","description":"Enablement for Advanced Security features on new repositories has been locked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":121},{"action":"business.advanced_security_metered_usage_unlock","description":"Enablement for Advanced Security features on new repositories has been unlocked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":121},{"action":"business.advanced_security_policy_update","description":"An enterprise owner created, updated, or removed a policy for GitHub Advanced Security.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-code-security-and-analysis-for-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":384},{"action":"business.advanced_security_repo_admin_enablement_policy_update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":384},{"action":"business_advanced_security.user_namespace_repos_disabled","description":"GitHub Advanced Security was disabled for user namespace repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_advanced_security.user_namespace_repos_enabled","description":"GitHub Advanced Security was enabled for user namespace repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business.audit_log_export","description":"An export of the enterprise audit log was created. If the export included a query, the log will list the query used and the number of audit log entries matching that query.","docs_reference_links":"admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/exporting-audit-log-activity-for-your-enterprise","docs_reference_titles":"Exporting audit log activity for your enterprise","fieldsIndex":115},{"action":"business.audit_log_git_event_export","description":"An export of the enterprise's Git events was created.","docs_reference_links":"admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/exporting-audit-log-activity-for-your-enterprise","docs_reference_titles":"Exporting audit log activity for your enterprise","fieldsIndex":116},{"action":"business.cancel_admin_invitation","description":"An invitation for someone to be an owner of an enterprise was canceled.","docs_reference_links":"N/A","fieldsIndex":385},{"action":"business.cancel_billing_manager_invitation","description":"An invitation for someone to be an billing manager of an enterprise was canceled.","docs_reference_links":"N/A","fieldsIndex":386},{"action":"business.cancel_trial","description":"The trial of GitHub Enterprise Cloud was canceled.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":337},{"action":"business.change_seats_plan_type","description":"The seats plan type was changed for an enterprise.","docs_reference_links":"N/A","fieldsIndex":387},{"action":"business.clear_actions_settings","description":"An enterprise owner or site administrator cleared GitHub Actions policy settings for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":388},{"action":"business.clear_default_repository_permission","description":"An enterprise owner cleared the base repository permission policy setting for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-base-repository-permissions","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":13},{"action":"business.clear_disallowed_two_factor_methods","description":"Cleared two-factor authentication restrictions for an enterprise.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"business.clear_members_can_create_repos","description":"An enterprise owner cleared a restriction on repository creation in organizations in the enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#setting-a-policy-for-repository-creation","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":389},{"action":"business.code_quality_access_policy_update","description":"The policy for Code Quality access was updated for an enterprise.","docs_reference_links":"N/A","fieldsIndex":384},{"action":"business.code_quality_enablement_policy_update","description":"The policy for Code Quality enablement was updated for an enterprise.","docs_reference_links":"N/A","fieldsIndex":384},{"action":"business.code_scanning_ai_findings_policy_update","description":"The policy for Code scanning AI findings was updated for an enterprise.","docs_reference_links":"N/A","fieldsIndex":384},{"action":"business.code_scanning_autofix_policy_update","description":"The policy for Code scanning autofix was updated for an enterprise.","docs_reference_links":"N/A","fieldsIndex":384},{"action":"business.code_scanning_autofix_third_party_tools_policy_update","description":"The policy for Code scanning autofix third party tools was updated for an enterprise.","docs_reference_links":"/code-security/getting-started/github-security-features#available-with-github-code-security","docs_reference_titles":"/code-security/getting-started/github-security-features#available-with-github-code-security","fieldsIndex":384},{"action":"business.code_security_enablement_policy_update","description":"The policy for Code Security enablement was updated for an enterprise.","docs_reference_links":"/code-security/getting-started/github-security-features#available-with-github-code-security","docs_reference_titles":"/code-security/getting-started/github-security-features#available-with-github-code-security","fieldsIndex":384},{"action":"business.code_security_metered_usage_lock","description":"Enablement for Code Security features on new repositories has been locked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":121},{"action":"business.code_security_metered_usage_unlock","description":"Enablement for Code Security features on new repositories has been unlocked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":121},{"action":"business.connect_usage_metrics_export","description":"Server statistics were exported for the enterprise.","docs_reference_links":"/admin/monitoring-activity-in-your-enterprise/analyzing-how-your-team-works-with-server-statistics/exporting-server-statistics","docs_reference_titles":"Exporting Server Statistics","fieldsIndex":337},{"action":"business.convert_trial","description":"The enterprise account on a trial of GitHub Enterprise Cloud was upgraded to a paid enterprise account.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":337},{"action":"business.create","description":"An enterprise was created.","docs_reference_links":"N/A","fieldsIndex":337},{"action":"business.create_trial","description":"A trial of GitHub Enterprise Cloud began.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":337},{"action":"business.delete","description":"The enterprise was deleted.","docs_reference_links":"/admin/overview/deleting-an-enterprise-account","docs_reference_titles":"Deleting an enterprise account","fieldsIndex":337},{"action":"business.delete_custom_image","description":"A custom image was deleted for an enterprise.","docs_reference_links":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","docs_reference_titles":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","fieldsIndex":13},{"action":"business.delete_custom_image_version","description":"A custom image version was deleted for an enterprise.","docs_reference_links":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","docs_reference_titles":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","fieldsIndex":13},{"action":"business_dependabot_alerts.disable","description":"Dependabot alerts were disabled for your enterprise.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"business_dependabot_alerts.enable","description":"Dependabot alerts were enabled for your enterprise.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"business_dependabot_alerts_new_repos.disable","description":"Dependabot alerts were disabled for new repositories in your enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_dependabot_alerts_new_repos.enable","description":"Dependabot alerts were enabled for new repositories in your enterprise.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"business.dependabot_alerts_repo_admin_enablement_policy_update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":384},{"action":"business.disable_oidc","description":"OIDC single sign-on was disabled for an enterprise.","docs_reference_links":"/admin/identity-and-access-management/using-enterprise-managed-users-for-iam/configuring-oidc-for-enterprise-managed-users","docs_reference_titles":"Configuring OIDC for Enterprise Managed Users","fieldsIndex":15},{"action":"business.disable_open_scim","description":"SCIM provisioning for custom integrations that use the REST API was disabled for the enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.disable_saml","description":"SAML single sign-on was disabled for an enterprise.","docs_reference_links":"N/A","fieldsIndex":390},{"action":"business.disable_source_ip_disclosure","description":"Display of IP addresses within audit log events for the enterprise was disabled.","docs_reference_links":"/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise","docs_reference_titles":"Displaying IP addresses in the audit log for your enterprise","fieldsIndex":15},{"action":"business.disable_two_factor_requirement","description":"The requirement for members to have two-factor authentication enabled to access an enterprise was disabled.","docs_reference_links":"N/A","fieldsIndex":337},{"action":"business.enable_oidc","description":"OIDC single sign-on was enabled for an enterprise.","docs_reference_links":"/admin/identity-and-access-management/using-enterprise-managed-users-for-iam/configuring-oidc-for-enterprise-managed-users","docs_reference_titles":"Configuring OIDC for Enterprise Managed Users","fieldsIndex":15},{"action":"business.enable_open_scim","description":"SCIM provisioning for custom integrations that use the REST API was enabled for the enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.enable_saml","description":"SAML single sign-on was enabled for an enterprise.","docs_reference_links":"N/A","fieldsIndex":390},{"action":"business.enable_source_ip_disclosure","description":"Display of IP addresses within audit log events for the enterprise was enabled.","docs_reference_links":"/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise","docs_reference_titles":"Displaying IP addresses in the audit log for your enterprise","fieldsIndex":15},{"action":"business.enable_two_factor_requirement","description":"The requirement for members to have two-factor authentication enabled to access an enterprise was enabled.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"business.enterprise_server_license_download","description":"A GitHub Enterprise Server license was downloaded.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.enterprise_teams_limit_reached","description":"An enterprise has reached its enterprise teams limit.","docs_reference_links":"N/A","fieldsIndex":391},{"action":"business.enterprise_teams_limit_warning","description":"An enterprise is approaching its enterprise teams limit.","docs_reference_links":"N/A","fieldsIndex":391},{"action":"business.expire_trial","description":"The trial of GitHub Enterprise Cloud expired.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":337},{"action":"business.github_models_billing_disabled","description":"GitHub Models billing was disabled for the business.","docs_reference_links":"N/A","fieldsIndex":337},{"action":"business.github_models_billing_enabled","description":"GitHub Models billing was enabled for the business.","docs_reference_links":"N/A","fieldsIndex":337},{"action":"business.import_license_usage","description":"License usage information was imported from a GitHub Enterprise Server instance to an enterprise account on GitHub.com.","docs_reference_links":"/billing/managing-your-license-for-github-enterprise/syncing-license-usage-between-github-enterprise-server-and-github-enterprise-cloud#manually-uploading-github-enterprise-server-license-usage","docs_reference_titles":"Syncing license usage from GitHub Enterprise Server to Cloud","fieldsIndex":392},{"action":"business.invite_admin","description":"An invitation for someone to be an enterprise owner of an enterprise was sent.","docs_reference_links":"N/A","fieldsIndex":385},{"action":"business.invite_billing_manager","description":"An invitation for someone to be a billing manager of an enterprise was sent.","docs_reference_links":"N/A","fieldsIndex":385},{"action":"business.invite_unaffiliated_member","description":"An invitation for someone to join an enterprise was sent.","docs_reference_links":"N/A","fieldsIndex":385},{"action":"business.members_can_update_protected_branches.clear","description":"An enterprise owner unset a policy for whether members of an enterprise can update protected branches on repositories for individual organizations. Organization owners can choose whether to allow updating protected branches settings.","docs_reference_links":"N/A","fieldsIndex":337},{"action":"business.members_can_update_protected_branches.disable","description":"The ability for enterprise members to update branch protection rules was disabled. Only enterprise owners can update protected branches.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"business.members_can_update_protected_branches.enable","description":"The ability for enterprise members to update branch protection rules was enabled. Enterprise owners and members can update protected branches.","docs_reference_links":"N/A","fieldsIndex":388},{"action":"business.members_limit_reached","description":"An enterprise has reached its members limit.","docs_reference_links":"N/A","fieldsIndex":391},{"action":"business.organizations_limit_reached","description":"An enterprise has reached its organizations limit.","docs_reference_links":"N/A","fieldsIndex":391},{"action":"business.organizations_limit_warning","description":"An enterprise is approaching its organizations limit.","docs_reference_links":"N/A","fieldsIndex":391},{"action":"business.proxy_security_header_disabled","description":"The proxy security header was disabled for an enterprise. All users on the network can now access GitHub, unless blocked by other means.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.proxy_security_header_enabled","description":"The proxy security header was enabled for an enterprise. When the header is provided in requests, only Enterprise Managed Users matching the header will be able to access GitHub.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.proxy_security_header_unsatisfied","description":"A user outside the enterprise tried to access GitHub while the proxy security header was enabled and provided in the request.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"business.recovery_code_failed","description":"An enterprise owner failed to sign into a enterprise with an external identity provider (IdP) using a recovery code.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/accessing-your-enterprise-account-if-your-identity-provider-is-unavailable","docs_reference_titles":"Accessing your enterprise account if your identity provider is unavailable","fieldsIndex":393},{"action":"business.recovery_code_used","description":"An enterprise owner successfully signed into an enterprise with an external identity provider (IdP) using a recovery code.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/accessing-your-enterprise-account-if-your-identity-provider-is-unavailable","docs_reference_titles":"Accessing your enterprise account if your identity provider is unavailable","fieldsIndex":337},{"action":"business.recovery_codes_downloaded","description":"An enterprise owner downloaded the enterprise's SSO recovery codes.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your enterprise account's single sign-on recovery codes","fieldsIndex":337},{"action":"business.recovery_codes_generated","description":"An enterprise owner generated the enterprise's SSO recovery codes.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your enterprise account's single sign-on recovery codes","fieldsIndex":337},{"action":"business.recovery_codes_printed","description":"An enterprise owner printed the enterprise's SSO recovery codes.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your enterprise account's single sign-on recovery codes","fieldsIndex":337},{"action":"business.recovery_codes_viewed","description":"An enterprise owner viewed the enterprise's SSO recovery codes.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your enterprise account's single sign-on recovery codes","fieldsIndex":337},{"action":"business.remove_disallowed_two_factor_method","description":"Removed a two-factor authentication method restriction for an enterprise.","docs_reference_links":"N/A","fieldsIndex":394},{"action":"business.remove_organization","description":"An organization was removed from an enterprise.","docs_reference_links":"N/A","fieldsIndex":336},{"action":"business.rename_slug","description":"The slug for the enterprise URL was renamed.","docs_reference_links":"N/A","fieldsIndex":337},{"action":"business.restore","description":"The deleted enterprise was restored.","docs_reference_links":"N/A","fieldsIndex":337},{"action":"business.revoke_external_identity","description":"The external identity for a member in an enterprise was revoked.","docs_reference_links":"N/A","fieldsIndex":337},{"action":"business.revoke_sso_session","description":"The SAML single sign-on session for a member in an enterprise was revoked.","docs_reference_links":"N/A","fieldsIndex":337},{"action":"business.secret_protection_metered_usage_lock","description":"Enablement for Secret Protection features on new repositories has been locked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":121},{"action":"business.secret_protection_metered_usage_unlock","description":"Enablement for Secret Protection features on new repositories has been unlocked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":121},{"action":"business_secret_scanning_automatic_validity_checks.disabled","description":"Automatic partner validation checks have been disabled at the business level","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise#managing-advanced-security-features","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise#managing-advanced-security-features","fieldsIndex":0},{"action":"business_secret_scanning_automatic_validity_checks.enabled","description":"Automatic partner validation checks have been enabled at the business level","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise#managing-advanced-security-features","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise#managing-advanced-security-features","fieldsIndex":0},{"action":"business_secret_scanning_custom_pattern.create","description":"An enterprise-level custom pattern was created for secret scanning.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-enterprise-account","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":11},{"action":"business_secret_scanning_custom_pattern.delete","description":"An enterprise-level custom pattern was removed from secret scanning.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_secret_scanning_custom_pattern.publish","description":"An enterprise-level custom pattern was published for secret scanning.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_secret_scanning_custom_pattern_push_protection.disabled","description":"Push protection for a custom pattern for secret scanning was disabled for your enterprise.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-enterprise-account","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":0},{"action":"business_secret_scanning_custom_pattern_push_protection.enabled","description":"Push protection for a custom pattern for secret scanning was enabled for your enterprise.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-enterprise-account","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":0},{"action":"business_secret_scanning_custom_pattern.update","description":"Changes to an enterprise-level custom pattern were saved and a dry run was executed for secret scanning.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_secret_scanning.disable","description":"Secret scanning was disabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning.disabled_for_new_repos","description":"Secret scanning was disabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning.enable","description":"Secret scanning was enabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning.enabled_for_new_repos","description":"Secret scanning was enabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_secret_scanning_generic_secrets.disabled","description":"Generic secrets have been disabled at the business level","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_secret_scanning_generic_secrets.enabled","description":"Generic secrets have been enabled at the business level","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_secret_scanning_non_provider_patterns.disabled","description":"Secret scanning for non-provider patterns was disabled at the enterprise level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":15},{"action":"business_secret_scanning_non_provider_patterns.enabled","description":"Secret scanning for non-provider patterns was enabled at the enterprise level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":15},{"action":"business_secret_scanning_push_protection_custom_message.disable","description":"The custom message triggered by an attempted push to a push-protected repository was disabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning_push_protection_custom_message.enable","description":"The custom message triggered by an attempted push to a push-protected repository was enabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning_push_protection_custom_message.update","description":"The custom message triggered by an attempted push to a push-protected repository was updated for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning_push_protection.disable","description":"Push protection for secret scanning was disabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":0},{"action":"business_secret_scanning_push_protection.disabled_for_new_repos","description":"Push protection for secret scanning was disabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning_push_protection.enable","description":"Push protection for secret scanning was enabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning_push_protection.enabled_for_new_repos","description":"Push protection for secret scanning was enabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_secret_scanning_push_protection_pattern_configuration.push_protection_setting_changed","description":"The push protection setting was updated for a secret type for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":144},{"action":"business_secret_scanning_push_protection_pattern_configuration.updated","description":"The push protection pattern configuration was updated for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":145},{"action":"business.secret_scanning_repo_admin_settings_policy_update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":384},{"action":"business.sso_response","description":"A SAML single sign-on (SSO) response was generated when a member attempted to authenticate with your enterprise. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"N/A","fieldsIndex":395},{"action":"business.trial_email_verification_failed","description":"A trial email verification attempt failed for a GitHub Enterprise Cloud trial.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":337},{"action":"business.trial_email_verification_requested","description":"A trial email verification resend was requested for a GitHub Enterprise Cloud trial.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":337},{"action":"business.trial_email_verification_sent","description":"A trial email verification was sent for a GitHub Enterprise Cloud trial.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":337},{"action":"business.trial_email_verified","description":"The trial email was successfully verified for a GitHub Enterprise Cloud trial.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":337},{"action":"business.update_actions_settings","description":"An enterprise owner or site administrator updated GitHub Actions policy settings for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":396},{"action":"business.update_default_repository_permission","description":"The base repository permission setting was updated for all organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-base-repository-permissions","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":397},{"action":"business.update_emu_repo_self_hosted_runners_policy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":398},{"action":"business.update_member_repository_creation_permission","description":"The repository creation setting was updated for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-repository-creation","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":399},{"action":"business.update_member_repository_invitation_permission","description":"The policy setting for enterprise members inviting outside collaborators to repositories was updated.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-inviting-outside-collaborators-to-repositories","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":400},{"action":"business.update_repo_self_hosted_runners_policy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":401},{"action":"business.update_saml_provider_settings","description":"The SAML single sign-on provider settings for an enterprise were updated.","docs_reference_links":"N/A","fieldsIndex":390},{"action":"business.update_unaffiliated_users_policy","description":"The policy for removing user accounts when removing the last organization membership was updated.","docs_reference_links":"/admin/enforcing-policies/enforcing-policies-for-your-enterprise/control-offboarding","docs_reference_titles":"Controlling user offboarding with the unaffiliated users policy","fieldsIndex":402},{"action":"business.upgrade_from_organization","description":"The organization was upgraded to an enterprise account.","docs_reference_links":"/billing/managing-the-plan-for-your-github-account/upgrading-your-accounts-plan#upgrading-your-organizations-plan","docs_reference_titles":"Upgrading your account's plan","fieldsIndex":337},{"action":"copilot.cfb_enterprise_org_enablement_changed","description":"The Copilot enablement policy changed at the enterprise level to either allow or disable access for all organizations, or to allow access for selected organizations.","docs_reference_links":"N/A","fieldsIndex":403},{"action":"copilot.cfb_enterprise_settings_changed","description":"Copilot feature settings were changed at the enterprise level.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.clickwrap_save_event","description":"The GitHub Copilot Product Terms or Pre-Release Preview Terms were accepted.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.enterprise_enablement_changed","description":"Copilot access was enabled or disabled at the enterprise level.","docs_reference_links":"N/A","fieldsIndex":403},{"action":"enterprise.configure_self_hosted_jit_runner","description":"A new just-in-time GitHub Actions self-hosted runner was configured","docs_reference_links":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-an-enterprise","docs_reference_titles":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-an-enterprise","fieldsIndex":11},{"action":"enterprise_domain.approve","description":"A domain was approved for an enterprise.","docs_reference_links":"/admin/configuration/configuring-your-enterprise/verifying-or-approving-a-domain-for-your-enterprise#approving-a-domain-for-your-enterprise-account","docs_reference_titles":"Verifying or approving a domain for your enterprise","fieldsIndex":163},{"action":"enterprise_domain.create","description":"A domain was added to an enterprise.","docs_reference_links":"/admin/configuration/configuring-your-enterprise/verifying-or-approving-a-domain-for-your-enterprise#verifying-a-domain-for-your-enterprise-account","docs_reference_titles":"Verifying or approving a domain for your enterprise","fieldsIndex":163},{"action":"enterprise_domain.destroy","description":"A domain was removed from an enterprise.","docs_reference_links":"/admin/configuration/configuring-your-enterprise/verifying-or-approving-a-domain-for-your-enterprise#removing-an-approved-or-verified-domain","docs_reference_titles":"Verifying or approving a domain for your enterprise","fieldsIndex":404},{"action":"enterprise_domain.verify","description":"A domain was verified for an enterprise.","docs_reference_links":"/admin/configuration/configuring-your-enterprise/verifying-or-approving-a-domain-for-your-enterprise#verifying-a-domain-for-your-enterprise-account","docs_reference_titles":"Verifying or approving a domain for your enterprise","fieldsIndex":163},{"action":"enterprise.register_self_hosted_runner","description":"A new GitHub Actions self-hosted runner was registered.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-a-repository","docs_reference_titles":"Adding self-hosted runners","fieldsIndex":15},{"action":"enterprise.remove_self_hosted_runner","description":"A GitHub Actions self-hosted runner was removed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners#removing-a-runner-from-a-repository","docs_reference_titles":"Removing self-hosted runners","fieldsIndex":11},{"action":"enterprise_role.assign","description":"An enterprise role was assigned to a user or enterprise team.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/roles-in-an-enterprise","docs_reference_titles":"Abilities of roles in an enterprise","fieldsIndex":405},{"action":"enterprise_role.create","description":"A custom enterprise role was created in an enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/roles-in-an-enterprise","docs_reference_titles":"Abilities of roles in an enterprise","fieldsIndex":406},{"action":"enterprise_role.destroy","description":"A custom enterprise role was deleted in an enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/roles-in-an-enterprise","docs_reference_titles":"Abilities of roles in an enterprise","fieldsIndex":406},{"action":"enterprise_role.revoke","description":"A user or enterprise team was unassigned an enterprise role.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/roles-in-an-enterprise","docs_reference_titles":"Abilities of roles in an enterprise","fieldsIndex":407},{"action":"enterprise_role.update","description":"A custom enterprise role was edited in an enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/roles-in-an-enterprise","docs_reference_titles":"Abilities of roles in an enterprise","fieldsIndex":408},{"action":"enterprise.runner_group_created","description":"A GitHub Actions self-hosted runner group was created.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners#removing-a-runner-from-a-repository","docs_reference_titles":"Removing self-hosted runners","fieldsIndex":409},{"action":"enterprise.runner_group_removed","description":"A GitHub Actions self-hosted runner group was removed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#removing-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":410},{"action":"enterprise.runner_group_renamed","description":"A GitHub Actions self-hosted runner group was renamed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#changing-the-access-policy-of-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":141},{"action":"enterprise.runner_group_runner_removed","description":"The REST API was used to remove a GitHub Actions self-hosted runner from a group.","docs_reference_links":"/rest/actions#remove-a-self-hosted-runner-from-a-group-for-an-organization","docs_reference_titles":"/rest/actions#remove-a-self-hosted-runner-from-a-group-for-an-organization","fieldsIndex":411},{"action":"enterprise.runner_group_runners_added","description":"A GitHub Actions self-hosted runner was added to a group.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#moving-a-self-hosted-runner-to-a-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":410},{"action":"enterprise.runner_group_runners_updated","description":"A GitHub Actions runner group's list of members was updated.","docs_reference_links":"/rest/actions#set-self-hosted-runners-in-a-group-for-an-organization","docs_reference_titles":"/rest/actions#set-self-hosted-runners-in-a-group-for-an-organization","fieldsIndex":410},{"action":"enterprise.runner_group_updated","description":"The configuration of a GitHub Actions self-hosted runner group was changed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#changing-the-access-policy-of-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":409},{"action":"enterprise.runner_group_visiblity_updated","description":"The visibility of a GitHub Actions self-hosted runner group was updated via the REST API.","docs_reference_links":"/rest/actions#update-a-self-hosted-runner-group-for-an-organization","docs_reference_titles":"/rest/actions#update-a-self-hosted-runner-group-for-an-organization","fieldsIndex":143},{"action":"enterprise.self_hosted_runner_offline","description":"The GitHub Actions runner application was stopped. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":148},{"action":"enterprise.self_hosted_runner_online","description":"The GitHub Actions runner application was started. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":148},{"action":"enterprise.self_hosted_runner_updated","description":"The GitHub Actions runner application was updated. This event is not included in the JSON/CSV export.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#about-self-hosted-runners","docs_reference_titles":"Self-hosted runners","fieldsIndex":149},{"action":"enterprise_team.add_member","description":"A new member was added to the enterprise team or an IdP group linked to an enterprise team, or an IdP group was linked to an enterprise team.","docs_reference_links":"N/A","fieldsIndex":412},{"action":"enterprise_team.copilot_assignment","description":"A license for GitHub Copilot was assigned to an enterprise team.","docs_reference_links":"N/A","fieldsIndex":413},{"action":"enterprise_team.copilot_unassignment","description":"A license for GitHub Copilot was unassigned from an enterprise team.","docs_reference_links":"N/A","fieldsIndex":413},{"action":"enterprise_team.create","description":"A new enterprise team was created.","docs_reference_links":"N/A","fieldsIndex":412},{"action":"enterprise_team.destroy","description":"An enterprise team was deleted.","docs_reference_links":"N/A","fieldsIndex":413},{"action":"enterprise_team.remove_member","description":"A member was removed from the enterprise team or an IdP group linked to an enterprise team, or an IdP group was unlinked from an enterprise team.","docs_reference_links":"N/A","fieldsIndex":412},{"action":"enterprise_team.rename","description":"The name of an enterprise team was changed.","docs_reference_links":"N/A","fieldsIndex":414},{"action":"external_group.add_member","description":"A user was added to an external group.","docs_reference_links":"N/A","fieldsIndex":415},{"action":"external_group.delete","description":"An external group was deleted.","docs_reference_links":"N/A","fieldsIndex":416},{"action":"external_group.link","description":"An external group was linked to a GitHub team.","docs_reference_links":"N/A","fieldsIndex":417},{"action":"external_group.provision","description":"An external group was created.","docs_reference_links":"N/A","fieldsIndex":416},{"action":"external_group.remove_member","description":"A user was removed from an external group.","docs_reference_links":"N/A","fieldsIndex":415},{"action":"external_group.scim_api_failure","description":"Failed external group SCIM API request.","docs_reference_links":"/rest/scim/scim","docs_reference_titles":"REST API endpoints for SCIM","fieldsIndex":418},{"action":"external_group.scim_api_success","description":"Successful external group SCIM API request. Excludes GET API requests.","docs_reference_links":"/rest/scim/scim","docs_reference_titles":"REST API endpoints for SCIM","fieldsIndex":419},{"action":"external_group.unlink","description":"An external group was unlinked to a GitHub team.","docs_reference_links":"N/A","fieldsIndex":417},{"action":"external_group.update","description":"An external group was updated.","docs_reference_links":"N/A","fieldsIndex":416},{"action":"external_group.update_display_name","description":"An external group's display name was updated.","docs_reference_links":"N/A","fieldsIndex":416},{"action":"external_identity.deprovision","description":"An external identity was deprovisioned, suspending the linked GitHub user.","docs_reference_links":"N/A","fieldsIndex":420},{"action":"external_identity.provision","description":"An external identity was created and linked to a GitHub user.","docs_reference_links":"N/A","fieldsIndex":420},{"action":"external_identity.scim_api_failure","description":"Failed external identity SCIM API request.","docs_reference_links":"/rest/scim/scim","docs_reference_titles":"REST API endpoints for SCIM","fieldsIndex":421},{"action":"external_identity.scim_api_success","description":"Successful external identity SCIM API request. Excludes GET API requests.","docs_reference_links":"/rest/scim/scim","docs_reference_titles":"REST API endpoints for SCIM","fieldsIndex":422},{"action":"external_identity.update","description":"An external identity was updated.","docs_reference_links":"N/A","fieldsIndex":420},{"action":"ip_allow_list.disable_idp_ip_allowlist_for_web","description":"Identity Provider based IP allow list for web interactions was disabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"ip_allow_list.disable_skip_idp_ip_allowlist_app_access","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"ip_allow_list.disable_user_level_enforcement","description":"IP allow list user level enforcement was disabled.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list.enable_idp_ip_allowlist_for_web","description":"Identity Provider based IP allow list for web interactions was enabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"ip_allow_list.enable_skip_idp_ip_allowlist_app_access","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"ip_allow_list.enable_user_level_enforcement","description":"IP allow list user level enforcement was enabled.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list.update_ip_allowlist_configuration","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"organization_custom_property_definition.create","description":"A new organization custom property definition was created.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","docs_reference_titles":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","fieldsIndex":423},{"action":"organization_custom_property_definition.destroy","description":"An organization custom property definition was deleted.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","docs_reference_titles":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","fieldsIndex":424},{"action":"organization_custom_property_definition.update","description":"An organization custom property definition was updated.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","docs_reference_titles":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","fieldsIndex":425},{"action":"personal_access_token.access_restriction_reset","description":"The configured restriction for access to resources via personal access tokens was reset and delegated to organizations.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.auto_approve_grant_requests_reset","description":"Triggered when the enterprise delegates to the organizations when to require approval for fine-grained personal access tokens before the tokens can access organization resources.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"sso_lockdown.disable","description":"SSO lockdown for users was disabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"sso_lockdown.enable","description":"SSO lockdown for users was enabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"sso_redirect.disable","description":"Automatic redirects for users to single sign-on (SSO) was disabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"sso_redirect.enable","description":"Automatic redirects for users to single sign-on (SSO) was enabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.user_access_reinstated","description":"N/A","docs_reference_links":"N/A","fieldsIndex":426},{"action":"copilot.user_access_revoked","description":"N/A","docs_reference_links":"N/A","fieldsIndex":426},{"action":"discussion_post.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":427},{"action":"discussion_post_reply.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":428},{"action":"discussion_post_reply.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":429},{"action":"discussion_post.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":427},{"action":"oauth_application.suspend","description":"N/A","docs_reference_links":"N/A","fieldsIndex":108},{"action":"oauth_application.unsuspend","description":"An OAuth application was unsuspended for a user or organization account.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":108},{"action":"org.async_delete","description":"A user initiated a background job to delete an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.recreate","description":"An organization was restored.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.transform","description":"A user account was converted into an organization.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-personal-account/converting-a-user-into-an-organization","docs_reference_titles":"Converting a user into an organization","fieldsIndex":430},{"action":"repo.collaborators_only","description":"N/A","docs_reference_links":"N/A","fieldsIndex":431},{"action":"repo.disk_archive","description":"A repository was archived on disk.","docs_reference_links":"/repositories/archiving-a-github-repository/archiving-repositories","docs_reference_titles":"/repositories/archiving-a-github-repository/archiving-repositories","fieldsIndex":0},{"action":"repo.hide_from_discovery","description":"N/A","docs_reference_links":"N/A","fieldsIndex":432},{"action":"repo.noindex","description":"N/A","docs_reference_links":"N/A","fieldsIndex":432},{"action":"repo.override_unlock","description":"The repository was unlocked.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"repo.pages_build","description":"N/A","docs_reference_links":"N/A","fieldsIndex":433},{"action":"repo.require_login","description":"N/A","docs_reference_links":"N/A","fieldsIndex":434},{"action":"team_discussions.clear","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"team_discussions.disable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"team_discussions.enable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.correct_password_from_unrecognized_device","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.correct_password_from_unrecognized_device_and_location","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.correct_password_from_unrecognized_location","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.flag_as_large_scale_contributor","description":"A user account was flagged as a large scale contributor. Only contributions from public repositories the user owns will be shown in their contribution graph, in order to prevent timeouts.","docs_reference_links":"N/A","fieldsIndex":360},{"action":"user.minimize_comment","description":"A comment made by a user was minimized.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"user.partial_two_factor_email_followup","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.remove_large_scale_contributor_flag","description":"A user account was no longer flagged as a large scale contributor.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.report_abuse","description":"N/A","docs_reference_links":"N/A","fieldsIndex":234},{"action":"user.report_content","description":"Triggered when you report an issue or pull request, or a comment on an issue, pull request, or commit.","docs_reference_links":"/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam","docs_reference_titles":"/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam","fieldsIndex":0},{"action":"user.sign_in_from_unrecognized_location","description":"A user signed in from an unrecognized location.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.unminimize_comment","description":"A comment made by a user was unminimized.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"copilot.knowledge_base_created","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.knowledge_base_deleted","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.knowledge_base_updated","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"actions_policy.evaluate","description":"N/A","docs_reference_links":"N/A","fieldsIndex":245}] \ No newline at end of file +[{"action":"account.billing_date_change","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"account.plan_change","description":"The account's plan changed.","docs_reference_links":"/billing/managing-the-plan-for-your-github-account/about-billing-for-plans","docs_reference_titles":"How GitHub billing works","fieldsIndex":1},{"action":"actions_cache.delete","description":"A GitHub Actions cache was deleted using the REST API.","docs_reference_links":"N/A","fieldsIndex":2},{"action":"advisory_credit.accept","description":"Credit was accepted for a security advisory.","docs_reference_links":"/code-security/security-advisories/working-with-repository-security-advisories/editing-a-repository-security-advisory","docs_reference_titles":"Editing a repository security advisory","fieldsIndex":3},{"action":"advisory_credit.create","description":"Someone was added to the credit section of a security advisory.","docs_reference_links":"N/A","fieldsIndex":4},{"action":"advisory_credit.decline","description":"Credit was declined for a security advisory.","docs_reference_links":"N/A","fieldsIndex":5},{"action":"advisory_credit.destroy","description":"Someone was removed from the credit section of a security advisory.","docs_reference_links":"N/A","fieldsIndex":6},{"action":"artifact.destroy","description":"A workflow run artifact was manually deleted.","docs_reference_links":"N/A","fieldsIndex":7},{"action":"auto_approve_personal_access_token_requests.disable","description":"Triggered when the organization must approve fine-grained personal access tokens before the tokens can access organization resources. See also: personal_access_token.auto_approve_grant_requests_disabled","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization","fieldsIndex":0},{"action":"auto_approve_personal_access_token_requests.enable","description":"Triggered when fine-grained personal access tokens can access organization resources without prior approval. See also: personal_access_token.auto_approve_grant_requests_enabled","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization","fieldsIndex":0},{"action":"billing.budget_create","description":"A billing budget was created for a business or organization. Includes details about the budget limit, alerting preferences, and recipients.","docs_reference_links":"N/A","fieldsIndex":8},{"action":"billing.budget_delete","description":"A billing budget was deleted for a business or organization. Includes details about the removed budget and any alerting settings.","docs_reference_links":"N/A","fieldsIndex":9},{"action":"billing.budget_update","description":"A billing budget was updated for a business or organization. Includes details about the updated limit and alerting settings.","docs_reference_links":"N/A","fieldsIndex":10},{"action":"billing.change_billing_type","description":"The way the account pays for GitHub was changed.","docs_reference_links":"/billing/managing-your-github-billing-settings/adding-or-editing-a-payment-method","docs_reference_titles":"Managing your payment and billing information","fieldsIndex":11},{"action":"billing.change_email","description":"The billing email address changed.","docs_reference_links":"/billing/managing-your-github-billing-settings/setting-your-billing-email","docs_reference_titles":"Managing your payment and billing information","fieldsIndex":12},{"action":"billing.cost_center_create","description":"A cost center was created for a business or organization.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"billing.cost_center_delete","description":"A cost center was deleted from a business or organization.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"billing.cost_center_resource_added","description":"A resource was added to a cost center for a business or organization.","docs_reference_links":"N/A","fieldsIndex":14},{"action":"billing.cost_center_resource_removed","description":"A resource was removed from a cost center for a business or organization.","docs_reference_links":"N/A","fieldsIndex":14},{"action":"billing.cost_center_update","description":"A cost center was updated for a business or organization.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"billing_customer.azure_subscription_linked","description":"Azure subscription has been linked on this account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"billing_customer.azure_subscription_unlinked","description":"Azure subscription has been unlinked on this account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"billing.lock","description":"N/A","docs_reference_links":"N/A","fieldsIndex":1},{"action":"billing.overage_policy_updated","description":"The premium request paid usage policy for your GitHub account was changed.","docs_reference_links":"/copilot/how-tos/manage-and-track-spending/manage-request-allowances#setting-a-policy-for-paid-usage","docs_reference_titles":"Optimizing your budget configuration","fieldsIndex":15},{"action":"billing.unlock","description":"N/A","docs_reference_links":"N/A","fieldsIndex":16},{"action":"checks.auto_trigger_disabled","description":"Automatic creation of check suites was disabled on a repository in the organization or enterprise.","docs_reference_links":"/rest/checks#update-repository-preferences-for-check-suites","docs_reference_titles":"/rest/checks#update-repository-preferences-for-check-suites","fieldsIndex":17},{"action":"checks.auto_trigger_enabled","description":"Automatic creation of check suites was enabled on a repository in the organization or enterprise.","docs_reference_links":"/rest/checks#update-repository-preferences-for-check-suites","docs_reference_titles":"/rest/checks#update-repository-preferences-for-check-suites","fieldsIndex":17},{"action":"checks.delete_logs","description":"Logs in a check suite were deleted.","docs_reference_links":"N/A","fieldsIndex":18},{"action":"code_scanning.alert_appeared_in_branch","description":"Existing code scanning alerts appeared in a branch.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":19},{"action":"code_scanning.alert_closed_became_fixed","description":"Code scanning alerts were fixed.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":19},{"action":"code_scanning.alert_closed_became_outdated","description":"Code scanning alerts were closed as outdated (all configurations they were detected in were deleted).","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":20},{"action":"code_scanning.alert_closed_by_user","description":"Code scanning alerts were manually dismissed.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":21},{"action":"code_scanning.alert_closure_approved","description":"Dismissal of code scanning alerts was approved.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":22},{"action":"code_scanning.alert_closure_denied","description":"Dismissal of code scanning alerts was denied.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":22},{"action":"code_scanning.alert_closure_requested","description":"Dismissal of code scanning alerts was requested.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":22},{"action":"code_scanning.alert_created","description":"Code scanning alerts were seen for the first time.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":19},{"action":"code_scanning.alert_reappeared","description":"Code scanning alerts that were previously fixed reappeared.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":19},{"action":"code_scanning.alert_reopened_by_user","description":"Code scanning alerts that were previously dismissed were reopened.","docs_reference_links":"/code-security/code-scanning/introduction-to-code-scanning/about-code-scanning","docs_reference_titles":"Code scanning","fieldsIndex":23},{"action":"codespaces.allow_permissions","description":"A codespace using custom permissions from its devcontainer.json file was launched.","docs_reference_links":"N/A","fieldsIndex":24},{"action":"codespaces.attempted_to_create_from_prebuild","description":"An attempt to create a codespace from a prebuild was made.","docs_reference_links":"N/A","fieldsIndex":25},{"action":"codespaces.business_enablement_updated","description":"Enterprise setting for Codespaces ownership was updated.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization","docs_reference_titles":"/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization","fieldsIndex":26},{"action":"codespaces.connect","description":"Credentials for a codespace were refreshed.","docs_reference_links":"N/A","fieldsIndex":27},{"action":"codespaces.create","description":"A codespace was created","docs_reference_links":"/codespaces/developing-in-codespaces/creating-a-codespace-for-a-repository","docs_reference_titles":"Creating a codespace for a repository","fieldsIndex":27},{"action":"codespaces.destroy","description":"A user deleted a codespace.","docs_reference_links":"/codespaces/developing-in-codespaces/deleting-a-codespace","docs_reference_titles":"Deleting a codespace","fieldsIndex":28},{"action":"codespaces.export_environment","description":"A codespace was exported to a branch on GitHub.","docs_reference_links":"N/A","fieldsIndex":29},{"action":"codespaces.policy_group_created","description":"Policies were applied to codespaces in an organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"codespaces.policy_group_deleted","description":"Policies were removed from codespaces in an organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"codespaces.policy_group_updated","description":"Policies were updated for codespaces in an organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"codespaces.restore","description":"A codespace was restored.","docs_reference_links":"N/A","fieldsIndex":30},{"action":"codespaces.start_environment","description":"A codespace was started.","docs_reference_links":"N/A","fieldsIndex":27},{"action":"codespaces.suspend_environment","description":"A codespace was stopped.","docs_reference_links":"N/A","fieldsIndex":31},{"action":"codespaces.trusted_repositories_access_update","description":"A personal account's access and security setting for Codespaces were updated.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces","docs_reference_titles":"Managing access to other repositories within your codespace","fieldsIndex":1},{"action":"commit_comment.destroy","description":"A commit comment was deleted.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"commit_comment.update","description":"A commit comment was updated.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"copilot.access_revoked","description":"Copilot access was revoked for the organization or enterprise due to its Copilot subscription ending, an issue with billing the entity, the entity being marked spammy, or the entity being suspended.","docs_reference_links":"N/A","fieldsIndex":33},{"action":"copilot.cfb_org_settings_changed","description":"Copilot feature settings were changed at the organization level.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.cfb_seat_added","description":"A Copilot Business or Copilot Enterprise seat was added for a user and they have received access to GitHub Copilot. This can occur as the result of directly assigning a seat for a user, assigning a seat for a team, or setting the organization to allow access for all members.","docs_reference_links":"N/A","fieldsIndex":34},{"action":"copilot.cfb_seat_assignment_created","description":"A Copilot Business or Copilot Enterprise seat assignment was newly created for a user or a team, and seats are being created.","docs_reference_links":"/copilot/overview-of-github-copilot/about-github-copilot-for-business","docs_reference_titles":"What is GitHub Copilot?","fieldsIndex":34},{"action":"copilot.cfb_seat_assignment_refreshed","description":"A seat assignment that was previously pending cancellation was re-assigned and the user will retain access to Copilot.","docs_reference_links":"N/A","fieldsIndex":34},{"action":"copilot.cfb_seat_assignment_reused","description":"A Copilot Business or Copilot Enterprise seat assignment was re-created for a user who already had a seat with no pending cancellation date, and the user will retain access to Copilot.","docs_reference_links":"N/A","fieldsIndex":35},{"action":"copilot.cfb_seat_assignment_unassigned","description":"A user or team's Copilot Business or Copilot Enterprise seat assignment was unassigned, and the user(s) will lose access to Copilot at the end of the current billing cycle.","docs_reference_links":"N/A","fieldsIndex":34},{"action":"copilot.cfb_seat_cancelled","description":"A user's Copilot Business or Copilot Enterprise seat was canceled, and the user no longer has access to Copilot.","docs_reference_links":"N/A","fieldsIndex":36},{"action":"copilot.cfb_seat_cancelled_by_staff","description":"A user's Copilot Business or Copilot Enterprise seat was canceled manually by GitHub staff, and the user no longer has access to Copilot.","docs_reference_links":"N/A","fieldsIndex":37},{"action":"copilot.cfb_seat_management_changed","description":"The seat management setting was changed at the organization level to either enable or disable Copilot access for all members of the organization, or to enable Copilot access for selected members or teams.","docs_reference_links":"N/A","fieldsIndex":38},{"action":"copilot.code_review_organization_settings_updated","description":"Copilot code review settings were updated for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.code_review_repository_settings_updated","description":"Copilot code review settings were updated for a repository.","docs_reference_links":"N/A","fieldsIndex":39},{"action":"copilot.content_exclusion_changed","description":"The excluded paths for GitHub Copilot were updated.","docs_reference_links":"N/A","fieldsIndex":40},{"action":"copilot.custom_instructions_created","description":"Copilot custom instructions were created for the organization.","docs_reference_links":"N/A","fieldsIndex":41},{"action":"copilot.custom_instructions_updated","description":"Copilot custom instructions were updated for the organization.","docs_reference_links":"N/A","fieldsIndex":41},{"action":"copilot.memory_user_opt_out","description":"A user opted out of Copilot Memory.","docs_reference_links":"N/A","fieldsIndex":42},{"action":"copilot.plan_changed","description":"The plan for GitHub Copilot was updated.","docs_reference_links":"/billing/managing-billing-for-github-copilot/about-billing-for-github-copilot","docs_reference_titles":"GitHub Copilot licenses","fieldsIndex":43},{"action":"copilot.plan_downgrade_scheduled","description":"The plan for GitHub Copilot was scheduled to be downgraded.","docs_reference_links":"N/A","fieldsIndex":44},{"action":"copilot.swe_agent_firewall_allowlist_updated","description":"Firewall allowlist for Copilot coding agent was updated for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.swe_agent_mcp_config_updated","description":"MCP Configuration for Copilot coding agent was updated for a specific repository.","docs_reference_links":"N/A","fieldsIndex":45},{"action":"copilot.swe_agent_repo_disabled","description":"Specific repositories were disabled from using Copilot coding agent.","docs_reference_links":"N/A","fieldsIndex":46},{"action":"copilot.swe_agent_repo_enabled","description":"Specific repositories were enabled to use Copilot coding agent.","docs_reference_links":"N/A","fieldsIndex":46},{"action":"copilot.swe_agent_repo_enablement_updated","description":"Copilot coding agent access was updated for the organization's or user's repositories.","docs_reference_links":"N/A","fieldsIndex":47},{"action":"custom_hosted_runner.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":48},{"action":"custom_hosted_runner.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"custom_hosted_runner.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":48},{"action":"custom_property_definition.create","description":"A new custom property definition was created.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":49},{"action":"custom_property_definition.destroy","description":"A custom property definition was deleted.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":49},{"action":"custom_property_definition.update","description":"A custom property definition was updated.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":50},{"action":"custom_property_value.create","description":"A repository's custom property value was manually set for the first time.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":51},{"action":"custom_property_value.destroy","description":"A repository's custom property value was deleted.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":51},{"action":"custom_property_value.update","description":"A repository's custom property value was updated.","docs_reference_links":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization","fieldsIndex":52},{"action":"dependabot_alerts.disable","description":"Dependabot alerts were disabled for all existing repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-for-all-existing-repositories","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-for-all-existing-repositories","fieldsIndex":11},{"action":"dependabot_alerts.enable","description":"Dependabot alerts were enabled for all existing repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-for-all-existing-repositories","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-for-all-existing-repositories","fieldsIndex":53},{"action":"dependabot_alerts_new_repos.disable","description":"Dependabot alerts were disabled for all new repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-automatically-when-new-repositories-are-added","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-automatically-when-new-repositories-are-added","fieldsIndex":53},{"action":"dependabot_alerts_new_repos.enable","description":"Dependabot alerts were enabled for all new repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-automatically-when-new-repositories-are-added","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-automatically-when-new-repositories-are-added","fieldsIndex":53},{"action":"dependabot_closure_request.approve","description":"Dismissal of Dependabot alerts was approved.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/about-dependabot-alerts","docs_reference_titles":"Dependabot alerts","fieldsIndex":54},{"action":"dependabot_closure_request.cancel","description":"Dismissal request for Dependabot alerts was canceled.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/about-dependabot-alerts","docs_reference_titles":"Dependabot alerts","fieldsIndex":54},{"action":"dependabot_closure_request.create","description":"Dismissal of Dependabot alerts was requested.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/about-dependabot-alerts","docs_reference_titles":"Dependabot alerts","fieldsIndex":55},{"action":"dependabot_closure_request.deny","description":"Dismissal of Dependabot alerts was denied.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/about-dependabot-alerts","docs_reference_titles":"Dependabot alerts","fieldsIndex":55},{"action":"dependabot_repository_access.default_access_level_updated","description":"The default repository access for Dependabot was updated.","docs_reference_links":"N/A","fieldsIndex":56},{"action":"dependabot_repository_access.repositories_updated","description":"The repositories that Dependabot can access were updated.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"dependabot_security_updates.disable","description":"Dependabot security updates were disabled for all existing repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","fieldsIndex":11},{"action":"dependabot_security_updates.enable","description":"Dependabot security updates were enabled for all existing repositories.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"dependabot_security_updates_new_repos.disable","description":" Dependabot security updates were disabled for all new repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","fieldsIndex":53},{"action":"dependabot_security_updates_new_repos.enable","description":"Dependabot security updates were enabled for all new repositories.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"dependency_graph.disable","description":"The dependency graph was disabled for all existing repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","fieldsIndex":11},{"action":"dependency_graph.enable","description":"The dependency graph was enabled for all existing repositories.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"dependency_graph_new_repos.disable","description":"The dependency graph was disabled for all new repositories.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization","fieldsIndex":53},{"action":"dependency_graph_new_repos.enable","description":"The dependency graph was enabled for all new repositories.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"discussion_comment.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":32},{"action":"discussion_comment.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":32},{"action":"discussion.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":57},{"action":"enterprise_announcement.create","description":"A global announcement banner was created for the enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/communicating-information-to-users-in-your-enterprise/customizing-user-messages-for-your-enterprise#creating-a-global-announcement-banner","docs_reference_titles":"Customizing user messages for your enterprise","fieldsIndex":58},{"action":"enterprise_announcement.destroy","description":"A global announcement banner was removed from the enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/communicating-information-to-users-in-your-enterprise/customizing-user-messages-for-your-enterprise","docs_reference_titles":"Customizing user messages for your enterprise","fieldsIndex":46},{"action":"enterprise_announcement.update","description":"A global announcement banner was updated for the enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/communicating-information-to-users-in-your-enterprise/customizing-user-messages-for-your-enterprise","docs_reference_titles":"Customizing user messages for your enterprise","fieldsIndex":59},{"action":"enterprise_installation.create","description":"The GitHub App associated with a GitHub Connect connection was created.","docs_reference_links":"/admin/configuration/configuring-github-connect/managing-github-connect","docs_reference_titles":"Enabling GitHub Connect for GitHub.com","fieldsIndex":15},{"action":"enterprise_installation.destroy","description":"The GitHub App associated with a GitHub Connect connection was deleted.","docs_reference_links":"/admin/configuration/configuring-github-connect/managing-github-connect","docs_reference_titles":"Enabling GitHub Connect for GitHub.com","fieldsIndex":60},{"action":"environment.add_protection_rule","description":"A GitHub Actions deployment protection rule was created via the API.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules","docs_reference_titles":"Managing environments for deployment","fieldsIndex":61},{"action":"environment.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":62},{"action":"environment.create_actions_secret","description":"A secret was created for a GitHub Actions environment.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#environment-secrets","docs_reference_titles":"Managing environments for deployment","fieldsIndex":63},{"action":"environment.create_actions_variable","description":"A variable was created for a GitHub Actions environment.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-environment","docs_reference_titles":"Store information in variables","fieldsIndex":63},{"action":"environment.delete","description":"An environment was deleted.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#deleting-an-environment","docs_reference_titles":"Managing environments for deployment","fieldsIndex":64},{"action":"environment.remove_actions_secret","description":"A secret was deleted for a GitHub Actions environment.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#environment-secrets","docs_reference_titles":"Managing environments for deployment","fieldsIndex":65},{"action":"environment.remove_actions_variable","description":"A variable was deleted for a GitHub Actions environment.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-environment","docs_reference_titles":"Store information in variables","fieldsIndex":65},{"action":"environment.remove_protection_rule","description":"A GitHub Actions deployment protection rule was deleted via the API.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules","docs_reference_titles":"Managing environments for deployment","fieldsIndex":66},{"action":"environment.update_actions_secret","description":"A secret was updated for a GitHub Actions environment.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#environment-secrets","docs_reference_titles":"Managing environments for deployment","fieldsIndex":63},{"action":"environment.update_actions_variable","description":"A variable was updated for a GitHub Actions environment.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-environment","docs_reference_titles":"Store information in variables","fieldsIndex":63},{"action":"environment.update_protection_rule","description":"A GitHub Actions deployment protection rule was updated via the API.","docs_reference_links":"/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules","docs_reference_titles":"Managing environments for deployment","fieldsIndex":67},{"action":"git.clone","description":"A repository was cloned. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"N/A","fieldsIndex":68},{"action":"git.fetch","description":"Changes were fetched from a repository. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"N/A","fieldsIndex":68},{"action":"git.push","description":"Changes were pushed to a repository. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"N/A","fieldsIndex":68},{"action":"github_hosted_runner.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":69},{"action":"github_hosted_runner.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":53},{"action":"github_hosted_runner.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":69},{"action":"hook.active_changed","description":"A hook's active status was updated.","docs_reference_links":"N/A","fieldsIndex":70},{"action":"hook.config_changed","description":"A hook's configuration was changed.","docs_reference_links":"N/A","fieldsIndex":71},{"action":"hook.create","description":"A new hook was added.","docs_reference_links":"/get-started/exploring-integrations/about-webhooks","docs_reference_titles":"About webhooks","fieldsIndex":72},{"action":"hook.destroy","description":"A hook was deleted.","docs_reference_links":"N/A","fieldsIndex":71},{"action":"hook.events_changed","description":"A hook's configured events were changed.","docs_reference_links":"N/A","fieldsIndex":73},{"action":"integration.create","description":"A GitHub App was created.","docs_reference_links":"N/A","fieldsIndex":74},{"action":"integration.destroy","description":"A GitHub App was deleted.","docs_reference_links":"N/A","fieldsIndex":75},{"action":"integration.generate_client_secret","description":"N/A","docs_reference_links":"N/A","fieldsIndex":76},{"action":"integration_installation.create","description":"A GitHub App was installed.","docs_reference_links":"/apps/using-github-apps/authorizing-github-apps","docs_reference_titles":"/apps/using-github-apps/authorizing-github-apps","fieldsIndex":77},{"action":"integration_installation.destroy","description":"A GitHub App was uninstalled.","docs_reference_links":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","docs_reference_titles":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","fieldsIndex":78},{"action":"integration_installation.repositories_added","description":"Repositories were added to a GitHub App.","docs_reference_links":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#modifying-repository-access","docs_reference_titles":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#modifying-repository-access","fieldsIndex":79},{"action":"integration_installation.repositories_removed","description":"Repositories were removed from a GitHub App.","docs_reference_links":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#modifying-repository-access","docs_reference_titles":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#modifying-repository-access","fieldsIndex":80},{"action":"integration_installation_request.close","description":"A request to install a GitHub App was either approved or denied by an owner, or canceled by the member who opened the request.","docs_reference_links":"/apps/using-github-apps/requesting-a-github-app-from-your-organization-owner","docs_reference_titles":"/apps/using-github-apps/requesting-a-github-app-from-your-organization-owner","fieldsIndex":81},{"action":"integration_installation_request.create","description":"A member requested that an owner install a GitHub App.","docs_reference_links":"/apps/using-github-apps/requesting-a-github-app-from-your-organization-owner","docs_reference_titles":"/apps/using-github-apps/requesting-a-github-app-from-your-organization-owner","fieldsIndex":82},{"action":"integration_installation.suspend","description":"A GitHub App was suspended.","docs_reference_links":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","docs_reference_titles":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","fieldsIndex":83},{"action":"integration_installation.unsuspend","description":"A GitHub App was unsuspended.","docs_reference_links":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","docs_reference_titles":"/apps/using-github-apps/reviewing-and-modifying-installed-github-apps#blocking-access","fieldsIndex":83},{"action":"integration_installation.version_updated","description":"Permissions for a GitHub App were updated.","docs_reference_links":"/apps/using-github-apps/approving-updated-permissions-for-a-github-app","docs_reference_titles":"/apps/using-github-apps/approving-updated-permissions-for-a-github-app","fieldsIndex":84},{"action":"integration.manager_added","description":"A member of an enterprise or organization was added as a GitHub App manager.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/adding-and-removing-github-app-managers-in-your-organization#giving-someone-the-ability-to-manage-all-github-apps-owned-by-the-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/adding-and-removing-github-app-managers-in-your-organization#giving-someone-the-ability-to-manage-all-github-apps-owned-by-the-organization","fieldsIndex":85},{"action":"integration.manager_removed","description":"A member of an enterprise or organization was removed from being a GitHub App manager.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/adding-and-removing-github-app-managers-in-your-organization#removing-a-github-app-managers-permissions-for-the-entire-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/adding-and-removing-github-app-managers-in-your-organization#removing-a-github-app-managers-permissions-for-the-entire-organization","fieldsIndex":85},{"action":"integration.remove_client_secret","description":"A client secret for a GitHub App was removed.","docs_reference_links":"N/A","fieldsIndex":75},{"action":"integration.revoke_all_tokens","description":"All user tokens for a GitHub App were requested to be revoked.","docs_reference_links":"N/A","fieldsIndex":86},{"action":"integration.revoke_tokens","description":"Token(s) for a GitHub App were revoked.","docs_reference_links":"N/A","fieldsIndex":86},{"action":"integration.suspend","description":"A GitHub App was suspended.","docs_reference_links":"/apps/maintaining-github-apps/suspending-a-github-app-installation","docs_reference_titles":"/apps/maintaining-github-apps/suspending-a-github-app-installation","fieldsIndex":87},{"action":"integration.transfer","description":"Ownership of a GitHub App was transferred to another user or organization.","docs_reference_links":"/apps/maintaining-github-apps/transferring-ownership-of-a-github-app","docs_reference_titles":"/apps/maintaining-github-apps/transferring-ownership-of-a-github-app","fieldsIndex":88},{"action":"integration.unsuspend","description":"A GitHub App was unsuspended.","docs_reference_links":"/apps/maintaining-github-apps/suspending-a-github-app-installation","docs_reference_titles":"/apps/maintaining-github-apps/suspending-a-github-app-installation","fieldsIndex":86},{"action":"integration.update","description":"A GitHub App was updated.","docs_reference_links":"N/A","fieldsIndex":76},{"action":"ip_allow_list.disable","description":"An IP allow list was disabled.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list.disable_for_installed_apps","description":"An IP allow list was disabled for installed GitHub Apps.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list.enable","description":"An IP allow list was enabled.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list.enable_for_installed_apps","description":"An IP allow list was enabled for installed GitHub Apps.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list_entry.create","description":"An IP address was added to an IP allow list.","docs_reference_links":"N/A","fieldsIndex":89},{"action":"ip_allow_list_entry.destroy","description":"An IP address was deleted from an IP allow list.","docs_reference_links":"N/A","fieldsIndex":89},{"action":"ip_allow_list_entry.update","description":"An IP address or its description was changed.","docs_reference_links":"N/A","fieldsIndex":89},{"action":"issue_comment.destroy","description":"A comment on an issue was deleted from the repository.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"issue_comment.pinned","description":"A comment on an issue was pinned to a repository.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"issue_comment.unpinned","description":"A comment on an issue was unpinned from a repository.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"issue_comment.update","description":"A comment on an issue (other than the initial one) changed.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"issue_dependencies.blocked_by_add","description":"An issue was marked as blocked by another issue.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"issue_dependencies.blocked_by_remove","description":"The blocked by relationship between an issue and another issue was removed.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"issue_dependencies.blocking_add","description":"An issue was marked as blocking another issue.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"issue_dependencies.blocking_remove","description":"The blocking relationship between an issue and another issue was removed.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"issue.destroy","description":"An issue was deleted from the repository.","docs_reference_links":"/issues/tracking-your-work-with-issues/deleting-an-issue","docs_reference_titles":"Deleting an issue","fieldsIndex":91},{"action":"issue.pinned","description":"An issue was pinned to a repository.","docs_reference_links":"/issues/tracking-your-work-with-issues/pinning-an-issue-to-your-repository","docs_reference_titles":"Pinning an issue to your repository","fieldsIndex":92},{"action":"issue.transfer","description":"An issue was transferred to another repository.","docs_reference_links":"/issues/tracking-your-work-with-issues/transferring-an-issue-to-another-repository","docs_reference_titles":"Transferring an issue to another repository","fieldsIndex":93},{"action":"issue_type.create","description":"An issue type was created.","docs_reference_links":"N/A","fieldsIndex":94},{"action":"issue_type.destroy","description":"An issue type was deleted.","docs_reference_links":"N/A","fieldsIndex":95},{"action":"issue_type.update","description":"An issue type was updated.","docs_reference_links":"N/A","fieldsIndex":96},{"action":"issue.unpinned","description":"An issue was unpinned from a repository.","docs_reference_links":"/issues/tracking-your-work-with-issues/pinning-an-issue-to-your-repository","docs_reference_titles":"Pinning an issue to your repository","fieldsIndex":92},{"action":"issues.deletes_disabled","description":"The ability for enterprise members to delete issues was disabled Members cannot delete issues in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-deleting-issues","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":11},{"action":"issues.deletes_enabled","description":"The ability for enterprise members to delete issues was enabled Members can delete issues in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-deleting-issues","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":15},{"action":"issues.deletes_policy_cleared","description":"An enterprise owner cleared the policy setting for allowing members to delete issues in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-deleting-issues","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":15},{"action":"marketplace_agreement_signature.create","description":"The GitHub Marketplace Developer Agreement was signed.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"marketplace_listing.approve","description":"A listing was approved for inclusion in GitHub Marketplace.","docs_reference_links":"N/A","fieldsIndex":97},{"action":"marketplace_listing.change_category","description":"A category for a listing for an app in GitHub Marketplace was changed.","docs_reference_links":"N/A","fieldsIndex":98},{"action":"marketplace_listing.create","description":"A listing for an app in GitHub Marketplace was created.","docs_reference_links":"N/A","fieldsIndex":97},{"action":"marketplace_listing.delist","description":"A listing was removed from GitHub Marketplace.","docs_reference_links":"N/A","fieldsIndex":99},{"action":"marketplace_listing.redraft","description":"A listing was sent back to draft state.","docs_reference_links":"N/A","fieldsIndex":97},{"action":"marketplace_listing.reject","description":"A listing was not accepted for inclusion in GitHub Marketplace.","docs_reference_links":"N/A","fieldsIndex":97},{"action":"mcp_registry.allowlist_assign","description":"An MCP registry allowlist was assigned to an organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":100},{"action":"mcp_registry.allowlist_remove_assignment","description":"An MCP registry allowlist assignment was removed from an organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":100},{"action":"members_can_create_pages.disable","description":"The ability for members to publish GitHub Pages sites was disabled.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_create_pages.enable","description":"The ability for members to publish GitHub Pages sites was enabled.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_create_private_pages.disable","description":"The ability for members to publish private GitHub Pages was disabled Members cannot publish private GitHub Pages in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_create_private_pages.enable","description":"The ability for members to publish private GitHub Pages was enabled Members can publish private GitHub Pages in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_create_public_pages.disable","description":"The ability for members to publish public GitHub Pages was disabled Members cannot publish public GitHub Pages in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_create_public_pages.enable","description":"The ability for members to publish public GitHub Pages was enabled Members can publish public GitHub Pages in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization","fieldsIndex":53},{"action":"members_can_delete_repos.clear","description":"An enterprise owner cleared the policy setting for deleting or transferring repositories in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-repository-deletion-and-transfer","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":11},{"action":"members_can_delete_repos.disable","description":"The ability for enterprise members to delete repositories was disabled Members cannot delete or transfer repositories in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-repository-deletion-and-transfer","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":11},{"action":"members_can_delete_repos.enable","description":"The ability for enterprise members to delete repositories was enabled Members can delete or transfer repositories in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-repository-deletion-and-transfer","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":11},{"action":"members_can_view_dependency_insights.clear","description":"An enterprise owner cleared the policy setting for viewing dependency insights in any organizations in an enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"members_can_view_dependency_insights.disable","description":"The ability for enterprise members to view dependency insights was disabled. Members cannot view dependency insights in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-dependency-insights-in-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":15},{"action":"members_can_view_dependency_insights.enable","description":"The ability for enterprise members to view dependency insights was enabled. Members can view dependency insights in any organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-dependency-insights-in-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":11},{"action":"merge_queue.pull_request_dequeued","description":"A pull request was removed from a merge queue.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"merge_queue.pull_request_queue_jump","description":"A pull request was moved ahead in a merge queue.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"merge_queue.queue_cleared","description":"A merge queue was cleared.","docs_reference_links":"N/A","fieldsIndex":101},{"action":"merge_queue.update_settings","description":"The settings for a merge queue were updated.","docs_reference_links":"N/A","fieldsIndex":102},{"action":"metered_billing_configuration.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"metered_billing_configuration.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"metered_billing_configuration.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"migration.create","description":"A migration file was created for transferring data from a source location (such as a GitHub.com organization or a GitHub Enterprise Server instance) to a target GitHub Enterprise Server instance.","docs_reference_links":"N/A","fieldsIndex":103},{"action":"migration.destroy_file","description":"A migration file for transferring data from a source location (such as a GitHub.com organization or a GitHub Enterprise Server instance) to a target GitHub Enterprise Server instance was deleted.","docs_reference_links":"N/A","fieldsIndex":103},{"action":"migration.download","description":"A migration file for transferring data from a source location (such as a GitHub.com organization or a GitHub Enterprise Server instance) to a target GitHub Enterprise Server instance was downloaded.","docs_reference_links":"N/A","fieldsIndex":103},{"action":"network_configuration.create","description":"A network configuration for a hosted compute service was created.","docs_reference_links":"/admin/configuration/configuring-private-networking-for-hosted-compute-products/about-networking-for-hosted-compute-products","docs_reference_titles":"About networking for hosted compute products in your enterprise","fieldsIndex":104},{"action":"network_configuration.delete","description":"A network configuration for a hosted compute service was deleted.","docs_reference_links":"/admin/configuration/configuring-private-networking-for-hosted-compute-products/about-networking-for-hosted-compute-products","docs_reference_titles":"About networking for hosted compute products in your enterprise","fieldsIndex":105},{"action":"network_configuration.update","description":"A network configuration for a hosted compute service was updated.","docs_reference_links":"/admin/configuration/configuring-private-networking-for-hosted-compute-products/about-networking-for-hosted-compute-products","docs_reference_titles":"About networking for hosted compute products in your enterprise","fieldsIndex":106},{"action":"oauth_application.create","description":"An OAuth application was created.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":107},{"action":"oauth_application.destroy","description":"An OAuth application was deleted.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":107},{"action":"oauth_application.generate_client_secret","description":"An OAuth application's secret key was generated.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":107},{"action":"oauth_application.remove_client_secret","description":"An OAuth application's secret key was deleted.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":107},{"action":"oauth_application.reset_secret","description":"The secret key for an OAuth application was reset.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":108},{"action":"oauth_application.revoke_all_tokens","description":"All user tokens for an OAuth application were requested to be revoked.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":107},{"action":"oauth_application.revoke_tokens","description":"Token(s) for an OAuth application were revoked.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":107},{"action":"oauth_application.transfer","description":"An OAuth application was transferred from one account to another.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":107},{"action":"oauth_application.update_token_expiration","description":"The token expiration setting for an OAuth application was updated.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":107},{"action":"org.accept_business_invitation","description":"An invitation sent to an organization to join an enterprise was accepted.","docs_reference_links":"/admin/user-management/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise#inviting-an-organization-to-join-your-enterprise-account","docs_reference_titles":"Adding organizations to your enterprise","fieldsIndex":15},{"action":"org.add_billing_manager","description":"A billing manager was added to an organization.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization","docs_reference_titles":"/organizations/managing-peoples-access-to-your-organization-with-roles/adding-a-billing-manager-to-your-organization","fieldsIndex":11},{"action":"org.add_disallowed_two_factor_method","description":"An organization prevented access to resources by users with the given two-factor method.","docs_reference_links":"N/A","fieldsIndex":109},{"action":"org.add_member","description":"A user joined an organization.","docs_reference_links":"N/A","fieldsIndex":110},{"action":"org.add_outside_collaborator","description":"An outside collaborator was added to a repository.","docs_reference_links":"N/A","fieldsIndex":111},{"action":"org.add_security_manager","description":"N/A","docs_reference_links":"N/A","fieldsIndex":112},{"action":"org.advanced_security_disabled_for_new_repos","description":"GitHub Advanced Security was disabled for new repositories in an organization.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"org.advanced_security_disabled_on_all_repos","description":"GitHub Advanced Security was disabled for all repositories in an organization.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"org.advanced_security_enabled_for_new_repos","description":"GitHub Advanced Security was enabled for new repositories in an organization.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"org.advanced_security_enabled_on_all_repos","description":"GitHub Advanced Security was enabled for all repositories in an organization.","docs_reference_links":"N/A","fieldsIndex":1},{"action":"org.advanced_security_entity_policy_update","description":"An enterprise owner updated the GitHub Advanced Security access policy for repositories owned by the organization.","docs_reference_links":"/admin/policies/enforcing-policies-for-advanced-security-in-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":113},{"action":"org.advanced_security_policy_selected_member_disabled","description":"An enterprise owner prevented GitHub Advanced Security features from being enabled for repositories owned by the organization.","docs_reference_links":"/admin/policies/enforcing-policies-for-advanced-security-in-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":15},{"action":"org.advanced_security_policy_selected_member_enabled","description":"An enterprise owner allowed GitHub Advanced Security features to be enabled for repositories owned by the organization.","docs_reference_links":"/admin/policies/enforcing-policies-for-advanced-security-in-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":15},{"action":"org.allow_third_party_access_requests_from_outside_collaborators_disabled","description":"Third-party application access for outside collaborators was disabled for the organization.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/limiting-oauth-app-and-github-app-access-requests#enabling-or-disabling-integration-access-requests","docs_reference_titles":"Limiting OAuth app and GitHub App access requests and installations","fieldsIndex":0},{"action":"org.allow_third_party_access_requests_from_outside_collaborators_enabled","description":"Third-party application access for outside collaborators was enabled for the organization.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/limiting-oauth-app-and-github-app-access-requests-and-installations#enabling-or-disabling-app-access-requests","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/limiting-oauth-app-and-github-app-access-requests-and-installations#enabling-or-disabling-app-access-requests","fieldsIndex":0},{"action":"org.archive","description":"The organization was archived.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.audit_log_export","description":"An export of the organization audit log was created. If the export included a query, the log will list the query used and the number of audit log entries matching that query.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization#exporting-the-audit-log","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization#exporting-the-audit-log","fieldsIndex":114},{"action":"org.audit_log_git_event_export","description":"An export of the organization's Git events was created.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/audit-log-events-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/audit-log-events-for-your-organization","fieldsIndex":115},{"action":"org.billing_signup_error","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.block_user","description":"An organization owner blocked a user from accessing the organization's repositories.","docs_reference_links":"/communities/maintaining-your-safety-on-github/blocking-a-user-from-your-organization","docs_reference_titles":"/communities/maintaining-your-safety-on-github/blocking-a-user-from-your-organization","fieldsIndex":116},{"action":"org.cancel_business_invitation","description":"An invitation for an organization to join an enterprise was revoked","docs_reference_links":"/admin/user-management/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise#inviting-an-organization-to-join-your-enterprise-account","docs_reference_titles":"Adding organizations to your enterprise","fieldsIndex":117},{"action":"org.cancel_invitation","description":"An invitation sent to a user to join an organization was revoked.","docs_reference_links":"N/A","fieldsIndex":118},{"action":"org.clear_custom_invitation_rate_limit","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"org.clear_disallowed_two_factor_methods","description":"Cleared two-factor authentication restrictions for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_quality_entity_policy_update","description":"An organization owner updated the Code Quality entity policy for repositories owned by the organization.","docs_reference_links":"N/A","fieldsIndex":113},{"action":"org.code_scanning_ai_findings_disabled","description":"AI-powered findings for code scanning were disabled for an organization.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"org.code_scanning_ai_findings_enabled","description":"AI-powered findings for code scanning were enabled for an organization.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"org.code_scanning_autofix_disabled","description":"Autofix for code scanning alerts was disabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_autofix_enabled","description":"Autofix for code scanning alerts was enabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_autofix_third_party_tools_disabled","description":"Autofix for third party tools for code scanning alerts was disabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_autofix_third_party_tools_enabled","description":"Autofix for third party tools for code scanning alerts was enabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_scan_inactive_repos_disabled","description":"Scanning inactive repositories was disabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_scanning_scan_inactive_repos_enabled","description":"Scanning inactive repositories was enabled for an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.code_security_metered_usage_lock","description":"Enablement for Code Security features on new repositories has been locked for this organization.","docs_reference_links":"N/A","fieldsIndex":119},{"action":"org.code_security_metered_usage_unlock","description":"Enablement for Code Security features on new repositories has been unlocked for this organization.","docs_reference_links":"N/A","fieldsIndex":120},{"action":"org.codeql_disabled","description":"Code scanning using the default setup was disabled for an organization.","docs_reference_links":"/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning-at-scale","docs_reference_titles":"Configuring default setup for code scanning at scale","fieldsIndex":11},{"action":"org.codeql_enabled","description":"Code scanning using the default setup was enabled for an organization.","docs_reference_links":"/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning-at-scale","docs_reference_titles":"Configuring default setup for code scanning at scale","fieldsIndex":1},{"action":"org.codespaces_access_updated","description":"Access to use Codespaces on internal and private repositories was updated for an organization.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization","docs_reference_titles":"/codespaces/managing-codespaces-for-your-organization/enabling-or-disabling-github-codespaces-for-your-organization","fieldsIndex":121},{"action":"org.codespaces_ownership_updated","description":"Ownership and payment for codespaces was updated for an organization.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization","docs_reference_titles":"/codespaces/managing-codespaces-for-your-organization/choosing-who-owns-and-pays-for-codespaces-in-your-organization","fieldsIndex":122},{"action":"org.codespaces_team_access_allowed","description":"A team has been allowed to use Codespaces for an organization.","docs_reference_links":"N/A","fieldsIndex":123},{"action":"org.codespaces_team_access_revoked","description":"A team has been prevented from using Codespaces for an organization.","docs_reference_links":"N/A","fieldsIndex":123},{"action":"org.codespaces_trusted_repo_access_granted","description":"GitHub Codespaces was granted trusted repository access to all other repositories in an organization.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces","docs_reference_titles":"Managing access to other repositories within your codespace","fieldsIndex":32},{"action":"org.codespaces_trusted_repo_access_revoked","description":"GitHub Codespaces trusted repository access to all other repositories in an organization was revoked.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces","docs_reference_titles":"Managing access to other repositories within your codespace","fieldsIndex":120},{"action":"org.codespaces_user_access_allowed","description":"A user has been allowed to use Codespaces for an organization.","docs_reference_links":"N/A","fieldsIndex":1},{"action":"org.codespaces_user_access_revoked","description":"A user has been prevented from using Codespaces for an organization.","docs_reference_links":"N/A","fieldsIndex":1},{"action":"org.config.disable_collaborators_only","description":"The interaction limit for collaborators only for an organization was disabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":1},{"action":"org.config.disable_contributors_only","description":"The interaction limit for prior contributors only for an organization was disabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":15},{"action":"org.config.disable_sockpuppet_disallowed","description":"The interaction limit for existing users only for an organization was disabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":124},{"action":"org.config.enable_collaborators_only","description":"The interaction limit for collaborators only for an organization was enabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":53},{"action":"org.config.enable_contributors_only","description":"The interaction limit for prior contributors only for an organization was enabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":15},{"action":"org.config.enable_sockpuppet_disallowed","description":"The interaction limit for existing users only for an organization was enabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-organization#limiting-interactions-in-your-organization","fieldsIndex":53},{"action":"org.configure_self_hosted_jit_runner","description":"A new just-in-time GitHub Actions self-hosted runner was configured","docs_reference_links":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-an-organization","docs_reference_titles":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-an-organization","fieldsIndex":53},{"action":"org.confirm_business_invitation","description":"An invitation for an organization to join an enterprise was confirmed.","docs_reference_links":"/admin/user-management/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise#inviting-an-organization-to-join-your-enterprise-account","docs_reference_titles":"Adding organizations to your enterprise","fieldsIndex":125},{"action":"org.connect_usage_metrics_export","description":"Server statistics were exported for the organization.","docs_reference_links":"/admin/monitoring-activity-in-your-enterprise/analyzing-how-your-team-works-with-server-statistics/exporting-server-statistics","docs_reference_titles":"Exporting Server Statistics","fieldsIndex":0},{"action":"org.create","description":"An organization was created.","docs_reference_links":"/organizations/collaborating-with-groups-in-organizations/creating-a-new-organization-from-scratch","docs_reference_titles":"/organizations/collaborating-with-groups-in-organizations/creating-a-new-organization-from-scratch","fieldsIndex":1},{"action":"org.create_actions_secret","description":"A GitHub Actions secret was created for an organization.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-an-organization","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":126},{"action":"org.create_actions_variable","description":"A GitHub Actions variable was created for an organization.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-organization","docs_reference_titles":"Store information in variables","fieldsIndex":126},{"action":"org.create_integration_secret","description":"A Codespaces or Dependabot secret was created for an organization.","docs_reference_links":"N/A","fieldsIndex":127},{"action":"org_credential_authorization.deauthorize","description":"A member removed the SSO (SAML or OIDC) authorization from a credential that had access to your organization.","docs_reference_links":"/authentication/authenticating-with-saml-single-sign-on/authorizing-a-personal-access-token-for-use-with-saml-single-sign-on","docs_reference_titles":"Authorizing a personal access token for use with single sign-on","fieldsIndex":128},{"action":"org_credential_authorization.grant","description":"A member authorized credentials for use with SAML or OIDC single sign-on.","docs_reference_links":"/authentication/authenticating-with-saml-single-sign-on","docs_reference_titles":"Authenticating with single sign-on","fieldsIndex":128},{"action":"org_credential_authorization.revoke","description":"An owner revoked authorized credentials.","docs_reference_links":"/organizations/granting-access-to-your-organization-with-saml-single-sign-on/viewing-and-managing-a-members-saml-access-to-your-organization","docs_reference_titles":"Viewing and managing a member's SAML access to your organization","fieldsIndex":129},{"action":"org.delete","description":"An organization was deleted by a user or staff.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"org.delete_custom_image","description":"A custom image was deleted for an organization.","docs_reference_links":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","docs_reference_titles":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","fieldsIndex":53},{"action":"org.delete_custom_image_version","description":"A custom image version was deleted for an organization.","docs_reference_links":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","docs_reference_titles":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","fieldsIndex":53},{"action":"org.disable_member_team_creation_permission","description":"Team creation was limited to owners.","docs_reference_links":"/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization","fieldsIndex":53},{"action":"org.disable_oauth_app_restrictions","description":"Third-party application access restrictions for an organization were disabled.","docs_reference_links":"/organizations/managing-oauth-access-to-your-organizations-data/disabling-oauth-app-access-restrictions-for-your-organization","docs_reference_titles":"/organizations/managing-oauth-access-to-your-organizations-data/disabling-oauth-app-access-restrictions-for-your-organization","fieldsIndex":15},{"action":"org.disable_reader_discussion_creation_permission","description":"An organization owner limited discussion creation to users with at least triage permission in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-discussion-creation-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-discussion-creation-for-repositories-in-your-organization","fieldsIndex":15},{"action":"org.disable_saml","description":"SAML single sign-on was disabled for an organization.","docs_reference_links":"N/A","fieldsIndex":130},{"action":"org.disable_source_ip_disclosure","description":"Display of IP addresses within audit log events for the organization was disabled.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization","fieldsIndex":11},{"action":"org.disable_two_factor_requirement","description":"A two-factor authentication requirement was disabled for the organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.display_commenter_full_name_disabled","description":"An organization owner disabled the display of a commenter's full name in an organization. Members cannot see a comment author's full name.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.display_commenter_full_name_enabled","description":"An organization owner enabled the display of a commenter's full name in an organization. Members can see a comment author's full name.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.enable_member_team_creation_permission","description":"Team creation by members was allowed.","docs_reference_links":"/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/setting-team-creation-permissions-in-your-organization","fieldsIndex":53},{"action":"org.enable_oauth_app_restrictions","description":"Third-party application access restrictions for an organization were enabled.","docs_reference_links":"/organizations/managing-oauth-access-to-your-organizations-data/enabling-oauth-app-access-restrictions-for-your-organization","docs_reference_titles":"/organizations/managing-oauth-access-to-your-organizations-data/enabling-oauth-app-access-restrictions-for-your-organization","fieldsIndex":15},{"action":"org.enable_reader_discussion_creation_permission","description":"An organization owner allowed users with read access to create discussions in an organization","docs_reference_links":"/organizations/managing-organization-settings/managing-discussion-creation-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-discussion-creation-for-repositories-in-your-organization","fieldsIndex":15},{"action":"org.enable_saml","description":"SAML single sign-on was enabled for the organization.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/enabling-and-testing-saml-single-sign-on-for-your-organization","docs_reference_titles":"Enabling and testing SAML single sign-on for your organization","fieldsIndex":131},{"action":"org.enable_source_ip_disclosure","description":"Display of IP addresses within audit log events for the organization was enabled.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/displaying-ip-addresses-in-the-audit-log-for-your-organization","fieldsIndex":15},{"action":"org.enable_two_factor_requirement","description":"Two-factor authentication is now required for the organization.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization","fieldsIndex":11},{"action":"org.integration_manager_added","description":"An organization owner granted a member access to manage all GitHub Apps owned by an organization.","docs_reference_links":"N/A","fieldsIndex":132},{"action":"org.integration_manager_removed","description":"An organization owner removed access to manage all GitHub Apps owned by an organization from an organization member.","docs_reference_links":"N/A","fieldsIndex":132},{"action":"org.invite_member","description":"A new user was invited to join an organization.","docs_reference_links":"/organizations/managing-membership-in-your-organization/inviting-users-to-join-your-organization","docs_reference_titles":"/organizations/managing-membership-in-your-organization/inviting-users-to-join-your-organization","fieldsIndex":118},{"action":"org.invite_to_business","description":"An organization was invited to join an enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.members_can_update_protected_branches.disable","description":"The ability for enterprise members to update protected branches was disabled. Only enterprise owners can update protected branches.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.members_can_update_protected_branches.enable","description":"The ability for enterprise members to update protected branches was enabled. Members of an organization can update protected branches.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.members_limit_warning","description":"An organization is approaching its members limit.","docs_reference_links":"N/A","fieldsIndex":133},{"action":"org.oauth_app_access_approved","description":"Access to an organization was granted for an OAuth App.","docs_reference_links":"/organizations/managing-oauth-access-to-your-organizations-data/approving-oauth-apps-for-your-organization","docs_reference_titles":"/organizations/managing-oauth-access-to-your-organizations-data/approving-oauth-apps-for-your-organization","fieldsIndex":134},{"action":"org.oauth_app_access_blocked","description":"N/A","docs_reference_links":"N/A","fieldsIndex":134},{"action":"org.oauth_app_access_denied","description":"Access was disabled for an OAuth App that was previously approved.","docs_reference_links":"/organizations/managing-oauth-access-to-your-organizations-data/denying-access-to-a-previously-approved-oauth-app-for-your-organization","docs_reference_titles":"/organizations/managing-oauth-access-to-your-organizations-data/denying-access-to-a-previously-approved-oauth-app-for-your-organization","fieldsIndex":134},{"action":"org.oauth_app_access_requested","description":"An organization member requested that an owner grant an OAuth App access to an organization.","docs_reference_links":"N/A","fieldsIndex":134},{"action":"org.oauth_app_access_unblocked","description":"N/A","docs_reference_links":"N/A","fieldsIndex":134},{"action":"org.rate_limited_invites","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.recovery_code_failed","description":"An organization owner failed to sign into a organization with an external identity provider (IdP) using a recovery code.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/accessing-your-organization-if-your-identity-provider-is-unavailable","docs_reference_titles":"Accessing your organization if your identity provider is unavailable","fieldsIndex":135},{"action":"org.recovery_code_used","description":"An organization owner successfully signed into an organization with an external identity provider (IdP) using a recovery code.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/accessing-your-organization-if-your-identity-provider-is-unavailable","docs_reference_titles":"Accessing your organization if your identity provider is unavailable","fieldsIndex":15},{"action":"org.recovery_codes_downloaded","description":"An organization owner downloaded the organization's SSO recovery codes.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/downloading-your-organizations-saml-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your organization's SAML single sign-on recovery codes","fieldsIndex":15},{"action":"org.recovery_codes_generated","description":"An organization owner generated the organization's SSO recovery codes.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/downloading-your-organizations-saml-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your organization's SAML single sign-on recovery codes","fieldsIndex":15},{"action":"org.recovery_codes_printed","description":"An organization owner printed the organization's SSO recovery codes.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/downloading-your-organizations-saml-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your organization's SAML single sign-on recovery codes","fieldsIndex":15},{"action":"org.recovery_codes_viewed","description":"An organization owner viewed the organization's SSO recovery codes.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/downloading-your-organizations-saml-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your organization's SAML single sign-on recovery codes","fieldsIndex":15},{"action":"org.register_self_hosted_runner","description":"A new self-hosted runner was registered.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-an-organization","docs_reference_titles":"Adding self-hosted runners","fieldsIndex":60},{"action":"org.remove_actions_secret","description":"A GitHub Actions secret was removed from an organization.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-an-organization","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":136},{"action":"org.remove_actions_variable","description":"A GitHub Actions variable was removed from an organization.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-organization","docs_reference_titles":"Store information in variables","fieldsIndex":136},{"action":"org.remove_billing_manager","description":"A billing manager was removed from an organization, either manually or due to a two-factor authentication requirement.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/removing-a-billing-manager-from-your-organization, /organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization","docs_reference_titles":"/organizations/managing-peoples-access-to-your-organization-with-roles/removing-a-billing-manager-from-your-organization, /organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization","fieldsIndex":53},{"action":"org.remove_disallowed_two_factor_method","description":"Removed a two-factor authentication method restriction for an organization.","docs_reference_links":"N/A","fieldsIndex":109},{"action":"org.remove_integration_secret","description":"A Codespaces or Dependabot secret was removed from an organization.","docs_reference_links":"N/A","fieldsIndex":137},{"action":"org.remove_member","description":"A member was removed from an organization, either manually or due to a two-factor authentication requirement.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"org.remove_outside_collaborator","description":"An outside collaborator was removed from an organization, either manually or due to a two-factor authentication requirement.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"org.remove_security_manager","description":"N/A","docs_reference_links":"N/A","fieldsIndex":138},{"action":"org.remove_self_hosted_runner","description":"A self-hosted runner was removed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners#removing-a-runner-from-an-organization","docs_reference_titles":"Removing self-hosted runners","fieldsIndex":53},{"action":"org.rename","description":"An organization was renamed.","docs_reference_links":"N/A","fieldsIndex":139},{"action":"org.required_workflow_create","description":"Triggered when a required workflow is created.","docs_reference_links":"/actions/using-workflows/required-workflows","docs_reference_titles":"/actions/using-workflows/required-workflows","fieldsIndex":0},{"action":"org.required_workflow_delete","description":"Triggered when a required workflow is deleted.","docs_reference_links":"/actions/using-workflows/required-workflows","docs_reference_titles":"/actions/using-workflows/required-workflows","fieldsIndex":0},{"action":"org.required_workflow_update","description":"Triggered when a required workflow is updated.","docs_reference_links":"/actions/using-workflows/required-workflows","docs_reference_titles":"/actions/using-workflows/required-workflows","fieldsIndex":0},{"action":"org.restore_member","description":"An organization member was restored.","docs_reference_links":"/organizations/managing-membership-in-your-organization/reinstating-a-former-member-of-your-organization","docs_reference_titles":"/organizations/managing-membership-in-your-organization/reinstating-a-former-member-of-your-organization","fieldsIndex":1},{"action":"org.revoke_external_identity","description":"A member's linked identity was revoked.","docs_reference_links":"/organizations/granting-access-to-your-organization-with-saml-single-sign-on/viewing-and-managing-a-members-saml-access-to-your-organization#viewing-and-revoking-a-linked-identity","docs_reference_titles":"Viewing and managing a member's SAML access to your organization","fieldsIndex":15},{"action":"org.revoke_sso_session","description":"A member's SAML session was revoked.","docs_reference_links":"/organizations/granting-access-to-your-organization-with-saml-single-sign-on/viewing-and-managing-a-members-saml-access-to-your-organization#viewing-and-revoking-a-linked-identity","docs_reference_titles":"Viewing and managing a member's SAML access to your organization","fieldsIndex":15},{"action":"org.runner_group_created","description":"A self-hosted runner group was created.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#creating-a-self-hosted-runner-group-for-an-organization","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":140},{"action":"org.runner_group_removed","description":"A self-hosted runner group was removed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#removing-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":141},{"action":"org.runner_group_renamed","description":"A self-hosted runner group was renamed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#changing-the-access-policy-of-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":142},{"action":"org.runner_group_runner_removed","description":"The REST API was used to remove a self-hosted runner from a group.","docs_reference_links":"/rest/actions#remove-a-self-hosted-runner-from-a-group-for-an-organization","docs_reference_titles":"/rest/actions#remove-a-self-hosted-runner-from-a-group-for-an-organization","fieldsIndex":143},{"action":"org.runner_group_runners_added","description":"A self-hosted runner was added to a group.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#moving-a-self-hosted-runner-to-a-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":141},{"action":"org.runner_group_runners_updated","description":"A runner group's list of members was updated.","docs_reference_links":"/rest/actions#set-self-hosted-runners-in-a-group-for-an-organization","docs_reference_titles":"/rest/actions#set-self-hosted-runners-in-a-group-for-an-organization","fieldsIndex":141},{"action":"org.runner_group_updated","description":"The configuration of a self-hosted runner group was changed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#changing-the-access-policy-of-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":140},{"action":"org.runner_group_visiblity_updated","description":"The visibility of a self-hosted runner group was updated via the REST API.","docs_reference_links":"/rest/actions#update-a-self-hosted-runner-group-for-an-organization","docs_reference_titles":"/rest/actions#update-a-self-hosted-runner-group-for-an-organization","fieldsIndex":144},{"action":"org.secret_protection_metered_usage_lock","description":"Enablement for Secret Protection features on new repositories has been locked for this organization.","docs_reference_links":"N/A","fieldsIndex":119},{"action":"org.secret_protection_metered_usage_unlock","description":"Enablement for Secret Protection features on new repositories has been unlocked for this organization.","docs_reference_links":"N/A","fieldsIndex":120},{"action":"org_secret_scanning_automatic_validity_checks.disabled","description":"Automatic partner validation checks have been disabled at the organization level","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#allowing-validity-checks-for-partner-patterns-in-an-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#allowing-validity-checks-for-partner-patterns-in-an-organization","fieldsIndex":11},{"action":"org_secret_scanning_automatic_validity_checks.enabled","description":"Automatic partner validation checks have been enabled at the organization level","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#allowing-validity-checks-for-partner-patterns-in-an-organization","docs_reference_titles":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-security-and-analysis-settings-for-your-organization#allowing-validity-checks-for-partner-patterns-in-an-organization","fieldsIndex":53},{"action":"org_secret_scanning_custom_pattern.create","description":"A custom pattern was created for secret scanning in an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-organization","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":53},{"action":"org_secret_scanning_custom_pattern.delete","description":"A custom pattern was removed from secret scanning in an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#removing-a-custom-pattern","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":1},{"action":"org_secret_scanning_custom_pattern.publish","description":"A custom pattern was published for secret scanning in an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-organization","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":15},{"action":"org.secret_scanning_custom_pattern_push_protection_disabled","description":"Push protection for a custom pattern for secret scanning was disabled for an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-organization","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":0},{"action":"org.secret_scanning_custom_pattern_push_protection_enabled","description":"Push protection for a custom pattern for secret scanning was enabled for an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-organization","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":0},{"action":"org_secret_scanning_custom_pattern.update","description":"Changes to a custom pattern were saved and a dry run was executed for secret scanning in an organization.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#editing-a-custom-pattern","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":1},{"action":"org_secret_scanning_generic_secrets.disabled","description":"Generic secrets have been disabled at the organization level","docs_reference_links":"N/A","fieldsIndex":0},{"action":"org_secret_scanning_generic_secrets.enabled","description":"Generic secrets have been enabled at the organization level","docs_reference_links":"N/A","fieldsIndex":0},{"action":"org_secret_scanning_non_provider_patterns.disabled","description":"Secret scanning for non-provider patterns was disabled at the organization level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":15},{"action":"org_secret_scanning_non_provider_patterns.enabled","description":"Secret scanning for non-provider patterns was enabled at the organization level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":15},{"action":"org_secret_scanning_push_protection_bypass_list.add","description":"A role or team was added to the push protection bypass list at the organization level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org_secret_scanning_push_protection_bypass_list.disable","description":"Push protection settings for \"Users who can bypass push protection for secret scanning\" changed from \"Specific roles or teams\" to \"Anyone with write access\" at the organization level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":15},{"action":"org_secret_scanning_push_protection_bypass_list.enable","description":"Push protection settings for \"Users who can bypass push protection for secret scanning\" changed from \"Anyone with write access\" to \"Specific roles or teams\" at the organization level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":15},{"action":"org_secret_scanning_push_protection_bypass_list.remove","description":"A role or team was removed from the push protection bypass list at the organization level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org.secret_scanning_push_protection_custom_message_disabled","description":"The custom message triggered by an attempted push to a push-protected repository was disabled for an organization.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning#enabling-secret-scanning-as-a-push-protection-for-an-organization","docs_reference_titles":"Push protection","fieldsIndex":1},{"action":"org.secret_scanning_push_protection_custom_message_enabled","description":"The custom message triggered by an attempted push to a push-protected repository was enabled for an organization.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning#enabling-secret-scanning-as-a-push-protection-for-an-organization","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org.secret_scanning_push_protection_custom_message_updated","description":"The custom message triggered by an attempted push to a push-protected repository was updated for an organization.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning#enabling-secret-scanning-as-a-push-protection-for-an-organization","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org.secret_scanning_push_protection_disable","description":"Push protection for secret scanning was disabled.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning","docs_reference_titles":"Push protection","fieldsIndex":11},{"action":"org.secret_scanning_push_protection_enable","description":"Push protection for secret scanning was enabled.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org.secret_scanning_push_protection_new_repos_disable","description":"Push protection for secret scanning was disabled for all new repositories in the organization.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org.secret_scanning_push_protection_new_repos_enable","description":"Push protection for secret scanning was enabled for all new repositories in the organization.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations","docs_reference_titles":"Push protection","fieldsIndex":53},{"action":"org_secret_scanning_push_protection_pattern_configuration.push_protection_setting_changed","description":"The push protection setting was updated for a secret type for your organization.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations","docs_reference_titles":"Push protection","fieldsIndex":145},{"action":"org_secret_scanning_push_protection_pattern_configuration.updated","description":"The push protection pattern configuration was updated for your organization.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations","docs_reference_titles":"Push protection","fieldsIndex":146},{"action":"org.security_center_export_code_scanning_metrics","description":"A CSV export was requested on the CodeQL pull request alerts page.","docs_reference_links":"N/A","fieldsIndex":147},{"action":"org.security_center_export_coverage","description":"A CSV export was requested on the Coverage page.","docs_reference_links":"N/A","fieldsIndex":148},{"action":"org.security_center_export_overview_dashboard","description":"A CSV export was requested on the Overview Dashboard page.","docs_reference_links":"N/A","fieldsIndex":147},{"action":"org.security_center_export_risk","description":"A CSV export was requested on the Risk page.","docs_reference_links":"N/A","fieldsIndex":148},{"action":"org.self_hosted_runner_offline","description":"The runner application was stopped. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":149},{"action":"org.self_hosted_runner_online","description":"The runner application was started. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":149},{"action":"org.self_hosted_runner_updated","description":"The runner application was updated. This event is not included in the JSON/CSV export.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#about-self-hosted-runners","docs_reference_titles":"Self-hosted runners","fieldsIndex":150},{"action":"org.set_actions_cache_retention_policy","description":"The cache retention policy for GitHub Actions was set for an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization","fieldsIndex":53},{"action":"org.set_actions_cache_storage_policy","description":"The cache storage policy for GitHub Actions was set for an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-github-actions-settings-for-your-organization","fieldsIndex":53},{"action":"org.set_actions_fork_pr_approvals_policy","description":"The setting for requiring approvals for workflows from public forks was changed for an organization.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#requiring-approval-for-workflows-from-public-forks","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#requiring-approval-for-workflows-from-public-forks","fieldsIndex":151},{"action":"org.set_actions_private_fork_pr_approvals_policy","description":"The policy for requiring approval for fork pull request workflows from collaborators without write access to private repos was changed for an organization.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#enabling-workflows-for-private-repository-forks","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#enabling-workflows-for-private-repository-forks","fieldsIndex":151},{"action":"org.set_actions_retention_limit","description":"The retention period for GitHub Actions artifacts and logs in an organization was changed.","docs_reference_links":"/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization","fieldsIndex":152},{"action":"org.set_custom_invitation_rate_limit","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.set_default_workflow_permissions","description":"The default permissions granted to the GITHUB_TOKEN when running workflows were changed for an organization.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#setting-the-permissions-of-the-github_token-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#setting-the-permissions-of-the-github_token-for-your-organization","fieldsIndex":153},{"action":"org.set_fork_pr_workflows_policy","description":"The policy for workflows on private repository forks was changed.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#enabling-workflows-for-private-repository-forks","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#enabling-workflows-for-private-repository-forks","fieldsIndex":151},{"action":"org.set_workflow_permission_can_approve_pr","description":"The policy for allowing GitHub Actions to create and approve pull requests was changed for an organization.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#preventing-github-actions-from-creating-or-approving-pull-requests","fieldsIndex":154},{"action":"org.sso_response","description":"A SAML single sign-on (SSO) response was generated when a member attempted to authenticate with your organization. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"N/A","fieldsIndex":155},{"action":"org.transfer","description":"An organization was transferred between enterprise accounts.","docs_reference_links":"/admin/user-management/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise#transferring-an-organization-between-enterprise-accounts","docs_reference_titles":"Adding organizations to your enterprise","fieldsIndex":156},{"action":"org.transfer_outgoing","description":"An organization was transferred between enterprise accounts.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/adding-organizations-to-your-enterprise#transferring-an-organization-between-enterprise-accounts","docs_reference_titles":"Adding organizations to your enterprise","fieldsIndex":156},{"action":"org.unarchive","description":"The organization was unarchived.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.unblock_user","description":"A user was unblocked from an organization.","docs_reference_links":"/communities/maintaining-your-safety-on-github/unblocking-a-user-from-your-organization","docs_reference_titles":"/communities/maintaining-your-safety-on-github/unblocking-a-user-from-your-organization","fieldsIndex":116},{"action":"org.update_actions_secret","description":"A GitHub Actions secret was updated for an organization.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-an-organization","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":126},{"action":"org.update_actions_settings","description":"An organization owner or site administrator updated GitHub Actions policy settings for an organization.","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization","fieldsIndex":157},{"action":"org.update_actions_variable","description":"A GitHub Actions variable was updated for an organization.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-an-organization","docs_reference_titles":"Store information in variables","fieldsIndex":126},{"action":"org.update_custom_images_policy","description":"The enterprise updated GitHub Actions custom image policy settings for an organization.","docs_reference_links":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","docs_reference_titles":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","fieldsIndex":158},{"action":"org.update_default_repository_permission","description":"The default repository permission level for organization members was changed.","docs_reference_links":"N/A","fieldsIndex":159},{"action":"org.update_immutable_releases_settings_policy","description":"The settings policy for immutable releases was updated for an organization.","docs_reference_links":"N/A","fieldsIndex":160},{"action":"org.update_integration_secret","description":"A Codespaces or Dependabot secret was updated for an organization.","docs_reference_links":"N/A","fieldsIndex":127},{"action":"org.update_member","description":"A person's role was changed from owner to member or member to owner.","docs_reference_links":"N/A","fieldsIndex":159},{"action":"org.update_member_repository_creation_permission","description":"The create repository permission for organization members was changed.","docs_reference_links":"N/A","fieldsIndex":161},{"action":"org.update_member_repository_invitation_permission","description":"An organization owner changed the policy setting for organization members inviting outside collaborators to repositories.","docs_reference_links":"/organizations/managing-organization-settings/setting-permissions-for-adding-outside-collaborators","docs_reference_titles":"Setting permissions for adding outside collaborators","fieldsIndex":162},{"action":"org.update_new_repository_default_branch_setting","description":"The name of the default branch was changed for new repositories in the organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-the-default-branch-name-for-repositories-in-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/managing-the-default-branch-name-for-repositories-in-your-organization","fieldsIndex":15},{"action":"org.update_repo_self_hosted_runners_policy","description":"The repository self-hosted runners policy was updated","docs_reference_links":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#limiting-the-use-of-self-hosted-runners","docs_reference_titles":"/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization#limiting-the-use-of-self-hosted-runners","fieldsIndex":163},{"action":"org.update_saml_provider_settings","description":"An organization's SAML provider settings were updated.","docs_reference_links":"N/A","fieldsIndex":131},{"action":"org.update_terms_of_service","description":"An organization changed between the Standard Terms of Service and the GitHub Customer Agreement.","docs_reference_links":"/organizations/managing-organization-settings/upgrading-to-the-github-customer-agreement","docs_reference_titles":"/organizations/managing-organization-settings/upgrading-to-the-github-customer-agreement","fieldsIndex":11},{"action":"organization_custom_property_value.create","description":"An organization's custom property value was manually set for the first time.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","docs_reference_titles":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","fieldsIndex":164},{"action":"organization_custom_property_value.destroy","description":"An organization's custom property value was deleted.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","docs_reference_titles":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","fieldsIndex":164},{"action":"organization_default_label.create","description":"A default label was created for repositories in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#creating-a-default-label","docs_reference_titles":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#creating-a-default-label","fieldsIndex":1},{"action":"organization_default_label.destroy","description":"A default label was deleted for repositories in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#deleting-a-default-label","docs_reference_titles":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#deleting-a-default-label","fieldsIndex":15},{"action":"organization_default_label.update","description":"A default label was edited for repositories in an organization.","docs_reference_links":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#editing-a-default-label","docs_reference_titles":"/organizations/managing-organization-settings/managing-default-labels-for-repositories-in-your-organization#editing-a-default-label","fieldsIndex":15},{"action":"organization_domain.approve","description":"A domain was approved for an organization.","docs_reference_links":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#approving-a-domain-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#approving-a-domain-for-your-organization","fieldsIndex":165},{"action":"organization_domain.create","description":"A domain was added to an organization.","docs_reference_links":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#verifying-a-domain-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#verifying-a-domain-for-your-organization","fieldsIndex":165},{"action":"organization_domain.destroy","description":"A domain was removed from an organization.","docs_reference_links":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#removing-an-approved-or-verified-domain","docs_reference_titles":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#removing-an-approved-or-verified-domain","fieldsIndex":165},{"action":"organization_domain.verify","description":"A domain was verified for an organization.","docs_reference_links":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#verifying-a-domain-for-your-organization","docs_reference_titles":"/organizations/managing-organization-settings/verifying-or-approving-a-domain-for-your-organization#verifying-a-domain-for-your-organization","fieldsIndex":165},{"action":"organization_moderators.add_team","description":"A team was added as an organization moderator.","docs_reference_links":"N/A","fieldsIndex":123},{"action":"organization_moderators.add_user","description":"A user was added as an organization moderator.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"organization_moderators.remove_team","description":"A team was removed as an organization moderator.","docs_reference_links":"N/A","fieldsIndex":123},{"action":"organization_moderators.remove_user","description":"A user was removed as an organization moderator.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"organization_projects_change.clear","description":"An enterprise owner cleared the policy setting for organization-wide project boards in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-projects-in-your-enterprise#enforcing-a-policy-for-organization-wide-project-boards","docs_reference_titles":"Enforcing policies for projects in your enterprise","fieldsIndex":11},{"action":"organization_projects_change.disable","description":"Organization projects were disabled for all organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-projects-in-your-enterprise#enforcing-a-policy-for-organization-wide-project-boards","docs_reference_titles":"Enforcing policies for projects in your enterprise","fieldsIndex":53},{"action":"organization_projects_change.enable","description":"Organization projects were enabled for all organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-projects-in-your-enterprise#enforcing-a-policy-for-organization-wide-project-boards","docs_reference_titles":"Enforcing policies for projects in your enterprise","fieldsIndex":53},{"action":"organization_role.assign","description":"An organization role was assigned to a user or team.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/about-custom-organization-roles","docs_reference_titles":"Permissions of custom organization roles","fieldsIndex":166},{"action":"organization_role.create","description":"A custom organization role was created in an organization.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/about-custom-organization-roles","docs_reference_titles":"Permissions of custom organization roles","fieldsIndex":167},{"action":"organization_role.destroy","description":"A custom organization role was deleted in an organization.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/about-custom-organization-roles","docs_reference_titles":"Permissions of custom organization roles","fieldsIndex":167},{"action":"organization_role.revoke","description":"A user or team was unassigned an organization role.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/about-custom-organization-roles","docs_reference_titles":"Permissions of custom organization roles","fieldsIndex":166},{"action":"organization_role.update","description":"A custom organization role was edited in an organization.","docs_reference_links":"/organizations/managing-peoples-access-to-your-organization-with-roles/about-custom-organization-roles","docs_reference_titles":"Permissions of custom organization roles","fieldsIndex":168},{"action":"organization_wide_project_base_role.update","description":"An organization's default project base role was updated.","docs_reference_links":"N/A","fieldsIndex":169},{"action":"packages.package_deleted","description":"An entire package was deleted.","docs_reference_links":"/packages/learn-github-packages/deleting-and-restoring-a-package","docs_reference_titles":"/packages/learn-github-packages/deleting-and-restoring-a-package","fieldsIndex":170},{"action":"packages.package_published","description":"A package was published or republished to an organization.","docs_reference_links":"N/A","fieldsIndex":171},{"action":"packages.package_version_deleted","description":"A specific package version was deleted.","docs_reference_links":"/packages/learn-github-packages/deleting-and-restoring-a-package","docs_reference_titles":"/packages/learn-github-packages/deleting-and-restoring-a-package","fieldsIndex":172},{"action":"packages.package_version_published","description":"A specific package version was published or republished to a package.","docs_reference_links":"N/A","fieldsIndex":173},{"action":"pages_protected_domain.create","description":"A GitHub Pages verified domain was created for an organization or enterprise.","docs_reference_links":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","docs_reference_titles":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","fieldsIndex":174},{"action":"pages_protected_domain.delete","description":"A GitHub Pages verified domain was deleted from an organization or enterprise.","docs_reference_links":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","docs_reference_titles":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","fieldsIndex":174},{"action":"pages_protected_domain.verify","description":"A GitHub Pages domain was verified for an organization or enterprise.","docs_reference_links":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","docs_reference_titles":"/pages/configuring-a-custom-domain-for-your-github-pages-site/verifying-your-custom-domain-for-github-pages","fieldsIndex":174},{"action":"payment_method.create","description":"A new payment method was added, such as a new credit card or PayPal account.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"payment_method.remove","description":"A payment method was removed.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"payment_method.update","description":"An existing payment method was updated.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.access_granted","description":"A fine-grained personal access token was granted access to resources.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","fieldsIndex":175},{"action":"personal_access_token.access_restriction_disabled","description":"The configured restriction for access to resources via personal access tokens was disabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.access_restriction_enabled","description":"The configured restriction for access to resources via personal access tokens was enabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.access_revoked","description":"A fine-grained personal access token was revoked. The token can still read public organization resources.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/reviewing-and-revoking-personal-access-tokens-in-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/reviewing-and-revoking-personal-access-tokens-in-your-organization","fieldsIndex":176},{"action":"personal_access_token.auto_approve_grant_requests_disabled","description":"Triggered when fine-grained personal access tokens can access organization resources without prior approval.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.auto_approve_grant_requests_enabled","description":"Triggered when the organization must approve fine-grained personal access tokens before the tokens can access organization resources.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.expiration_limit_set","description":"A personal access token expiration limit was set.","docs_reference_links":"N/A","fieldsIndex":177},{"action":"personal_access_token.expiration_limit_unset","description":"A personal access token expiration limit was unset.","docs_reference_links":"N/A","fieldsIndex":178},{"action":"personal_access_token.request_cancelled","description":"A pending request for a fine-grained personal access token to access organization resources was canceled.","docs_reference_links":"N/A","fieldsIndex":179},{"action":"personal_access_token.request_created","description":"Triggered when a fine-grained personal access token was created to access organization resources and the organization requires approval before the token can access organization resources.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","fieldsIndex":180},{"action":"personal_access_token.request_denied","description":"A request for a fine-grained personal access token to access organization resources was denied.","docs_reference_links":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","docs_reference_titles":"/organizations/managing-programmatic-access-to-your-organization/managing-requests-for-personal-access-tokens-in-your-organization","fieldsIndex":181},{"action":"prebuild_configuration.create","description":"A GitHub Codespaces prebuild configuration for a repository was created.","docs_reference_links":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","docs_reference_titles":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","fieldsIndex":182},{"action":"prebuild_configuration.destroy","description":"A GitHub Codespaces prebuild configuration for a repository was deleted.","docs_reference_links":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","docs_reference_titles":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","fieldsIndex":182},{"action":"prebuild_configuration.run_triggered","description":"A user initiated a run of a GitHub Codespaces prebuild configuration for a repository branch.","docs_reference_links":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","docs_reference_titles":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","fieldsIndex":182},{"action":"prebuild_configuration.update","description":"A GitHub Codespaces prebuild configuration for a repository was edited.","docs_reference_links":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","docs_reference_titles":"/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds","fieldsIndex":182},{"action":"premium_runner.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":48},{"action":"premium_runner.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"premium_runner.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":48},{"action":"private_repository_forking.clear","description":"An enterprise owner cleared the policy setting for allowing forks of private and internal repositories, for a repository, organization or enterprise.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"private_repository_forking.disable","description":"An enterprise owner disabled the policy setting for allowing forks of private and internal repositories, for a repository, organization or enterprise. Private and internal repositories are never allowed to be forked.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"private_repository_forking.enable","description":"An enterprise owner enabled the policy setting for allowing forks of private and internal repositories, for a repository, organization or enterprise. Private and internal repositories are always allowed to be forked.","docs_reference_links":"N/A","fieldsIndex":183},{"action":"private_vulnerability_reporting.disable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"private_vulnerability_reporting.enable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"private_vulnerability_reporting_new_repos.disable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"private_vulnerability_reporting_new_repos.enable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"profile_picture.update","description":"A profile picture was updated.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/personalizing-your-profile","docs_reference_titles":"Personalize your profile","fieldsIndex":184},{"action":"project.access","description":"A project board visibility was changed.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"project_base_role.update","description":"A project's base role was updated.","docs_reference_links":"N/A","fieldsIndex":185},{"action":"project.close","description":"A project board was closed.","docs_reference_links":"/issues/organizing-your-work-with-project-boards/managing-project-boards/closing-a-project-board","docs_reference_titles":"Planning and tracking with Projects","fieldsIndex":186},{"action":"project_collaborator.add","description":"A collaborator was added to a project.","docs_reference_links":"N/A","fieldsIndex":187},{"action":"project_collaborator.remove","description":"A collaborator was removed from a project.","docs_reference_links":"N/A","fieldsIndex":187},{"action":"project_collaborator.update","description":"A project collaborator's permission level was changed.","docs_reference_links":"N/A","fieldsIndex":187},{"action":"project.create","description":"A project board was created.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"project.delete","description":"A project board was deleted.","docs_reference_links":"N/A","fieldsIndex":188},{"action":"project_field.create","description":"A field was created in a project board.","docs_reference_links":"/issues/planning-and-tracking-with-projects/understanding-fields","docs_reference_titles":"/issues/planning-and-tracking-with-projects/understanding-fields","fieldsIndex":53},{"action":"project_field.delete","description":"A field was deleted in a project board.","docs_reference_links":"/issues/planning-and-tracking-with-projects/understanding-fields/deleting-custom-fields","docs_reference_titles":"/issues/planning-and-tracking-with-projects/understanding-fields/deleting-custom-fields","fieldsIndex":189},{"action":"project.link","description":"A repository was linked to a project board.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"project.open","description":"A project board was reopened.","docs_reference_links":"/issues/organizing-your-work-with-project-boards/managing-project-boards/reopening-a-closed-project-board","docs_reference_titles":"Planning and tracking with Projects","fieldsIndex":186},{"action":"project.rename","description":"A project board was renamed.","docs_reference_links":"N/A","fieldsIndex":190},{"action":"project.unlink","description":"A repository was unlinked from a project board.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"project.update_org_permission","description":"The project's base-level permission for all organization members was changed or removed.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"project.update_team_permission","description":"A team's project board permission level was changed or when a team was added or removed from a project board.","docs_reference_links":"N/A","fieldsIndex":191},{"action":"project.update_user_permission","description":"A user was added to or removed from a project board or had their permission level changed.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"project_view.create","description":"A view was created in a project board.","docs_reference_links":"/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views","docs_reference_titles":"/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views","fieldsIndex":53},{"action":"project_view.delete","description":"A view was deleted in a project board.","docs_reference_links":"/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views","docs_reference_titles":"/issues/planning-and-tracking-with-projects/customizing-views-in-your-project/managing-your-views","fieldsIndex":53},{"action":"project.visibility_private","description":"A project's visibility was changed from public to private.","docs_reference_links":"N/A","fieldsIndex":192},{"action":"project.visibility_public","description":"A project's visibility was changed from private to public.","docs_reference_links":"N/A","fieldsIndex":192},{"action":"protected_branch.authorized_users_teams","description":"The users, teams, or integrations allowed to bypass a branch protection were changed.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches","fieldsIndex":193},{"action":"protected_branch.branch_allowances","description":"A protected branch allowance was given to a specific user, team or integration.","docs_reference_links":"N/A","fieldsIndex":194},{"action":"protected_branch.create","description":"Branch protection was enabled on a branch.","docs_reference_links":"N/A","fieldsIndex":195},{"action":"protected_branch.destroy","description":"Branch protection was disabled on a branch.","docs_reference_links":"N/A","fieldsIndex":195},{"action":"protected_branch.dismiss_stale_reviews","description":"Enforcement of dismissing stale pull requests was updated on a branch.","docs_reference_links":"N/A","fieldsIndex":196},{"action":"protected_branch.dismissal_restricted_users_teams","description":"Enforcement of restricting users and/or teams who can dismiss reviews was updated on a branch.","docs_reference_links":"N/A","fieldsIndex":197},{"action":"protected_branch.policy_override","description":"A branch protection requirement was overridden by a repository administrator.","docs_reference_links":"N/A","fieldsIndex":198},{"action":"protected_branch.rejected_ref_update","description":"A branch update attempt was rejected.","docs_reference_links":"N/A","fieldsIndex":198},{"action":"protected_branch.update_admin_enforced","description":"Branch protection was enforced for repository administrators.","docs_reference_links":"N/A","fieldsIndex":199},{"action":"protected_branch.update_allow_deletions_enforcement_level","description":"Branch deletion was enabled or disabled for a protected branch.","docs_reference_links":"N/A","fieldsIndex":200},{"action":"protected_branch.update_allow_force_pushes_enforcement_level","description":"Force pushes were enabled or disabled for a branch.","docs_reference_links":"N/A","fieldsIndex":201},{"action":"protected_branch.update_ignore_approvals_from_contributors","description":"Ignoring of approvals from contributors to a pull request was enabled or disabled for a branch.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","fieldsIndex":202},{"action":"protected_branch.update_linear_history_requirement_enforcement_level","description":"Required linear commit history was enabled or disabled for a branch.","docs_reference_links":"N/A","fieldsIndex":203},{"action":"protected_branch.update_lock_allows_fetch_and_merge","description":"Fork syncing was enabled or disabled for a read-only branch","docs_reference_links":"repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#lock-branch","docs_reference_titles":"repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#lock-branch","fieldsIndex":204},{"action":"protected_branch.update_lock_branch_enforcement_level","description":"The enforcement of a branch lock was updated.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#lock-branch","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#lock-branch","fieldsIndex":205},{"action":"protected_branch.update_merge_queue_enforcement_level","description":"Enforcement of the merge queue was modified for a branch.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-merge-queue","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-merge-queue","fieldsIndex":206},{"action":"protected_branch.update_name","description":"A branch name pattern was updated for a branch.","docs_reference_links":"N/A","fieldsIndex":207},{"action":"protected_branch.update_pull_request_reviews_enforcement_level","description":"Enforcement of required pull request reviews was updated for a branch. Can be 0 (deactivated), 1 (non-admins), or 2 (everyone).","docs_reference_links":"N/A","fieldsIndex":208},{"action":"protected_branch.update_require_code_owner_review","description":"Enforcement of required code owner review was updated for a branch.","docs_reference_links":"N/A","fieldsIndex":209},{"action":"protected_branch.update_require_last_push_approval","description":"Someone other than the person who pushed the last code-modifying commit to the branch must approve pull requests for the branch.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-pull-request-reviews-before-merging","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-pull-request-reviews-before-merging","fieldsIndex":210},{"action":"protected_branch.update_required_approving_review_count","description":"Enforcement of the required number of approvals before merging was updated on a branch.","docs_reference_links":"N/A","fieldsIndex":211},{"action":"protected_branch.update_required_status_checks_enforcement_level","description":"Enforcement of required status checks was updated for a branch.","docs_reference_links":"N/A","fieldsIndex":212},{"action":"protected_branch.update_signature_requirement_enforcement_level","description":"Enforcement of required commit signing was updated for a branch.","docs_reference_links":"N/A","fieldsIndex":213},{"action":"protected_branch.update_strict_required_status_checks_policy","description":"Enforcement of required status checks was updated for a branch.","docs_reference_links":"N/A","fieldsIndex":214},{"action":"public_key.create","description":"An SSH key was added to a user account or a deploy key was added to a repository.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account","fieldsIndex":215},{"action":"public_key.delete","description":"An SSH key was removed from a user account or a deploy key was removed from a repository.","docs_reference_links":"/authentication/keeping-your-account-and-data-secure/reviewing-your-ssh-keys","docs_reference_titles":"/authentication/keeping-your-account-and-data-secure/reviewing-your-ssh-keys","fieldsIndex":216},{"action":"public_key.unverification_failure","description":"A user account's SSH key or a repository's deploy key was unable to be unverified.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","fieldsIndex":217},{"action":"public_key.unverify","description":"A user account's SSH key or a repository's deploy key was unverified.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","fieldsIndex":218},{"action":"public_key.update","description":"A user account's SSH key or a repository's deploy key was updated.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","fieldsIndex":215},{"action":"public_key.verification_failure","description":"A user account's SSH key or a repository's deploy key was unable to be verified.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","fieldsIndex":215},{"action":"public_key.verify","description":"A user account's SSH key or a repository's deploy key was verified.","docs_reference_links":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","docs_reference_titles":"/authentication/connecting-to-github-with-ssh/managing-deploy-keys#deploy-keys","fieldsIndex":215},{"action":"pull_request.close","description":"A pull request was closed without being merged.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/closing-a-pull-request","docs_reference_titles":"Closing a pull request","fieldsIndex":219},{"action":"pull_request.converted_to_draft","description":"A pull request was converted to a draft.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft","docs_reference_titles":"Changing the stage of a pull request","fieldsIndex":220},{"action":"pull_request.create","description":"A pull request was created.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request","docs_reference_titles":"Creating a pull request","fieldsIndex":221},{"action":"pull_request.create_review_request","description":"A review was requested on a pull request.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews","docs_reference_titles":"Pull request reviews","fieldsIndex":222},{"action":"pull_request.in_progress","description":"A pull request was marked as in progress.","docs_reference_links":"N/A","fieldsIndex":223},{"action":"pull_request.indirect_merge","description":"A pull request was considered merged because the pull request's commits were merged into the target branch.","docs_reference_links":"N/A","fieldsIndex":219},{"action":"pull_request.merge","description":"A pull request was merged.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/merging-a-pull-request","docs_reference_titles":"Merging a pull request","fieldsIndex":219},{"action":"pull_request.ready_for_review","description":"A pull request was marked as ready for review.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#marking-a-pull-request-as-ready-for-review","docs_reference_titles":"Changing the stage of a pull request","fieldsIndex":220},{"action":"pull_request.rebase","description":"A pull request was rebased.","docs_reference_links":"N/A","fieldsIndex":220},{"action":"pull_request.remove_review_request","description":"A review request was removed from a pull request.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews","docs_reference_titles":"Pull request reviews","fieldsIndex":222},{"action":"pull_request.reopen","description":"A pull request was reopened after previously being closed.","docs_reference_links":"N/A","fieldsIndex":220},{"action":"pull_request_review_comment.create","description":"A review comment was added to a pull request.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews","docs_reference_titles":"Pull request reviews","fieldsIndex":224},{"action":"pull_request_review_comment.delete","description":"A review comment on a pull request was deleted.","docs_reference_links":"N/A","fieldsIndex":225},{"action":"pull_request_review_comment.update","description":"A review comment on a pull request was changed.","docs_reference_links":"N/A","fieldsIndex":226},{"action":"pull_request_review.delete","description":"A review on a pull request was deleted.","docs_reference_links":"N/A","fieldsIndex":227},{"action":"pull_request_review.dismiss","description":"A review on a pull request was dismissed.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/dismissing-a-pull-request-review","docs_reference_titles":"Dismissing a pull request review","fieldsIndex":227},{"action":"pull_request_review.submit","description":"A review on a pull request was submitted.","docs_reference_links":"/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/reviewing-proposed-changes-in-a-pull-request#submitting-your-review","docs_reference_titles":"Reviewing proposed changes in a pull request","fieldsIndex":227},{"action":"repo.access","description":"The visibility of a repository changed.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/setting-repository-visibility","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/setting-repository-visibility","fieldsIndex":228},{"action":"repo.actions_enabled","description":"GitHub Actions was enabled for a repository.","docs_reference_links":"organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization#using-the-audit-log-api","docs_reference_titles":"organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization#using-the-audit-log-api","fieldsIndex":229},{"action":"repo.add_member","description":"A collaborator was added to a repository.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/inviting-collaborators-to-a-personal-repository","docs_reference_titles":"Inviting collaborators to a personal repository","fieldsIndex":230},{"action":"repo.add_topic","description":"A topic was added to a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/classifying-your-repository-with-topics","fieldsIndex":231},{"action":"repo.advanced_security_disabled","description":"GitHub Advanced Security was disabled for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository","fieldsIndex":232},{"action":"repo.advanced_security_enabled","description":"GitHub Advanced Security was enabled for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository","fieldsIndex":232},{"action":"repo.archived","description":"A repository was archived.","docs_reference_links":"/repositories/archiving-a-github-repository","docs_reference_titles":"/repositories/archiving-a-github-repository","fieldsIndex":233},{"action":"repo.change_merge_setting","description":"Pull request merge options were changed for a repository.","docs_reference_links":"N/A","fieldsIndex":233},{"action":"repo.code_quality_disabled","description":"Code Quality was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":234},{"action":"repo.code_quality_enabled","description":"Code Quality was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repo.code_quality_updated","description":"Code Quality was updated for a repository.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repo.code_scanning_ai_findings_disabled","description":"AI-powered findings for code scanning were disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":103},{"action":"repo.code_scanning_ai_findings_enabled","description":"AI-powered findings for code scanning were enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":103},{"action":"repo.code_scanning_analysis_deleted","description":"Code scanning analysis for a repository was deleted.","docs_reference_links":"/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository","docs_reference_titles":"/rest/code-scanning#delete-a-code-scanning-analysis-from-a-repository","fieldsIndex":235},{"action":"repo.code_scanning_autofix_disabled","description":"Autofix for code scanning alerts was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":236},{"action":"repo.code_scanning_autofix_enabled","description":"Autofix for code scanning alerts was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":236},{"action":"repo.code_scanning_autofix_third_party_tools_disabled","description":"Autofix for third party tools for code scanning alerts was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":236},{"action":"repo.code_scanning_autofix_third_party_tools_enabled","description":"Autofix for third party tools for code scanning alerts was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":236},{"action":"repo.code_scanning_configuration_for_branch_deleted","description":"A code scanning configuration for a branch of a repository was deleted.","docs_reference_links":"/code-security/code-scanning/managing-code-scanning-alerts/managing-code-scanning-alerts-for-your-repository#removing-stale-configurations-and-alerts-from-a-branch","docs_reference_titles":"Resolving code scanning alerts","fieldsIndex":237},{"action":"repo.code_scanning_delegated_alert_dismissal_disabled","description":"Prevention of direct alert dismissal for code scanning was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":236},{"action":"repo.code_scanning_delegated_alert_dismissal_enabled","description":"Prevention of direct alert dismissal for code scanning was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":236},{"action":"repo.codeql_disabled","description":"Code scanning using the default setup was disabled for a repository.","docs_reference_links":"/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning","docs_reference_titles":"Configuring default setup for code scanning","fieldsIndex":231},{"action":"repo.codeql_enabled","description":"Code scanning using the default setup was enabled for a repository.","docs_reference_links":"/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning","docs_reference_titles":"Configuring default setup for code scanning","fieldsIndex":238},{"action":"repo.codeql_updated","description":"Code scanning using the default setup was updated for a repository.","docs_reference_links":"/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning","docs_reference_titles":"Configuring default setup for code scanning","fieldsIndex":238},{"action":"repo.codespaces_trusted_repo_access_granted","description":"GitHub Codespaces was granted trusted repository access to this repository.","docs_reference_links":"N/A","fieldsIndex":236},{"action":"repo.codespaces_trusted_repo_access_revoked","description":"GitHub Codespaces trusted repository access to this repository was revoked.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"repo.config.disable_collaborators_only","description":"The interaction limit for collaborators only was disabled.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":234},{"action":"repo.config.disable_contributors_only","description":"The interaction limit for prior contributors only was disabled in a repository.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":239},{"action":"repo.config.disable_sockpuppet_disallowed","description":"The interaction limit for existing users only was disabled in a repository.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":234},{"action":"repo.config.enable_collaborators_only","description":"The interaction limit for collaborators only was enabled in a repository Users that are not collaborators or organization members were unable to interact with a repository for a set duration.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":32},{"action":"repo.config.enable_contributors_only","description":"The interaction limit for prior contributors only was enabled in a repository Users that are not prior contributors, collaborators or organization members were unable to interact with a repository for a set duration.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":103},{"action":"repo.config.enable_sockpuppet_disallowed","description":"The interaction limit for existing users was enabled in a repository New users aren't able to interact with a repository for a set duration Existing users of the repository, contributors, collaborators or organization members are able to interact with a repository.","docs_reference_links":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","docs_reference_titles":"/communities/moderating-comments-and-conversations/limiting-interactions-in-your-repository","fieldsIndex":18},{"action":"repo.configure_self_hosted_jit_runner","description":"A new just-in-time GitHub Actions self-hosted runner was configured","docs_reference_links":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-a-repository","docs_reference_titles":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-a-repository","fieldsIndex":32},{"action":"repo.create","description":"A repository was created.","docs_reference_links":"/repositories/creating-and-managing-repositories/creating-a-new-repository","docs_reference_titles":"/repositories/creating-and-managing-repositories/creating-a-new-repository","fieldsIndex":240},{"action":"repo.create_actions_secret","description":"A GitHub Actions secret was created for a repository.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":241},{"action":"repo.create_actions_variable","description":"A GitHub Actions variable was created for a repository.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-a-repository","docs_reference_titles":"Store information in variables","fieldsIndex":241},{"action":"repo.create_integration_secret","description":"A Codespaces or Dependabot secret was created for a repository.","docs_reference_links":"N/A","fieldsIndex":242},{"action":"repo.destroy","description":"A repository was deleted.","docs_reference_links":"/repositories/creating-and-managing-repositories/deleting-a-repository","docs_reference_titles":"/repositories/creating-and-managing-repositories/deleting-a-repository","fieldsIndex":240},{"action":"repo.download_zip","description":"A source code archive of a repository was downloaded as a ZIP file.","docs_reference_links":"/repositories/working-with-files/using-files/downloading-source-code-archives","docs_reference_titles":"/repositories/working-with-files/using-files/downloading-source-code-archives","fieldsIndex":233},{"action":"repo.immutable_releases_settings_disabled","description":"The setting for immutable releases was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":233},{"action":"repo.immutable_releases_settings_enabled","description":"The setting for immutable releases was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":233},{"action":"repo.pages_cname","description":"A GitHub Pages custom domain was modified in a repository.","docs_reference_links":"N/A","fieldsIndex":243},{"action":"repo.pages_create","description":"A GitHub Pages site was created.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_destroy","description":"A GitHub Pages site was deleted.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_https_redirect_disabled","description":"HTTPS redirects were disabled for a GitHub Pages site.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_https_redirect_enabled","description":"HTTPS redirects were enabled for a GitHub Pages site.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_private","description":"A GitHub Pages site visibility was changed to private.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_public","description":"A GitHub Pages site visibility was changed to public.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.pages_soft_delete","description":"A GitHub Pages site was soft-deleted because its owner's plan changed.","docs_reference_links":"N/A","fieldsIndex":244},{"action":"repo.pages_soft_delete_restore","description":"A GitHub Pages site that was previously soft-deleted was restored.","docs_reference_links":"N/A","fieldsIndex":233},{"action":"repo.pages_source","description":"A GitHub Pages source was modified.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.register_self_hosted_runner","description":"A new self-hosted runner was registered.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-a-repository","docs_reference_titles":"Adding self-hosted runners","fieldsIndex":245},{"action":"repo.remove_actions_secret","description":"A GitHub Actions secret was deleted for a repository.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":246},{"action":"repo.remove_actions_variable","description":"A GitHub Actions variable was deleted for a repository.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-a-repository","docs_reference_titles":"Store information in variables","fieldsIndex":246},{"action":"repo.remove_integration_secret","description":"A Codespaces or Dependabot secret was deleted for a repository.","docs_reference_links":"N/A","fieldsIndex":247},{"action":"repo.remove_member","description":"A collaborator was removed from a repository.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/removing-a-collaborator-from-a-personal-repository","docs_reference_titles":"Removing a collaborator from a personal repository","fieldsIndex":233},{"action":"repo.remove_self_hosted_runner","description":"A self-hosted runner was removed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners#removing-a-runner-from-a-repository","docs_reference_titles":"Removing self-hosted runners","fieldsIndex":32},{"action":"repo.remove_topic","description":"A topic was removed from a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repo.rename","description":"A repository was renamed.","docs_reference_links":"/repositories/creating-and-managing-repositories/renaming-a-repository","docs_reference_titles":"/repositories/creating-and-managing-repositories/renaming-a-repository","fieldsIndex":248},{"action":"repo.rename_branch","description":"A branch was renamed.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch","fieldsIndex":249},{"action":"repo.restore","description":"N/A","docs_reference_links":"N/A","fieldsIndex":236},{"action":"repo.self_hosted_runner_offline","description":"The runner application was stopped. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":149},{"action":"repo.self_hosted_runner_online","description":"The runner application was started. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":149},{"action":"repo.self_hosted_runner_updated","description":"The runner application was updated. This event is not included in the JSON/CSV export.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#about-self-hosted-runners","docs_reference_titles":"Self-hosted runners","fieldsIndex":150},{"action":"repo.set_actions_cache_retention_policy","description":"The cache retention policy for GitHub Actions was set for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository","fieldsIndex":233},{"action":"repo.set_actions_cache_storage_policy","description":"The cache storage policy for GitHub Actions was set for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository","fieldsIndex":233},{"action":"repo.set_actions_fork_pr_approvals_policy","description":"The setting for requiring approvals for workflows from public forks was changed for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#configuring-required-approval-for-workflows-from-public-forks","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#configuring-required-approval-for-workflows-from-public-forks","fieldsIndex":250},{"action":"repo.set_actions_private_fork_pr_approvals_policy","description":"The policy for requiring approval for fork pull request workflows from collaborators without write access to private repos was changed for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#enabling-workflows-for-forks-of-private-repositories","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#enabling-workflows-for-forks-of-private-repositories","fieldsIndex":250},{"action":"repo.set_actions_retention_limit","description":"The retention period for GitHub Actions artifacts and logs in a repository was changed.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-repository","fieldsIndex":251},{"action":"repo.set_default_workflow_permissions","description":"The default permissions granted to the GITHUB_TOKEN when running workflows were changed for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#setting-the-permissions-of-the-github_token-for-your-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#setting-the-permissions-of-the-github_token-for-your-repository","fieldsIndex":252},{"action":"repo.set_fork_pr_workflows_policy","description":"Triggered when the policy for workflows on private repository forks is changed.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#enabling-workflows-for-private-repository-forks","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#enabling-workflows-for-private-repository-forks","fieldsIndex":250},{"action":"repo.set_workflow_permission_can_approve_pr","description":"The policy for allowing GitHub Actions to create and approve pull requests was changed for a repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#preventing-github-actions-from-creating-or-approving-pull-requests","fieldsIndex":253},{"action":"repo.staff_unlock","description":"An enterprise owner or GitHub staff (with permission from a repository administrator) temporarily unlocked the repository.","docs_reference_links":"N/A","fieldsIndex":236},{"action":"repo.transfer","description":"A user accepted a request to receive a transferred repository.","docs_reference_links":"/repositories/creating-and-managing-repositories/transferring-a-repository","docs_reference_titles":"/repositories/creating-and-managing-repositories/transferring-a-repository","fieldsIndex":254},{"action":"repo.transfer_outgoing","description":"A repository was transferred to another repository network.","docs_reference_links":"N/A","fieldsIndex":255},{"action":"repo.transfer_start","description":"A user sent a request to transfer a repository to another user or organization.","docs_reference_links":"N/A","fieldsIndex":244},{"action":"repo.unarchived","description":"A repository was unarchived.","docs_reference_links":"/repositories/archiving-a-github-repository","docs_reference_titles":"/repositories/archiving-a-github-repository","fieldsIndex":233},{"action":"repo.update_actions_access_settings","description":"The setting to control how a repository was used by GitHub Actions workflows in other repositories was changed.","docs_reference_links":"N/A","fieldsIndex":256},{"action":"repo.update_actions_secret","description":"A GitHub Actions secret was updated for a repository.","docs_reference_links":"/actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository","docs_reference_titles":"Using secrets in GitHub Actions","fieldsIndex":241},{"action":"repo.update_actions_settings","description":"A repository administrator changed GitHub Actions policy settings for a repository.","docs_reference_links":"N/A","fieldsIndex":257},{"action":"repo.update_actions_variable","description":"A GitHub Actions variable was updated for a repository.","docs_reference_links":"/actions/learn-github-actions/variables#creating-configuration-variables-for-a-repository","docs_reference_titles":"Store information in variables","fieldsIndex":241},{"action":"repo.update_default_branch","description":"The default branch for a repository was changed.","docs_reference_links":"N/A","fieldsIndex":232},{"action":"repo.update_integration_secret","description":"A Codespaces or Dependabot secret was updated for a repository.","docs_reference_links":"N/A","fieldsIndex":242},{"action":"repo.update_member","description":"A user's permission to a repository was changed.","docs_reference_links":"N/A","fieldsIndex":258},{"action":"repository_advisory.close","description":"Someone closed a security advisory.","docs_reference_links":"/code-security/security-advisories/working-with-repository-security-advisories/about-repository-security-advisories","docs_reference_titles":"Repository security advisories","fieldsIndex":32},{"action":"repository_advisory.create_confidential_comment","description":"Someone created a confidential comment on a repository security advisory.","docs_reference_links":"N/A","fieldsIndex":259},{"action":"repository_advisory.cve_request","description":"Someone requested a CVE (Common Vulnerabilities and Exposures) number from GitHub for a draft security advisory.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_advisory.github_broadcast","description":"GitHub made a security advisory public in the GitHub Advisory Database.","docs_reference_links":"N/A","fieldsIndex":188},{"action":"repository_advisory.github_withdraw","description":"GitHub withdrew a security advisory that was published in error.","docs_reference_links":"N/A","fieldsIndex":188},{"action":"repository_advisory.open","description":"Someone opened a draft security advisory.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_advisory.publish","description":"Someone published a security advisory.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_advisory.read_confidential_comments","description":"Confidential comments on a repository security advisory were read by someone.","docs_reference_links":"N/A","fieldsIndex":260},{"action":"repository_advisory.reopen","description":"Someone reopened as draft security advisory.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_advisory.update","description":"Someone edited a draft or published security advisory.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"repository_branch_protection_evaluation.disable","description":"Branch protections were disabled for the repository.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","fieldsIndex":15},{"action":"repository_branch_protection_evaluation.enable","description":"Branch protections were enabled for this repository.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule","fieldsIndex":15},{"action":"repository_code_security.disable","description":"Code security was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_code_security.enable","description":"Code security was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_content_analysis.disable","description":"Data use settings were disabled for a private repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","fieldsIndex":0},{"action":"repository_content_analysis.enable","description":"Data use settings were enabled for a private repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","fieldsIndex":0},{"action":"repository_dependency_graph_autosubmit.disable","description":"Automatic dependency submission was disabled for a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_dependency_graph_autosubmit.enable","description":"Automatic dependency submission was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_dependency_graph.disable","description":"The dependency graph was disabled for a private repository.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-fea tures-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-fea, tures-for-your-repository/managing-security-and-analysis-settings-for-your-repository#enabling-or-disabling-security-and-analysis-features-for-private-repositories","fieldsIndex":231},{"action":"repository_dependency_graph.enable","description":"The dependency graph was enabled for a private repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_dependency_updates_self_hosted.disabled","description":"Dependency updates on self-hosted runners was disabled.","docs_reference_links":"code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-dependabot-on-self-hosted-runners","docs_reference_titles":"Configuring Dependabot on self-hosted runners","fieldsIndex":234},{"action":"repository_dependency_updates_self_hosted.enabled","description":"Dependency updates on self-hosted runners was enabled.","docs_reference_links":"code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/managing-dependabot-on-self-hosted-runners","docs_reference_titles":"Configuring Dependabot on self-hosted runners","fieldsIndex":231},{"action":"repository_image.create","description":"An image to represent a repository was uploaded.","docs_reference_links":"N/A","fieldsIndex":261},{"action":"repository_image.destroy","description":"An image to represent a repository was deleted.","docs_reference_links":"N/A","fieldsIndex":261},{"action":"repository_invitation.accept","description":"An invitation to join a repository was accepted.","docs_reference_links":"N/A","fieldsIndex":262},{"action":"repository_invitation.cancel","description":"An invitation to join a repository was canceled.","docs_reference_links":"N/A","fieldsIndex":263},{"action":"repository_invitation.create","description":"An invitation to join a repository was sent.","docs_reference_links":"N/A","fieldsIndex":263},{"action":"repository_invitation.reject","description":"An invitation to join a repository was declined.","docs_reference_links":"N/A","fieldsIndex":262},{"action":"repository_limit.reached","description":"An organization has reached their repository limit.","docs_reference_links":"repositories/creating-and-managing-repositories/repository-limits","docs_reference_titles":"repositories/creating-and-managing-repositories/repository-limits","fieldsIndex":264},{"action":"repository_limit.warning","description":"An organization is approaching their repository limit.","docs_reference_links":"repositories/creating-and-managing-repositories/repository-limits","docs_reference_titles":"repositories/creating-and-managing-repositories/repository-limits","fieldsIndex":265},{"action":"repository_malware_alerts.disable","description":"Dependabot malware alerts was disabled.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_malware_alerts.enable","description":"Dependabot malware alerts was enabled.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_projects_change.clear","description":"The repository projects policy was removed for an organization, or all organizations in the enterprise Organization owners can now control their repository projects settings.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-projects-in-your-enterprise","docs_reference_titles":"Enforcing policies for projects in your enterprise","fieldsIndex":15},{"action":"repository_projects_change.disable","description":"Repository projects were disabled for a repository, all repositories in an organization, or all organizations in an enterprise.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_projects_change.enable","description":"Repository projects were enabled for a repository, all repositories in an organization, or all organizations in an enterprise.","docs_reference_links":"N/A","fieldsIndex":32},{"action":"repository_ruleset.create","description":"A repository ruleset was created.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/creating-rulesets-for-a-repository","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/creating-rulesets-for-a-repository","fieldsIndex":266},{"action":"repository_ruleset.destroy","description":"A repository ruleset was deleted.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/managing-rulesets-for-a-repository#deleting-a-ruleset","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/managing-rulesets-for-a-repository#deleting-a-ruleset","fieldsIndex":266},{"action":"repository_ruleset.update","description":"A repository ruleset was edited.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/managing-rulesets-for-a-repository#editing-a-ruleset","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/managing-rulesets-for-a-repository#editing-a-ruleset","fieldsIndex":267},{"action":"repository_secret_scanning_automatic_validity_checks.disabled","description":"Automatic partner validation checks have been disabled at the repository level","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#allowing-validity-checks-for-partner-patterns-in-a-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#allowing-validity-checks-for-partner-patterns-in-a-repository","fieldsIndex":231},{"action":"repository_secret_scanning_automatic_validity_checks.enabled","description":"Automatic partner validation checks have been enabled at the repository level","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#allowing-validity-checks-for-partner-patterns-in-a-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#allowing-validity-checks-for-partner-patterns-in-a-repository","fieldsIndex":231},{"action":"repository_secret_scanning_custom_pattern.create","description":"A custom pattern was created for secret scanning in a repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-a-repository","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":18},{"action":"repository_secret_scanning_custom_pattern.delete","description":"A custom pattern was removed from secret scanning in a repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#removing-a-custom-pattern","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":18},{"action":"repository_secret_scanning_custom_pattern.publish","description":"A custom pattern was published for secret scanning in a repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-a-repository","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":236},{"action":"repository_secret_scanning_custom_pattern_push_protection.disabled","description":"Push protection for a custom pattern for secret scanning was disabled for your repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-a-repository","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":236},{"action":"repository_secret_scanning_custom_pattern_push_protection.enabled","description":"Push protection for a custom pattern for secret scanning was enabled for your repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-a-repository","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":236},{"action":"repository_secret_scanning_custom_pattern.update","description":"Changes to a custom pattern were saved and a dry run was executed for secret scanning in a repository.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#editing-a-custom-pattern","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":18},{"action":"repository_secret_scanning.disable","description":"Secret scanning was disabled for a repository.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":231},{"action":"repository_secret_scanning.enable","description":"Secret scanning was enabled for a repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_secret_scanning_extended_metadata.disabled","description":"Metadata for secret scanning alerts has been disabled at the repository level","docs_reference_links":"/code-security/secret-scanning/enabling-secret-scanning-features/enabling-extended-metadata-checks-for-your-repository","docs_reference_titles":"Enabling extended metadata checks for your repository","fieldsIndex":231},{"action":"repository_secret_scanning_extended_metadata.enabled","description":"Metadata for secret scanning alerts has been enabled at the repository level","docs_reference_links":"/code-security/secret-scanning/enabling-secret-scanning-features/enabling-extended-metadata-checks-for-your-repository","docs_reference_titles":"Enabling extended metadata checks for your repository","fieldsIndex":231},{"action":"repository_secret_scanning_generic_secrets.disabled","description":"Generic secrets have been disabled at the repository level","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_secret_scanning_generic_secrets.enabled","description":"Generic secrets have been enabled at the repository level","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_secret_scanning_non_provider_patterns.disabled","description":"Secret scanning for non-provider patterns was disabled at the repository level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":231},{"action":"repository_secret_scanning_non_provider_patterns.enabled","description":"Secret scanning for non-provider patterns was enabled at the repository level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":231},{"action":"repository_secret_scanning_push_protection_bypass_list.add","description":"A role or team was added to the push protection bypass list at the repository level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":103},{"action":"repository_secret_scanning_push_protection_bypass_list.disable","description":"Push protection settings for \"Users who can bypass push protection for secret scanning\" changed from \"Specific roles or teams\" to \"Anyone with write access\" at the repository level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":231},{"action":"repository_secret_scanning_push_protection_bypass_list.enable","description":"Push protection settings for \"Users who can bypass push protection for secret scanning\" changed from \"Anyone with write access\" to \"Specific roles or teams\" at the repository level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":231},{"action":"repository_secret_scanning_push_protection_bypass_list.remove","description":"A role or team was removed from the push protection bypass list at the repository level.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#enabling-delegated-bypass-for-push-protection","docs_reference_titles":"Push protection","fieldsIndex":236},{"action":"repository_secret_scanning_push_protection.disable","description":"Secret scanning push protection was disabled for a repository.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning","docs_reference_titles":"Push protection","fieldsIndex":231},{"action":"repository_secret_scanning_push_protection.enable","description":"Secret scanning push protection was enabled for a repository.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning","docs_reference_titles":"Push protection","fieldsIndex":231},{"action":"repository_security_configuration.applied","description":"A code security configuration was applied to a repository.","docs_reference_links":"N/A","fieldsIndex":268},{"action":"repository_security_configuration.failed","description":"A code security configuration failed to attach to the repository.","docs_reference_links":"N/A","fieldsIndex":268},{"action":"repository_security_configuration.removed","description":"A code security configuration was removed from a repository.","docs_reference_links":"N/A","fieldsIndex":268},{"action":"repository_security_configuration.removed_by_settings_change","description":"A code security configuration was removed due to a change in repository or enterprise settings.","docs_reference_links":"N/A","fieldsIndex":268},{"action":"repository_security_updates.disable","description":"Dependabot security updates was disabled.","docs_reference_links":"/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates","docs_reference_titles":"Configuring Dependabot security updates","fieldsIndex":231},{"action":"repository_security_updates.enable","description":"Dependabot security updates was enabled.","docs_reference_links":"/code-security/dependabot/dependabot-security-updates/configuring-dependabot-security-updates","docs_reference_titles":"Configuring Dependabot security updates","fieldsIndex":231},{"action":"repository_visibility_change.clear","description":"The repository visibility change setting was cleared for an organization or enterprise.","docs_reference_links":"/organizations/managing-organization-settings/restricting-repository-visibility-changes-in-your-organization, /admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-changes-to-repository-visibility","docs_reference_titles":"/organizations/managing-organization-settings/restricting-repository-visibility-changes-in-your-organization, Enforcing repository management policies in your enterprise","fieldsIndex":15},{"action":"repository_visibility_change.disable","description":"The ability for enterprise members to update a repository's visibility was disabled. Members are unable to change repository visibilities in an organization, or all organizations in an enterprise.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"repository_visibility_change.enable","description":"The ability for enterprise members to update a repository's visibility was enabled. Members are able to change repository visibilities in an organization, or all organizations in an enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"repository_vulnerability_alert.assign","description":"A user was assigned to a Dependabot alert.","docs_reference_links":"N/A","fieldsIndex":269},{"action":"repository_vulnerability_alert.auto_dismiss","description":"A Dependabot alert was automatically dismissed because its metadata matches an enabled Dependabot rule.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/using-alert-rules-to-prioritize-dependabot-alerts","docs_reference_titles":"Dependabot auto-triage rules","fieldsIndex":270},{"action":"repository_vulnerability_alert.auto_reopen","description":"A previously auto-dismissed Dependabot alert was automatically reopened because its metadata no longer matches an enabled Dependabot rule.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/using-alert-rules-to-prioritize-dependabot-alerts","docs_reference_titles":"Dependabot auto-triage rules","fieldsIndex":270},{"action":"repository_vulnerability_alert.create","description":"GitHub created a Dependabot alert because the repository uses a vulnerable dependency.","docs_reference_links":"/code-security/dependabot/dependabot-alerts/about-dependabot-alerts","docs_reference_titles":"Dependabot alerts","fieldsIndex":271},{"action":"repository_vulnerability_alert.dismiss","description":"A Dependabot alert was manually dismissed.","docs_reference_links":"N/A","fieldsIndex":272},{"action":"repository_vulnerability_alert.reintroduce","description":"A Dependabot alert was automatically reopened because the repository resumed use of a vulnerable dependency.","docs_reference_links":"N/A","fieldsIndex":271},{"action":"repository_vulnerability_alert.reopen","description":"A Dependabot alert was manually reopened.","docs_reference_links":"N/A","fieldsIndex":269},{"action":"repository_vulnerability_alert.resolve","description":"Changes were pushed to update and resolve a Dependabot alert in a project dependency.","docs_reference_links":"N/A","fieldsIndex":271},{"action":"repository_vulnerability_alert.unassign","description":"A user was unassigned to a Dependabot alert.","docs_reference_links":"N/A","fieldsIndex":269},{"action":"repository_vulnerability_alert.withdraw","description":"A Dependabot alert was withdrawn.","docs_reference_links":"N/A","fieldsIndex":273},{"action":"repository_vulnerability_alerts.authorized_users_teams","description":"The list of people or teams authorized to receive Dependabot alerts for the repository was updated.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#granting-access-to-security-alerts","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-security-and-analysis-settings-for-your-repository#granting-access-to-security-alerts","fieldsIndex":236},{"action":"repository_vulnerability_alerts_auto_dismissal.disable","description":"Automatic dismissal of low-impact Dependabot alerts was disabled for the repository.","docs_reference_links":"N/A","fieldsIndex":188},{"action":"repository_vulnerability_alerts_auto_dismissal.enable","description":"Automatic dismissal of low-impact Dependabot alerts was enabled for the repository.","docs_reference_links":"N/A","fieldsIndex":231},{"action":"repository_vulnerability_alerts.disable","description":"Dependabot alerts was disabled.","docs_reference_links":"N/A","fieldsIndex":274},{"action":"repository_vulnerability_alerts.enable","description":"Dependabot alerts was enabled.","docs_reference_links":"N/A","fieldsIndex":274},{"action":"required_status_check.create","description":"A status check was marked as required for a protected branch.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-status-checks-before-merging","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-status-checks-before-merging","fieldsIndex":275},{"action":"required_status_check.destroy","description":"A status check was no longer marked as required for a protected branch.","docs_reference_links":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-status-checks-before-merging","docs_reference_titles":"/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches#require-status-checks-before-merging","fieldsIndex":275},{"action":"restrict_notification_delivery.disable","description":"Email notification restrictions for an organization or enterprise were disabled.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/restricting-email-notifications-for-your-organization, /admin/policies/enforcing-policies-for-your-enterprise/restricting-email-notifications-for-your-enterprise","docs_reference_titles":"Restricting email notifications for your organization, Restricting email notifications for your enterprise","fieldsIndex":276},{"action":"restrict_notification_delivery.enable","description":"Email notification restrictions for an organization or enterprise were enabled.","docs_reference_links":"/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/restricting-email-notifications-for-your-organization, /admin/policies/enforcing-policies-for-your-enterprise/restricting-email-notifications-for-your-enterprise","docs_reference_titles":"Restricting email notifications for your organization, Restricting email notifications for your enterprise","fieldsIndex":277},{"action":"role.create","description":"A new custom repository role was created.","docs_reference_links":"/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-custom-repository-roles-for-an-organization","docs_reference_titles":"Managing custom repository roles for an organization","fieldsIndex":278},{"action":"role.destroy","description":"A custom repository role was deleted.","docs_reference_links":"/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-custom-repository-roles-for-an-organization","docs_reference_titles":"Managing custom repository roles for an organization","fieldsIndex":279},{"action":"role.update","description":"A custom repository role was edited.","docs_reference_links":"/organizations/managing-user-access-to-your-organizations-repositories/managing-repository-roles/managing-custom-repository-roles-for-an-organization","docs_reference_titles":"Managing custom repository roles for an organization","fieldsIndex":280},{"action":"sandbox.add_port","description":"A forwarded port was added to a sandbox.","docs_reference_links":"N/A","fieldsIndex":281},{"action":"sandbox.create","description":"A sandbox was created.","docs_reference_links":"N/A","fieldsIndex":281},{"action":"sandbox.delete","description":"A sandbox was deleted.","docs_reference_links":"N/A","fieldsIndex":281},{"action":"sandbox.generate_token","description":"A token was generated for a sandbox.","docs_reference_links":"N/A","fieldsIndex":281},{"action":"sandbox.remove_port","description":"A forwarded port was removed from a sandbox.","docs_reference_links":"N/A","fieldsIndex":281},{"action":"sandbox.resume","description":"A sandbox was resumed.","docs_reference_links":"N/A","fieldsIndex":281},{"action":"sandbox.stop","description":"A sandbox was stopped.","docs_reference_links":"N/A","fieldsIndex":281},{"action":"secret_scanning_alert.assign","description":"A user was assigned to a secret scanning alert.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":282},{"action":"secret_scanning_alert.create","description":"GitHub detected a secret and created a secret scanning alert.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":282},{"action":"secret_scanning_alert.delete","description":"A secret scanning alert was deleted by GitHub. Note that deletions from custom patterns are not logged.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":283},{"action":"secret_scanning_alert.metadata_create","description":"Metadata was added to a secret scanning alert.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":282},{"action":"secret_scanning_alert.metadata_remove","description":"Metadata was removed from a secret scanning alert.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":282},{"action":"secret_scanning_alert.public_leak","description":"A secret scanning alert was leaked in a public repo.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":282},{"action":"secret_scanning_alert.reopen","description":"A secret scanning alert was reopened.","docs_reference_links":"N/A","fieldsIndex":284},{"action":"secret_scanning_alert.report","description":"A leaked secret was reported to the secret's provider by secret scanning.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning/resolving-alerts","docs_reference_titles":"Resolving alerts from secret scanning","fieldsIndex":285},{"action":"secret_scanning_alert.resolve","description":"A secret scanning alert was resolved.","docs_reference_links":"N/A","fieldsIndex":284},{"action":"secret_scanning_alert.revoke","description":"A secret scanning alert was revoked.","docs_reference_links":"N/A","fieldsIndex":286},{"action":"secret_scanning_alert.unassign","description":"A user was unassigned from a secret scanning alert.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":282},{"action":"secret_scanning_alert.validate","description":"A secret scanning alert was validated.","docs_reference_links":"/code-security/secret-scanning/managing-alerts-from-secret-scanning","docs_reference_titles":"Manage secret scanning alerts","fieldsIndex":287},{"action":"secret_scanning_closure_request.approve","description":"A request to close a secret scanning alert was approved by a user.","docs_reference_links":"N/A","fieldsIndex":288},{"action":"secret_scanning_closure_request.cancel","description":"N/A","docs_reference_links":"A reqeust to close a secret scanning alert was canceled by a user.","docs_reference_titles":"A, reqeust, to, close, a, secret, scanning, alert, was, canceled, by, a, user.","fieldsIndex":289},{"action":"secret_scanning_closure_request.create","description":"N/A","docs_reference_links":"A user requested to close a secret scanning alert.","docs_reference_titles":"A, user, requested, to, close, a, secret, scanning, alert.","fieldsIndex":290},{"action":"secret_scanning_closure_request.deny","description":"A request to close a secret scanning alert was denied by a user.","docs_reference_links":"N/A","fieldsIndex":288},{"action":"secret_scanning.disable","description":"Secret scanning was disabled for all existing repositories.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":11},{"action":"secret_scanning.enable","description":"Secret scanning was enabled for all existing repositories.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":53},{"action":"secret_scanning_new_repos.disable","description":"Secret scanning was disabled for all new repositories.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":53},{"action":"secret_scanning_new_repos.enable","description":"Secret scanning was enabled for all new repositories.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":53},{"action":"secret_scanning_push_protection.bypass","description":"Triggered when a user bypasses the push protection on a secret detected by secret scanning.","docs_reference_links":"/code-security/secret-scanning/protecting-pushes-with-secret-scanning#bypassing-push-protection-for-a-secret","docs_reference_titles":"Push protection","fieldsIndex":291},{"action":"secret_scanning_push_protection_request.approve","description":"A request to bypass secret scanning push protection was approved by a user.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#managing-requests-to-bypass-push-protection","docs_reference_titles":"Push protection","fieldsIndex":292},{"action":"secret_scanning_push_protection_request.cancel","description":"A user canceled a request to bypass secret scanning push protection.","docs_reference_links":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","docs_reference_titles":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","fieldsIndex":293},{"action":"secret_scanning_push_protection_request.complete","description":"A user pushed a commit containing a secret for which there is an approved secret scanning push protection bypass request.","docs_reference_links":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","docs_reference_titles":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","fieldsIndex":293},{"action":"secret_scanning_push_protection_request.deny","description":"A request to bypass secret scanning push protection was denied by a user.","docs_reference_links":"/code-security/secret-scanning/push-protection-for-repositories-and-organizations#managing-requests-to-bypass-push-protection","docs_reference_titles":"Push protection","fieldsIndex":294},{"action":"secret_scanning_push_protection_request.request","description":"A user requested to bypass secret scanning push protection.","docs_reference_links":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","docs_reference_titles":"/code-security/secret-scanning/working-with-push-protection#requesting-bypass-privileges-when-working-with-the-command-line","fieldsIndex":295},{"action":"secret_scanning_scan.completed","description":"A secret scanning scan has completed on this repository.","docs_reference_links":"/code-security/secret-scanning/about-secret-scanning","docs_reference_titles":"Secret scanning","fieldsIndex":296},{"action":"security_configuration.create","description":"A security configuration was created","docs_reference_links":"N/A","fieldsIndex":297},{"action":"security_configuration_default.delete","description":"A default security configuration setting for new repositories was removed.","docs_reference_links":"N/A","fieldsIndex":298},{"action":"security_configuration_default.update","description":"A default security configuration setting for new repositories was updated.","docs_reference_links":"N/A","fieldsIndex":298},{"action":"security_configuration.delete","description":"A security configuration was deleted","docs_reference_links":"N/A","fieldsIndex":297},{"action":"security_configuration_policy.update","description":"A security configuration policy was updated","docs_reference_links":"N/A","fieldsIndex":299},{"action":"security_configuration.update","description":"A security configuration was updated","docs_reference_links":"N/A","fieldsIndex":300},{"action":"sponsors.agreement_sign","description":"A GitHub Sponsors agreement was signed on behalf of an organization.","docs_reference_links":"N/A","fieldsIndex":301},{"action":"sponsors.custom_amount_settings_change","description":"Custom amounts for GitHub Sponsors were enabled or disabled, or the suggested custom amount was changed.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers","fieldsIndex":301},{"action":"sponsors.fiscal_host_change","description":"The fiscal host for a GitHub Sponsors listing was updated.","docs_reference_links":"N/A","fieldsIndex":302},{"action":"sponsors.invoiced_agreement_sign","description":"An agreement for invoiced billing for GitHub Sponsors was signed.","docs_reference_links":"/sponsors/sponsoring-open-source-contributors/paying-for-github-sponsors-by-invoice","docs_reference_titles":"/sponsors/sponsoring-open-source-contributors/paying-for-github-sponsors-by-invoice","fieldsIndex":0},{"action":"sponsors.repo_funding_links_file_action","description":"The FUNDING file in a repository was changed.","docs_reference_links":"/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository","docs_reference_titles":"/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository","fieldsIndex":303},{"action":"sponsors.sponsor_sponsorship_cancel","description":"A sponsorship was canceled.","docs_reference_links":"/billing/managing-billing-for-github-sponsors/downgrading-a-sponsorship","docs_reference_titles":"Downgrading a sponsorship","fieldsIndex":304},{"action":"sponsors.sponsor_sponsorship_create","description":"A sponsorship was created, by sponsoring an account.","docs_reference_links":"/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes","docs_reference_titles":"/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes","fieldsIndex":305},{"action":"sponsors.sponsor_sponsorship_payment_complete","description":"After you sponsor an account and a payment has been processed, the sponsorship payment was marked as complete.","docs_reference_links":"/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes","docs_reference_titles":"/sponsors/sponsoring-open-source-contributors/about-sponsorships-fees-and-taxes","fieldsIndex":305},{"action":"sponsors.sponsor_sponsorship_preference_change","description":"The option to receive email updates from a sponsored account was changed.","docs_reference_links":"/sponsors/sponsoring-open-source-contributors/managing-your-sponsorship","docs_reference_titles":"/sponsors/sponsoring-open-source-contributors/managing-your-sponsorship","fieldsIndex":304},{"action":"sponsors.sponsor_sponsorship_tier_change","description":"A sponsorship was upgraded or downgraded.","docs_reference_links":"/billing/managing-billing-for-github-sponsors/upgrading-a-sponsorship, /billing/managing-billing-for-github-sponsors/downgrading-a-sponsorship","docs_reference_titles":"Upgrading a sponsorship, Downgrading a sponsorship","fieldsIndex":305},{"action":"sponsors.sponsored_developer_approve","description":"A GitHub Sponsors account was approved.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","fieldsIndex":302},{"action":"sponsors.sponsored_developer_create","description":"A GitHub Sponsors account was created.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","fieldsIndex":306},{"action":"sponsors.sponsored_developer_disable","description":"A GitHub Sponsors account was disabled.","docs_reference_links":"N/A","fieldsIndex":302},{"action":"sponsors.sponsored_developer_profile_update","description":"The profile for GitHub Sponsors account was edited.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/editing-your-profile-details-for-github-sponsors","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/editing-your-profile-details-for-github-sponsors","fieldsIndex":306},{"action":"sponsors.sponsored_developer_redraft","description":"A GitHub Sponsors account was returned to draft state from approved state.","docs_reference_links":"N/A","fieldsIndex":302},{"action":"sponsors.sponsored_developer_request_approval","description":"An application for GitHub Sponsors was submitted for approval.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","fieldsIndex":302},{"action":"sponsors.sponsored_developer_tier_description_update","description":"The description for a sponsorship tier was changed.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/managing-your-sponsorship-tiers","fieldsIndex":307},{"action":"sponsors.sponsors_patreon_user_create","description":"A Patreon account was linked to a user account for use with GitHub Sponsors.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/enabling-sponsorships-through-patreon#linking-your-patreon-account-to-your-github-account","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/enabling-sponsorships-through-patreon#linking-your-patreon-account-to-your-github-account","fieldsIndex":308},{"action":"sponsors.sponsors_patreon_user_destroy","description":"A Patreon account for use with GitHub Sponsors was unlinked from a user account.","docs_reference_links":"/sponsors/sponsoring-open-source-contributors/unlinking-your-patreon-account-from-your-github-account","docs_reference_titles":"Unlinking your Patreon account from GitHub","fieldsIndex":308},{"action":"sponsors.update_tier_repository","description":"A GitHub Sponsors tier changed access for a repository.","docs_reference_links":"N/A","fieldsIndex":307},{"action":"sponsors.update_tier_welcome_message","description":"The welcome message for a GitHub Sponsors tier for an organization was updated.","docs_reference_links":"N/A","fieldsIndex":307},{"action":"sponsors.withdraw_agreement_signature","description":"A signature was withdrawn from a GitHub Sponsors agreement that applies to an organization.","docs_reference_links":"N/A","fieldsIndex":301},{"action":"ssh_certificate_authority.create","description":"An SSH certificate authority for an organization or enterprise was created.","docs_reference_links":"/organizations/managing-git-access-to-your-organizations-repositories/managing-your-organizations-ssh-certificate-authorities, /admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-security-settings-in-your-enterprise#managing-ssh-certificate-authorities-for-your-enterprise","docs_reference_titles":"Managing your organization's SSH certificate authorities, Enforcing policies for security settings in your enterprise","fieldsIndex":309},{"action":"ssh_certificate_authority.destroy","description":"An SSH certificate authority for an organization or enterprise was deleted.","docs_reference_links":"/organizations/managing-git-access-to-your-organizations-repositories/managing-your-organizations-ssh-certificate-authorities, /admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-security-settings-in-your-enterprise#managing-ssh-certificate-authorities-for-your-enterprise","docs_reference_titles":"Managing your organization's SSH certificate authorities, Enforcing policies for security settings in your enterprise","fieldsIndex":309},{"action":"ssh_certificate_requirement.disable","description":"The requirement for members to use SSH certificates to access an organization resources was disabled.","docs_reference_links":"/organizations/managing-git-access-to-your-organizations-repositories/managing-your-organizations-ssh-certificate-authorities, /admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-security-settings-in-your-enterprise#managing-ssh-certificate-authorities-for-your-enterprise","docs_reference_titles":"Managing your organization's SSH certificate authorities, Enforcing policies for security settings in your enterprise","fieldsIndex":15},{"action":"ssh_certificate_requirement.enable","description":"The requirement for members to use SSH certificates to access an organization resources was enabled.","docs_reference_links":"/organizations/managing-git-access-to-your-organizations-repositories/managing-your-organizations-ssh-certificate-authorities, /admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-security-settings-in-your-enterprise#managing-ssh-certificate-authorities-for-your-enterprise","docs_reference_titles":"Managing your organization's SSH certificate authorities, Enforcing policies for security settings in your enterprise","fieldsIndex":15},{"action":"staff.dependabot_debug_credentials_generated","description":"Dependabot encrypted config was read.","docs_reference_links":"N/A","fieldsIndex":188},{"action":"staff.set_domain_token_expiration","description":"The verification code expiry time for an organization or enterprise domain was set.","docs_reference_links":"N/A","fieldsIndex":310},{"action":"staff.unverify_domain","description":"An organization or enterprise domain was unverified.","docs_reference_links":"N/A","fieldsIndex":311},{"action":"staff.verify_domain","description":"An organization or enterprise domain was verified.","docs_reference_links":"N/A","fieldsIndex":312},{"action":"sub_issues.parent_issue_add","description":"A parent issue was added to an issue.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"sub_issues.parent_issue_remove","description":"A parent issue was removed from an issue.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"sub_issues.sub_issue_add","description":"A sub-issue was added to an issue.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"sub_issues.sub_issue_remove","description":"A sub-issue was removed from an issue.","docs_reference_links":"N/A","fieldsIndex":90},{"action":"team.add_member","description":"A member of an organization was added to a team.","docs_reference_links":"/organizations/organizing-members-into-teams/adding-organization-members-to-a-team","docs_reference_titles":"/organizations/organizing-members-into-teams/adding-organization-members-to-a-team","fieldsIndex":313},{"action":"team.add_repository","description":"A team was given access and permissions to a repository.","docs_reference_links":"N/A","fieldsIndex":314},{"action":"team.add_to_organization","description":"A team was added to an organization.","docs_reference_links":"N/A","fieldsIndex":315},{"action":"team.change_parent_team","description":"A child team was created or a child team's parent was changed.","docs_reference_links":"/organizations/organizing-members-into-teams/moving-a-team-in-your-organizations-hierarchy","docs_reference_titles":"/organizations/organizing-members-into-teams/moving-a-team-in-your-organizations-hierarchy","fieldsIndex":313},{"action":"team.change_privacy","description":"A team's privacy level was changed.","docs_reference_links":"/organizations/organizing-members-into-teams/changing-team-visibility","docs_reference_titles":"/organizations/organizing-members-into-teams/changing-team-visibility","fieldsIndex":313},{"action":"team.create","description":"A new team is created.","docs_reference_links":"N/A","fieldsIndex":313},{"action":"team.demote_maintainer","description":"A user was demoted from a team maintainer to a team member.","docs_reference_links":"/organizations/organizing-members-into-teams/assigning-the-team-maintainer-role-to-a-team-member","docs_reference_titles":"/organizations/organizing-members-into-teams/assigning-the-team-maintainer-role-to-a-team-member","fieldsIndex":313},{"action":"team.destroy","description":"A team was deleted.","docs_reference_links":"N/A","fieldsIndex":313},{"action":"team_group_mapping.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":112},{"action":"team_group_mapping.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":112},{"action":"team_group_mapping.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":112},{"action":"team.members_limit_warning","description":"A team is approaching its members limit.","docs_reference_links":"N/A","fieldsIndex":316},{"action":"team.organization_assignments_limit_reached","description":"A team has reached its organization assignments limit.","docs_reference_links":"N/A","fieldsIndex":316},{"action":"team.organization_assignments_limit_warning","description":"A team is approaching its organization assignments limit.","docs_reference_links":"N/A","fieldsIndex":316},{"action":"team.promote_maintainer","description":"A user was promoted from a team member to a team maintainer.","docs_reference_links":"/organizations/organizing-members-into-teams/assigning-the-team-maintainer-role-to-a-team-member#promoting-an-organization-member-to-team-maintainer","docs_reference_titles":"/organizations/organizing-members-into-teams/assigning-the-team-maintainer-role-to-a-team-member#promoting-an-organization-member-to-team-maintainer","fieldsIndex":313},{"action":"team.remove_from_organization","description":"A team was removed from an organization.","docs_reference_links":"N/A","fieldsIndex":315},{"action":"team.remove_member","description":"An organization member was removed from a team.","docs_reference_links":"/organizations/organizing-members-into-teams/removing-organization-members-from-a-team","docs_reference_titles":"/organizations/organizing-members-into-teams/removing-organization-members-from-a-team","fieldsIndex":313},{"action":"team.remove_repository","description":"A repository was removed from a team's control.","docs_reference_links":"N/A","fieldsIndex":317},{"action":"team.rename","description":"A team's name was changed.","docs_reference_links":"N/A","fieldsIndex":318},{"action":"team_sync_tenant.disabled","description":"Team synchronization with a tenant was disabled.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/managing-team-synchronization-for-your-organization, /admin/identity-and-access-management/using-saml-for-enterprise-iam/managing-team-synchronization-for-organizations-in-your-enterprise","docs_reference_titles":"Managing team synchronization for your organization, Managing team synchronization for organizations in your enterprise","fieldsIndex":15},{"action":"team_sync_tenant.enabled","description":"Team synchronization with a tenant was enabled.","docs_reference_links":"/organizations/managing-saml-single-sign-on-for-your-organization/managing-team-synchronization-for-your-organization, /admin/identity-and-access-management/using-saml-for-enterprise-iam/managing-team-synchronization-for-organizations-in-your-enterprise","docs_reference_titles":"Managing team synchronization for your organization, Managing team synchronization for organizations in your enterprise","fieldsIndex":15},{"action":"team_sync_tenant.update_okta_credentials","description":"The Okta credentials for team synchronization with a tenant were changed.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"team.update_repository_permission","description":"A team's permission to a repository was changed.","docs_reference_links":"N/A","fieldsIndex":319},{"action":"user_content_edit.delete","description":"Triggered when a user content edit is deleted.","docs_reference_links":"N/A","fieldsIndex":320},{"action":"vulnerability_alert_rule.create","description":"A Dependabot rule was created.","docs_reference_links":"N/A","fieldsIndex":321},{"action":"vulnerability_alert_rule.delete","description":"A Dependabot rule was deleted.","docs_reference_links":"N/A","fieldsIndex":322},{"action":"vulnerability_alert_rule.disable","description":"A Dependabot rule was disabled for a single repository or disabled by default for an organization.","docs_reference_links":"N/A","fieldsIndex":321},{"action":"vulnerability_alert_rule.enable","description":"A Dependabot rule was enabled for a single repository or enabled by default for an organization.","docs_reference_links":"N/A","fieldsIndex":323},{"action":"vulnerability_alert_rule.force_disable","description":"A Dependabot rule was enabled for an organization and cannot be disabled for its repositories.","docs_reference_links":"N/A","fieldsIndex":324},{"action":"vulnerability_alert_rule.force_enable","description":"A Dependabot rule was disabled for an organization and cannot be enabled for its repositories.","docs_reference_links":"N/A","fieldsIndex":324},{"action":"vulnerability_alert_rule.update","description":"A Dependabot rule's conditions, actions, or metadata changed.","docs_reference_links":"N/A","fieldsIndex":321},{"action":"workflows.actions_policy_violation","description":"A workflow run produced one or more workflow execution protection policy violations.","docs_reference_links":"N/A","fieldsIndex":325},{"action":"workflows.approve_workflow_job","description":"A workflow job was approved.","docs_reference_links":"/actions/managing-workflow-runs/reviewing-deployments","docs_reference_titles":"Reviewing deployments","fieldsIndex":326},{"action":"workflows.bypass_protection_rules","description":"N/A","docs_reference_links":"N/A","fieldsIndex":327},{"action":"workflows.cancel_workflow_run","description":"A workflow run was cancelled.","docs_reference_links":"/actions/managing-workflow-runs/canceling-a-workflow","docs_reference_titles":"Canceling a workflow run","fieldsIndex":328},{"action":"workflows.comment_workflow_job","description":"N/A","docs_reference_links":"N/A","fieldsIndex":329},{"action":"workflows.completed_workflow_run","description":"A workflow status changed to completed. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/monitoring-and-troubleshooting-workflows/viewing-workflow-run-history","docs_reference_titles":"Viewing workflow run history","fieldsIndex":330},{"action":"workflows.created_workflow_run","description":"A workflow run was create. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/learn-github-actions/understanding-github-actions#create-an-example-workflow","docs_reference_titles":"Understanding GitHub Actions","fieldsIndex":331},{"action":"workflows.debugger_session_completed","description":"An Actions job with the debugger enabled completed its debug session. Includes the repository, ref, workflow file, actor, and session duration.","docs_reference_links":"N/A","fieldsIndex":332},{"action":"workflows.debugger_session_started","description":"An Actions job with the debugger enabled started a debug session. Includes the repository, ref, workflow file, and actor.","docs_reference_links":"N/A","fieldsIndex":333},{"action":"workflows.delete_workflow_run","description":"A workflow run was deleted.","docs_reference_links":"/actions/managing-workflow-runs/deleting-a-workflow-run","docs_reference_titles":"Deleting a workflow run","fieldsIndex":334},{"action":"workflows.disable_workflow","description":"A workflow was disabled.","docs_reference_links":"N/A","fieldsIndex":335},{"action":"workflows.enable_workflow","description":"A workflow was enabled, after previously being disabled by disable_workflow.","docs_reference_links":"N/A","fieldsIndex":335},{"action":"workflows.pin_workflow","description":"A workflow was pinned.","docs_reference_links":"N/A","fieldsIndex":336},{"action":"workflows.prepared_workflow_job","description":"A workflow job was started. Includes the list of secrets that were provided to the job. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/using-workflows/events-that-trigger-workflows","docs_reference_titles":"Events that trigger workflows","fieldsIndex":337},{"action":"workflows.reject_workflow_job","description":"A workflow job was rejected.","docs_reference_links":"/actions/managing-workflow-runs/reviewing-deployments","docs_reference_titles":"Reviewing deployments","fieldsIndex":338},{"action":"workflows.rerun_workflow_run","description":"A workflow run was re-run.","docs_reference_links":"/actions/managing-workflow-runs/re-running-workflows-and-jobs","docs_reference_titles":"Re-running workflows and jobs","fieldsIndex":339},{"action":"workflows.unpin_workflow","description":"A workflow was unpinned after previously being pinned.","docs_reference_links":"N/A","fieldsIndex":336},{"action":"account_recovery_token.confirm","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"account_recovery_token.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"account_recovery_token.recover","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"billing.update_bill_cycle_day","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.add_admin","description":"An enterprise owner was added to an enterprise.","docs_reference_links":"/admin/user-management/managing-users-in-your-enterprise/inviting-people-to-manage-your-enterprise","docs_reference_titles":"Inviting people to manage your enterprise","fieldsIndex":13},{"action":"business.add_billing_manager","description":"A billing manager was added to an enterprise.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"business.add_member","description":"A member was added to an enterprise.","docs_reference_links":"N/A","fieldsIndex":340},{"action":"business.add_support_entitlee","description":"A support entitlement was added to a member of an enterprise.","docs_reference_links":"/admin/user-management/managing-users-in-your-enterprise/managing-support-entitlements-for-your-enterprise","docs_reference_titles":"Managing support entitlements for your enterprise","fieldsIndex":341},{"action":"business.remove_admin","description":"An enterprise owner was removed from an enterprise.","docs_reference_links":"/admin/user-management/managing-users-in-your-enterprise/inviting-people-to-manage-your-enterprise","docs_reference_titles":"Inviting people to manage your enterprise","fieldsIndex":13},{"action":"business.remove_billing_manager","description":"A billing manager was removed from an enterprise.","docs_reference_links":"N/A","fieldsIndex":13},{"action":"business.remove_member","description":"A member was removed from an enterprise.","docs_reference_links":"N/A","fieldsIndex":342},{"action":"business.remove_support_entitlee","description":"A support entitlement was removed from a member of an enterprise.","docs_reference_links":"/admin/user-management/managing-users-in-your-enterprise/managing-support-entitlements-for-your-enterprise","docs_reference_titles":"Managing support entitlements for your enterprise","fieldsIndex":13},{"action":"business.security_center_export_code_scanning_metrics","description":"A CSV export was requested on the \"CodeQL pull request alerts\" page.","docs_reference_links":"N/A","fieldsIndex":147},{"action":"business.security_center_export_coverage","description":"A CSV export was requested on the \"Coverage\" page.","docs_reference_links":"N/A","fieldsIndex":148},{"action":"business.security_center_export_overview_dashboard","description":"A CSV export was requested on the \"Overview Dashboard\" page.","docs_reference_links":"N/A","fieldsIndex":147},{"action":"business.security_center_export_risk","description":"A CSV export was requested on the \"Risk\" page.","docs_reference_links":"N/A","fieldsIndex":148},{"action":"business.set_actions_cache_retention_policy","description":"The cache retention policy for GitHub Actions was set for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":343},{"action":"business.set_actions_cache_storage_policy","description":"The cache storage policy for GitHub Actions was set for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":343},{"action":"business.set_actions_fork_pr_approvals_policy","description":"The policy for requiring approvals for workflows from public forks was changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#enforcing-a-policy-for-fork-pull-requests-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":344},{"action":"business.set_actions_private_fork_pr_approvals_policy","description":"The policy for requiring approval for fork pull request workflows from collaborators without write access to private repos was changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#enforcing-a-policy-for-fork-pull-requests-in-private-repositories","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":344},{"action":"business.set_actions_retention_limit","description":"The retention period for GitHub Actions artifacts and logs was changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#enforcing-a-policy-for-artifact-and-log-retention-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":345},{"action":"business.set_default_workflow_permissions","description":"The default permissions granted to the GITHUB_TOKEN when running workflows were changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#enforcing-a-policy-for-workflow-permissions-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":346},{"action":"business.set_fork_pr_workflows_policy","description":"The policy for fork pull request workflows was changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#enforcing-a-policy-for-fork-pull-requests-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":344},{"action":"business.set_workflow_permission_can_approve_pr","description":"The policy for allowing GitHub Actions to create and approve pull requests was changed for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise#preventing-github-actions-from-creating-or-approving-pull-requests","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":347},{"action":"gist.create","description":"A gist was created.","docs_reference_links":"N/A","fieldsIndex":348},{"action":"gist.destroy","description":"A gist was deleted.","docs_reference_links":"N/A","fieldsIndex":348},{"action":"gist.visibility_change","description":"The visibility of a gist was updated.","docs_reference_links":"N/A","fieldsIndex":348},{"action":"git_signing_ssh_public_key.create","description":"An SSH key was added to a user account as a Git commit signing key.","docs_reference_links":"/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key","docs_reference_titles":"/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key","fieldsIndex":349},{"action":"git_signing_ssh_public_key.delete","description":"An SSH key was removed from a user account as a Git commit signing key.","docs_reference_links":"/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key","docs_reference_titles":"/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key","fieldsIndex":350},{"action":"gpg_key.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":351},{"action":"gpg_key.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":352},{"action":"marketplace_listing_plan.create","description":"N/A","docs_reference_links":"N/A","fieldsIndex":353},{"action":"marketplace_listing_plan.publish","description":"N/A","docs_reference_links":"N/A","fieldsIndex":353},{"action":"marketplace_listing_plan.retire","description":"N/A","docs_reference_links":"N/A","fieldsIndex":353},{"action":"marketplace_listing_plan.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":353},{"action":"mcp_registry.allowlist_add_server","description":"A server was added to an MCP registry allowlist.","docs_reference_links":"N/A","fieldsIndex":354},{"action":"mcp_registry.allowlist_create","description":"An MCP registry allowlist was created.","docs_reference_links":"N/A","fieldsIndex":355},{"action":"mcp_registry.allowlist_delete","description":"An MCP registry allowlist was deleted.","docs_reference_links":"N/A","fieldsIndex":356},{"action":"mcp_registry.allowlist_remove_server","description":"A server was removed from an MCP registry allowlist.","docs_reference_links":"N/A","fieldsIndex":354},{"action":"mcp_registry.allowlist_set_server_entries","description":"Entries were set for a server in an MCP registry allowlist.","docs_reference_links":"N/A","fieldsIndex":357},{"action":"mcp_registry.allowlist_update","description":"An MCP registry allowlist was updated.","docs_reference_links":"N/A","fieldsIndex":358},{"action":"mcp_registry.settings_update","description":"An MCP policy setting for the business was updated.","docs_reference_links":"N/A","fieldsIndex":359},{"action":"oauth_access.create","description":"An OAuth access token was generated.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps, /authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps, Managing your personal access tokens","fieldsIndex":360},{"action":"oauth_access.destroy","description":"An OAuth access token was deleted.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps","fieldsIndex":361},{"action":"oauth_access.regenerate","description":"An OAuth access token was regenerated.","docs_reference_links":"N/A","fieldsIndex":360},{"action":"oauth_access.revoke","description":"An OAuth access token was revoked.","docs_reference_links":"N/A","fieldsIndex":362},{"action":"oauth_access.update","description":"An OAuth access token was updated.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"oauth_authorization.create","description":"An authorization for an OAuth application was created.","docs_reference_links":"/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps","docs_reference_titles":"/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps","fieldsIndex":360},{"action":"oauth_authorization.destroy","description":"An authorization for an OAuth application was deleted.","docs_reference_links":"/apps/using-github-apps/reviewing-your-authorized-integrations","docs_reference_titles":"Reviewing and revoking authorization of GitHub Apps","fieldsIndex":363},{"action":"oauth_authorization.update","description":"An authorization for an OAuth application was updated.","docs_reference_links":"/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps","docs_reference_titles":"/apps/oauth-apps/using-oauth-apps/authorizing-oauth-apps","fieldsIndex":364},{"action":"passkey.register","description":"A new passkey was added.","docs_reference_links":"N/A","fieldsIndex":365},{"action":"passkey.remove","description":"A new passkey was removed.","docs_reference_links":"N/A","fieldsIndex":365},{"action":"personal_access_token.create","description":"Triggered when you create a fine-grained personal access token.","docs_reference_links":"N/A","fieldsIndex":366},{"action":"personal_access_token.credential_regenerated","description":"Triggered when you regenerate a fine-grained personal access token.","docs_reference_links":"N/A","fieldsIndex":367},{"action":"personal_access_token.credential_revoked","description":"A fine-grained personal access token was revoked by GitHub Advanced Security.","docs_reference_links":"/code-security/getting-started/github-security-features#secret-scanning-alerts-for-users","docs_reference_titles":"/code-security/getting-started/github-security-features#secret-scanning-alerts-for-users","fieldsIndex":368},{"action":"personal_access_token.destroy","description":"Triggered when you delete a fine-grained personal access token.","docs_reference_links":"N/A","fieldsIndex":369},{"action":"personal_access_token.update","description":"A fine-grained personal access token was updated.","docs_reference_links":"/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#fine-grained-personal-access-tokens","docs_reference_titles":"/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#fine-grained-personal-access-tokens","fieldsIndex":370},{"action":"repo.temporary_access_granted","description":"Temporary access was enabled for a repository.","docs_reference_links":"/admin/user-management/managing-repositories-in-your-enterprise/accessing-user-owned-repositories-in-your-enterprise","docs_reference_titles":"Accessing user-owned repositories in your enterprise","fieldsIndex":103},{"action":"security_key.register","description":"A security key was registered for an account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"security_key.remove","description":"A security key was removed from an account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"social_identity.linked","description":"A user linked a social identity to their account.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"social_identity.unlinked","description":"A user unlinked a social identity from their account.","docs_reference_links":"N/A","fieldsIndex":16},{"action":"social_identity.unlinked_all","description":"A user unlinked all social identities from their account.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"sponsors.sponsored_developer_update_newsletter_send","description":"Triggered when you send an email update to your sponsors.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/contacting-your-sponsors","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/contacting-your-sponsors","fieldsIndex":15},{"action":"sponsors.waitlist_join","description":"You join the waitlist to join GitHub Sponsors.","docs_reference_links":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","docs_reference_titles":"/sponsors/receiving-sponsorships-through-github-sponsors/setting-up-github-sponsors-for-your-personal-account","fieldsIndex":306},{"action":"successor_invitation.accept","description":"Triggered when you accept a succession invitation.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories","docs_reference_titles":"Maintaining ownership continuity of your personal account's repositories","fieldsIndex":0},{"action":"successor_invitation.cancel","description":"Triggered when you cancel a succession invitation.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories","docs_reference_titles":"Maintaining ownership continuity of your personal account's repositories","fieldsIndex":0},{"action":"successor_invitation.create","description":"Triggered when you create a succession invitation.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories","docs_reference_titles":"Maintaining ownership continuity of your personal account's repositories","fieldsIndex":0},{"action":"successor_invitation.decline","description":"Triggered when you decline a succession invitation.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories","docs_reference_titles":"Maintaining ownership continuity of your personal account's repositories","fieldsIndex":371},{"action":"successor_invitation.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"successor_invitation.revoke","description":"Triggered when you revoke a succession invitation.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-access-to-your-personal-repositories/maintaining-ownership-continuity-of-your-personal-accounts-repositories","docs_reference_titles":"Maintaining ownership continuity of your personal account's repositories","fieldsIndex":371},{"action":"trusted_device.register","description":"A new trusted device was added.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"trusted_device.remove","description":"A trusted device was removed.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.abort","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.complete","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.ignore","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.staff_approve","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.staff_decline","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_account_recovery.start","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"two_factor_account_recovery.two_factor_destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_authentication.add_factor","description":"A secondary authentication factor was added to a user account.","docs_reference_links":"/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication","docs_reference_titles":"/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication","fieldsIndex":15},{"action":"two_factor_authentication.disabled","description":"Two-factor authentication was disabled for a user account.","docs_reference_links":"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/disabling-two-factor-authentication-for-your-personal-account","docs_reference_titles":"Disabling two-factor authentication for your personal account","fieldsIndex":15},{"action":"two_factor_authentication.enabled","description":"Two-factor authentication was enabled for a user account.","docs_reference_links":"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication","docs_reference_titles":"Configuring two-factor authentication","fieldsIndex":15},{"action":"two_factor_authentication.password_reset_fallback_sms","description":"A one-time password code was sent to a user account fallback phone number.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_authentication.recovery_codes_regenerated","description":"Two factor recovery codes were regenerated for a user account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"two_factor_authentication.remove_factor","description":"A secondary authentication factor was removed from a user account.","docs_reference_links":"/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication","docs_reference_titles":"/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication","fieldsIndex":15},{"action":"two_factor_authentication.sign_in_fallback_sms","description":"A one-time password code was sent to a user account fallback phone number.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"two_factor_authentication.update_fallback","description":"The two-factor authentication fallback for a user account was changed.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.add_email","description":"An email address was added to a user account.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/adding-an-email-address-to-your-github-account","docs_reference_titles":"Adding an email address to your GitHub account","fieldsIndex":372},{"action":"user.async_delete","description":"An asynchronous job was started to destroy a user account, eventually triggering a user.delete event.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.audit_log_export","description":"Audit log entries were exported.","docs_reference_links":"N/A","fieldsIndex":114},{"action":"user.block_user","description":"A user was blocked by another user.","docs_reference_links":"N/A","fieldsIndex":116},{"action":"user.change_password","description":"A user changed their password.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.codespaces_trusted_repo_access_granted","description":"Triggered when you allow the codespaces you create for a repository to access other repositories owned by your personal account.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces","docs_reference_titles":"Managing access to other repositories within your codespace","fieldsIndex":18},{"action":"user.codespaces_trusted_repo_access_revoked","description":"Triggered when you disallow the codespaces you create for a repository to access other repositories owned by your personal account.","docs_reference_links":"/codespaces/managing-codespaces-for-your-organization/managing-repository-access-for-your-organizations-codespaces","docs_reference_titles":"Managing access to other repositories within your codespace","fieldsIndex":119},{"action":"user.create","description":"A new user account was created.","docs_reference_links":"N/A","fieldsIndex":373},{"action":"user.create_integration_secret","description":"A user secret for Codespaces was created.","docs_reference_links":"N/A","fieldsIndex":374},{"action":"user.creation_rate_limit_exceeded","description":"The rate of creation of user accounts, applications, issues, pull requests or other resources exceeded the configured rate limits, or too many users were followed too quickly.","docs_reference_links":"N/A","fieldsIndex":16},{"action":"user.delete","description":"A user account was destroyed by an asynchronous job.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.demote","description":"A site administrator was demoted to an ordinary user account.","docs_reference_links":"N/A","fieldsIndex":371},{"action":"user.destroy","description":"A user deleted his or her account, triggering user.async_delete.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.device_verification_failure","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.device_verification_requested","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.device_verification_success","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.disable_collaborators_only","description":"The interaction limit for collaborators only was disabled for a personal account.","docs_reference_links":"N/A","fieldsIndex":375},{"action":"user.disable_contributors_only","description":"The interaction limit for prior contributors only was disabled for a personal account.","docs_reference_links":"N/A","fieldsIndex":371},{"action":"user.disable_sockpuppet_disallowed","description":"The interaction limit for existing users only was disabled for a personal account.","docs_reference_links":"N/A","fieldsIndex":375},{"action":"user_email.confirm_claim","description":"An enterprise managed user claimed an email address.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user_email.mark_as_unclaimed","description":"N/A","docs_reference_links":"An enterprise managed user unclaimed an email address.","docs_reference_titles":"An, GitHub Help Documentation, managed, user, unclaimed, an, email, address.","fieldsIndex":15},{"action":"user.enable_collaborators_only","description":"The interaction limit for collaborators only was enabled for a personal account.","docs_reference_links":"N/A","fieldsIndex":375},{"action":"user.enable_contributors_only","description":"The interaction limit for prior contributors only was enabled for a personal account.","docs_reference_links":"N/A","fieldsIndex":375},{"action":"user.enable_sockpuppet_disallowed","description":"The interaction limit for existing users only was enabled for a personal account.","docs_reference_links":"N/A","fieldsIndex":375},{"action":"user.failed_login","description":"A user tried to sign in with an incorrect username, password, or two-factor authentication code.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.forgot_password","description":"A user requested a password reset.","docs_reference_links":"/authentication/keeping-your-account-and-data-secure/updating-your-github-access-credentials","docs_reference_titles":"/authentication/keeping-your-account-and-data-secure/updating-your-github-access-credentials","fieldsIndex":376},{"action":"user.grant_github_developer","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.hide_private_contributions_count","description":"A user changed the visibility of their private contributions. The number of contributions to private repositories on the user's profile are now hidden.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-github-profile/managing-contribution-settings-on-your-profile/showing-your-private-contributions-and-achievements-on-your-profile","docs_reference_titles":"Manage visibility settings for private contributions","fieldsIndex":15},{"action":"user.login","description":"A user signed in.","docs_reference_links":"N/A","fieldsIndex":377},{"action":"user.logout","description":"A user signed out.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.new_device_used","description":"A user signed in from a new device.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.promote","description":"An ordinary user account was promoted to a site administrator.","docs_reference_links":"N/A","fieldsIndex":371},{"action":"user.recreate","description":"A user's account was restored.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.remove_email","description":"An email address was removed from a user account.","docs_reference_links":"N/A","fieldsIndex":372},{"action":"user.remove_integration_secret","description":"A user secret for Codespaces was deleted.","docs_reference_links":"N/A","fieldsIndex":378},{"action":"user.rename","description":"A username was changed.","docs_reference_links":"N/A","fieldsIndex":379},{"action":"user.reset_password","description":"A user reset their account password.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user_session.country_change","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.show_private_contributions_count","description":"A user changed the visibility of their private contributions. The number of contributions to private repositories on the user's profile are now shown.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-github-profile/managing-contribution-settings-on-your-profile/showing-your-private-contributions-and-achievements-on-your-profile","docs_reference_titles":"Manage visibility settings for private contributions","fieldsIndex":15},{"action":"user.sign_in_from_unrecognized_device","description":"A user signed in from an unrecognized device.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.sign_in_from_unrecognized_device_and_location","description":"A user signed in from an unrecognized device and location.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user_status.destroy","description":"Triggered when you clear the status on your profile.","docs_reference_links":"N/A","fieldsIndex":380},{"action":"user_status.update","description":"Triggered when you set or change the status on your profile.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/personalizing-your-profile#setting-a-status","docs_reference_titles":"Personalize your profile","fieldsIndex":381},{"action":"user.suspend","description":"A user account was suspended.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"user.toggle_warn_private_email","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.two_factor_challenge_failure","description":"A 2FA challenge issued for a user account failed.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_challenge_success","description":"A 2FA challenge issued for a user account succeeded.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_recover","description":"A user used their 2FA recovery codes.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_recovery_codes_downloaded","description":"A user downloaded 2FA recovery codes for their account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_recovery_codes_printed","description":"A user printed 2FA recovery codes for their account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_recovery_codes_viewed","description":"A user viewed 2FA recovery codes for their account.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.two_factor_requested","description":"A user was prompted for a two-factor authentication code.","docs_reference_links":"/authentication/securing-your-account-with-two-factor-authentication-2fa/accessing-github-using-two-factor-authentication","docs_reference_titles":"/authentication/securing-your-account-with-two-factor-authentication-2fa/accessing-github-using-two-factor-authentication","fieldsIndex":15},{"action":"user.unblock_user","description":"A user was unblocked by another user.","docs_reference_links":"N/A","fieldsIndex":116},{"action":"user.unsuspend","description":"A user account was unsuspended.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"user.update_integration_secret","description":"A user secret for Codespaces was updated.","docs_reference_links":"N/A","fieldsIndex":374},{"action":"user.update_new_repository_default_branch_setting","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"api.request","description":"An API request was made to an endpoint for the enterprise, or an enterprise owned resource. This event is only included if API Request Events is enabled in the enterprise's audit log settings. This event is only available via audit log streaming.","docs_reference_links":"/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/streaming-the-audit-log-for-your-enterprise#enabling-audit-log-streaming-of-api-requests","docs_reference_titles":"Streaming the audit log for your enterprise","fieldsIndex":382},{"action":"audit_log_streaming.check","description":"A manual check of the endpoint configured for audit log streaming was performed.","docs_reference_links":"N/A","fieldsIndex":383},{"action":"audit_log_streaming.create","description":"An endpoint was added for audit log streaming.","docs_reference_links":"N/A","fieldsIndex":384},{"action":"audit_log_streaming.destroy","description":"An audit log streaming endpoint was deleted.","docs_reference_links":"N/A","fieldsIndex":385},{"action":"audit_log_streaming.update","description":"An endpoint configuration was updated for audit log streaming, such as the stream was paused, enabled, or disabled.","docs_reference_links":"N/A","fieldsIndex":386},{"action":"business.add_disallowed_two_factor_method","description":"An enterprise prevented access to resources by users with the given two-factor method.","docs_reference_links":"N/A","fieldsIndex":387},{"action":"business.add_organization","description":"An organization was added to an enterprise.","docs_reference_links":"N/A","fieldsIndex":388},{"action":"business_advanced_security.disabled","description":"GitHub Advanced Security was disabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_advanced_security.disabled_for_new_repos","description":"GitHub Advanced Security was disabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_advanced_security.disabled_for_new_user_namespace_repos","description":"GitHub Advanced Security was disabled for new user namespace repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_advanced_security.enabled","description":"GitHub Advanced Security was enabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_advanced_security.enabled_for_new_repos","description":"GitHub Advanced Security was enabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_advanced_security.enabled_for_new_user_namespace_repos","description":"GitHub Advanced Security was enabled for new user namespace repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business.advanced_security_metered_usage_lock","description":"Enablement for Advanced Security features on new repositories has been locked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":120},{"action":"business.advanced_security_metered_usage_unlock","description":"Enablement for Advanced Security features on new repositories has been unlocked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":120},{"action":"business.advanced_security_policy_update","description":"An enterprise owner created, updated, or removed a policy for GitHub Advanced Security.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-code-security-and-analysis-for-your-enterprise","docs_reference_titles":"Enforcing policies for code security and analysis for your enterprise","fieldsIndex":389},{"action":"business.advanced_security_repo_admin_enablement_policy_update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":389},{"action":"business_advanced_security.user_namespace_repos_disabled","description":"GitHub Advanced Security was disabled for user namespace repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_advanced_security.user_namespace_repos_enabled","description":"GitHub Advanced Security was enabled for user namespace repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business.audit_log_export","description":"An export of the enterprise audit log was created. If the export included a query, the log will list the query used and the number of audit log entries matching that query.","docs_reference_links":"admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/exporting-audit-log-activity-for-your-enterprise","docs_reference_titles":"Exporting audit log activity for your enterprise","fieldsIndex":114},{"action":"business.audit_log_git_event_export","description":"An export of the enterprise's Git events was created.","docs_reference_links":"admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/exporting-audit-log-activity-for-your-enterprise","docs_reference_titles":"Exporting audit log activity for your enterprise","fieldsIndex":115},{"action":"business.cancel_admin_invitation","description":"An invitation for someone to be an owner of an enterprise was canceled.","docs_reference_links":"N/A","fieldsIndex":390},{"action":"business.cancel_billing_manager_invitation","description":"An invitation for someone to be an billing manager of an enterprise was canceled.","docs_reference_links":"N/A","fieldsIndex":391},{"action":"business.cancel_trial","description":"The trial of GitHub Enterprise Cloud was canceled.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":341},{"action":"business.change_seats_plan_type","description":"The seats plan type was changed for an enterprise.","docs_reference_links":"N/A","fieldsIndex":392},{"action":"business.clear_actions_settings","description":"An enterprise owner or site administrator cleared GitHub Actions policy settings for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":393},{"action":"business.clear_default_repository_permission","description":"An enterprise owner cleared the base repository permission policy setting for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-base-repository-permissions","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":343},{"action":"business.clear_disallowed_two_factor_methods","description":"Cleared two-factor authentication restrictions for an enterprise.","docs_reference_links":"N/A","fieldsIndex":343},{"action":"business.clear_members_can_create_repos","description":"An enterprise owner cleared a restriction on repository creation in organizations in the enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#setting-a-policy-for-repository-creation","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":394},{"action":"business.code_quality_access_policy_update","description":"The policy for Code Quality access was updated for an enterprise.","docs_reference_links":"N/A","fieldsIndex":389},{"action":"business.code_quality_enablement_policy_update","description":"The policy for Code Quality enablement was updated for an enterprise.","docs_reference_links":"N/A","fieldsIndex":389},{"action":"business.code_scanning_ai_findings_policy_update","description":"The policy for Code scanning AI findings was updated for an enterprise.","docs_reference_links":"N/A","fieldsIndex":389},{"action":"business.code_scanning_autofix_policy_update","description":"The policy for Code scanning autofix was updated for an enterprise.","docs_reference_links":"N/A","fieldsIndex":389},{"action":"business.code_scanning_autofix_third_party_tools_policy_update","description":"The policy for Code scanning autofix third party tools was updated for an enterprise.","docs_reference_links":"/code-security/getting-started/github-security-features#available-with-github-code-security","docs_reference_titles":"/code-security/getting-started/github-security-features#available-with-github-code-security","fieldsIndex":389},{"action":"business.code_security_enablement_policy_update","description":"The policy for Code Security enablement was updated for an enterprise.","docs_reference_links":"/code-security/getting-started/github-security-features#available-with-github-code-security","docs_reference_titles":"/code-security/getting-started/github-security-features#available-with-github-code-security","fieldsIndex":389},{"action":"business.code_security_metered_usage_lock","description":"Enablement for Code Security features on new repositories has been locked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":120},{"action":"business.code_security_metered_usage_unlock","description":"Enablement for Code Security features on new repositories has been unlocked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":120},{"action":"business.connect_usage_metrics_export","description":"Server statistics were exported for the enterprise.","docs_reference_links":"/admin/monitoring-activity-in-your-enterprise/analyzing-how-your-team-works-with-server-statistics/exporting-server-statistics","docs_reference_titles":"Exporting Server Statistics","fieldsIndex":341},{"action":"business.convert_trial","description":"The enterprise account on a trial of GitHub Enterprise Cloud was upgraded to a paid enterprise account.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":341},{"action":"business.create","description":"An enterprise was created.","docs_reference_links":"N/A","fieldsIndex":341},{"action":"business.create_trial","description":"A trial of GitHub Enterprise Cloud began.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":341},{"action":"business.delete","description":"The enterprise was deleted.","docs_reference_links":"/admin/overview/deleting-an-enterprise-account","docs_reference_titles":"Deleting an enterprise account","fieldsIndex":341},{"action":"business.delete_custom_image","description":"A custom image was deleted for an enterprise.","docs_reference_links":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","docs_reference_titles":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","fieldsIndex":343},{"action":"business.delete_custom_image_version","description":"A custom image version was deleted for an enterprise.","docs_reference_links":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","docs_reference_titles":"/actions/how-tos/manage-runners/larger-runners/use-custom-images","fieldsIndex":343},{"action":"business_dependabot_alerts.disable","description":"Dependabot alerts were disabled for your enterprise.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"business_dependabot_alerts.enable","description":"Dependabot alerts were enabled for your enterprise.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"business_dependabot_alerts_new_repos.disable","description":"Dependabot alerts were disabled for new repositories in your enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_dependabot_alerts_new_repos.enable","description":"Dependabot alerts were enabled for new repositories in your enterprise.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"business.dependabot_alerts_repo_admin_enablement_policy_update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":389},{"action":"business.disable_oidc","description":"OIDC single sign-on was disabled for an enterprise.","docs_reference_links":"/admin/identity-and-access-management/using-enterprise-managed-users-for-iam/configuring-oidc-for-enterprise-managed-users","docs_reference_titles":"Configuring OIDC for Enterprise Managed Users","fieldsIndex":15},{"action":"business.disable_open_scim","description":"SCIM provisioning for custom integrations that use the REST API was disabled for the enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.disable_saml","description":"SAML single sign-on was disabled for an enterprise.","docs_reference_links":"N/A","fieldsIndex":395},{"action":"business.disable_source_ip_disclosure","description":"Display of IP addresses within audit log events for the enterprise was disabled.","docs_reference_links":"/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise","docs_reference_titles":"Displaying IP addresses in the audit log for your enterprise","fieldsIndex":15},{"action":"business.disable_two_factor_requirement","description":"The requirement for members to have two-factor authentication enabled to access an enterprise was disabled.","docs_reference_links":"N/A","fieldsIndex":341},{"action":"business.enable_app_delegated_credential_authorizations","description":"App-delegated credential authorizations were enabled for an enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.enable_oidc","description":"OIDC single sign-on was enabled for an enterprise.","docs_reference_links":"/admin/identity-and-access-management/using-enterprise-managed-users-for-iam/configuring-oidc-for-enterprise-managed-users","docs_reference_titles":"Configuring OIDC for Enterprise Managed Users","fieldsIndex":15},{"action":"business.enable_open_scim","description":"SCIM provisioning for custom integrations that use the REST API was enabled for the enterprise.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.enable_saml","description":"SAML single sign-on was enabled for an enterprise.","docs_reference_links":"N/A","fieldsIndex":395},{"action":"business.enable_source_ip_disclosure","description":"Display of IP addresses within audit log events for the enterprise was enabled.","docs_reference_links":"/admin/monitoring-activity-in-your-enterprise/reviewing-audit-logs-for-your-enterprise/displaying-ip-addresses-in-the-audit-log-for-your-enterprise","docs_reference_titles":"Displaying IP addresses in the audit log for your enterprise","fieldsIndex":15},{"action":"business.enable_two_factor_requirement","description":"The requirement for members to have two-factor authentication enabled to access an enterprise was enabled.","docs_reference_links":"N/A","fieldsIndex":343},{"action":"business.enterprise_server_license_download","description":"A GitHub Enterprise Server license was downloaded.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.enterprise_teams_limit_reached","description":"An enterprise has reached its enterprise teams limit.","docs_reference_links":"N/A","fieldsIndex":396},{"action":"business.enterprise_teams_limit_warning","description":"An enterprise is approaching its enterprise teams limit.","docs_reference_links":"N/A","fieldsIndex":396},{"action":"business.expire_trial","description":"The trial of GitHub Enterprise Cloud expired.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":341},{"action":"business.github_models_billing_disabled","description":"GitHub Models billing was disabled for the business.","docs_reference_links":"N/A","fieldsIndex":341},{"action":"business.github_models_billing_enabled","description":"GitHub Models billing was enabled for the business.","docs_reference_links":"N/A","fieldsIndex":341},{"action":"business.import_license_usage","description":"License usage information was imported from a GitHub Enterprise Server instance to an enterprise account on GitHub.com.","docs_reference_links":"/billing/managing-your-license-for-github-enterprise/syncing-license-usage-between-github-enterprise-server-and-github-enterprise-cloud#manually-uploading-github-enterprise-server-license-usage","docs_reference_titles":"Syncing license usage from GitHub Enterprise Server to Cloud","fieldsIndex":340},{"action":"business.invite_admin","description":"An invitation for someone to be an enterprise owner of an enterprise was sent.","docs_reference_links":"N/A","fieldsIndex":390},{"action":"business.invite_billing_manager","description":"An invitation for someone to be a billing manager of an enterprise was sent.","docs_reference_links":"N/A","fieldsIndex":390},{"action":"business.invite_unaffiliated_member","description":"An invitation for someone to join an enterprise was sent.","docs_reference_links":"N/A","fieldsIndex":390},{"action":"business.members_can_update_protected_branches.clear","description":"An enterprise owner unset a policy for whether members of an enterprise can update protected branches on repositories for individual organizations. Organization owners can choose whether to allow updating protected branches settings.","docs_reference_links":"N/A","fieldsIndex":341},{"action":"business.members_can_update_protected_branches.disable","description":"The ability for enterprise members to update branch protection rules was disabled. Only enterprise owners can update protected branches.","docs_reference_links":"N/A","fieldsIndex":343},{"action":"business.members_can_update_protected_branches.enable","description":"The ability for enterprise members to update branch protection rules was enabled. Enterprise owners and members can update protected branches.","docs_reference_links":"N/A","fieldsIndex":341},{"action":"business.members_limit_reached","description":"An enterprise has reached its members limit.","docs_reference_links":"N/A","fieldsIndex":396},{"action":"business.members_limit_warning","description":"An enterprise is approaching its members limit.","docs_reference_links":"N/A","fieldsIndex":396},{"action":"business.organizations_limit_reached","description":"An enterprise has reached its organizations limit.","docs_reference_links":"N/A","fieldsIndex":396},{"action":"business.organizations_limit_warning","description":"An enterprise is approaching its organizations limit.","docs_reference_links":"N/A","fieldsIndex":396},{"action":"business.proxy_security_header_disabled","description":"The proxy security header was disabled for an enterprise. All users on the network can now access GitHub, unless blocked by other means.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.proxy_security_header_enabled","description":"The proxy security header was enabled for an enterprise. When the header is provided in requests, only Enterprise Managed Users matching the header will be able to access GitHub.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business.proxy_security_header_unsatisfied","description":"A user outside the enterprise tried to access GitHub while the proxy security header was enabled and provided in the request.","docs_reference_links":"N/A","fieldsIndex":343},{"action":"business.recovery_code_failed","description":"An enterprise owner failed to sign into a enterprise with an external identity provider (IdP) using a recovery code.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/accessing-your-enterprise-account-if-your-identity-provider-is-unavailable","docs_reference_titles":"Accessing your enterprise account if your identity provider is unavailable","fieldsIndex":397},{"action":"business.recovery_code_used","description":"An enterprise owner successfully signed into an enterprise with an external identity provider (IdP) using a recovery code.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/accessing-your-enterprise-account-if-your-identity-provider-is-unavailable","docs_reference_titles":"Accessing your enterprise account if your identity provider is unavailable","fieldsIndex":341},{"action":"business.recovery_codes_downloaded","description":"An enterprise owner downloaded the enterprise's SSO recovery codes.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your enterprise account's single sign-on recovery codes","fieldsIndex":341},{"action":"business.recovery_codes_generated","description":"An enterprise owner generated the enterprise's SSO recovery codes.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your enterprise account's single sign-on recovery codes","fieldsIndex":341},{"action":"business.recovery_codes_printed","description":"An enterprise owner printed the enterprise's SSO recovery codes.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your enterprise account's single sign-on recovery codes","fieldsIndex":341},{"action":"business.recovery_codes_viewed","description":"An enterprise owner viewed the enterprise's SSO recovery codes.","docs_reference_links":"/admin/identity-and-access-management/managing-recovery-codes-for-your-enterprise/downloading-your-enterprise-accounts-single-sign-on-recovery-codes","docs_reference_titles":"Downloading your enterprise account's single sign-on recovery codes","fieldsIndex":341},{"action":"business.remove_disallowed_two_factor_method","description":"Removed a two-factor authentication method restriction for an enterprise.","docs_reference_links":"N/A","fieldsIndex":398},{"action":"business.remove_organization","description":"An organization was removed from an enterprise.","docs_reference_links":"N/A","fieldsIndex":342},{"action":"business.rename_slug","description":"The slug for the enterprise URL was renamed.","docs_reference_links":"N/A","fieldsIndex":341},{"action":"business.restore","description":"The deleted enterprise was restored.","docs_reference_links":"N/A","fieldsIndex":341},{"action":"business.revoke_external_identity","description":"The external identity for a member in an enterprise was revoked.","docs_reference_links":"N/A","fieldsIndex":341},{"action":"business.revoke_sso_session","description":"The SAML single sign-on session for a member in an enterprise was revoked.","docs_reference_links":"N/A","fieldsIndex":341},{"action":"business.secret_protection_metered_usage_lock","description":"Enablement for Secret Protection features on new repositories has been locked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":120},{"action":"business.secret_protection_metered_usage_unlock","description":"Enablement for Secret Protection features on new repositories has been unlocked for this enterprise.","docs_reference_links":"N/A","fieldsIndex":120},{"action":"business_secret_scanning_automatic_validity_checks.disabled","description":"Automatic partner validation checks have been disabled at the business level","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise#managing-advanced-security-features","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise#managing-advanced-security-features","fieldsIndex":0},{"action":"business_secret_scanning_automatic_validity_checks.enabled","description":"Automatic partner validation checks have been enabled at the business level","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise#managing-advanced-security-features","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise#managing-advanced-security-features","fieldsIndex":0},{"action":"business_secret_scanning_custom_pattern.create","description":"An enterprise-level custom pattern was created for secret scanning.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-enterprise-account","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":11},{"action":"business_secret_scanning_custom_pattern.delete","description":"An enterprise-level custom pattern was removed from secret scanning.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_secret_scanning_custom_pattern.publish","description":"An enterprise-level custom pattern was published for secret scanning.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_secret_scanning_custom_pattern_push_protection.disabled","description":"Push protection for a custom pattern for secret scanning was disabled for your enterprise.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-enterprise-account","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":0},{"action":"business_secret_scanning_custom_pattern_push_protection.enabled","description":"Push protection for a custom pattern for secret scanning was enabled for your enterprise.","docs_reference_links":"/code-security/secret-scanning/defining-custom-patterns-for-secret-scanning#defining-a-custom-pattern-for-an-enterprise-account","docs_reference_titles":"Defining custom patterns for secret scanning","fieldsIndex":0},{"action":"business_secret_scanning_custom_pattern.update","description":"Changes to an enterprise-level custom pattern were saved and a dry run was executed for secret scanning.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_secret_scanning.disable","description":"Secret scanning was disabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning.disabled_for_new_repos","description":"Secret scanning was disabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_secret_scanning.enable","description":"Secret scanning was enabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_secret_scanning.enabled_for_new_repos","description":"Secret scanning was enabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_secret_scanning_generic_secrets.disabled","description":"Generic secrets have been disabled at the business level","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_secret_scanning_generic_secrets.enabled","description":"Generic secrets have been enabled at the business level","docs_reference_links":"N/A","fieldsIndex":15},{"action":"business_secret_scanning_non_provider_patterns.disabled","description":"Secret scanning for non-provider patterns was disabled at the enterprise level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":15},{"action":"business_secret_scanning_non_provider_patterns.enabled","description":"Secret scanning for non-provider patterns was enabled at the enterprise level.","docs_reference_links":"/code-security/secret-scanning/secret-scanning-patterns#non-provider-patterns","docs_reference_titles":"Supported secret scanning patterns","fieldsIndex":15},{"action":"business_secret_scanning_push_protection_custom_message.disable","description":"The custom message triggered by an attempted push to a push-protected repository was disabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning_push_protection_custom_message.enable","description":"The custom message triggered by an attempted push to a push-protected repository was enabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning_push_protection_custom_message.update","description":"The custom message triggered by an attempted push to a push-protected repository was updated for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":15},{"action":"business_secret_scanning_push_protection.disable","description":"Push protection for secret scanning was disabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":0},{"action":"business_secret_scanning_push_protection.disabled_for_new_repos","description":"Push protection for secret scanning was disabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_secret_scanning_push_protection.enable","description":"Push protection for secret scanning was enabled for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_secret_scanning_push_protection.enabled_for_new_repos","description":"Push protection for secret scanning was enabled for new repositories in your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":11},{"action":"business_secret_scanning_push_protection_pattern_configuration.push_protection_setting_changed","description":"The push protection setting was updated for a secret type for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":145},{"action":"business_secret_scanning_push_protection_pattern_configuration.updated","description":"The push protection pattern configuration was updated for your enterprise.","docs_reference_links":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","docs_reference_titles":"/admin/code-security/managing-github-advanced-security-for-your-enterprise/managing-github-advanced-security-features-for-your-enterprise","fieldsIndex":146},{"action":"business.secret_scanning_repo_admin_settings_policy_update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":389},{"action":"business.sso_response","description":"A SAML single sign-on (SSO) response was generated when a member attempted to authenticate with your enterprise. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"N/A","fieldsIndex":399},{"action":"business.trial_email_verification_failed","description":"A trial email verification attempt failed for a GitHub Enterprise Cloud trial.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":341},{"action":"business.trial_email_verification_requested","description":"A trial email verification resend was requested for a GitHub Enterprise Cloud trial.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":341},{"action":"business.trial_email_verification_sent","description":"A trial email verification was sent for a GitHub Enterprise Cloud trial.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":341},{"action":"business.trial_email_verified","description":"The trial email was successfully verified for a GitHub Enterprise Cloud trial.","docs_reference_links":"/admin/overview/setting-up-a-trial-of-github-enterprise-cloud","docs_reference_titles":"Setting up a trial of GitHub Enterprise Cloud","fieldsIndex":341},{"action":"business.update_actions_settings","description":"An enterprise owner or site administrator updated GitHub Actions policy settings for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise","docs_reference_titles":"Enforcing policies for GitHub Actions in your enterprise","fieldsIndex":400},{"action":"business.update_default_repository_permission","description":"The base repository permission setting was updated for all organizations in an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-base-repository-permissions","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":401},{"action":"business.update_emu_repo_self_hosted_runners_policy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":402},{"action":"business.update_member_repository_creation_permission","description":"The repository creation setting was updated for an enterprise.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-repository-creation","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":403},{"action":"business.update_member_repository_invitation_permission","description":"The policy setting for enterprise members inviting outside collaborators to repositories was updated.","docs_reference_links":"/admin/policies/enforcing-policies-for-your-enterprise/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-for-inviting-outside-collaborators-to-repositories","docs_reference_titles":"Enforcing repository management policies in your enterprise","fieldsIndex":404},{"action":"business.update_repo_self_hosted_runners_policy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":405},{"action":"business.update_saml_provider_settings","description":"The SAML single sign-on provider settings for an enterprise were updated.","docs_reference_links":"N/A","fieldsIndex":395},{"action":"business.update_unaffiliated_users_policy","description":"The policy for removing user accounts when removing the last organization membership was updated.","docs_reference_links":"/admin/enforcing-policies/enforcing-policies-for-your-enterprise/control-offboarding","docs_reference_titles":"Controlling user offboarding with the unaffiliated users policy","fieldsIndex":406},{"action":"business.upgrade_from_organization","description":"The organization was upgraded to an enterprise account.","docs_reference_links":"/billing/managing-the-plan-for-your-github-account/upgrading-your-accounts-plan#upgrading-your-organizations-plan","docs_reference_titles":"Upgrading your account's plan","fieldsIndex":341},{"action":"copilot.cfb_enterprise_org_enablement_changed","description":"The Copilot enablement policy changed at the enterprise level to either allow or disable access for all organizations, or to allow access for selected organizations.","docs_reference_links":"N/A","fieldsIndex":407},{"action":"copilot.cfb_enterprise_settings_changed","description":"Copilot feature settings were changed at the enterprise level.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.clickwrap_save_event","description":"The GitHub Copilot Product Terms or Pre-Release Preview Terms were accepted.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.enterprise_enablement_changed","description":"Copilot access was enabled or disabled at the enterprise level.","docs_reference_links":"N/A","fieldsIndex":407},{"action":"enterprise.configure_self_hosted_jit_runner","description":"A new just-in-time GitHub Actions self-hosted runner was configured","docs_reference_links":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-an-enterprise","docs_reference_titles":"/rest/actions/self-hosted-runners#create-configuration-for-a-just-in-time-runner-for-an-enterprise","fieldsIndex":11},{"action":"enterprise_domain.approve","description":"A domain was approved for an enterprise.","docs_reference_links":"/admin/configuration/configuring-your-enterprise/verifying-or-approving-a-domain-for-your-enterprise#approving-a-domain-for-your-enterprise-account","docs_reference_titles":"Verifying or approving a domain for your enterprise","fieldsIndex":165},{"action":"enterprise_domain.create","description":"A domain was added to an enterprise.","docs_reference_links":"/admin/configuration/configuring-your-enterprise/verifying-or-approving-a-domain-for-your-enterprise#verifying-a-domain-for-your-enterprise-account","docs_reference_titles":"Verifying or approving a domain for your enterprise","fieldsIndex":165},{"action":"enterprise_domain.destroy","description":"A domain was removed from an enterprise.","docs_reference_links":"/admin/configuration/configuring-your-enterprise/verifying-or-approving-a-domain-for-your-enterprise#removing-an-approved-or-verified-domain","docs_reference_titles":"Verifying or approving a domain for your enterprise","fieldsIndex":165},{"action":"enterprise_domain.verify","description":"A domain was verified for an enterprise.","docs_reference_links":"/admin/configuration/configuring-your-enterprise/verifying-or-approving-a-domain-for-your-enterprise#verifying-a-domain-for-your-enterprise-account","docs_reference_titles":"Verifying or approving a domain for your enterprise","fieldsIndex":165},{"action":"enterprise.register_self_hosted_runner","description":"A new GitHub Actions self-hosted runner was registered.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-a-repository","docs_reference_titles":"Adding self-hosted runners","fieldsIndex":15},{"action":"enterprise.remove_self_hosted_runner","description":"A GitHub Actions self-hosted runner was removed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners#removing-a-runner-from-a-repository","docs_reference_titles":"Removing self-hosted runners","fieldsIndex":11},{"action":"enterprise_role.assign","description":"An enterprise role was assigned to a user or enterprise team.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/roles-in-an-enterprise","docs_reference_titles":"Abilities of roles in an enterprise","fieldsIndex":408},{"action":"enterprise_role.create","description":"A custom enterprise role was created in an enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/roles-in-an-enterprise","docs_reference_titles":"Abilities of roles in an enterprise","fieldsIndex":409},{"action":"enterprise_role.destroy","description":"A custom enterprise role was deleted in an enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/roles-in-an-enterprise","docs_reference_titles":"Abilities of roles in an enterprise","fieldsIndex":409},{"action":"enterprise_role.revoke","description":"A user or enterprise team was unassigned an enterprise role.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/roles-in-an-enterprise","docs_reference_titles":"Abilities of roles in an enterprise","fieldsIndex":408},{"action":"enterprise_role.update","description":"A custom enterprise role was edited in an enterprise.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-users-in-your-enterprise/roles-in-an-enterprise","docs_reference_titles":"Abilities of roles in an enterprise","fieldsIndex":410},{"action":"enterprise.runner_group_created","description":"A GitHub Actions self-hosted runner group was created.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners#removing-a-runner-from-a-repository","docs_reference_titles":"Removing self-hosted runners","fieldsIndex":411},{"action":"enterprise.runner_group_removed","description":"A GitHub Actions self-hosted runner group was removed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#removing-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":412},{"action":"enterprise.runner_group_renamed","description":"A GitHub Actions self-hosted runner group was renamed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#changing-the-access-policy-of-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":142},{"action":"enterprise.runner_group_runner_removed","description":"The REST API was used to remove a GitHub Actions self-hosted runner from a group.","docs_reference_links":"/rest/actions#remove-a-self-hosted-runner-from-a-group-for-an-organization","docs_reference_titles":"/rest/actions#remove-a-self-hosted-runner-from-a-group-for-an-organization","fieldsIndex":413},{"action":"enterprise.runner_group_runners_added","description":"A GitHub Actions self-hosted runner was added to a group.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#moving-a-self-hosted-runner-to-a-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":412},{"action":"enterprise.runner_group_runners_updated","description":"A GitHub Actions runner group's list of members was updated.","docs_reference_links":"/rest/actions#set-self-hosted-runners-in-a-group-for-an-organization","docs_reference_titles":"/rest/actions#set-self-hosted-runners-in-a-group-for-an-organization","fieldsIndex":412},{"action":"enterprise.runner_group_updated","description":"The configuration of a GitHub Actions self-hosted runner group was changed.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups#changing-the-access-policy-of-a-self-hosted-runner-group","docs_reference_titles":"Managing access to self-hosted runners using groups","fieldsIndex":411},{"action":"enterprise.runner_group_visiblity_updated","description":"The visibility of a GitHub Actions self-hosted runner group was updated via the REST API.","docs_reference_links":"/rest/actions#update-a-self-hosted-runner-group-for-an-organization","docs_reference_titles":"/rest/actions#update-a-self-hosted-runner-group-for-an-organization","fieldsIndex":144},{"action":"enterprise.self_hosted_runner_offline","description":"The GitHub Actions runner application was stopped. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":149},{"action":"enterprise.self_hosted_runner_online","description":"The GitHub Actions runner application was started. This event is not available in the web interface, only via the REST API, audit log streaming, or JSON/CSV exports.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners#checking-the-status-of-a-self-hosted-runner","docs_reference_titles":"Monitoring and troubleshooting self-hosted runners","fieldsIndex":149},{"action":"enterprise.self_hosted_runner_updated","description":"The GitHub Actions runner application was updated. This event is not included in the JSON/CSV export.","docs_reference_links":"/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners#about-self-hosted-runners","docs_reference_titles":"Self-hosted runners","fieldsIndex":150},{"action":"enterprise_team.add_member","description":"A new member was added to the enterprise team or an IdP group linked to an enterprise team, or an IdP group was linked to an enterprise team.","docs_reference_links":"N/A","fieldsIndex":414},{"action":"enterprise_team.copilot_assignment","description":"A license for GitHub Copilot was assigned to an enterprise team.","docs_reference_links":"N/A","fieldsIndex":415},{"action":"enterprise_team.copilot_unassignment","description":"A license for GitHub Copilot was unassigned from an enterprise team.","docs_reference_links":"N/A","fieldsIndex":415},{"action":"enterprise_team.create","description":"A new enterprise team was created.","docs_reference_links":"N/A","fieldsIndex":414},{"action":"enterprise_team.destroy","description":"An enterprise team was deleted.","docs_reference_links":"N/A","fieldsIndex":415},{"action":"enterprise_team.remove_member","description":"A member was removed from the enterprise team or an IdP group linked to an enterprise team, or an IdP group was unlinked from an enterprise team.","docs_reference_links":"N/A","fieldsIndex":414},{"action":"enterprise_team.rename","description":"The name of an enterprise team was changed.","docs_reference_links":"N/A","fieldsIndex":416},{"action":"external_group.add_member","description":"A user was added to an external group.","docs_reference_links":"N/A","fieldsIndex":417},{"action":"external_group.delete","description":"An external group was deleted.","docs_reference_links":"N/A","fieldsIndex":418},{"action":"external_group.link","description":"An external group was linked to a GitHub team.","docs_reference_links":"N/A","fieldsIndex":419},{"action":"external_group.provision","description":"An external group was created.","docs_reference_links":"N/A","fieldsIndex":418},{"action":"external_group.remove_member","description":"A user was removed from an external group.","docs_reference_links":"N/A","fieldsIndex":417},{"action":"external_group.scim_api_failure","description":"Failed external group SCIM API request.","docs_reference_links":"/rest/scim/scim","docs_reference_titles":"REST API endpoints for SCIM","fieldsIndex":420},{"action":"external_group.scim_api_success","description":"Successful external group SCIM API request. Excludes GET API requests.","docs_reference_links":"/rest/scim/scim","docs_reference_titles":"REST API endpoints for SCIM","fieldsIndex":421},{"action":"external_group.unlink","description":"An external group was unlinked to a GitHub team.","docs_reference_links":"N/A","fieldsIndex":419},{"action":"external_group.update","description":"An external group was updated.","docs_reference_links":"N/A","fieldsIndex":418},{"action":"external_group.update_display_name","description":"An external group's display name was updated.","docs_reference_links":"N/A","fieldsIndex":418},{"action":"external_identity.deprovision","description":"An external identity was deprovisioned, suspending the linked GitHub user.","docs_reference_links":"N/A","fieldsIndex":422},{"action":"external_identity.provision","description":"An external identity was created and linked to a GitHub user.","docs_reference_links":"N/A","fieldsIndex":422},{"action":"external_identity.scim_api_failure","description":"Failed external identity SCIM API request.","docs_reference_links":"/rest/scim/scim","docs_reference_titles":"REST API endpoints for SCIM","fieldsIndex":423},{"action":"external_identity.scim_api_success","description":"Successful external identity SCIM API request. Excludes GET API requests.","docs_reference_links":"/rest/scim/scim","docs_reference_titles":"REST API endpoints for SCIM","fieldsIndex":424},{"action":"external_identity.update","description":"An external identity was updated.","docs_reference_links":"N/A","fieldsIndex":422},{"action":"ip_allow_list.disable_idp_ip_allowlist_for_web","description":"Identity Provider based IP allow list for web interactions was disabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"ip_allow_list.disable_skip_idp_ip_allowlist_app_access","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"ip_allow_list.disable_user_level_enforcement","description":"IP allow list user level enforcement was disabled.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list.enable_idp_ip_allowlist_for_web","description":"Identity Provider based IP allow list for web interactions was enabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"ip_allow_list.enable_skip_idp_ip_allowlist_app_access","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"ip_allow_list.enable_user_level_enforcement","description":"IP allow list user level enforcement was enabled.","docs_reference_links":"N/A","fieldsIndex":11},{"action":"ip_allow_list.update_ip_allowlist_configuration","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"organization_custom_property_definition.create","description":"A new organization custom property definition was created.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","docs_reference_titles":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","fieldsIndex":425},{"action":"organization_custom_property_definition.destroy","description":"An organization custom property definition was deleted.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","docs_reference_titles":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","fieldsIndex":425},{"action":"organization_custom_property_definition.update","description":"An organization custom property definition was updated.","docs_reference_links":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","docs_reference_titles":"/admin/managing-accounts-and-repositories/managing-organizations-in-your-enterprise/managing-custom-properties-for-organization-in-your-enterprise","fieldsIndex":426},{"action":"personal_access_token.access_restriction_reset","description":"The configured restriction for access to resources via personal access tokens was reset and delegated to organizations.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"personal_access_token.auto_approve_grant_requests_reset","description":"Triggered when the enterprise delegates to the organizations when to require approval for fine-grained personal access tokens before the tokens can access organization resources.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"sso_lockdown.disable","description":"SSO lockdown for users was disabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"sso_lockdown.enable","description":"SSO lockdown for users was enabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"sso_redirect.disable","description":"Automatic redirects for users to single sign-on (SSO) was disabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"sso_redirect.enable","description":"Automatic redirects for users to single sign-on (SSO) was enabled.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.user_access_reinstated","description":"N/A","docs_reference_links":"N/A","fieldsIndex":427},{"action":"copilot.user_access_revoked","description":"N/A","docs_reference_links":"N/A","fieldsIndex":427},{"action":"discussion_post.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":428},{"action":"discussion_post_reply.destroy","description":"N/A","docs_reference_links":"N/A","fieldsIndex":429},{"action":"discussion_post_reply.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":430},{"action":"discussion_post.update","description":"N/A","docs_reference_links":"N/A","fieldsIndex":428},{"action":"oauth_application.suspend","description":"N/A","docs_reference_links":"N/A","fieldsIndex":431},{"action":"oauth_application.unsuspend","description":"An OAuth application was unsuspended for a user or organization account.","docs_reference_links":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","docs_reference_titles":"/apps/oauth-apps/building-oauth-apps/authenticating-to-the-rest-api-with-an-oauth-app#registering-your-app","fieldsIndex":107},{"action":"org.async_delete","description":"A user initiated a background job to delete an organization.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.recreate","description":"An organization was restored.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"org.transform","description":"A user account was converted into an organization.","docs_reference_links":"/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-personal-account/converting-a-user-into-an-organization","docs_reference_titles":"Converting a user into an organization","fieldsIndex":432},{"action":"repo.collaborators_only","description":"N/A","docs_reference_links":"N/A","fieldsIndex":433},{"action":"repo.disk_archive","description":"A repository was archived on disk.","docs_reference_links":"/repositories/archiving-a-github-repository/archiving-repositories","docs_reference_titles":"/repositories/archiving-a-github-repository/archiving-repositories","fieldsIndex":0},{"action":"repo.hide_from_discovery","description":"N/A","docs_reference_links":"N/A","fieldsIndex":434},{"action":"repo.noindex","description":"N/A","docs_reference_links":"N/A","fieldsIndex":434},{"action":"repo.override_unlock","description":"The repository was unlocked.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"repo.pages_build","description":"N/A","docs_reference_links":"N/A","fieldsIndex":435},{"action":"repo.require_login","description":"N/A","docs_reference_links":"N/A","fieldsIndex":433},{"action":"team_discussions.clear","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"team_discussions.disable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"team_discussions.enable","description":"N/A","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.correct_password_from_unrecognized_device","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.correct_password_from_unrecognized_device_and_location","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.correct_password_from_unrecognized_location","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.flag_as_large_scale_contributor","description":"A user account was flagged as a large scale contributor. Only contributions from public repositories the user owns will be shown in their contribution graph, in order to prevent timeouts.","docs_reference_links":"N/A","fieldsIndex":367},{"action":"user.minimize_comment","description":"A comment made by a user was minimized.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"user.partial_two_factor_email_followup","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.remove_large_scale_contributor_flag","description":"A user account was no longer flagged as a large scale contributor.","docs_reference_links":"N/A","fieldsIndex":0},{"action":"user.report_abuse","description":"N/A","docs_reference_links":"N/A","fieldsIndex":236},{"action":"user.report_content","description":"Triggered when you report an issue or pull request, or a comment on an issue, pull request, or commit.","docs_reference_links":"/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam","docs_reference_titles":"/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam","fieldsIndex":0},{"action":"user.sign_in_from_unrecognized_location","description":"A user signed in from an unrecognized location.","docs_reference_links":"N/A","fieldsIndex":15},{"action":"user.unminimize_comment","description":"A comment made by a user was unminimized.","docs_reference_links":"N/A","fieldsIndex":53},{"action":"copilot.knowledge_base_created","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.knowledge_base_deleted","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"copilot.knowledge_base_updated","description":"N/A","docs_reference_links":"N/A","fieldsIndex":15},{"action":"actions_policy.evaluate","description":"N/A","docs_reference_links":"N/A","fieldsIndex":245}] \ No newline at end of file diff --git a/src/audit-logs/data/shared/fields-pool.json b/src/audit-logs/data/shared/fields-pool.json index 3b674d198961..dd3bc48368cf 100644 --- a/src/audit-logs/data/shared/fields-pool.json +++ b/src/audit-logs/data/shared/fields-pool.json @@ -1 +1 @@ -[["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actions_cache_id","actions_cache_key","actions_cache_scope","actions_cache_version","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","ghsa_id","oauth_application_id","operation_type","public_repo","recipient","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","ghsa_id","oauth_application_id","operation_type","public_repo","recipient","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","ghsa_id","operation_type","public_repo","recipient"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","ghsa_id","oauth_application_id","operation_type","public_repo","recipient"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_enabled","alert_recipient_user_ids","budget_limit_type","created_at","customer_id","exclude_cost_center_usage","expires_at","oauth_application_id","operation_type","pricing_target_id","pricing_target_type","status","target_amount","target_id","target_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","alert_enabled","budget_limit_type","created_at","customer_id","exclude_cost_center_usage","expires_at","oauth_application_id","operation_type","pricing_target_id","pricing_target_type","status","target_amount","target_type","user_programmatic_access_name","uuid"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_enabled","budget_limit_type","created_at","customer_id","exclude_cost_center_usage","expires_at","oauth_application_id","old_alert_enabled","old_budget_limit_type","old_expires_at","old_pricing_target_id","old_pricing_target_type","old_target_amount","old_target_id","old_target_type","operation_type","pricing_target_id","pricing_target_type","status","target_amount","target_id","target_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","email","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type","resource_id","resource_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","public_repo","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","alert_number","alert_numbers","commit_oid","ref"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","alert_numbers","commit_oid","ref"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","alert_number","alert_numbers","dismissal_approver_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","alert_number","created_at","dismissal_request_id","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","alert_number","alert_numbers"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","origin_repository"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","owner","public_repo","pull_request_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","enablement","operation_type","organization_names"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","devcontainer_path","machine_type","name","oauth_application_id","operation_type","owner","public_repo","pull_request_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","owner","public_repo","pull_request_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","owner","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","devcontainer_path","machine_type","name","oauth_application_id","operation_type","owner","public_repo","pull_request_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application_id","operation_type","owner","owner_type","plan","reason"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner","owner_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","owner","owner_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application_id","operation_type","owner","owner_type","seat_assignment"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","owner","owner_type","seat_assignment"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_value","old_value","operation_type","previous_value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","old_settings","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","excluded_paths","operation_type","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","custom_instructions","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","owner","owner_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","old_plan","operation_type","owner","owner_type","plan"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","current_plan","operation_type","owner","owner_type","scheduled_plan"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_config","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_access","oauth_application_id","old_access","operation_type","owner","owner_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","name","operation_type","runner_group_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allowed_values","created_at","default_value","definition_id","description","oauth_application_id","operation_type","property_name","required","user_programmatic_access_name","value_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allowed_values","created_at","default_value","definition_id","oauth_application_id","old_allowed_values","old_default_value","old_required","old_values_editable_by","old_value_type","operation_type","property_name","required","user_programmatic_access_name","values_editable_by","value_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","definition_id","oauth_application_id","operation_type","property_name","public_repo","user_programmatic_access_name","value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","definition_id","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_number","created_at","number","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","alert_number","created_at","number","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","alert_number","created_at","number","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_number","created_at","number","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","access_level","actor_is_bot","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","number","oauth_application_id","operation_type","public_repo","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","message","oauth_application_id","operation_type","owner","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","owner","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","message","oauth_application_id","old_message","operation_type","owner","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","integration","name","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","integration","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","approvers","approvers_was","can_admins_bypass","environment_id","environment_name","new_value","old_value","prevent_self_review"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","external_id","repository_public","transport_protocol","transport_protocol_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","runner_group_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","active_was","actor_is_agent","actor_is_bot","created_at","events","hook_id","integration","name","oauth_application_id","operation_type","public_repo","sponsors_listing_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","created_at","events","hook_id","integration","name","oauth_application_id","operation_type","public_repo","sponsors_listing_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","created_at","events","hook_id","integration","name","oauth_application","oauth_application_id","operation_type","public_repo","sponsors_listing_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","created_at","events","events_were","hook_id","integration","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type","repository_selection","topic","trigger_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type","repository_selection","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type","repositories_added","repositories_added_names","repository_selection","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type","repositories_removed","repositories_removed_names","repository_selection","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","operation_type","reason","url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_client_id","created_at","integration","operation_type","requester","url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","operation_type","repository_selection"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_client_id","created_at","integration","manager","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_client_id","created_at","integration","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_client_id","created_at","integration","name","operation_type","requester","requester_id","transfer_from","transfer_from_id","transfer_from_type","transfer_to","transfer_to_id","transfer_to_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_bot","created_at","integration","ip_allow_list_entry","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","number","oauth_application_id","operation_type","owner_type","public_repo","pull_request_id","pull_request_title","pull_request_url","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","event","number","oauth_application_id","operation_type","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","number","oauth_application_id","operation_type","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","color","created_at","description","enabled","issue_type_name","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","color","created_at","description","enabled","issue_type_name","oauth_application_id","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","color","created_at","description","enabled","issue_type_name","oauth_application_id","old_color","old_description","old_enabled","old_issue_type_name","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","marketplace_listing","oauth_application","oauth_application_id","operation_type","primary_category","secondary_category"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","marketplace_listing","operation_type","primary_category","secondary_category"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","integration","marketplace_listing","operation_type","primary_category","secondary_category"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_id","assignment_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","check_response_timeout_minutes","created_at","max_entries_to_build","max_entries_to_merge","merge_method","merging_strategy","min_entries_to_merge","min_entries_to_merge_wait_minutes","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","failover_network_enabled","failover_network_settings_ids","name","network_configuration_id","network_settings_ids","oauth_application_id","operation_type","previous_settings_ids","selected_service","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","network_configuration_id","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","failover_network_enabled","failover_network_settings_ids","name","network_configuration_id","network_settings_ids","oauth_application_id","operation_type","previous_settings_ids","selected_service"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","two_factor_method"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","invitation_id","oauth_application_id","operation_type","permission","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","invitee","inviter","oauth_application_id","operation_type","permission","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_policy","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","query_phrase"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","end","operation_type","start"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","blocked_user","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","initiated_from","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","email","invitation_id","invitee_email","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","enablement","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","invitation_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","key","oauth_application_id","operation_type","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_id","application_name","application_type","created_at","fingerprint","managed_hashed_token","managed_oauth_access_id","managed_oauth_scopes","managed_token_id","managed_token_scopes","oauth_application_id","oauth_credential_type","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_id","application_name","application_type","created_at","fingerprint","managed_hashed_token","managed_oauth_access_id","managed_oauth_scopes","managed_token_id","managed_token_scopes","oauth_application_id","oauth_credential_type","operation_type","owner","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","issuer","operation_type","sso_url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","manager","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","count","created_at","limit","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_name","operation_type","url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","reason"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","key","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","old_login","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","network_configuration_id","oauth_application_id","operation_type","runner_group_allow_public","runner_group_id","runner_group_name","runner_group_restricted_to_workflows","runner_group_selected_workflow_refs","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","runner_group_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","runner_group_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","runner_group_id","runner_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","runner_group_id","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","push_protection_setting","secret_type","secret_type_display_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","end_date","filename","operation_type","query","requested_at","start_date"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","filename","operation_type","query","requested_at"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","runner_id","runner_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","runner_group_id","runner_group_name","runner_id","runner_name","source_version","target_version"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","policy","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","policy","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","limit","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","issuer","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","from_business","operation_type","to_business"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_policy","oauth_application_id","old_policy","operation_type","updated_access_policy","updated_allowed_types","updated_github_owned_allowed","updated_patterns","updated_verified_allowed","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_policy","old_policy","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","old_permission","operation_type","permission","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_policy","oauth_application_id","old_policy","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","permission","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","permission"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_repo_runners_policy","oauth_application_id","old_repo_runners_policy","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","definition_id","oauth_application_id","operation_type","property_name","value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","domain_name","oauth_application_id","operation_type","owner","owner_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","organization_role_id","organization_role_name","team","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","operation_type","organization_role_id","owner","owner_id","owner_type","role_permissions","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","operation_type","organization_role_id","owner","owner_id","owner_type","role_permissions"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","old_base_role","old_role_permissions","operation_type","organization_role_id","owner","owner_id","owner_type","role_permissions","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_project_base_role","old_project_base_role","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","ecosystem","operation_type","package","version_count"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","ecosystem","is_republished","operation_type","package","version_count"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","ecosystem","operation_type","package","version"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","ecosystem","is_republished","operation_type","package","version"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","domain","operation_type","owner","owner_type","state"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","repositories","repository_selection","user_programmatic_access_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","repositories","repository_selection","user_programmatic_access_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","exempt_administrators","old_token_expiration","operation_type","token_expiration"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","old_token_expiration","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","repository_selection","user_programmatic_access_name","user_programmatic_access_request_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","repositories","repository_selection","user_programmatic_access_id","user_programmatic_access_name","user_programmatic_access_request_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","repository_selection","user_programmatic_access_name","user_programmatic_access_request_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","branch","created_at","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","policy","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","marketplace_listing","oauth_application","oauth_application_id","operation_type","owner","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_project_base_role","old_project_base_role","operation_type","project_id","project_number","public_project"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","project_id","project_kind","project_name","public_project","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","collaborator","collaborator_type","created_at","old_project_role","operation_type","project_id","project_name","project_role","public_project"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","old_name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","project_id","project_kind","project_name","public_project"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","project_id","project_kind","project_name","public_project","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","authorized_actors","created_at","name","oauth_application_id","operation_type","policy","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","admin_enforced","allow_deletions_enforcement_level","allow_force_pushes_enforcement_level","authorized_actor_names","created_at","create_protected","dismiss_stale_reviews_on_push","enforcement_level","ignore_approvals_from_contributors","linear_history_requirement_enforcement_level","lock_allows_fetch_and_merge","lock_branch_enforcement_level","merge_queue_enforcement_level","name","oauth_application_id","operation_type","public_repo","pull_request_reviews_enforcement_level","required_approving_review_count","required_deployments_enforcement_level","required_review_thread_resolution_enforcement_level","required_status_checks_enforcement_level","require_code_owner_review","require_last_push_approval","signature_requirement_enforcement_level","strict_required_status_checks_policy","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","dismiss_stale_reviews_on_push","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","authorized_actors","authorized_actors_only","created_at","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","after","before","branch","compliant_pull_request_ids","created_at","deploy_key_fingerprint","oauth_application_id","operation_type","overridden_codes","public_repo","reasons","referrer","rule_suite_id","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","admin_enforced","created_at","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allow_deletions_enforcement_level","created_at","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allow_force_pushes_enforcement_level","created_at","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","ignore_approvals_from_contributors","name","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","linear_history_requirement_enforcement_level","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","lock_allows_fetch_and_merge","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","enforcement_level","lock_branch_enforcement_level","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","merge_queue_enforcement_level","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","old_name","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","pull_request_reviews_enforcement_level","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","require_code_owner_review","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","require_last_push_approval","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","required_approving_review_count","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","required_status_checks_enforcement_level","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","signature_requirement_enforcement_level","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","strict_required_status_checks_policy","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","fingerprint","key","oauth_application_id","operation_type","public_repo","read_only","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","explanation","fingerprint","key","oauth_application_id","operation_type","public_repo","read_only","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","fingerprint","key","operation_type","read_only","title"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","explanation","fingerprint","key","operation_type","public_repo","read_only","title"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","pull_request_id","pull_request_title","pull_request_url","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","pull_request_id","pull_request_title","pull_request_url","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","agent_session_id","created_at","oauth_application_id","operation_type","public_repo","pull_request_id","pull_request_title","pull_request_url","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","pull_request_id","pull_request_title","pull_request_url","reviewer","reviewer_id","reviewer_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","pull_request_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","comment_id","created_at","oauth_application_id","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","comment_id","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","comment_id","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","pull_request_id","pull_request_title","pull_request_url","review_id","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","previous_visibility","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","integration","name","oauth_application_id","operation_type","public_repo","repository_selection","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","permission","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","category","created_at","oauth_application_id","operation_type","public_repo","tool","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","branch","category","created_at","operation_type","public_repo","tool"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","languages","oauth_application_id","operation_type","public_repo","query_suite","threat_model","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","request_category","request_method","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","cname","created_at","oauth_application_id","old_cname","operation_type","public_repo","topic","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","old_name","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","default_branch","new_branch","oauth_application_id","old_branch","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","policy","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","limit","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","old_user","operation_type","owner","public_repo","repo_was","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_nwo","oauth_application_id","operation_type","public_repo","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","old_policy","operation_type","policy","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_policy","oauth_application_id","old_policy","operation_type","public_repo","updated_access_policy","updated_allowed_types","updated_github_owned_allowed","updated_patterns","updated_verified_allowed","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_repo_base_role","new_repo_permission","oauth_application_id","old_base_role","old_permission","old_repo_base_role","old_repo_permission","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","content_type","created_at","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","invitee","inviter","oauth_application_id","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","invitee","inviter","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","count","created_at","limit","operation_type","owner"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","count","created_at","limit","oauth_application_id","operation_type","owner","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","ruleset_bypass_actors","ruleset_conditions","ruleset_enforcement","ruleset_id","ruleset_name","ruleset_rules","ruleset_source_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","old_name","operation_type","public_repo","ruleset_bypass_actors_added","ruleset_bypass_actors_deleted","ruleset_bypass_actors_updated","ruleset_conditions_added","ruleset_conditions_deleted","ruleset_conditions_updated","ruleset_enforcement","ruleset_id","ruleset_name","ruleset_old_enforcement","ruleset_old_name","ruleset_rules_added","ruleset_rules_deleted","ruleset_rules_updated","ruleset_source_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","repository_security_configuration_failure_reason","repository_security_configuration_state","security_configuration_id","security_configuration_name","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","alert_id","alert_number","created_at","ghsa_id","oauth_application_id","operation_type","owner","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","alert_id","alert_number","created_at","ghsa_id","oauth_application_id","operation_type","owner","public_repo","topic","user_programmatic_access_name","vulnerability_alert_rule_id","vulnerability_alert_rule_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","alert_id","alert_number","created_at","ghsa_id","oauth_application_id","operation_type","owner","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","alert_id","alert_number","created_at","dismiss_comment","dismiss_reason","ghsa_id","oauth_application_id","operation_type","owner","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_bot","alert_id","alert_number","created_at","ghsa_id","oauth_application_id","operation_type","owner","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","alert_id","alert_number","created_at","ghsa_id","operation_type","owner","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","context","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","owner"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","old_role_permissions","operation_type","owner","role_permissions","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","operation_type","owner","role_permissions"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","old_base_role","old_role_permissions","operation_type","owner","role_permissions","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","multi_repo","number","publicly_leaked","secret_type","secret_type_display_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","multi_repo","number","publicly_leaked","reason","secret_type","secret_type_display_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","multi_repo","number","oauth_application_id","operation_type","publicly_leaked","public_repo","resolution","secret_type","secret_type_display_name","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","multi_repo","number","publicly_leaked","report_result","secret_type","secret_type_display_name","secret_type_provider"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","number","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","current_validity","multi_repo","number","previous_validity","publicly_leaked","secret_type","secret_type_display_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_number","created_at","number","oauth_application_id","operation_type","public_repo","request_reviewer_comment","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","alert_number","comment","created_at","number","operation_type","public_repo","reason"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","multi_repo","number","publicly_leaked","push_protection_bypass_reason","request_reviewer","request_reviewer_comment","request_reviewer_id","secret_type","secret_type_display_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","number","oauth_application_id","operation_type","public_repo","request_reviewer_comment","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","number","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","number","operation_type","public_repo","request_reviewer_comment","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","comment","created_at","number","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","completed_at","created_at","custom_pattern_name","custom_pattern_scope","operation_type","public_repo","secret_types","source","source_slug","started_at","type","type_slug"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","security_configuration_code_scanning","security_configuration_code_scanning_delegated_alert_dismissal","security_configuration_code_security_sku_enabled","security_configuration_created_at","security_configuration_dependabot_alerts","security_configuration_dependabot_delegated_alert_dismissal","security_configuration_dependabot_security_updates","security_configuration_dependency_graph","security_configuration_dependency_graph_autosubmit_action","security_configuration_description","security_configuration_enable_ghas","security_configuration_id","security_configuration_name","security_configuration_private_vulnerability_reporting","security_configuration_secret_protection_sku_enabled","security_configuration_secret_scanning","security_configuration_secret_scanning_delegated_alert_dismissal","security_configuration_secret_scanning_delegated_bypass","security_configuration_secret_scanning_extended_metadata","security_configuration_secret_scanning_generic_secrets","security_configuration_secret_scanning_non_provider_patterns","security_configuration_secret_scanning_push_protection","security_configuration_secret_scanning_validity_checks","security_configuration_updated_at","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","default_for_new_private_repos","default_for_new_public_repos","oauth_application_id","operation_type","security_configuration_name","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","enforcement","oauth_application_id","operation_type","security_configuration_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","security_configuration_code_scanning","security_configuration_code_scanning_delegated_alert_dismissal","security_configuration_code_security_sku_enabled","security_configuration_created_at","security_configuration_dependabot_alerts","security_configuration_dependabot_delegated_alert_dismissal","security_configuration_dependabot_security_updates","security_configuration_dependency_graph","security_configuration_dependency_graph_autosubmit_action","security_configuration_description","security_configuration_enable_ghas","security_configuration_id","security_configuration_name","security_configuration_private_vulnerability_reporting","security_configuration_secret_protection_sku_enabled","security_configuration_secret_scanning","security_configuration_secret_scanning_delegated_alert_dismissal","security_configuration_secret_scanning_delegated_bypass","security_configuration_secret_scanning_extended_metadata","security_configuration_secret_scanning_generic_secrets","security_configuration_secret_scanning_non_provider_patterns","security_configuration_secret_scanning_push_protection","security_configuration_secret_scanning_validity_checks","security_configuration_updated_at","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","sponsors_listing_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","sponsors_listing_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","public_repo","topic","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_bot","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_bot","created_at","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","sponsors_listing_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","sponsors_listing_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","patreon_email","patreon_username"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","fingerprint","openssh_public_key","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","domain_name","operation_type","owner","owner_type","token_expires_at"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","domain_name","operation_type","owner","owner_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","domain_name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","team","team_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","permission","public_repo","team","team_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","team","team_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","team","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","count","created_at","limit","operation_type","team","team_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","team","team_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","name_was","oauth_application_id","operation_type","team","team_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_repo_base_role","new_repo_permission","oauth_application_id","old_permission","old_repo_base_role","old_repo_permission","operation_type","permission","public_repo","team","team_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","deleted_at","deleted_by","deleted_by_id","deleted_content","editor","editor_id","operation_type","user_content_id","user_content_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","vulnerability_alert_rule_id","vulnerability_alert_rule_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","topic","vulnerability_alert_rule_id","vulnerability_alert_rule_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name","vulnerability_alert_rule_id","vulnerability_alert_rule_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","vulnerability_alert_rule_id","vulnerability_alert_rule_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allowed","created_at","event_name","integration_installation_id","operation_type","public_repo","ruleset_ids","violations"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","run_number","topic","user_programmatic_access_name","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","run_number","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","cancelled_at","created_at","event","head_branch","head_sha","name","oauth_application_id","operation_type","public_repo","run_number","started_at","topic","trigger_id","user_programmatic_access_name","workflow_id","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","public_repo","run_number","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","completed_at","conclusion","created_at","event","head_branch","head_sha","name","operation_type","public_repo","run_attempt","run_number","started_at","topic","trigger_id","workflow_id","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","event","head_branch","head_sha","name","operation_type","public_repo","run_number","started_at","trigger_id","workflow_id","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","event","head_branch","head_sha","name","oauth_application_id","operation_type","public_repo","run_number","started_at","topic","trigger_id","user_programmatic_access_name","workflow_id","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","workflow_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","workflow_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","calling_workflow_refs","calling_workflow_shas","created_at","environment_name","imposer_repo","is_hosted_runner","job_name","job_workflow_ref","operation_type","runner_group_id","runner_group_name","runner_id","runner_labels","runner_name","runner_owner_type","secrets_passed","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","run_number","user_programmatic_access_name","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","check_run_id","created_at","event","head_branch","head_sha","name","oauth_application_id","operation_type","public_repo","rerun_type","run_attempt","run_number","started_at","trigger_id","user_programmatic_access_name","workflow_id","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type","policy"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","policy"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","limit","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","gist","gist_id","oauth_application_id","operation_type","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","fingerprint","key","oauth_application_id","operation_type","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","explanation","fingerprint","key","oauth_application_id","operation_type","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","key","name","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","bullets","created_at","description","has_free_trial","marketplace_listing","marketplace_listing_plan","monthly_price_in_cents","operation_type","yearly_price_in_cents"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_id","server_id","server_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_description","allowlist_id","allowlist_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_id","allowlist_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_id","entries","server_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_id","allowlist_name","old_allowlist_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","block_local_servers","mcp_policy","old_block_local_servers","old_mcp_policy"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","oauth_application_id","oauth_application_name","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","explanation","integration","oauth_application_id","oauth_application_name","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","explanation","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","explanation","integration","oauth_application_id","oauth_application_name","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","nickname","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","repository_selection","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","explanation","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","explanation","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","pat_field_changed","repository_selection","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","email","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","email","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","email","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","passkey_nickname"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","old_login","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","emoji","limited_availability","message","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","emoji","limited_availability","message","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","blocked_user","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","query_string","rate_limit_remaining","request_body","request_method","route","status_code","url_path"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","audit_log_stream_id","audit_log_stream_result","audit_log_stream_sink_details","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","audit_log_stream_id","audit_log_stream_sink","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","audit_log_stream_id","audit_log_stream_sink","audit_log_stream_sink_details","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","audit_log_stream_enabled","audit_log_stream_id","audit_log_stream_sink","audit_log_stream_sink_details","created_at","new_azure_blob_container","new_event_hub_instance","new_gc_bucket","new_s3_arn_role","new_s3_bucket","new_splunk_domain","new_splunk_port","old_azure_blob_container","old_event_hub_instance","old_gc_bucket","old_s3_arn_role","old_s3_bucket","old_splunk_domain","old_splunk_port","operation_type","reason","secrets_updated","ssl_verify"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","two_factor_method"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","organization_upgrade"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","new_policy","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","email","invitation_id","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","email","invitation_id","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type","seats_plan_type","seats_plan_type_was"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","issuer","name","operation_type","sso_url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","count","created_at","limit","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type","reason"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type","two_factor_method"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","issuer","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","new_policy","oauth_application_id","old_policy","operation_type","updated_access_policy","updated_allowed_types","updated_github_owned_allowed","updated_patterns","updated_verified_allowed"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","old_permission","operation_type","permission"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","new_emu_repo_runners_policy","old_emu_repo_runners_policy","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","permission","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","permission"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","new_repo_runners_policy","old_repo_runners_policy","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_value","old_value","operation_type","remove_existing_unaffiliated_users","users_removed_count"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","current_value","operation_type","previous_value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","domain_name","operation_type","owner","owner_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","enterprise_role_id","enterprise_role_name","oauth_application_id","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","base_role","created_at","name","operation_type","owner","role_permissions"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","enterprise_role_id","enterprise_role_name","oauth_application_id","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","base_role","created_at","name","old_role_permissions","operation_type","owner","role_permissions"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","network_configuration_id","oauth_application_id","operation_type","runner_group_allow_public","runner_group_id","runner_group_name","runner_group_restricted_to_workflows","runner_group_selected_workflow_refs"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","runner_group_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","runner_group_id","runner_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","enterprise_team","enterprise_team_id","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","enterprise_team","enterprise_team_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","enterprise_team","enterprise_team_id","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","external_group","external_group_id","oauth_application_id","operation_type","scim_group_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","external_group","external_group_id","oauth_application_id","operation_type","scim_group_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","external_group","external_group_id","oauth_application_id","operation_type","scim_group_id","team","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","api_request_body","created_at","message","oauth_application_id","operation_type","query_string","request_method","route","scim_group_id","status_code","url_path","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","api_request_body","created_at","oauth_application_id","operation_type","query_string","request_method","route","scim_group_id","status_code","url_path"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","scim_user_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","api_request_body","created_at","message","oauth_application_id","operation_type","query_string","request_method","route","scim_user_id","status_code","url_path","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","api_request_body","created_at","oauth_application_id","operation_type","query_string","request_method","route","scim_user_id","status_code","url_path"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allowed_values","created_at","default_value","definition_id","description","oauth_application_id","operation_type","property_name","required","value_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","allowed_values","created_at","default_value","definition_id","description","oauth_application_id","operation_type","property_name","required","value_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","allowed_values","created_at","default_value","definition_id","old_allowed_values","old_default_value","old_required","old_values_editable_by","operation_type","property_name","required","values_editable_by"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application_id","operation_type","owner","owner_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","number","operation_type","team","title"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","number","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","number","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","owner"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","public_repo","topic","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","public_repo","visibility"]] \ No newline at end of file +[["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actions_cache_id","actions_cache_key","actions_cache_scope","actions_cache_version","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","ghsa_id","oauth_application_id","operation_type","public_repo","recipient","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","ghsa_id","oauth_application_id","operation_type","public_repo","recipient","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","ghsa_id","operation_type","public_repo","recipient"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","ghsa_id","oauth_application_id","operation_type","public_repo","recipient"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_enabled","alert_recipient_user_ids","budget_limit_type","created_at","customer_id","exclude_cost_center_usage","expires_at","oauth_application_id","operation_type","pricing_target_id","pricing_target_type","status","target_amount","target_id","target_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_enabled","budget_limit_type","created_at","customer_id","exclude_cost_center_usage","expires_at","oauth_application_id","operation_type","pricing_target_id","pricing_target_type","status","target_amount","target_type","user_programmatic_access_name","uuid"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_enabled","budget_limit_type","created_at","customer_id","exclude_cost_center_usage","expires_at","oauth_application_id","old_alert_enabled","old_budget_limit_type","old_expires_at","old_pricing_target_id","old_pricing_target_type","old_target_amount","old_target_id","old_target_type","operation_type","pricing_target_id","pricing_target_type","status","target_amount","target_id","target_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","email","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type","resource_id","resource_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","public_repo","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","alert_number","alert_numbers","commit_oid","ref"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","alert_numbers","commit_oid","ref"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","alert_number","alert_numbers","dismissal_approver_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","alert_number","created_at","dismissal_request_id","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","alert_number","alert_numbers"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","origin_repository"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","owner","public_repo","pull_request_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","enablement","operation_type","organization_names"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","devcontainer_path","machine_type","name","oauth_application_id","operation_type","owner","public_repo","pull_request_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","owner","public_repo","pull_request_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","owner","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","devcontainer_path","machine_type","name","oauth_application_id","operation_type","owner","public_repo","pull_request_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application_id","operation_type","owner","owner_type","plan","reason"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner","owner_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","owner","owner_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application_id","operation_type","owner","owner_type","seat_assignment"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","owner","owner_type","seat_assignment"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_value","old_value","operation_type","previous_value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","old_settings","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","excluded_paths","oauth_application_id","operation_type","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","custom_instructions","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","owner","owner_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","old_plan","operation_type","owner","owner_type","plan"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","current_plan","operation_type","owner","owner_type","scheduled_plan"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_config","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_access","oauth_application_id","old_access","operation_type","owner","owner_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","name","operation_type","runner_group_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allowed_values","created_at","default_value","definition_id","description","oauth_application_id","operation_type","property_name","required","user_programmatic_access_name","value_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allowed_values","created_at","default_value","definition_id","oauth_application_id","old_allowed_values","old_default_value","old_required","old_values_editable_by","old_value_type","operation_type","property_name","required","user_programmatic_access_name","values_editable_by","value_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","definition_id","oauth_application_id","operation_type","property_name","public_repo","user_programmatic_access_name","value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","definition_id","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_number","created_at","number","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_number","created_at","number","oauth_application_id","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","access_level","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","number","oauth_application_id","operation_type","public_repo","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","message","oauth_application_id","operation_type","owner","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","message","oauth_application_id","old_message","operation_type","owner","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","integration","name","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","environment_name","integration","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","approvers","approvers_was","can_admins_bypass","environment_id","environment_name","new_value","old_value","prevent_self_review"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","external_id","repository_public","transport_protocol","transport_protocol_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","runner_group_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","active_was","actor_is_agent","actor_is_bot","created_at","events","hook_id","integration","name","oauth_application_id","operation_type","public_repo","sponsors_listing_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","created_at","events","hook_id","integration","name","oauth_application_id","operation_type","public_repo","sponsors_listing_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","created_at","events","hook_id","integration","name","oauth_application","oauth_application_id","operation_type","public_repo","sponsors_listing_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","created_at","events","events_were","hook_id","integration","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type","repository_selection","topic","trigger_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type","repository_selection","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type","repositories_added","repositories_added_names","repository_selection","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type","repositories_removed","repositories_removed_names","repository_selection","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","operation_type","reason","url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_client_id","created_at","integration","operation_type","requester","url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","operation_type","repository_selection"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","events_added","events_removed","events_unchanged","integration","name","operation_type","repository_selection"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_client_id","created_at","integration","manager","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_client_id","created_at","integration","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_client_id","created_at","integration","name","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_client_id","created_at","integration","name","operation_type","requester","requester_id","transfer_from","transfer_from_id","transfer_from_type","transfer_to","transfer_to_id","transfer_to_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_bot","created_at","integration","ip_allow_list_entry","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","number","oauth_application_id","operation_type","owner_type","public_repo","pull_request_id","pull_request_title","pull_request_url","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","event","number","oauth_application_id","operation_type","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","number","oauth_application_id","operation_type","owner_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","color","created_at","description","enabled","issue_type_name","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","color","created_at","description","enabled","issue_type_name","oauth_application_id","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","color","created_at","description","enabled","issue_type_name","oauth_application_id","old_color","old_description","old_enabled","old_issue_type_name","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","marketplace_listing","oauth_application","oauth_application_id","operation_type","primary_category","secondary_category"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","marketplace_listing","operation_type","primary_category","secondary_category"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","integration","marketplace_listing","operation_type","primary_category","secondary_category"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_id","assignment_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","check_response_timeout_minutes","created_at","max_entries_to_build","max_entries_to_merge","merge_method","merging_strategy","min_entries_to_merge","min_entries_to_merge_wait_minutes","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","failover_network_enabled","failover_network_settings_ids","name","network_configuration_id","network_settings_ids","oauth_application_id","operation_type","previous_settings_ids","selected_service","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","network_configuration_id","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","failover_network_enabled","failover_network_settings_ids","name","network_configuration_id","network_settings_ids","oauth_application_id","operation_type","previous_settings_ids","selected_service"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","two_factor_method"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","invitation_id","oauth_application_id","operation_type","permission","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","invitee","inviter","oauth_application_id","operation_type","permission","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","team","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_policy","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","query_phrase"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","end","operation_type","start"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","blocked_user","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","initiated_from","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","email","invitation_id","invitee_email","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","enablement","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","invitation_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","key","oauth_application_id","operation_type","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","application_id","application_name","application_type","created_at","fingerprint","managed_hashed_token","managed_oauth_access_id","managed_oauth_scopes","managed_token_id","managed_token_scopes","oauth_application_id","oauth_credential_type","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","application_id","application_name","application_type","created_at","fingerprint","managed_hashed_token","managed_oauth_access_id","managed_oauth_scopes","managed_token_id","managed_token_scopes","oauth_application_id","oauth_credential_type","operation_type","owner","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","issuer","oauth_application_id","operation_type","sso_url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","issuer","operation_type","sso_url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","manager","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","count","created_at","limit","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_name","operation_type","url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","reason"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","key","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","old_login","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","network_configuration_id","oauth_application_id","operation_type","runner_group_allow_public","runner_group_id","runner_group_name","runner_group_restricted_to_workflows","runner_group_selected_workflow_refs","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","runner_group_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","runner_group_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","runner_group_id","runner_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","runner_group_id","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","push_protection_setting","secret_type","secret_type_display_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","end_date","filename","operation_type","query","requested_at","start_date"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","filename","operation_type","query","requested_at"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","runner_id","runner_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","runner_group_id","runner_group_name","runner_id","runner_name","source_version","target_version"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","policy","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","limit","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","default_workflow_permissions_value","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","user_programmatic_access_name","workflow_permission_can_approve_pr_value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","issuer","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","from_business","oauth_application_id","operation_type","to_business"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_policy","oauth_application_id","old_policy","operation_type","updated_access_policy","updated_allowed_types","updated_github_owned_allowed","updated_patterns","updated_verified_allowed","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_policy","old_policy","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","old_permission","operation_type","permission","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_policy","oauth_application_id","old_policy","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","permission","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","permission"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_repo_runners_policy","oauth_application_id","old_repo_runners_policy","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","definition_id","oauth_application_id","operation_type","property_name","value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","domain_name","oauth_application_id","operation_type","owner","owner_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","organization_role_id","organization_role_name","team","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","operation_type","organization_role_id","owner","owner_id","owner_type","role_permissions","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","old_base_role","old_role_permissions","operation_type","organization_role_id","owner","owner_id","owner_type","role_permissions","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_project_base_role","old_project_base_role","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","ecosystem","operation_type","package","version_count"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","ecosystem","is_republished","operation_type","package","version_count"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","ecosystem","operation_type","package","version"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","ecosystem","is_republished","operation_type","package","version"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","domain","operation_type","owner","owner_type","state"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","repositories","repository_selection","user_programmatic_access_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","repositories","repository_selection","user_programmatic_access_id","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","exempt_administrators","old_token_expiration","operation_type","token_expiration"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","old_token_expiration","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","repository_selection","user_programmatic_access_name","user_programmatic_access_request_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","repositories","repository_selection","user_programmatic_access_id","user_programmatic_access_name","user_programmatic_access_request_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","repository_selection","user_programmatic_access_name","user_programmatic_access_request_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","branch","created_at","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","policy","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","marketplace_listing","oauth_application","oauth_application_id","operation_type","owner","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_project_base_role","old_project_base_role","operation_type","project_id","project_number","public_project"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","project_id","project_kind","project_name","public_project","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","collaborator","collaborator_type","created_at","old_project_role","operation_type","project_id","project_name","project_role","public_project"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","old_name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","project_id","project_kind","project_name","public_project","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","authorized_actors","created_at","name","oauth_application_id","operation_type","policy","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","admin_enforced","allow_deletions_enforcement_level","allow_force_pushes_enforcement_level","authorized_actor_names","created_at","create_protected","dismiss_stale_reviews_on_push","enforcement_level","ignore_approvals_from_contributors","linear_history_requirement_enforcement_level","lock_allows_fetch_and_merge","lock_branch_enforcement_level","merge_queue_enforcement_level","name","oauth_application_id","operation_type","public_repo","pull_request_reviews_enforcement_level","required_approving_review_count","required_deployments_enforcement_level","required_review_thread_resolution_enforcement_level","required_status_checks_enforcement_level","require_code_owner_review","require_last_push_approval","signature_requirement_enforcement_level","strict_required_status_checks_policy","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","dismiss_stale_reviews_on_push","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","authorized_actors","authorized_actors_only","created_at","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","after","before","branch","compliant_pull_request_ids","created_at","deploy_key_fingerprint","oauth_application_id","operation_type","overridden_codes","public_repo","reasons","referrer","rule_suite_id","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","admin_enforced","created_at","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allow_deletions_enforcement_level","created_at","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allow_force_pushes_enforcement_level","created_at","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","ignore_approvals_from_contributors","name","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","linear_history_requirement_enforcement_level","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","lock_allows_fetch_and_merge","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","enforcement_level","lock_branch_enforcement_level","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","merge_queue_enforcement_level","name","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","old_name","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","pull_request_reviews_enforcement_level","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","require_code_owner_review","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","require_last_push_approval","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","required_approving_review_count","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","required_status_checks_enforcement_level","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","signature_requirement_enforcement_level","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","strict_required_status_checks_policy","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","fingerprint","key","oauth_application_id","operation_type","public_repo","read_only","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","explanation","fingerprint","key","oauth_application_id","operation_type","public_repo","read_only","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","fingerprint","key","operation_type","public_repo","read_only","title"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","explanation","fingerprint","key","operation_type","public_repo","read_only","title"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","pull_request_id","pull_request_title","pull_request_url","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","pull_request_id","pull_request_title","pull_request_url","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","agent_session_id","created_at","oauth_application_id","operation_type","public_repo","pull_request_id","pull_request_title","pull_request_url","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","pull_request_id","pull_request_title","pull_request_url","reviewer","reviewer_id","reviewer_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","pull_request_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","comment_id","created_at","oauth_application_id","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","comment_id","created_at","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","comment_id","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","pull_request_id","pull_request_title","pull_request_url","review_id","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","previous_visibility","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","integration","name","oauth_application_id","operation_type","public_repo","repository_selection","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","permission","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","category","created_at","oauth_application_id","operation_type","public_repo","tool","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","branch","category","created_at","operation_type","public_repo","tool"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","languages","oauth_application_id","operation_type","public_repo","query_suite","threat_model","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","request_category","request_method","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","cname","created_at","oauth_application_id","old_cname","operation_type","public_repo","topic","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","old_name","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","default_branch","new_branch","oauth_application_id","old_branch","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","policy","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","limit","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","default_workflow_permissions_value","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","visibility","workflow_permission_can_approve_pr_value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","old_user","operation_type","owner","public_repo","repo_was","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_nwo","oauth_application_id","operation_type","public_repo","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","old_policy","operation_type","policy","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_policy","oauth_application_id","old_policy","operation_type","public_repo","updated_access_policy","updated_allowed_types","updated_github_owned_allowed","updated_patterns","updated_verified_allowed","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_repo_base_role","new_repo_permission","oauth_application_id","old_base_role","old_permission","old_repo_base_role","old_repo_permission","operation_type","public_repo","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","repository_advisory","repository_advisory_comment_id","repository_advisory_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","confidential_comment_count","created_at","operation_type","public_repo","repository_advisory","repository_advisory_id","surface"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","content_type","created_at","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","invitee","inviter","oauth_application_id","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","invitee","inviter","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","count","created_at","limit","operation_type","owner"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","count","created_at","limit","oauth_application_id","operation_type","owner","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","public_repo","ruleset_bypass_actors","ruleset_conditions","ruleset_enforcement","ruleset_id","ruleset_name","ruleset_rules","ruleset_source_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","old_name","operation_type","public_repo","ruleset_bypass_actors_added","ruleset_bypass_actors_deleted","ruleset_bypass_actors_updated","ruleset_conditions_added","ruleset_conditions_deleted","ruleset_conditions_updated","ruleset_enforcement","ruleset_id","ruleset_name","ruleset_old_enforcement","ruleset_old_name","ruleset_rules_added","ruleset_rules_deleted","ruleset_rules_updated","ruleset_source_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","repository_security_configuration_failure_reason","repository_security_configuration_state","security_configuration_id","security_configuration_name","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","alert_id","alert_number","created_at","ghsa_id","oauth_application_id","operation_type","owner","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","alert_id","alert_number","created_at","ghsa_id","oauth_application_id","operation_type","owner","public_repo","topic","user_programmatic_access_name","vulnerability_alert_rule_id","vulnerability_alert_rule_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","alert_id","alert_number","created_at","ghsa_id","oauth_application_id","operation_type","owner","public_repo","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","alert_id","alert_number","created_at","dismiss_comment","dismiss_reason","ghsa_id","oauth_application_id","operation_type","owner","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_agent","actor_is_bot","alert_id","alert_number","created_at","ghsa_id","operation_type","owner","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","reason","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","context","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","owner"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","old_role_permissions","operation_type","owner","role_permissions","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","operation_type","owner","role_permissions","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","base_role","created_at","name","oauth_application_id","old_base_role","old_role_permissions","operation_type","owner","role_permissions","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","sandbox_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","multi_repo","number","publicly_leaked","secret_type","secret_type_display_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","multi_repo","number","publicly_leaked","reason","secret_type","secret_type_display_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","multi_repo","number","oauth_application_id","operation_type","publicly_leaked","public_repo","resolution","secret_type","secret_type_display_name","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","multi_repo","number","publicly_leaked","report_result","secret_type","secret_type_display_name","secret_type_provider"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","number","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","current_validity","multi_repo","number","previous_validity","publicly_leaked","secret_type","secret_type_display_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","alert_number","created_at","number","oauth_application_id","operation_type","public_repo","request_reviewer_comment","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","alert_number","created_at","number","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","alert_number","comment","created_at","number","operation_type","public_repo","reason"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","multi_repo","number","publicly_leaked","push_protection_bypass_reason","request_reviewer","request_reviewer_comment","request_reviewer_id","secret_type","secret_type_display_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","number","oauth_application_id","operation_type","public_repo","request_reviewer_comment","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","number","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","number","operation_type","public_repo","request_reviewer_comment","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","comment","created_at","number","operation_type","public_repo"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","completed_at","created_at","custom_pattern_name","custom_pattern_scope","operation_type","public_repo","secret_types","source","source_slug","started_at","topic","type","type_slug"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","security_configuration_code_scanning","security_configuration_code_scanning_delegated_alert_dismissal","security_configuration_code_security_sku_enabled","security_configuration_created_at","security_configuration_dependabot_alerts","security_configuration_dependabot_delegated_alert_dismissal","security_configuration_dependabot_security_updates","security_configuration_dependency_graph","security_configuration_dependency_graph_autosubmit_action","security_configuration_description","security_configuration_enable_ghas","security_configuration_id","security_configuration_name","security_configuration_private_vulnerability_reporting","security_configuration_secret_protection_sku_enabled","security_configuration_secret_scanning","security_configuration_secret_scanning_delegated_alert_dismissal","security_configuration_secret_scanning_delegated_bypass","security_configuration_secret_scanning_extended_metadata","security_configuration_secret_scanning_generic_secrets","security_configuration_secret_scanning_non_provider_patterns","security_configuration_secret_scanning_push_protection","security_configuration_secret_scanning_validity_checks","security_configuration_updated_at","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","default_for_new_private_repos","default_for_new_public_repos","oauth_application_id","operation_type","security_configuration_name","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","enforcement","oauth_application_id","operation_type","security_configuration_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","security_configuration_code_scanning","security_configuration_code_scanning_delegated_alert_dismissal","security_configuration_code_security_sku_enabled","security_configuration_created_at","security_configuration_dependabot_alerts","security_configuration_dependabot_delegated_alert_dismissal","security_configuration_dependabot_security_updates","security_configuration_dependency_graph","security_configuration_dependency_graph_autosubmit_action","security_configuration_description","security_configuration_enable_ghas","security_configuration_id","security_configuration_name","security_configuration_private_vulnerability_reporting","security_configuration_secret_protection_sku_enabled","security_configuration_secret_scanning","security_configuration_secret_scanning_delegated_alert_dismissal","security_configuration_secret_scanning_delegated_bypass","security_configuration_secret_scanning_extended_metadata","security_configuration_secret_scanning_generic_secrets","security_configuration_secret_scanning_non_provider_patterns","security_configuration_secret_scanning_push_protection","security_configuration_secret_scanning_validity_checks","security_configuration_updated_at","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","sponsors_listing_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","sponsors_listing_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","public_repo","topic","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_bot","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","active","actor_is_bot","created_at","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","sponsors_listing_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","sponsors_listing_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","patreon_email","patreon_username"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","fingerprint","openssh_public_key","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","domain_name","operation_type","owner","owner_type","token_expires_at"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","domain_name","operation_type","owner","owner_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","domain_name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","team","team_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","permission","public_repo","team","team_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","team","team_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","count","created_at","limit","operation_type","team","team_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","team","team_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","name_was","oauth_application_id","operation_type","team","team_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","new_repo_base_role","new_repo_permission","oauth_application_id","old_permission","old_repo_base_role","old_repo_permission","operation_type","permission","public_repo","team","team_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","deleted_at","deleted_by","deleted_by_id","deleted_content","editor","editor_id","operation_type","user_content_id","user_content_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","vulnerability_alert_rule_id","vulnerability_alert_rule_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","topic","vulnerability_alert_rule_id","vulnerability_alert_rule_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","topic","user_programmatic_access_name","vulnerability_alert_rule_id","vulnerability_alert_rule_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","vulnerability_alert_rule_id","vulnerability_alert_rule_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allowed","created_at","event_name","integration_installation_id","operation_type","public_repo","ruleset_ids","violations"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","run_number","topic","user_programmatic_access_name","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","run_number","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","cancelled_at","created_at","event","head_branch","head_sha","name","oauth_application_id","operation_type","public_repo","run_number","started_at","topic","trigger_id","user_programmatic_access_name","workflow_id","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","operation_type","public_repo","run_number","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","completed_at","conclusion","created_at","event","head_branch","head_sha","name","oauth_application_id","operation_type","public_repo","run_attempt","run_number","started_at","topic","trigger_id","user_programmatic_access_name","workflow_id","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","event","head_branch","head_sha","name","operation_type","public_repo","run_number","started_at","trigger_id","workflow_id","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","completed_at","created_at","operation_type","started_at"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","started_at"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","event","head_branch","head_sha","name","oauth_application_id","operation_type","public_repo","run_number","started_at","topic","trigger_id","user_programmatic_access_name","workflow_id","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","user_programmatic_access_name","workflow_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","workflow_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","calling_workflow_refs","calling_workflow_shas","created_at","environment_name","imposer_repo","is_hosted_runner","job_name","job_workflow_ref","operation_type","runner_group_id","runner_group_name","runner_id","runner_labels","runner_name","runner_owner_type","secrets_passed","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","public_repo","run_number","user_programmatic_access_name","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","check_run_id","created_at","event","head_branch","head_sha","name","oauth_application_id","operation_type","public_repo","rerun_type","run_attempt","run_number","started_at","trigger_id","user_programmatic_access_name","workflow_id","workflow_run_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","policy"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","limit","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","default_workflow_permissions_value","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","workflow_permission_can_approve_pr_value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","gist","gist_id","oauth_application_id","operation_type","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","fingerprint","key","oauth_application_id","operation_type","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","explanation","fingerprint","key","oauth_application_id","operation_type","title","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","key","name","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","key","name","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","bullets","created_at","description","has_free_trial","marketplace_listing","marketplace_listing_plan","monthly_price_in_cents","operation_type","yearly_price_in_cents"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_id","server_id","server_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_description","allowlist_id","allowlist_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_id","allowlist_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_id","entries","server_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","allowlist_id","allowlist_name","old_allowlist_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","block_local_servers","mcp_policy","old_block_local_servers","old_mcp_policy"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","oauth_application_id","oauth_application_name","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","explanation","integration","oauth_application_id","oauth_application_name","operation_type","topic","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","explanation","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","explanation","integration","oauth_application_id","oauth_application_name","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","oauth_application_name","operation_type","topic"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","nickname","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","repository_selection","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","explanation","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","explanation","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","pat_field_changed","repository_selection","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","email","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","email","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","user_programmatic_access_name","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","email","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","passkey_nickname"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","integration","key","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","old_login","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","emoji","limited_availability","message","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","emoji","limited_availability","message","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","query_string","rate_limit_remaining","request_body","request_method","route","status_code","url_path"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","audit_log_stream_id","audit_log_stream_result","audit_log_stream_sink_details","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","audit_log_stream_id","audit_log_stream_sink","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","audit_log_stream_id","audit_log_stream_sink","audit_log_stream_sink_details","created_at","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","audit_log_stream_enabled","audit_log_stream_id","audit_log_stream_sink","audit_log_stream_sink_details","created_at","new_azure_blob_container","new_datadog_site","new_event_hub_instance","new_gc_bucket","new_s3_arn_role","new_s3_bucket","new_splunk_domain","new_splunk_port","oauth_application_id","old_azure_blob_container","old_datadog_site","old_event_hub_instance","old_gc_bucket","old_s3_arn_role","old_s3_bucket","old_splunk_domain","old_splunk_port","operation_type","reason","secrets_updated","ssl_verify"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","two_factor_method"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","organization_upgrade"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","new_policy","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","email","invitation_id","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","email","invitation_id","name","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type","seats_plan_type","seats_plan_type_was"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","issuer","name","operation_type","sso_url"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","count","created_at","limit","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type","reason"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","operation_type","two_factor_method"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","issuer","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","new_policy","oauth_application_id","old_policy","operation_type","updated_access_policy","updated_allowed_types","updated_github_owned_allowed","updated_patterns","updated_verified_allowed"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","old_permission","operation_type","permission"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","new_emu_repo_runners_policy","old_emu_repo_runners_policy","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","permission","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","oauth_application_id","operation_type","permission"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","name","new_repo_runners_policy","oauth_application_id","old_repo_runners_policy","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","new_value","old_value","operation_type","remove_existing_unaffiliated_users","users_removed_count"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","current_value","operation_type","previous_value"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","enterprise_role_id","enterprise_role_name","oauth_application_id","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","base_role","created_at","name","operation_type","owner","role_permissions"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","base_role","created_at","name","old_role_permissions","operation_type","owner","role_permissions"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","network_configuration_id","oauth_application_id","operation_type","runner_group_allow_public","runner_group_id","runner_group_name","runner_group_restricted_to_workflows","runner_group_selected_workflow_refs"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","runner_group_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","oauth_application_id","operation_type","runner_group_id","runner_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","enterprise_team","enterprise_team_id","oauth_application_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","enterprise_team","enterprise_team_id","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","enterprise_team","enterprise_team_id","name","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","external_group","external_group_id","oauth_application_id","operation_type","scim_group_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","external_group","external_group_id","oauth_application_id","operation_type","scim_group_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","external_group","external_group_id","oauth_application_id","operation_type","scim_group_id","team","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","api_request_body","created_at","large_group_warning","message","oauth_application_id","operation_type","query_string","request_method","route","scim_group_id","status_code","url_path","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","api_request_body","created_at","large_group_warning","oauth_application_id","operation_type","query_string","request_method","route","scim_group_id","status_code","url_path"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application_id","operation_type","scim_user_id"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","api_request_body","created_at","message","oauth_application_id","operation_type","query_string","request_method","route","scim_user_id","status_code","url_path","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","api_request_body","created_at","oauth_application_id","operation_type","query_string","request_method","route","scim_user_id","status_code","url_path"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","allowed_values","created_at","default_value","definition_id","description","oauth_application_id","operation_type","property_name","required","value_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","allowed_values","created_at","default_value","definition_id","old_allowed_values","old_default_value","old_required","old_values_editable_by","operation_type","property_name","required","values_editable_by"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","oauth_application_id","operation_type","owner","owner_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","number","operation_type","team","title"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","number","operation_type"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","number","operation_type","team"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_agent","actor_is_bot","created_at","oauth_application","oauth_application_id","operation_type","user_programmatic_access_name"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","owner"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","created_at","operation_type","public_repo","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","visibility"],["@timestamp","_document_id","action","actor","actor_id","business","business_id","hashed_token","org","org_id","programmatic_access_type","repo","repo_id","repository","repository_id","request_access_security_header","request_id","token_id","token_scopes","user","user_id","user_agent","actor_is_bot","created_at","operation_type","public_repo","topic","visibility"]] \ No newline at end of file diff --git a/src/audit-logs/data/version-index.json b/src/audit-logs/data/version-index.json index 6bdbcdd62f2f..c97b12622d41 100644 --- a/src/audit-logs/data/version-index.json +++ b/src/audit-logs/data/version-index.json @@ -1 +1 @@ -{"fpt":{"organization":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"user":[0,1,812,813,814,2,7,10,11,12,13,14,20,21,22,23,24,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,64,71,73,74,75,76,77,78,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,111,112,113,114,115,116,117,118,119,120,121,835,836,837,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,142,143,144,145,146,147,148,149,150,151,152,164,165,166,167,178,179,180,181,182,842,843,844,845,183,184,846,185,847,848,186,849,850,851,852,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,219,858,859,860,223,224,226,227,228,229,323,369,370,371,372,376,377,378,379,380,382,383,384,397,398,399,430,431,432,861,862,433,434,435,436,439,863,864,865,866,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,498,507,508,509,510,511,512,513,531,532,533,534,535,536,537,538,541,546,554,555,556,557,558,559,560,561,562,563,564,565,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,588,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,632,633,634,635,636,637,645,646,647,869,870,871,872,873,874,875,876,877,878,879,880,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,762,763,764,765,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,797,798,799,801,804,805,806,807,809,811]},"ghec":{"enterprise":[0,1,2,3,4,5,6,962,7,963,964,965,966,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,815,816,817,967,968,818,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,819,820,1046,821,1047,822,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,823,824,825,826,827,828,829,830,831,832,833,834,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,1094,1095,55,56,57,58,59,60,61,62,63,1096,65,1097,68,69,70,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,1098,1099,1100,1101,1102,109,110,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,111,112,113,114,115,116,117,118,119,120,121,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,1143,1144,1145,155,156,1146,1147,1148,157,158,159,1149,160,161,162,163,168,169,170,174,175,176,177,178,179,180,181,182,183,184,846,185,847,848,186,849,850,851,852,187,188,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,236,237,238,239,240,241,242,245,246,247,248,249,250,251,252,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,274,275,276,277,278,279,280,281,284,285,286,287,289,290,291,292,293,294,295,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,322,323,324,325,326,327,328,329,330,331,334,335,336,337,338,339,340,341,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,389,390,391,392,394,395,396,397,398,399,400,402,403,1150,1151,1152,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,1153,439,440,441,1154,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,493,494,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,1155,1156,1157,1158,759,760,761,766,767,768,769,770,771,772,773,777,778,779,780,781,782,783,784,785,786,787,788,789,925,926,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"organization":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"user":[0,1,812,813,814,2,7,10,11,12,13,14,20,21,22,23,24,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,64,71,73,74,75,76,77,78,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,111,112,113,114,115,116,117,118,119,120,121,835,836,837,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,142,143,144,145,146,147,148,149,150,151,152,164,165,166,167,178,179,180,181,182,842,843,844,845,183,184,846,185,847,848,186,849,850,851,852,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,219,858,859,860,223,224,226,227,228,229,323,369,370,371,372,376,377,378,379,380,382,383,384,397,398,399,430,431,432,861,862,433,434,435,436,439,863,864,865,866,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,498,507,508,509,510,511,512,513,531,532,533,534,535,536,537,538,541,546,554,555,556,557,558,559,560,561,562,563,564,565,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,588,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,632,633,634,635,636,637,645,646,647,869,870,871,872,873,874,875,876,877,878,879,880,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,762,763,764,765,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,797,798,799,801,804,805,806,807,809,811]},"ghes-3.17":{"enterprise":[0,1,812,813,814,2,962,7,963,964,965,966,13,14,22,24,815,816,968,969,970,971,972,973,974,977,978,979,980,987,988,990,994,995,996,1001,1008,1009,1010,1012,1014,1015,1017,1019,1020,1031,1032,1033,819,1047,1048,1051,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1068,1069,1070,1071,1072,1073,1074,1075,1076,1079,823,824,825,826,829,830,831,832,833,834,1080,1085,1086,1088,1089,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,1159,1160,76,77,78,79,80,81,82,83,84,85,86,87,88,94,95,96,97,98,99,100,101,102,1161,1162,1163,1164,106,107,108,1098,1099,1100,1101,1102,1103,1104,1110,1111,1113,1114,1115,1116,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,111,112,113,114,115,116,117,118,119,120,121,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,835,836,837,122,123,124,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,1145,155,156,1148,157,158,159,178,179,180,181,182,842,843,844,845,183,184,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,1165,219,1166,858,859,860,220,221,223,224,225,226,227,228,229,230,231,232,1167,238,239,240,241,242,247,248,249,250,255,256,265,266,267,268,269,270,271,272,274,281,284,286,287,289,290,291,292,294,295,297,298,299,300,301,302,303,310,1168,317,320,323,324,325,326,327,331,334,335,337,338,339,340,344,345,346,347,348,349,350,351,354,355,356,357,358,359,360,361,362,363,364,365,366,369,370,371,372,373,374,375,378,379,380,381,382,383,384,385,1169,389,391,394,397,398,399,402,403,409,410,411,412,426,427,428,429,430,431,432,861,862,433,434,435,436,437,438,1153,439,440,441,1154,863,864,865,866,442,443,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541,542,543,544,545,546,547,548,549,550,551,1170,554,555,556,557,558,559,560,561,562,563,564,565,1171,566,1172,1173,1174,1175,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,1176,588,589,590,591,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,620,621,632,633,634,635,636,637,645,646,647,648,649,650,651,652,653,654,655,656,657,662,663,664,665,666,667,668,669,670,671,672,673,680,681,682,683,684,685,686,688,689,690,691,692,693,696,697,702,705,707,708,710,715,716,717,718,719,720,723,724,725,726,727,728,729,730,731,876,877,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,754,755,756,757,759,760,761,762,763,764,765,883,884,885,886,887,888,766,767,769,770,771,772,773,1177,1178,1179,780,782,783,784,785,786,788,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,1180,1181,1182,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,1183,931,932,933,934,935,1184,936,1185,937,938,939,940,1186,941,1187,1188,942,943,944,945,946,1189,947,948,949,950,951,952,953,954,955,956,957,958,1190,959,960,961,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"organization":[0,1,2,3,4,5,6,7,8,9,13,14,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,1191,1192,1193,69,70,1159,1160,76,77,78,79,80,81,82,83,84,85,86,87,88,94,95,96,97,98,99,100,101,102,103,104,105,1161,1162,1163,1164,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,168,169,170,174,175,176,177,178,179,180,181,182,183,184,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,247,248,249,250,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,369,370,371,372,373,374,375,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,394,396,397,398,399,400,401,402,403,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,624,625,628,629,632,633,634,635,636,637,638,639,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,660,661,662,663,664,665,666,667,668,669,670,671,672,673,676,677,678,680,681,682,683,684,685,686,688,689,690,691,692,693,694,695,696,697,698,699,700,702,704,705,706,707,708,710,711,712,713,714,715,716,717,718,719,720,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,769,770,771,772,773,1177,1178,1179,774,775,776,780,782,783,784,785,786,787,788,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"user":[0,1,812,813,814,2,7,13,14,22,24,815,823,824,825,826,829,830,831,832,833,834,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,1159,1160,76,77,78,85,86,87,88,94,95,96,97,98,99,100,101,102,111,112,113,114,115,116,117,118,119,120,121,835,836,837,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,142,143,144,145,146,147,148,149,150,151,152,178,179,180,181,182,842,843,844,845,183,184,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,219,858,859,860,223,224,226,227,228,229,323,369,370,371,372,378,379,380,382,383,384,397,398,399,430,431,432,861,862,433,434,435,436,439,863,864,865,866,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,498,507,508,509,510,511,512,513,531,532,533,534,535,536,537,538,541,546,554,555,556,557,558,559,560,561,562,563,564,565,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,588,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,632,633,634,635,636,637,645,646,647,876,877,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,762,763,764,765,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,798,799,801,804,805,806,807,809,811]},"ghes-3.18":{"enterprise":[0,1,812,813,814,2,962,7,963,964,965,966,13,14,22,24,815,816,968,969,970,971,972,973,974,977,978,979,980,987,988,990,994,995,996,1001,1008,1009,1010,1012,1014,1015,1017,1019,1020,1031,1032,1033,819,1047,1048,1051,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1068,1069,1070,1071,1072,1073,1074,1075,1076,1079,823,824,825,826,829,830,831,832,833,834,1080,1085,1086,1088,1089,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,93,94,95,96,97,98,99,100,101,102,1161,1162,1163,1164,106,107,108,1098,1099,1100,1101,1102,1103,1104,1110,1111,1113,1114,1115,1116,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,111,112,113,114,115,116,117,118,119,120,121,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,835,836,837,122,123,124,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,1145,155,156,1148,157,158,159,178,179,180,181,182,842,843,844,845,183,184,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,1165,219,1166,858,859,860,220,221,223,224,225,226,227,228,229,230,231,232,1167,238,239,240,241,242,247,248,249,250,255,256,265,266,267,268,269,270,271,272,274,281,284,286,287,289,290,291,292,294,295,297,298,299,300,301,302,303,310,1168,317,320,323,324,325,326,327,331,334,335,337,338,339,340,344,345,346,347,348,349,350,351,354,355,356,357,358,359,360,361,362,363,364,365,366,369,370,371,372,373,374,375,378,379,380,381,382,383,384,385,1169,389,391,394,397,398,399,402,403,409,410,411,412,426,427,428,429,430,431,432,861,862,433,434,435,436,437,438,1153,439,440,441,1154,863,864,865,866,442,443,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541,542,543,544,545,546,547,548,549,550,551,1170,554,555,556,557,558,559,560,561,562,563,564,565,1171,566,1172,1173,1174,1175,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,1176,588,589,590,591,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,620,621,622,623,632,633,634,635,636,637,645,646,647,648,649,650,651,652,653,654,655,656,657,662,663,664,665,666,667,668,669,670,671,672,673,680,681,682,683,684,685,686,688,689,690,691,692,693,696,697,702,705,707,708,710,715,716,717,718,719,720,723,724,725,726,727,728,729,730,731,876,877,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,754,755,756,757,759,760,761,762,763,764,765,883,884,885,886,887,888,766,767,769,770,771,772,773,1177,1178,1179,780,782,783,784,785,786,788,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,1180,1181,1182,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,1183,931,932,933,934,935,1184,936,1185,937,938,939,940,1186,941,1187,1188,942,943,944,945,946,1189,947,948,949,950,951,952,953,954,955,956,957,958,1190,959,960,961,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"organization":[0,1,2,3,4,5,6,7,8,9,13,14,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,1191,1192,1193,69,70,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,93,94,95,96,97,98,99,100,101,102,103,104,105,1161,1162,1163,1164,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,247,248,249,250,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,369,370,371,372,373,374,375,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,394,396,397,398,399,400,401,402,403,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,628,629,632,633,634,635,636,637,638,639,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,660,661,662,663,664,665,666,667,668,669,670,671,672,673,676,677,678,680,681,682,683,684,685,686,688,689,690,691,692,693,694,695,696,697,698,699,700,702,704,705,706,707,708,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,769,770,771,772,773,1177,1178,1179,774,775,776,780,782,783,784,785,786,787,788,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"user":[0,1,812,813,814,2,7,13,14,22,24,815,823,824,825,826,829,830,831,832,833,834,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,73,74,75,76,77,78,85,86,87,88,94,95,96,97,98,99,100,101,102,111,112,113,114,115,116,117,118,119,120,121,835,836,837,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,142,143,144,145,146,147,148,149,150,151,152,178,179,180,181,182,842,843,844,845,183,184,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,219,858,859,860,223,224,226,227,228,229,323,369,370,371,372,378,379,380,382,383,384,397,398,399,430,431,432,861,862,433,434,435,436,439,863,864,865,866,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,498,507,508,509,510,511,512,513,531,532,533,534,535,536,537,538,541,546,554,555,556,557,558,559,560,561,562,563,564,565,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,588,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,632,633,634,635,636,637,645,646,647,876,877,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,762,763,764,765,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,798,799,801,804,805,806,807,809,811]},"ghes-3.19":{"enterprise":[0,1,812,813,814,2,962,7,963,964,965,966,10,11,12,13,14,20,21,22,24,815,816,968,969,970,971,972,973,974,977,978,979,980,987,988,990,994,995,996,1001,1008,1009,1010,1012,1014,1015,1017,1019,1020,1031,1032,1033,819,1047,1048,1051,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,823,824,825,826,827,828,829,830,831,832,833,834,1080,1085,1086,1088,1089,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,93,94,95,96,97,98,99,100,101,102,1161,1162,1163,1164,106,107,108,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1113,1114,1115,1116,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,111,112,113,114,115,116,117,118,119,120,121,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,835,836,837,122,123,124,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,1145,155,156,1148,157,158,159,164,165,166,167,178,179,180,181,182,842,843,844,845,183,184,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,1165,219,1166,858,859,860,220,221,223,224,225,226,227,228,229,230,231,232,1167,238,239,240,241,242,247,248,249,250,255,256,265,266,267,268,269,270,271,272,274,281,284,286,287,289,290,291,292,294,295,297,298,299,300,301,302,303,310,1168,317,320,323,324,325,326,327,331,334,335,337,338,339,340,344,345,346,347,348,349,350,351,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,1169,389,391,394,397,398,399,402,403,1150,1151,1152,404,405,409,410,411,412,426,427,428,429,430,431,432,861,862,433,434,435,436,437,438,1153,439,440,441,1154,863,864,865,866,442,443,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541,542,543,544,545,546,547,548,549,550,551,1170,554,555,556,557,558,559,560,561,562,563,564,565,1171,566,1172,1173,1174,1175,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,1176,588,589,590,591,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,620,621,622,623,632,633,634,635,636,637,645,646,647,648,649,650,651,652,653,654,655,656,657,662,663,664,665,666,667,668,669,670,671,672,673,680,681,682,683,684,685,686,688,689,690,691,692,693,696,697,701,702,705,707,708,709,710,715,716,717,718,719,720,723,724,725,726,727,728,729,730,731,876,877,878,879,880,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,754,755,756,757,759,760,761,762,763,764,765,883,884,885,886,887,888,766,767,768,769,770,771,772,773,1177,1178,1179,780,781,782,783,784,785,786,788,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,789,1180,1181,1182,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,1183,931,932,933,934,935,1184,936,1185,937,938,939,940,1186,941,1187,1188,942,943,944,945,946,1189,947,948,949,950,951,952,953,954,955,956,957,958,1190,959,960,961,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"organization":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,1191,1192,1193,69,70,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,93,94,95,96,97,98,99,100,101,102,103,104,105,1161,1162,1163,1164,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,247,248,249,250,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,628,629,632,633,634,635,636,637,638,639,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,660,661,662,663,664,665,666,667,668,669,670,671,672,673,676,677,678,680,681,682,683,684,685,686,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,1177,1178,1179,774,775,776,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"user":[0,1,812,813,814,2,7,10,11,12,13,14,20,21,22,24,815,823,824,825,826,827,828,829,830,831,832,833,834,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,73,74,75,76,77,78,85,86,87,88,94,95,96,97,98,99,100,101,102,111,112,113,114,115,116,117,118,119,120,121,835,836,837,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,142,143,144,145,146,147,148,149,150,151,152,164,165,166,167,178,179,180,181,182,842,843,844,845,183,184,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,219,858,859,860,223,224,226,227,228,229,323,369,370,371,372,376,377,378,379,380,382,383,384,397,398,399,430,431,432,861,862,433,434,435,436,439,863,864,865,866,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,498,507,508,509,510,511,512,513,531,532,533,534,535,536,537,538,541,546,554,555,556,557,558,559,560,561,562,563,564,565,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,588,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,632,633,634,635,636,637,645,646,647,876,877,878,879,880,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,762,763,764,765,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,798,799,801,804,805,806,807,809,811]},"ghes-3.20":{"enterprise":[0,1,812,813,814,2,962,7,963,964,965,966,10,11,12,13,14,20,21,22,23,24,815,816,968,969,970,971,972,973,974,977,978,979,980,987,988,990,994,995,996,1001,1008,1009,1010,1012,1014,1015,1017,1019,1020,1031,1032,1033,819,1047,1048,1051,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,823,824,825,826,827,828,829,830,831,832,833,834,1080,1085,1086,1088,1089,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,93,94,95,96,97,98,99,100,101,102,1161,1162,1163,1164,106,107,108,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1113,1114,1115,1116,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,111,112,113,114,115,116,117,118,119,120,121,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,835,836,837,122,123,124,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,1145,155,156,1148,157,158,159,164,165,166,167,178,179,180,181,182,842,843,844,845,183,184,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,1165,219,1166,858,859,860,220,221,223,224,225,226,227,228,229,230,231,232,1167,238,239,240,241,242,247,248,249,250,255,256,265,266,267,268,269,270,271,272,274,281,284,286,287,289,290,291,292,294,295,297,298,299,300,301,302,303,310,1168,317,320,323,324,325,326,327,331,334,335,337,338,339,340,344,345,346,347,348,349,350,351,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,1169,389,391,394,397,398,399,402,403,1150,1151,1152,404,405,409,410,411,412,426,427,428,429,430,431,432,861,862,433,434,435,436,437,438,1153,439,440,441,1154,863,864,865,866,442,443,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541,542,543,544,545,546,547,548,549,550,551,1170,554,555,556,557,558,559,560,561,562,563,564,565,1171,566,1172,1173,1174,1175,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,1176,588,589,590,591,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,620,621,622,623,632,633,634,635,636,637,645,646,647,648,649,650,651,652,653,654,655,656,657,662,663,664,665,666,667,668,669,670,671,672,673,680,681,682,683,684,685,686,688,689,690,691,692,693,696,697,701,702,705,707,708,709,710,715,716,717,718,719,720,723,724,725,726,727,728,729,730,731,876,877,878,879,880,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,754,755,756,757,759,760,761,762,763,764,765,883,884,885,886,887,888,766,767,768,769,770,771,772,773,1177,1178,1179,780,781,782,783,784,785,786,788,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,789,1180,1181,1182,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,1183,931,932,933,934,935,1184,936,1185,937,938,939,940,1186,941,1187,1188,942,943,944,945,946,1189,947,948,949,950,951,952,953,954,955,956,957,958,1190,959,960,961,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"organization":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,69,70,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,93,94,95,96,97,98,99,100,101,102,103,104,105,1161,1162,1163,1164,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,247,248,249,250,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,628,629,632,633,634,635,636,637,638,639,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,660,661,662,663,664,665,666,667,668,669,670,671,672,673,676,677,678,680,681,682,683,684,685,686,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,1177,1178,1179,774,775,776,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"user":[0,1,812,813,814,2,7,10,11,12,13,14,20,21,22,23,24,815,823,824,825,826,827,828,829,830,831,832,833,834,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,73,74,75,76,77,78,85,86,87,88,94,95,96,97,98,99,100,101,102,111,112,113,114,115,116,117,118,119,120,121,835,836,837,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,142,143,144,145,146,147,148,149,150,151,152,164,165,166,167,178,179,180,181,182,842,843,844,845,183,184,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,219,858,859,860,223,224,226,227,228,229,323,369,370,371,372,376,377,378,379,380,382,383,384,397,398,399,430,431,432,861,862,433,434,435,436,439,863,864,865,866,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,498,507,508,509,510,511,512,513,531,532,533,534,535,536,537,538,541,546,554,555,556,557,558,559,560,561,562,563,564,565,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,588,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,632,633,634,635,636,637,645,646,647,876,877,878,879,880,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,762,763,764,765,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,798,799,801,804,805,806,807,809,811]},"ghes-3.21":{"enterprise":[0,1,812,813,814,2,962,7,963,964,965,966,10,11,12,13,14,20,21,22,23,24,815,816,817,968,818,969,970,971,972,973,974,977,978,979,980,987,988,990,991,992,994,995,996,1001,1008,1009,1010,1012,1014,1015,1017,1019,1020,1022,1023,1031,1032,1033,1034,1035,1036,819,820,821,1047,822,1048,1051,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,823,824,825,826,827,828,829,830,831,832,833,834,1080,1085,1086,1088,1089,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,71,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,106,107,108,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1113,1114,1115,1116,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,111,112,113,114,115,116,117,118,119,120,121,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,835,836,837,122,123,124,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,1145,155,156,1148,157,158,159,164,165,166,167,178,179,180,181,182,842,843,844,845,183,184,846,185,847,848,186,849,850,851,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,1165,219,1166,858,859,860,220,221,223,224,225,226,227,228,229,230,231,232,1167,238,239,240,241,242,247,248,249,250,255,256,265,266,267,268,269,270,271,272,274,281,284,286,287,289,290,291,292,294,295,297,298,299,300,301,302,303,304,310,1168,317,320,323,324,325,326,327,331,334,335,337,338,339,340,344,345,346,347,348,349,350,351,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,1169,389,391,394,397,398,399,402,403,1150,1151,1152,404,405,409,410,411,412,426,427,428,429,430,431,432,861,862,433,434,435,436,437,438,1153,439,440,441,1154,863,864,865,866,442,443,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541,542,543,544,545,546,547,548,549,550,551,1170,554,555,556,557,558,559,560,561,562,563,564,565,1171,566,1172,1173,1174,1175,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,1176,588,589,590,591,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,620,621,622,623,632,633,634,635,636,637,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,662,663,664,665,666,667,668,669,670,671,672,673,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,696,697,701,702,705,707,708,709,710,715,716,717,718,719,720,723,724,725,726,727,728,729,730,731,876,877,878,879,880,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,754,755,756,757,759,760,761,762,763,764,765,883,884,885,886,887,888,766,767,768,769,770,771,772,773,777,778,779,780,781,782,783,784,785,786,788,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,789,1180,1181,1182,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,1183,931,932,933,934,935,1184,936,1185,937,938,939,940,1186,941,1187,1188,942,943,944,945,946,1189,947,948,949,950,951,952,953,954,955,956,957,958,1190,959,960,961,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"organization":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"user":[0,1,812,813,814,2,7,10,11,12,13,14,20,21,22,23,24,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,71,73,74,75,76,77,78,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,111,112,113,114,115,116,117,118,119,120,121,835,836,837,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,142,143,144,145,146,147,148,149,150,151,152,164,165,166,167,178,179,180,181,182,842,843,844,845,183,184,846,185,847,848,186,849,850,851,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,219,858,859,860,223,224,226,227,228,229,323,369,370,371,372,376,377,378,379,380,382,383,384,397,398,399,430,431,432,861,862,433,434,435,436,439,863,864,865,866,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,498,507,508,509,510,511,512,513,531,532,533,534,535,536,537,538,541,546,554,555,556,557,558,559,560,561,562,563,564,565,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,588,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,632,633,634,635,636,637,645,646,647,876,877,878,879,880,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,762,763,764,765,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,798,799,801,804,805,806,807,809,811]},"ghes-3.22":{"enterprise":[0,1,812,813,814,2,1194,962,7,963,964,965,966,10,11,12,13,14,20,21,22,23,24,815,816,817,968,818,969,970,971,972,973,974,977,978,979,980,987,988,990,991,992,993,994,995,996,1001,1008,1009,1010,1012,1014,1015,1017,1019,1020,1022,1023,1031,1032,1033,1034,1035,1036,819,820,821,1047,822,1048,1051,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,823,824,825,826,827,828,829,830,831,832,833,834,1080,1085,1086,1088,1089,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,64,71,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,106,107,108,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1113,1114,1115,1116,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,111,112,113,114,115,116,117,118,119,120,121,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,835,836,837,122,123,124,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,1145,155,156,1148,157,158,159,164,165,166,167,178,179,180,181,182,842,843,844,845,183,184,846,185,847,848,186,849,850,851,852,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,1165,219,1166,858,859,860,220,221,223,224,225,226,227,228,229,230,231,232,1167,238,239,240,241,242,247,248,249,250,255,256,265,266,267,268,269,270,271,272,274,281,284,286,287,289,290,291,292,294,295,297,298,299,300,301,302,303,304,310,1168,317,320,323,324,325,326,327,331,334,335,337,338,339,340,344,345,346,347,348,349,350,351,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,1169,389,391,394,397,398,399,402,403,1150,1151,1152,404,405,409,410,411,412,426,427,428,429,430,431,432,861,862,433,434,435,436,437,438,1153,439,440,441,1154,863,864,865,866,442,443,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,541,542,543,544,545,546,547,548,549,550,551,1170,554,555,556,557,558,559,560,561,562,563,564,565,1171,566,1172,1173,1174,1175,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,1176,588,589,590,591,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,620,621,622,623,632,633,634,635,636,637,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,662,663,664,665,666,667,668,669,670,671,672,673,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,696,697,701,702,705,707,708,709,710,715,716,717,718,719,720,723,724,725,726,727,728,729,730,731,876,877,878,879,880,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,754,755,756,757,759,760,761,762,763,764,765,883,884,885,886,887,888,766,767,768,769,770,771,772,773,777,778,779,780,781,782,783,784,785,786,788,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,789,1180,1181,1182,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,1183,931,932,933,934,935,1184,936,1185,937,938,939,940,1186,941,1187,1188,942,943,944,945,946,1189,947,948,949,950,951,952,953,954,955,956,957,958,1190,959,960,961,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"organization":[0,1,2,1194,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,798,799,800,801,802,803,804,805,806,807,808,809,810,811],"user":[0,1,812,813,814,2,1194,7,10,11,12,13,14,20,21,22,23,24,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,64,71,73,74,75,76,77,78,85,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,102,111,112,113,114,115,116,117,118,119,120,121,835,836,837,838,839,125,126,127,840,841,128,129,130,131,132,133,134,135,136,137,138,139,142,143,144,145,146,147,148,149,150,151,152,164,165,166,167,178,179,180,181,182,842,843,844,845,183,184,846,185,847,848,186,849,850,851,852,199,200,201,202,203,204,205,206,853,854,855,856,857,212,213,214,215,216,217,218,219,858,859,860,223,224,226,227,228,229,323,369,370,371,372,376,377,378,379,380,382,383,384,397,398,399,430,431,432,861,862,433,434,435,436,439,863,864,865,866,444,445,446,867,451,452,453,457,458,459,460,461,462,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,498,507,508,509,510,511,512,513,531,532,533,534,535,536,537,538,541,546,554,555,556,557,558,559,560,561,562,563,564,565,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,588,592,593,594,595,596,597,598,599,600,868,601,602,603,604,605,606,607,608,609,610,611,632,633,634,635,636,637,645,646,647,876,877,878,879,880,732,733,734,736,737,738,739,740,741,742,743,744,745,746,747,748,881,749,750,751,752,882,753,762,763,764,765,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,798,799,801,804,805,806,807,809,811]}} \ No newline at end of file +{"fpt":{"organization":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830],"user":[0,1,831,832,833,2,7,10,11,12,13,14,20,21,22,23,24,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,64,65,72,74,75,76,77,78,79,86,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119,120,121,122,855,856,857,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,143,144,145,146,147,148,149,150,151,152,153,154,166,167,168,169,180,181,182,183,184,862,863,864,865,185,186,866,187,867,868,188,869,870,871,872,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,221,222,878,879,880,226,227,229,230,231,232,326,372,373,374,375,379,380,381,382,383,385,386,387,400,401,402,433,434,435,881,882,436,437,438,439,442,883,884,885,886,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,501,510,511,512,513,514,515,516,534,535,536,537,538,539,540,541,547,552,560,561,562,563,564,565,566,567,568,569,570,571,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,594,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,640,641,642,643,644,645,653,654,655,709,710,711,712,713,714,715,889,890,891,892,893,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,779,780,781,782,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,814,815,816,818,823,824,825,826,828,830]},"ghec":{"enterprise":[0,1,2,3,4,5,6,975,7,976,977,978,979,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,834,835,836,980,837,981,838,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,839,840,1061,841,1062,842,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,843,844,845,846,847,848,849,850,851,852,853,854,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,1109,1110,55,56,57,58,59,60,61,62,63,1111,66,1112,69,70,71,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,1113,1114,1115,1116,1117,110,111,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,112,113,114,115,116,117,118,119,120,121,122,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,1158,1159,1160,157,158,1161,1162,1163,159,160,161,1164,162,163,164,165,170,171,172,176,177,178,179,180,181,182,183,184,185,186,866,187,867,868,188,869,870,871,872,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,226,227,228,229,230,231,232,233,234,235,239,240,241,242,243,244,245,248,249,250,251,252,253,254,255,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,277,278,279,280,281,282,283,284,287,288,289,290,292,293,294,295,296,297,298,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,325,326,327,328,329,330,331,332,333,334,337,338,339,340,341,342,343,344,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,392,393,394,395,397,398,399,400,401,402,403,405,406,1165,1166,1167,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,1168,442,443,444,1169,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,496,497,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,1170,1171,1172,1173,776,777,778,783,784,785,786,787,788,789,790,794,795,796,797,798,799,800,801,802,803,804,805,806,938,939,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830],"organization":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830],"user":[0,1,831,832,833,2,7,10,11,12,13,14,20,21,22,23,24,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,64,65,72,74,75,76,77,78,79,86,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119,120,121,122,855,856,857,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,143,144,145,146,147,148,149,150,151,152,153,154,166,167,168,169,180,181,182,183,184,862,863,864,865,185,186,866,187,867,868,188,869,870,871,872,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,221,222,878,879,880,226,227,229,230,231,232,326,372,373,374,375,379,380,381,382,383,385,386,387,400,401,402,433,434,435,881,882,436,437,438,439,442,883,884,885,886,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,501,510,511,512,513,514,515,516,534,535,536,537,538,539,540,541,547,552,560,561,562,563,564,565,566,567,568,569,570,571,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,594,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,640,641,642,643,644,645,653,654,655,709,710,711,712,713,714,715,889,890,891,892,893,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,779,780,781,782,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,814,815,816,818,823,824,825,826,828,830]},"ghes-3.17":{"enterprise":[0,1,831,832,833,2,975,7,976,977,978,979,13,14,22,24,834,835,981,982,983,984,985,986,987,990,991,992,993,1000,1001,1003,1007,1008,1009,1014,1021,1022,1023,1025,1027,1028,1031,1033,1034,1045,1046,1047,839,1062,1063,1066,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1083,1084,1085,1086,1087,1088,1089,1090,1091,1094,843,844,845,846,849,850,851,852,853,854,1095,1100,1101,1103,1104,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,1174,1175,77,78,79,80,81,82,83,84,85,86,87,88,89,95,96,97,98,99,100,101,102,103,1176,1177,1178,1179,107,108,109,1113,1114,1115,1116,1117,1118,1119,1125,1126,1128,1129,1130,1131,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,112,113,114,115,116,117,118,119,120,121,122,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,855,856,857,123,124,125,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,1160,157,158,1163,159,160,161,180,181,182,183,184,862,863,864,865,185,186,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,1180,221,1181,878,879,880,223,224,226,227,228,229,230,231,232,233,234,235,1182,241,242,243,244,245,250,251,252,253,258,259,268,269,270,271,272,273,274,275,277,284,287,289,290,292,293,294,295,297,298,300,301,302,303,304,305,306,313,1183,320,323,326,327,328,329,330,334,337,338,340,341,342,343,347,348,349,350,351,352,353,354,357,358,359,360,361,362,363,364,365,366,367,368,369,372,373,374,375,376,377,378,381,382,383,384,385,386,387,388,1184,392,394,397,400,401,402,405,406,412,413,414,415,429,430,431,432,433,434,435,881,882,436,437,438,439,440,441,1168,442,443,444,1169,883,884,885,886,445,446,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,547,548,549,550,551,552,553,554,555,556,557,1185,560,561,562,563,564,565,566,567,568,569,570,571,1186,572,1187,1188,1189,1190,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,1191,594,595,596,597,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,628,629,640,641,642,643,644,645,653,654,655,656,657,658,659,660,661,662,663,664,665,670,671,672,673,674,675,676,677,678,679,680,681,688,689,690,691,692,693,694,696,697,698,699,700,701,704,705,717,722,724,725,727,732,733,734,735,736,737,740,741,742,743,744,745,746,747,748,889,890,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,771,772,773,774,776,777,778,779,780,781,782,896,897,898,899,900,901,783,784,786,787,788,789,790,1192,1193,1194,797,799,800,801,802,803,805,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,1195,1196,1197,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,1198,944,945,946,947,948,1199,949,1200,950,951,952,953,1201,954,1202,1203,955,956,957,958,959,1204,960,961,962,963,964,965,966,967,968,969,970,971,1205,972,973,974,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"organization":[0,1,2,3,4,5,6,7,8,9,13,14,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,66,67,68,1206,1207,1208,70,71,1174,1175,77,78,79,80,81,82,83,84,85,86,87,88,89,95,96,97,98,99,100,101,102,103,104,105,106,1176,1177,1178,1179,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,164,165,170,171,172,176,177,178,179,180,181,182,183,184,185,186,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,250,251,252,253,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,372,373,374,375,376,377,378,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,397,399,400,401,402,403,404,405,406,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,620,621,622,623,624,626,627,628,629,632,633,636,637,640,641,642,643,644,645,646,647,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,668,669,670,671,672,673,674,675,676,677,678,679,680,681,684,685,686,688,689,690,691,692,693,694,696,697,698,699,700,701,702,703,704,705,706,707,708,717,721,722,723,724,725,727,728,729,730,731,732,733,734,735,736,737,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,786,787,788,789,790,1192,1193,1194,791,792,793,797,799,800,801,802,803,804,805,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"user":[0,1,831,832,833,2,7,13,14,22,24,834,843,844,845,846,849,850,851,852,853,854,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,1174,1175,77,78,79,86,87,88,89,95,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119,120,121,122,855,856,857,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,143,144,145,146,147,148,149,150,151,152,153,180,181,182,183,184,862,863,864,865,185,186,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,221,878,879,880,226,227,229,230,231,232,326,372,373,374,375,381,382,383,385,386,387,400,401,402,433,434,435,881,882,436,437,438,439,442,883,884,885,886,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,501,510,511,512,513,514,515,516,534,535,536,537,538,539,540,541,547,552,560,561,562,563,564,565,566,567,568,569,570,571,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,594,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,640,641,642,643,644,645,653,654,655,889,890,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,779,780,781,782,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,815,816,818,823,824,825,826,828,830]},"ghes-3.18":{"enterprise":[0,1,831,832,833,2,975,7,976,977,978,979,13,14,22,24,834,835,981,982,983,984,985,986,987,990,991,992,993,1000,1001,1003,1007,1008,1009,1014,1021,1022,1023,1025,1027,1028,1031,1033,1034,1045,1046,1047,839,1062,1063,1066,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1083,1084,1085,1086,1087,1088,1089,1090,1091,1094,843,844,845,846,849,850,851,852,853,854,1095,1100,1101,1103,1104,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,94,95,96,97,98,99,100,101,102,103,1176,1177,1178,1179,107,108,109,1113,1114,1115,1116,1117,1118,1119,1125,1126,1128,1129,1130,1131,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,112,113,114,115,116,117,118,119,120,121,122,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,855,856,857,123,124,125,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,1160,157,158,1163,159,160,161,180,181,182,183,184,862,863,864,865,185,186,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,1180,221,1181,878,879,880,223,224,226,227,228,229,230,231,232,233,234,235,1182,241,242,243,244,245,250,251,252,253,258,259,268,269,270,271,272,273,274,275,277,284,287,289,290,292,293,294,295,297,298,300,301,302,303,304,305,306,313,1183,320,323,326,327,328,329,330,334,337,338,340,341,342,343,347,348,349,350,351,352,353,354,357,358,359,360,361,362,363,364,365,366,367,368,369,372,373,374,375,376,377,378,381,382,383,384,385,386,387,388,1184,392,394,397,400,401,402,405,406,412,413,414,415,429,430,431,432,433,434,435,881,882,436,437,438,439,440,441,1168,442,443,444,1169,883,884,885,886,445,446,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,547,548,549,550,551,552,553,554,555,556,557,1185,560,561,562,563,564,565,566,567,568,569,570,571,1186,572,1187,1188,1189,1190,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,1191,594,595,596,597,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,628,629,630,631,640,641,642,643,644,645,653,654,655,656,657,658,659,660,661,662,663,664,665,670,671,672,673,674,675,676,677,678,679,680,681,688,689,690,691,692,693,694,696,697,698,699,700,701,704,705,717,722,724,725,727,732,733,734,735,736,737,740,741,742,743,744,745,746,747,748,889,890,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,771,772,773,774,776,777,778,779,780,781,782,896,897,898,899,900,901,783,784,786,787,788,789,790,1192,1193,1194,797,799,800,801,802,803,805,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,1195,1196,1197,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,1198,944,945,946,947,948,1199,949,1200,950,951,952,953,1201,954,1202,1203,955,956,957,958,959,1204,960,961,962,963,964,965,966,967,968,969,970,971,1205,972,973,974,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"organization":[0,1,2,3,4,5,6,7,8,9,13,14,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,66,67,68,1206,1207,1208,70,71,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,94,95,96,97,98,99,100,101,102,103,104,105,106,1176,1177,1178,1179,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,164,165,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,250,251,252,253,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,372,373,374,375,376,377,378,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,397,399,400,401,402,403,404,405,406,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,620,621,622,623,624,626,627,628,629,630,631,632,633,636,637,640,641,642,643,644,645,646,647,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,668,669,670,671,672,673,674,675,676,677,678,679,680,681,684,685,686,688,689,690,691,692,693,694,696,697,698,699,700,701,702,703,704,705,706,707,708,717,721,722,723,724,725,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,786,787,788,789,790,1192,1193,1194,791,792,793,797,799,800,801,802,803,804,805,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"user":[0,1,831,832,833,2,7,13,14,22,24,834,843,844,845,846,849,850,851,852,853,854,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,74,75,76,77,78,79,86,87,88,89,95,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119,120,121,122,855,856,857,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,143,144,145,146,147,148,149,150,151,152,153,180,181,182,183,184,862,863,864,865,185,186,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,221,878,879,880,226,227,229,230,231,232,326,372,373,374,375,381,382,383,385,386,387,400,401,402,433,434,435,881,882,436,437,438,439,442,883,884,885,886,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,501,510,511,512,513,514,515,516,534,535,536,537,538,539,540,541,547,552,560,561,562,563,564,565,566,567,568,569,570,571,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,594,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,640,641,642,643,644,645,653,654,655,889,890,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,779,780,781,782,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,815,816,818,823,824,825,826,828,830]},"ghes-3.19":{"enterprise":[0,1,831,832,833,2,975,7,976,977,978,979,10,11,12,13,14,20,21,22,24,834,835,981,982,983,984,985,986,987,990,991,992,993,1000,1001,1003,1007,1008,1009,1014,1021,1022,1023,1025,1027,1028,1031,1033,1034,1045,1046,1047,839,1062,1063,1066,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,843,844,845,846,847,848,849,850,851,852,853,854,1095,1100,1101,1103,1104,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,94,95,96,97,98,99,100,101,102,103,1176,1177,1178,1179,107,108,109,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1128,1129,1130,1131,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,112,113,114,115,116,117,118,119,120,121,122,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,855,856,857,123,124,125,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,1160,157,158,1163,159,160,161,166,167,168,169,180,181,182,183,184,862,863,864,865,185,186,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,1180,221,1181,878,879,880,223,224,226,227,228,229,230,231,232,233,234,235,1182,241,242,243,244,245,250,251,252,253,258,259,268,269,270,271,272,273,274,275,277,284,287,289,290,292,293,294,295,297,298,300,301,302,303,304,305,306,313,1183,320,323,326,327,328,329,330,334,337,338,340,341,342,343,347,348,349,350,351,352,353,354,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,1184,392,394,397,400,401,402,405,406,1165,1166,1167,407,408,412,413,414,415,429,430,431,432,433,434,435,881,882,436,437,438,439,440,441,1168,442,443,444,1169,883,884,885,886,445,446,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,547,548,549,550,551,552,553,554,555,556,557,1185,560,561,562,563,564,565,566,567,568,569,570,571,1186,572,1187,1188,1189,1190,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,1191,594,595,596,597,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,628,629,630,631,640,641,642,643,644,645,653,654,655,656,657,658,659,660,661,662,663,664,665,670,671,672,673,674,675,676,677,678,679,680,681,688,689,690,691,692,693,694,696,697,698,699,700,701,704,705,716,717,722,724,725,726,727,732,733,734,735,736,737,740,741,742,743,744,745,746,747,748,889,890,891,892,893,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,771,772,773,774,776,777,778,779,780,781,782,896,897,898,899,900,901,783,784,785,786,787,788,789,790,1192,1193,1194,797,798,799,800,801,802,803,805,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,806,1195,1196,1197,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,1198,944,945,946,947,948,1199,949,1200,950,951,952,953,1201,954,1202,1203,955,956,957,958,959,1204,960,961,962,963,964,965,966,967,968,969,970,971,1205,972,973,974,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"organization":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,66,67,68,1206,1207,1208,70,71,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,94,95,96,97,98,99,100,101,102,103,104,105,106,1176,1177,1178,1179,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,250,251,252,253,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,620,621,622,623,624,626,627,628,629,630,631,632,633,636,637,640,641,642,643,644,645,646,647,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,668,669,670,671,672,673,674,675,676,677,678,679,680,681,684,685,686,688,689,690,691,692,693,694,696,697,698,699,700,701,702,703,704,705,706,707,708,716,717,718,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,1192,1193,1194,791,792,793,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"user":[0,1,831,832,833,2,7,10,11,12,13,14,20,21,22,24,834,843,844,845,846,847,848,849,850,851,852,853,854,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,74,75,76,77,78,79,86,87,88,89,95,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119,120,121,122,855,856,857,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,143,144,145,146,147,148,149,150,151,152,153,166,167,168,169,180,181,182,183,184,862,863,864,865,185,186,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,221,878,879,880,226,227,229,230,231,232,326,372,373,374,375,379,380,381,382,383,385,386,387,400,401,402,433,434,435,881,882,436,437,438,439,442,883,884,885,886,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,501,510,511,512,513,514,515,516,534,535,536,537,538,539,540,541,547,552,560,561,562,563,564,565,566,567,568,569,570,571,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,594,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,640,641,642,643,644,645,653,654,655,889,890,891,892,893,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,779,780,781,782,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,815,816,818,823,824,825,826,828,830]},"ghes-3.20":{"enterprise":[0,1,831,832,833,2,975,7,976,977,978,979,10,11,12,13,14,20,21,22,23,24,834,835,981,982,983,984,985,986,987,990,991,992,993,1000,1001,1003,1007,1008,1009,1014,1021,1022,1023,1025,1027,1028,1031,1033,1034,1045,1046,1047,839,1062,1063,1066,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,843,844,845,846,847,848,849,850,851,852,853,854,1095,1100,1101,1103,1104,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,94,95,96,97,98,99,100,101,102,103,1176,1177,1178,1179,107,108,109,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1128,1129,1130,1131,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,112,113,114,115,116,117,118,119,120,121,122,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,855,856,857,123,124,125,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,1160,157,158,1163,159,160,161,166,167,168,169,180,181,182,183,184,862,863,864,865,185,186,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,1180,221,1181,878,879,880,223,224,226,227,228,229,230,231,232,233,234,235,1182,241,242,243,244,245,250,251,252,253,258,259,268,269,270,271,272,273,274,275,277,284,287,289,290,292,293,294,295,297,298,300,301,302,303,304,305,306,313,1183,320,323,326,327,328,329,330,334,337,338,340,341,342,343,347,348,349,350,351,352,353,354,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,1184,392,394,397,400,401,402,405,406,1165,1166,1167,407,408,412,413,414,415,429,430,431,432,433,434,435,881,882,436,437,438,439,440,441,1168,442,443,444,1169,883,884,885,886,445,446,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,547,548,549,550,551,552,553,554,555,556,557,1185,560,561,562,563,564,565,566,567,568,569,570,571,1186,572,1187,1188,1189,1190,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,1191,594,595,596,597,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,628,629,630,631,640,641,642,643,644,645,653,654,655,656,657,658,659,660,661,662,663,664,665,670,671,672,673,674,675,676,677,678,679,680,681,688,689,690,691,692,693,694,696,697,698,699,700,701,704,705,716,717,722,724,725,726,727,732,733,734,735,736,737,740,741,742,743,744,745,746,747,748,889,890,891,892,893,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,771,772,773,774,776,777,778,779,780,781,782,896,897,898,899,900,901,783,784,785,786,787,788,789,790,1192,1193,1194,797,798,799,800,801,802,803,805,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,806,1195,1196,1197,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,1198,944,945,946,947,948,1199,949,1200,950,951,952,953,1201,954,1202,1203,955,956,957,958,959,1204,960,961,962,963,964,965,966,967,968,969,970,971,1205,972,973,974,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"organization":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,66,67,68,70,71,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,94,95,96,97,98,99,100,101,102,103,104,105,106,1176,1177,1178,1179,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,250,251,252,253,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,620,621,622,623,624,626,627,628,629,630,631,632,633,636,637,640,641,642,643,644,645,646,647,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,668,669,670,671,672,673,674,675,676,677,678,679,680,681,684,685,686,688,689,690,691,692,693,694,696,697,698,699,700,701,702,703,704,705,706,707,708,716,717,718,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,1192,1193,1194,791,792,793,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"user":[0,1,831,832,833,2,7,10,11,12,13,14,20,21,22,23,24,834,843,844,845,846,847,848,849,850,851,852,853,854,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,74,75,76,77,78,79,86,87,88,89,95,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119,120,121,122,855,856,857,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,143,144,145,146,147,148,149,150,151,152,153,166,167,168,169,180,181,182,183,184,862,863,864,865,185,186,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,221,878,879,880,226,227,229,230,231,232,326,372,373,374,375,379,380,381,382,383,385,386,387,400,401,402,433,434,435,881,882,436,437,438,439,442,883,884,885,886,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,501,510,511,512,513,514,515,516,534,535,536,537,538,539,540,541,547,552,560,561,562,563,564,565,566,567,568,569,570,571,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,594,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,640,641,642,643,644,645,653,654,655,889,890,891,892,893,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,779,780,781,782,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,815,816,818,823,824,825,826,828,830]},"ghes-3.21":{"enterprise":[0,1,831,832,833,2,975,7,976,977,978,979,10,11,12,13,14,20,21,22,23,24,834,835,836,981,838,982,983,984,985,986,987,990,991,992,993,1000,1001,1003,1004,1005,1007,1008,1009,1014,1021,1022,1023,1025,1027,1028,1031,1033,1034,1036,1037,1045,1046,1047,1048,1049,1050,1051,839,840,841,1062,842,1063,1066,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,843,844,845,846,847,848,849,850,851,852,853,854,1095,1100,1101,1103,1104,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,107,108,109,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1128,1129,1130,1131,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,112,113,114,115,116,117,118,119,120,121,122,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,855,856,857,123,124,125,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,1160,157,158,1163,159,160,161,166,167,168,169,180,181,182,183,184,862,863,864,865,185,186,866,187,867,868,188,869,870,871,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,1180,221,1181,878,879,880,223,224,226,227,228,229,230,231,232,233,234,235,1182,241,242,243,244,245,250,251,252,253,258,259,268,269,270,271,272,273,274,275,277,284,287,289,290,292,293,294,295,297,298,300,301,302,303,304,305,306,307,313,1183,320,323,326,327,328,329,330,334,337,338,340,341,342,343,347,348,349,350,351,352,353,354,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,1184,392,394,397,400,401,402,405,406,1165,1166,1167,407,408,412,413,414,415,429,430,431,432,433,434,435,881,882,436,437,438,439,440,441,1168,442,443,444,1169,883,884,885,886,445,446,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,547,548,549,550,551,552,553,554,555,556,557,1185,560,561,562,563,564,565,566,567,568,569,570,571,1186,572,1187,1188,1189,1190,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,1191,594,595,596,597,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,628,629,630,631,640,641,642,643,644,645,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,670,671,672,673,674,675,676,677,678,679,680,681,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,704,705,716,717,722,724,725,726,727,732,733,734,735,736,737,740,741,742,743,744,745,746,747,748,889,890,891,892,893,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,771,772,773,774,776,777,778,779,780,781,782,896,897,898,899,900,901,783,784,785,786,787,788,789,790,794,795,796,797,798,799,800,801,802,803,805,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,806,1195,1196,1197,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,1198,944,945,946,947,948,1199,949,1200,950,951,952,953,1201,954,1202,1203,955,956,957,958,959,1204,960,961,962,963,964,965,966,967,968,969,970,971,1205,972,973,974,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"organization":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,66,67,68,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,620,621,622,623,624,626,627,628,629,630,631,632,633,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,716,717,718,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"user":[0,1,831,832,833,2,7,10,11,12,13,14,20,21,22,23,24,834,835,836,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,72,74,75,76,77,78,79,86,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119,120,121,122,855,856,857,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,143,144,145,146,147,148,149,150,151,152,153,166,167,168,169,180,181,182,183,184,862,863,864,865,185,186,866,187,867,868,188,869,870,871,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,221,878,879,880,226,227,229,230,231,232,326,372,373,374,375,379,380,381,382,383,385,386,387,400,401,402,433,434,435,881,882,436,437,438,439,442,883,884,885,886,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,501,510,511,512,513,514,515,516,534,535,536,537,538,539,540,541,547,552,560,561,562,563,564,565,566,567,568,569,570,571,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,594,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,640,641,642,643,644,645,653,654,655,889,890,891,892,893,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,779,780,781,782,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,815,816,818,823,824,825,826,828,830]},"ghes-3.22":{"enterprise":[0,1,831,832,833,2,1209,975,7,976,977,978,979,10,11,12,13,14,20,21,22,23,24,834,835,836,981,838,982,983,984,985,986,987,990,991,992,993,1000,1001,1003,1004,1005,1006,1007,1008,1009,1014,1021,1022,1023,1025,1027,1028,1031,1033,1034,1036,1037,1045,1046,1047,1048,1049,1050,1051,839,840,841,1062,842,1063,1066,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,843,844,845,846,847,848,849,850,851,852,853,854,1095,1100,1101,1103,1104,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,65,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,107,108,109,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1128,1129,1130,1131,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,112,113,114,115,116,117,118,119,120,121,122,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,855,856,857,123,124,125,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,1160,157,158,1163,159,160,161,166,167,168,169,180,181,182,183,184,862,863,864,865,185,186,866,187,867,868,188,869,870,871,872,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,1180,221,1181,878,879,880,223,224,226,227,228,229,230,231,232,233,234,235,1182,241,242,243,244,245,250,251,252,253,258,259,268,269,270,271,272,273,274,275,277,284,287,289,290,292,293,294,295,297,298,300,301,302,303,304,305,306,307,313,1183,320,323,326,327,328,329,330,334,337,338,340,341,342,343,347,348,349,350,351,352,353,354,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,1184,392,394,397,400,401,402,405,406,1165,1166,1167,407,408,412,413,414,415,429,430,431,432,433,434,435,881,882,436,437,438,439,440,441,1168,442,443,444,1169,883,884,885,886,445,446,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,547,548,549,550,551,552,553,554,555,556,557,1185,560,561,562,563,564,565,566,567,568,569,570,571,1186,572,1187,1188,1189,1190,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,1191,594,595,596,597,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,628,629,630,631,640,641,642,643,644,645,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,670,671,672,673,674,675,676,677,678,679,680,681,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,704,705,716,717,722,724,725,726,727,732,733,734,735,736,737,740,741,742,743,744,745,746,747,748,889,890,891,892,893,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,771,772,773,774,776,777,778,779,780,781,782,896,897,898,899,900,901,783,784,785,786,787,788,789,790,794,795,796,797,798,799,800,801,802,803,805,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,806,1195,1196,1197,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,1198,944,945,946,947,948,1199,949,1200,950,951,952,953,1201,954,1202,1203,955,956,957,958,959,1204,960,961,962,963,964,965,966,967,968,969,970,971,1205,972,973,974,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"organization":[0,1,2,1209,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,620,621,622,623,624,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,815,816,817,818,819,820,823,824,825,826,827,828,829,830],"user":[0,1,831,832,833,2,1209,7,10,11,12,13,14,20,21,22,23,24,834,835,836,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,25,26,27,38,41,42,43,44,48,49,50,51,56,57,58,59,60,61,62,65,72,74,75,76,77,78,79,86,87,88,89,90,91,92,93,95,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119,120,121,122,855,856,857,858,859,126,127,128,860,861,129,130,131,132,133,134,135,136,137,138,139,140,143,144,145,146,147,148,149,150,151,152,153,166,167,168,169,180,181,182,183,184,862,863,864,865,185,186,866,187,867,868,188,869,870,871,872,201,202,203,204,205,206,207,208,873,874,875,876,877,214,215,216,217,218,219,220,221,878,879,880,226,227,229,230,231,232,326,372,373,374,375,379,380,381,382,383,385,386,387,400,401,402,433,434,435,881,882,436,437,438,439,442,883,884,885,886,447,448,449,887,454,455,456,460,461,462,463,464,465,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,501,510,511,512,513,514,515,516,534,535,536,537,538,539,540,541,547,552,560,561,562,563,564,565,566,567,568,569,570,571,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,594,598,599,600,601,602,603,604,605,606,888,607,608,609,610,611,612,613,614,615,616,617,640,641,642,643,644,645,653,654,655,889,890,891,892,893,749,750,751,753,754,755,756,757,758,759,760,761,762,763,764,765,894,766,767,768,769,895,770,779,780,781,782,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,815,816,818,823,824,825,826,828,830]}} \ No newline at end of file diff --git a/src/audit-logs/lib/config.json b/src/audit-logs/lib/config.json index fb0b59f76ac6..be51467822cd 100644 --- a/src/audit-logs/lib/config.json +++ b/src/audit-logs/lib/config.json @@ -9,5 +9,5 @@ "git": "Note: Git events have special access requirements and retention policies that differ from other audit log events. For GitHub Enterprise Cloud, access Git events via the REST API only with 7-day retention. For GitHub Enterprise Server, Git events must be enabled in audit log configuration and are not included in search results.", "sso_redirect": "Note: Automatically redirecting users to sign in is currently in beta for Enterprise Managed Users and subject to change." }, - "sha": "6908656e5a680467a6f235d8b17d8997f1f689ff" + "sha": "c4319c8d16922e13c5d09181a79f260f10475188" } \ No newline at end of file diff --git a/src/audit-logs/lib/deduplicate.ts b/src/audit-logs/lib/deduplicate.ts index 39411f47df76..f637fddb4a28 100644 --- a/src/audit-logs/lib/deduplicate.ts +++ b/src/audit-logs/lib/deduplicate.ts @@ -77,7 +77,6 @@ export async function writeDeduplicatedAuditLogData( } } - // Write shared files const sharedDir = path.join(AUDIT_LOG_DATA_DIR, 'shared') if (!existsSync(sharedDir)) { await mkdirp(sharedDir) diff --git a/src/audit-logs/lib/index.ts b/src/audit-logs/lib/index.ts index 4a5bcfcde5d4..4da4d9e11cd3 100644 --- a/src/audit-logs/lib/index.ts +++ b/src/audit-logs/lib/index.ts @@ -19,11 +19,10 @@ import config from './config.json' export const AUDIT_LOG_DATA_DIR = 'src/audit-logs/data' -// cache of audit log data const auditLogEventsCache = new Map>() const categorizedAuditLogEventsCache = new Map>() -// Shared dedup data — loaded once, shared across all versions +// Shared dedup data, loaded once and shared across all versions. let sharedEntries: DeduplicatedAuditLogEntry[] | null = null let sharedFieldsPool: string[][] | null = null let sharedVersionIndex: AuditLogVersionIndex | null = null @@ -58,10 +57,10 @@ function loadSharedFormat(): boolean { sharedFormatAvailable = true } catch (err) { if (isFileNotFoundError(err)) { - // Shared files don't exist — fall back to per-version files silently. + // Shared files don't exist, so fall back to per-version files silently. sharedFormatAvailable = false } else { - // Corrupt JSON, schema mismatch, etc. — surface this instead of hiding it. + // Corrupt JSON, schema mismatch, and so on. Surface it instead of hiding it. console.error('Failed to load shared audit log dedup format (corrupt data?):', err) throw err } @@ -108,7 +107,6 @@ type PipelineConfig = { appendedDescriptions: Record } -// get category notes from config export function getCategoryNotes(): CategoryNotes { const auditLogConfig = config as AuditLogConfig return auditLogConfig.categoryNotes || {} @@ -126,7 +124,6 @@ export type TitleResolutionContext = Context & { // request (~90–150ms of repeated work). See docs-engineering#6650. const referenceLinksMarkdownCache = new Map>() -// Resolves docs_reference_links URLs to markdown links export function resolveReferenceLinksToMarkdown( docsReferenceLinks: string, context: TitleResolutionContext, @@ -147,7 +144,6 @@ async function computeReferenceLinksToMarkdown( docsReferenceLinks: string, context: TitleResolutionContext, ): Promise { - // Handle multiple comma-separated or space-separated links const links = docsReferenceLinks .split(/[,\s]+/) .map((link) => link.trim()) @@ -188,7 +184,6 @@ async function computeReferenceLinksToMarkdown( return markdownLinks.join(', ') } -// Resolves docs_reference_links URLs to page titles async function resolveReferenceLinksToTitles( docsReferenceLinks: string, context: TitleResolutionContext, @@ -197,7 +192,6 @@ async function resolveReferenceLinksToTitles( return '' } - // Handle multiple comma-separated or space-separated links const links = docsReferenceLinks .split(/[,\s]+/) .map((link) => link.trim()) @@ -258,7 +252,6 @@ export function getAuditLogEvents(page: string, version: string): AuditLogEventT auditLogEventsCache.set(openApiVersion, new Map()) } if (!auditLogEventsCache.get(openApiVersion)?.has(page)) { - // Try shared deduplicated format first const events = reconstructEventsFromSharedFormat(openApiVersion, page) if (events) { auditLogEventsCache.get(openApiVersion)?.set(page, events) @@ -307,7 +300,6 @@ export function getCategorizedAuditLogEvents(page: string, version: string): Cat return categorizedAuditLogEventsCache.get(openApiVersion)?.get(page) || {} } -// Filters audit log events based on allowlist values. export async function filterByAllowlistValues({ eventsToCheck, allowListValues, @@ -337,7 +329,6 @@ export async function filterByAllowlistValues({ if (seen.has(event.action)) continue seen.add(event.action) - // Merge global fields with event-specific fields const mergedFields = event.fields ? [...new Set([...globalFields, ...event.fields])] : globalFields.length > 0 @@ -351,7 +342,6 @@ export async function filterByAllowlistValues({ fields: mergedFields, } - // Resolve reference link titles if context is provided if (titleContext && event.docs_reference_links && event.docs_reference_links !== 'N/A') { try { minimal.docs_reference_titles = await resolveReferenceLinksToTitles( @@ -375,13 +365,6 @@ export async function filterByAllowlistValues({ // Filters audit log events based on allowlist values and processes an // event's supported GHES versions. // -// * eventsToCheck: events to consider -// * allowListvalue: allowlist value to filter by -// * currentEvents: events already collected -// * pipelineConfig: audit log pipeline config data -// * auditLogPage: the audit log page the event belongs to -// * titleContext: optional context for resolving reference link titles -// // Mutates `currentGhesEvents` and updates it with any new filtered for audit // log events, the object maps GHES versions to page events for that version e.g.: // @@ -442,10 +425,8 @@ export async function filterAndUpdateGhesDataByAllowlistValues({ if (seenByGhesVersion.get(fullGhesVersion)?.has(event.action)) continue if (ghesVersionAllowlists.includes(allowListValue)) { - // Get event-specific fields (prefer GHES version fields, fall back to base fields) const eventFields = event.ghes[ghesVersion].fields || event.fields - // Merge global fields with event-specific fields const mergedFields = eventFields ? [...new Set([...globalFields, ...eventFields])] : globalFields.length > 0 @@ -459,7 +440,6 @@ export async function filterAndUpdateGhesDataByAllowlistValues({ fields: mergedFields, } - // Resolve reference link titles if context is provided if (titleContext && event.docs_reference_links && event.docs_reference_links !== 'N/A') { try { minimal.docs_reference_titles = await resolveReferenceLinksToTitles( @@ -501,7 +481,6 @@ export async function filterAndUpdateGhesDataByAllowlistValues({ } } -// Categorizes the given array of audit log events by event category function categorizeEvents(events: AuditLogEventT[]) { const categorizedEvents: CategorizedEvents = {} for (const event of events) { diff --git a/src/audit-logs/scripts/rebuild-dedup.ts b/src/audit-logs/scripts/rebuild-dedup.ts index e369478ac057..32daff1c6ef4 100644 --- a/src/audit-logs/scripts/rebuild-dedup.ts +++ b/src/audit-logs/scripts/rebuild-dedup.ts @@ -1,16 +1,14 @@ -/** - * Rebuilds the deduplicated "shared" audit log format - * (src/audit-logs/data/shared/entries.json, fields-pool.json, and - * version-index.json) from the per-version page files already on disk. - * - * Unlike `sync-audit-log`, this does NOT fetch from github/audit-log-allowlists - * and needs no GITHUB_TOKEN. Use it to regenerate the shared files when the - * per-version JSON files have changed but the shared files are stale (for - * example, an older audit-log-pipeline PR that predates the dedup format), which - * makes the `deduplication` test fail. - * - * npm run rebuild-audit-log-dedup - */ +// Rebuilds the deduplicated "shared" audit log format from the per-version page +// files already on disk: src/audit-logs/data/shared/entries.json and +// fields-pool.json, plus src/audit-logs/data/version-index.json. +// +// Unlike `sync-audit-log`, this does NOT fetch from github/audit-log-allowlists +// and needs no GITHUB_TOKEN. Use it to regenerate the shared files when the +// per-version JSON files have changed but the shared files are stale, for +// example on an older audit-log-pipeline PR that predates the dedup format. +// That is what makes the `deduplication` test fail. +// +// npm run rebuild-audit-log-dedup import { existsSync, readdirSync, readFileSync, statSync } from 'fs' import path from 'path' diff --git a/src/audit-logs/scripts/sync.ts b/src/audit-logs/scripts/sync.ts index e46b83565ee6..1718d90416a4 100755 --- a/src/audit-logs/scripts/sync.ts +++ b/src/audit-logs/scripts/sync.ts @@ -1,12 +1,7 @@ -/** - * Required env variables: - * - * GITHUB_TOKEN - * - * Gets latest audit log event data, extracts the data we need for rendering on - * the 3 different audit log pages, and writes out the data to files versioned - * per page. - */ +// Gets the latest audit log event data, extracts what we need for the 3 audit +// log pages, and writes it out to files versioned per page. +// +// Requires GITHUB_TOKEN. import { existsSync } from 'fs' import { readFile, writeFile } from 'fs/promises' import { mkdirp } from 'mkdirp' @@ -72,7 +67,6 @@ async function main() { pipelineConfig.sha = mainSha await writeFile(configFilepath, JSON.stringify(pipelineConfig, null, 2)) - // Load pages and redirects for title resolution console.log('Loading pages and redirects for title resolution...') const pageList = await loadPages(undefined, ['en']) const pages = await loadPageMap(pageList) diff --git a/src/automated-pipelines/lib/update-markdown.ts b/src/automated-pipelines/lib/update-markdown.ts index 49addfc6ee14..964e0c78bce2 100644 --- a/src/automated-pipelines/lib/update-markdown.ts +++ b/src/automated-pipelines/lib/update-markdown.ts @@ -14,7 +14,6 @@ import type { MarkdownFrontmatter } from '@/types' const logger = createLogger(import.meta.url) -// Type definitions - extending existing type to add missing fields and make most fields optional type FrontmatterData = Partial & { autogenerated?: string [key: string]: unknown @@ -67,8 +66,9 @@ type ChildrenComparison = { const ROOT_INDEX_FILE = 'content/index.md' export const MARKDOWN_COMMENT = '\n\n' -// Main entrypoint into this module. This function adds, removes, and updates -// versions frontmatter in all directories under the targetDirectory. +// Main entrypoint into this module. +// Walks every directory under targetDirectory, adding and removing Markdown +// files and keeping the index.md children and versions frontmatter in sync. export async function updateContentDirectory({ targetDirectory, sourceContent, @@ -87,7 +87,6 @@ async function removeMarkdownFiles( sourceFiles: string[], autogeneratedType: string | undefined, ): Promise { - // Copy the autogenerated Markdown files to the target directory const autogeneratedFiles = await getAutogeneratedFiles(targetDirectory, autogeneratedType) // If the first array contains items that the second array does not, // it means that a Markdown page was deleted from the OpenAPI schema @@ -98,7 +97,6 @@ async function removeMarkdownFiles( count: filesToRemove.length, }) } - // Markdown files that need to be deleted for (const file of filesToRemove) { unlinkSync(file) } @@ -140,19 +138,15 @@ async function updateMarkdownFiles( for (const [file, newContent] of Object.entries(sourceContent)) { await updateMarkdownFile(file, newContent.data, newContent.content) } - // This function recursively updates the index.md files in each - // of the directories under targetDirectory await updateDirectory(targetDirectory, frontmatter, { indexOrder }) - // We don't want to update directories that the pipelines don't affect - // so we make one call to update only the root index.md file - // in targetDirectory to prevent any unintended changes + // The pipelines should not touch directories they do not own, so this + // call updates only the index.md file in the parent directory. await updateDirectory(path.dirname(targetDirectory), frontmatter, { rootDirectoryOnly: true }) } -// If the Markdown file already exists on disk, we only update the -// content and version frontmatter to allow writers to manually -// edit the modifiable content of the file. If the Markdown file doesn't -// exists, we create a new Markdown file. +// If the Markdown file already exists on disk, we update only the content +// and the versions frontmatter, so writers can hand-edit the other fields. +// If it does not exist, we create it. async function updateMarkdownFile( file: string, sourceData: FrontmatterData, @@ -160,8 +154,6 @@ async function updateMarkdownFile( commentDelimiter: string = MARKDOWN_COMMENT, ): Promise { if (existsSync(file)) { - // update only the versions property of the file, assuming - // the other properties have already been added and edited const { data, content } = matter(await readFile(file, 'utf-8')) // Double check that the comment delimiter is only used once @@ -179,7 +171,6 @@ async function updateMarkdownFile( const isDelimiterMissing = !matches const isContentSame = automatedContent === sourceContent const isVersionsSame = isEqual(sourceData.versions, data.versions) - // Only proceed if the content or versions have changed if (isContentSame && isVersionsSame && !isDelimiterMissing) { logger.debug('Markdown file unchanged, skipping', { file }) return @@ -219,14 +210,12 @@ async function updateDirectory( { rootDirectoryOnly = false, shortTitle = false, indexOrder = {} }: UpdateDirectoryOptions = {}, ): Promise { const initialDirectoryListing = await getDirectoryInfo(directory) - // If there are no children on disk, remove the directory if (initialDirectoryListing.directoryContents.length === 0 && !rootDirectoryOnly) { logger.info('Removing empty directory', { directory }) await rimraf(directory) return } - // Recursively update child directories if (!rootDirectoryOnly) { await Promise.all( initialDirectoryListing.childDirectories.map(async (subDirectory) => { @@ -256,7 +245,6 @@ async function updateDirectory( } if (!rootDirectoryOnly) { - // Update the versions in the index.md file to match the directory contents directoryFiles.push(...childDirectories.map((dir) => path.join(dir, 'index.md'))) const newVersions = await getIndexFileVersions(directory, directoryFiles) const isVersionEqual = isEqual(newVersions, data.versions) @@ -265,7 +253,6 @@ async function updateDirectory( } } - // Update the index.md file contents and write the file to disk const dataUpdatedChildren = updateIndexChildren( data, { itemsToAdd, itemsToRemove }, @@ -295,7 +282,6 @@ function getChildrenToCompare( const isEarlyAccess = (item: string) => isRootIndexFile(indexFile) && item === 'early-access' - // Get the list of children from the directory contents const childrenOnDisk = directoryContents .map((file) => `${path.basename(file, '.md')}`) .filter((item) => !isEarlyAccess(item)) @@ -317,7 +303,7 @@ function getChildrenToCompare( // the order of the first items in the index files children // property. All other items are sorted and appended to list. // -// 2. If not config is defined and the index file is an +// 2. If no config is defined and the index file is an // autogenerated file, we sort all the children alphabetically. // // 3. If the index file is not autogenerated, we leave the ordering @@ -332,7 +318,6 @@ function updateIndexChildren( const { itemsToAdd, itemsToRemove } = childUpdates const childPrefix = rootIndex ? '' : '/' - // Get a new list of children with added and removed items const children = [...(data.children || [])] // remove the '/' prefix used in index.md children .map((item) => item.replace(childPrefix, '')) @@ -373,8 +358,8 @@ function updateIndexChildren( return updatedData } -// Gets the contents of the index.md file from disk if it exits or -// creates a new index.md file with the default frontmatter. +// Gets the contents of the index.md file from disk if it exists, +// or returns default frontmatter for a new one. async function getIndexFileContents( indexFile: string, frontmatter: FrontmatterData, @@ -413,7 +398,6 @@ async function getIndexFileVersions( `File ${filepath} does not exist while assembling directory index.md files to create parent version.`, ) } - // If not a markdown(x) file, skip it if (!file.endsWith('.md') && !file.endsWith('.mdx')) { return } @@ -536,12 +520,10 @@ function checkVersionContinuity(versions: (string | undefined)[]): boolean { return availableVersions.every(Boolean) } -// Returns true if the indexFile is the root index.md file function isRootIndexFile(indexFile: string): boolean { return indexFile === ROOT_INDEX_FILE } -// Creates a new directory if it doesn't exist async function createDirectory(targetDirectory: string): Promise { if (!existsSync(targetDirectory)) { await mkdirp(targetDirectory) diff --git a/src/automated-pipelines/tests/rendering.ts b/src/automated-pipelines/tests/rendering.ts index e4a1d2cb6e10..f8dfc17ca55f 100644 --- a/src/automated-pipelines/tests/rendering.ts +++ b/src/automated-pipelines/tests/rendering.ts @@ -6,7 +6,6 @@ import { describe, expect, test, vi } from 'vitest' import { loadPages } from '@/frame/lib/page-data' import { get } from '@/tests/helpers/e2etest' -// Type definitions for page objects type Page = { autogenerated?: string fullPath: string @@ -17,7 +16,6 @@ type Page = { } } -// Get a list of the autogenerated pages const pageList: Page[] = await loadPages(undefined, ['en']) describe('autogenerated docs render', () => { diff --git a/src/automated-pipelines/tests/update-markdown.ts b/src/automated-pipelines/tests/update-markdown.ts index 210ffb9dc447..3b2290b86864 100644 --- a/src/automated-pipelines/tests/update-markdown.ts +++ b/src/automated-pipelines/tests/update-markdown.ts @@ -10,7 +10,6 @@ import type { FrontmatterVersions } from '@/types' import { updateContentDirectory } from '../lib/update-markdown' -// Type definitions type ContentItem = { data: { title: string @@ -92,8 +91,6 @@ describe('automated content directory updates', () => { contentDataFullPath[path.join(targetDirectory, key)] = newContentData[key] } - // Rewrites the content directory in the operating system's - // temp directory. await updateContentDirectory({ targetDirectory, sourceContent: contentDataFullPath, diff --git a/src/codeql-cli/lib/config.json b/src/codeql-cli/lib/config.json index d62f6633ffe9..83e472c60561 100644 --- a/src/codeql-cli/lib/config.json +++ b/src/codeql-cli/lib/config.json @@ -5,12 +5,10 @@ "ghec": "*", "ghes": "*" }, - "topics": [ - "Code Security", - "Code scanning", - "CodeQL" + "contentType": "reference", + "category": [ + "Find CodeQL CLI commands" ], - "type": "reference", "product": "{% data reusables.gated-features.codeql %}", "autogenerated": "codeql-cli" }, diff --git a/src/codeql-cli/scripts/convert-markdown-for-docs.ts b/src/codeql-cli/scripts/convert-markdown-for-docs.ts index 006853624346..8c7045f91207 100644 --- a/src/codeql-cli/scripts/convert-markdown-for-docs.ts +++ b/src/codeql-cli/scripts/convert-markdown-for-docs.ts @@ -316,14 +316,11 @@ async function getRedirect(url: string): Promise { // Some of the aka.ms links have the /en language prefix. // This removes all language prefixes from the redirect url. - const redirectNoLang = languageKeys.reduce((acc, lang) => { - return acc.replace(`/${lang}`, ``) - }, redirect) - - if (!redirectNoLang) { - const errorMsg = `The aka.ms redirected to an unexpected url: ${url}` - throw new Error(errorMsg) + const parts = redirect.split('/') + if (parts.length > 1 && languageKeys.includes(parts[1])) { + // delete language prefix (e.g., /en, /ja, etc.) + parts.splice(1, 1) } - return redirectNoLang + return parts.join('/') } diff --git a/src/codeql-cli/tests/convert-markdown-for-docs.ts b/src/codeql-cli/tests/convert-markdown-for-docs.ts index 438bcd501701..3b3f76616d48 100644 --- a/src/codeql-cli/tests/convert-markdown-for-docs.ts +++ b/src/codeql-cli/tests/convert-markdown-for-docs.ts @@ -1,7 +1,28 @@ -import { describe, expect, test } from 'vitest' +import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest' import { convertContentToDocs } from '../scripts/convert-markdown-for-docs' +import config from '@/codeql-cli/lib/config.json' + +const RELATIVE_LINK_PATH = config.targetDirectory.replace('content', '') describe('convertContentToDocs circular link handling', () => { + const fetchMock = vi.spyOn(globalThis, 'fetch') + + beforeAll(() => { + fetchMock.mockResolvedValue( + new Response(null, { + status: 302, + headers: { + location: + 'https://docs.github.com/enterprise-server@latest/code-security/reference/code-scanning/sarif-files/sarif-support', + }, + }), + ) + }) + + afterAll(() => { + vi.restoreAllMocks() + }) + const testContent = ` # bqrs interpret @@ -18,7 +39,8 @@ metadata and generates output in the specified format. This option has no effect when passed to \`codeql bqrs interpret\`{.interpreted-text role="doc"}. -For more information, see \`codeql database analyze\`{.interpreted-text role="doc"}. +For more information, see \`codeql database analyze\`{.interpreted-text role="doc"} and + for details about uploading SARIF files. ` test('converts circular links to plain text', async () => { @@ -26,7 +48,7 @@ For more information, see \`codeql database analyze\`{.interpr // Should not contain circular link expect(result.content).not.toContain( - '[codeql bqrs interpret](/code-security/codeql-cli/codeql-cli-manual/bqrs-interpret)', + `[codeql bqrs interpret](${RELATIVE_LINK_PATH}/bqrs-interpret)`, ) // Should contain plain text instead @@ -38,7 +60,38 @@ For more information, see \`codeql database analyze\`{.interpr // Should preserve valid cross-reference link expect(result.content).toContain( - '[codeql database analyze](/code-security/codeql-cli/codeql-cli-manual/database-analyze)', + `[codeql database analyze](${RELATIVE_LINK_PATH}/database-analyze)`, + ) + }) + + test('converts aka.ms links', async () => { + const result = await convertContentToDocs(testContent, {}, 'bqrs-interpret.md') + + // Should convert aka.ms link to redirect + expect(result.content).toContain( + '[AUTOTITLE](/enterprise-server@latest/code-security/reference/code-scanning/sarif-files/sarif-support)', + ) + + // Should not still contain aka.ms link + expect(result.content).not.toContain('https://aka.ms/') + }) + + test('strips language prefix from aka.ms redirect links', async () => { + fetchMock.mockResolvedValue( + new Response(null, { + status: 302, + headers: { + location: + 'https://docs.github.com/en/enterprise-server@latest/code-security/reference/code-scanning/sarif-files/sarif-support', + }, + }), + ) + + const result = await convertContentToDocs(testContent, {}, 'bqrs-interpret.md') + + // Should strip language prefix from aka.ms redirect link + expect(result.content).toContain( + '[AUTOTITLE](/enterprise-server@latest/code-security/reference/code-scanning/sarif-files/sarif-support)', ) }) @@ -47,7 +100,7 @@ For more information, see \`codeql database analyze\`{.interpr // Should preserve link when no filename is provided expect(result.content).toContain( - '[codeql bqrs interpret](/code-security/codeql-cli/codeql-cli-manual/bqrs-interpret)', + `[codeql bqrs interpret](${RELATIVE_LINK_PATH}/bqrs-interpret)`, ) }) @@ -56,7 +109,7 @@ For more information, see \`codeql database analyze\`{.interpr // Should preserve link when filename is different expect(result.content).toContain( - '[codeql bqrs interpret](/code-security/codeql-cli/codeql-cli-manual/bqrs-interpret)', + `[codeql bqrs interpret](${RELATIVE_LINK_PATH}/bqrs-interpret)`, ) }) @@ -65,12 +118,12 @@ For more information, see \`codeql database analyze\`{.interpr // Circular link should be plain text expect(result.content).not.toContain( - '[codeql bqrs interpret](/code-security/codeql-cli/codeql-cli-manual/bqrs-interpret)', + `[codeql bqrs interpret](${RELATIVE_LINK_PATH}/bqrs-interpret)`, ) // Non-circular link should be preserved expect(result.content).toContain( - '[codeql database analyze](/code-security/codeql-cli/codeql-cli-manual/database-analyze)', + `[codeql database analyze](${RELATIVE_LINK_PATH}/database-analyze)`, ) // Both should have their text content present diff --git a/src/content-linter/scripts/disable-rules.ts b/src/content-linter/scripts/disable-rules.ts index a6210829e740..9d07356915ce 100755 --- a/src/content-linter/scripts/disable-rules.ts +++ b/src/content-linter/scripts/disable-rules.ts @@ -1,6 +1,6 @@ // Disables markdownlint rules in markdown files with same-line comments. This is // useful when introducing a new rule that causes many failures. The comments -// can be fixed and removed at while updating the file later. +// can be fixed and removed while updating the file later. // // Usage: // diff --git a/src/content-linter/scripts/generate-docs.ts b/src/content-linter/scripts/generate-docs.ts index be11c3378252..c70ced85f2ba 100644 --- a/src/content-linter/scripts/generate-docs.ts +++ b/src/content-linter/scripts/generate-docs.ts @@ -14,7 +14,6 @@ function main() { markdown.push('| Rule ID | Rule Name(s) | Description | Severity | Tags |') markdown.push('| ------- | ------------ | ----------- | -------- | ---- |') - // Collect all rules and their generated rows const mdRules: Array<{ ruleId: string; row: string }> = [] const ghRules: Array<{ ruleId: string; row: string }> = [] const ghdRules: Array<{ ruleId: string; row: string }> = [] @@ -35,7 +34,6 @@ function main() { row.push(allConfig[ruleName].severity) row.push(rule.tags.join(', ')) - // Categorize rules by their ID prefix const ruleData = { ruleId: rule.names[0], row: `| ${row.join(' | ')} |` } if (rule.names[0].startsWith('GHD')) { ghdRules.push(ruleData) @@ -46,7 +44,6 @@ function main() { } } - // Sort each category alphabetically by rule ID mdRules.sort((a, b) => a.ruleId.localeCompare(b.ruleId)) ghRules.sort((a, b) => a.ruleId.localeCompare(b.ruleId)) ghdRules.sort((a, b) => a.ruleId.localeCompare(b.ruleId)) @@ -66,13 +63,12 @@ function main() { writeFileSync('data/reusables/contributing/content-linter-rules.md', markdown.join('\n')) } -// The search-replace rule configures multiple psuedo-rules +// The search-replace rule configures multiple pseudo-rules // under the rules key. function getSearchReplaceRules(srRule: Rule, ruleConfig: Config) { const name = srRule.information ? `[search-replace](${srRule.information})` : 'search-replace' const markdown = [] - // Sort rules alphabetically by name const sortedRules = [...(ruleConfig.rules || [])].sort((a, b) => a.name.localeCompare(b.name)) for (const rule of sortedRules) { diff --git a/src/content-linter/scripts/lint-content.ts b/src/content-linter/scripts/lint-content.ts index 416c33b37b78..b58caf6b09bb 100755 --- a/src/content-linter/scripts/lint-content.ts +++ b/src/content-linter/scripts/lint-content.ts @@ -26,7 +26,6 @@ import type { } from 'markdownlint' import type { Rule, Config } from '@/content-linter/types' -// Type definitions for Markdownlint results interface LintError { lineNumber: number ruleNames: string[] @@ -88,11 +87,8 @@ interface FormattedResult { type FormattedResults = Record -/** - * Config that applies to all rules in all environments (CI, reports, precommit). - */ +// Config that applies to all rules in all environments (CI, reports, precommit). export const globalConfig = { - // Do not ever lint these filepaths excludePaths: ['content/contributing/', 'data/llms-txt/'], } @@ -150,7 +146,8 @@ async function main() { // Get the updated paths after validation (invalid paths will have been filtered out) const validatedPaths = program.opts().paths - // If paths has not been specified, lint all files + // With no paths and no --summary-by-rule, fall back to the files changed + // in the local git checkout. const files = getFilesToLint( (summaryByRule && ALL_CONTENT_DIR) || validatedPaths || getChangedFiles(), ) @@ -169,7 +166,6 @@ async function main() { spinner.start() const start = Date.now() - // Initializes the config to pass to markdownlint based on the input options const { config, configuredRules } = getMarkdownLintConfig(errorsOnly, rules) // Run Markdownlint for content directory @@ -395,9 +391,8 @@ function getFilesToLint(inputPaths: string[]): FileList { const root = path.resolve(languages.en.dir) const contentDir = path.join(root, 'content') const dataDir = path.join(root, 'data') - // The path passed to Markdownlint is what is displayed - // in the error report, so we want to normalize it and - // and make it relative if it's absolute. + // The path passed to Markdownlint is what is displayed in the error report, + // so normalize it and make it relative if it's absolute. for (const rawPath of inputPaths) { const absPath = path.resolve(rawPath) if (fs.statSync(rawPath).isDirectory()) { @@ -418,7 +413,7 @@ function getFilesToLint(inputPaths: string[]): FileList { } } // If it's a file but it's not part of the content or the data - // directory, it's probably file passed in by computing changed files + // directory, it's probably a file passed in by computing changed files // from the git diff. } } @@ -436,7 +431,6 @@ function getFilesToLint(inputPaths: string[]): FileList { const relPath = path.relative(root, filePath) - // Skip files that match any of the excluded paths if (globalConfig.excludePaths.some((excludePath) => relPath.startsWith(excludePath))) { continue } @@ -452,7 +446,6 @@ function getFilesToLint(inputPaths: string[]): FileList { fileList.data = cleanPaths(fileList.data) fileList.yml = cleanPaths(fileList.yml) - // Add a total fileList length property fileList.length = fileList.content.length + fileList.data.length + fileList.yml.length return fileList @@ -504,11 +497,9 @@ function reportSummaryByRule(results: LintResults, config: LintConfig): void { } } -/* - Filter out the files with one or more results and format each - result. Results are sorted by severity per file, with errors - listed first then warnings. -*/ +// Filter out the files with one or more results and format each result. +// Results are sorted by severity per file, with errors listed first then +// warnings. function getFormattedResults( allResults: LintResults, isInPrecommitMode: boolean, @@ -527,7 +518,6 @@ function getFormattedResults( .map((flaw: LintError) => formatResult(flaw, isInPrecommitMode)) .filter((result): result is FormattedResult => result !== null) - // Only add the file to output if there are results after filtering if (formattedResults.length > 0) { const errors = formattedResults.filter((result) => result.severity === 'error') const warnings = formattedResults.filter((result) => result.severity === 'warning') @@ -539,17 +529,10 @@ function getFormattedResults( return output } -// Results are formatted with the key being the filepath -// and the value being an array of errors for that filepath. -// Each result has a rule name, which when looked up in `allConfig` -// will give us its severity and we filter those that are 'warning'. function getWarningCountByFile(results: FormattedResults, fixed = false): number { return getCountBySeverity(results, 'warning', fixed) } -// Results are formatted with the key being the filepath -// and the value being an array of results for that filepath. -// Each result in the array has a severity of error or warning. function getErrorCountByFile(results: FormattedResults, fixed = false): number { return getCountBySeverity(results, 'error', fixed) } @@ -574,7 +557,6 @@ function getCountBySeverity( function formatResult(object: LintError, isInPrecommitMode: boolean): FormattedResult | null { const formattedResult: FormattedResult = {} as FormattedResult - // Add severity to each result object const ruleName = object.ruleNames[1] || object.ruleNames[0] const ruleConfig = allConfig[ruleName] as Config | undefined // Skip rules that aren't in our config. This can happen when using @@ -632,13 +614,9 @@ function listRules() { return ruleList } -/* - Based on input options, configure the Markdownlint rules to run - There are a subset of rules that can't be run on data files, since - those Markdown files are partials included in full Markdown files. - Rules that can't be run on partials have the property - `partial-markdown-files` set to false. -*/ +// Some rules can't be run on data files, since those Markdown files are +// partials included in full Markdown files. Those rules have the property +// `partial-markdown-files` set to false. function getMarkdownLintConfig( filterErrorsOnly: boolean, runRules: string[] | undefined, @@ -670,7 +648,6 @@ function getMarkdownLintConfig( continue } - // Check if the rule should be included based on user-specified rules if (runRules && !shouldIncludeRule(ruleName, runRules)) continue // There are a subset of rules run on just the frontmatter in files @@ -678,9 +655,6 @@ function getMarkdownLintConfig( config.frontMatter[ruleName] = ruleConfig if (customRule) configuredRules.frontMatter.push(customRule) } - // Handle the special case of the search-replace rule - // which has nested rules each with their own - // severity and metadata. if (ruleName === 'search-replace') { const searchReplaceRules: NonNullable = [] const dataSearchReplaceRules: NonNullable = [] @@ -691,14 +665,12 @@ function getMarkdownLintConfig( for (const searchRule of ruleConfig.rules) { const searchRuleSeverity = getSeverity(searchRule, isPrecommit) if (filterErrorsOnly && searchRuleSeverity !== 'error') continue - // Add search-replace rules to frontmatter configuration for rules that make sense in frontmatter - // This ensures rules like TODOCS detection work in frontmatter - // Rules with applyToFrontmatter should ONLY run in the frontmatter pass (which lints the entire file) - // to avoid duplicate detections + // The frontmatter pass lints the whole file, so a rule with + // applyToFrontmatter must run there and nowhere else, or every match + // gets reported twice. if (searchRule.applyToFrontmatter) { frontmatterSearchReplaceRules.push(searchRule) } else { - // Only add to content rules if not a frontmatter-specific rule searchReplaceRules.push(searchRule) } if (searchRule['partial-markdown-files']) { @@ -765,7 +737,6 @@ function getCustomRule(ruleName: string): Rule | MarkdownlintRule { // Check if a rule should be included based on user-specified rules // Handles both short names (e.g., GHD047, MD001) and long names (e.g., table-column-integrity, heading-increment) export function shouldIncludeRule(ruleName: string, runRules: string[]) { - // First check if the rule name itself is in the list if (runRules.includes(ruleName)) { return true } @@ -789,7 +760,7 @@ export function shouldIncludeRule(ruleName: string, runRules: string[]) { The severity of the search-replace custom rule is embedded in each individual search rule. This function returns the severity of the individual search rule. The name we define for each search - rule shows up the the errorDetail property of the error object. + rule shows up in the errorDetail property of the error object. The error object returned from Markdownlint has the following structure: { @@ -830,11 +801,10 @@ function isOptionsValid() { } else { console.warn(`warning: the value '${filePath}' was not found. Skipping this path.`) } - // Continue processing - don't return false here + // Keep going: one bad path should not abandon the rest. } } - // Update the program options to only include valid paths if (optionPaths.length > 0) { program.setOptionValue('paths', validPaths) } diff --git a/src/content-linter/scripts/lint-report.ts b/src/content-linter/scripts/lint-report.ts index 7e39cc15fd9c..f77bde4d3df0 100644 --- a/src/content-linter/scripts/lint-report.ts +++ b/src/content-linter/scripts/lint-report.ts @@ -13,11 +13,8 @@ const MAX_ISSUE_BODY_SIZE = 60000 // If the number of warnings exceeds this number, print a warning so we can give them attention const MAX_WARNINGS_BEFORE_ALERT = 20 -/** - * Config that only applies to automated weekly reports. - */ +// Config that only applies to automated weekly reports. export const reportingConfig = { - // Include only rules with these severities in reports includeSeverities: ['error', 'warning'], // Include these rules regardless of severity in reports includeRules: ['expired-content'], @@ -29,13 +26,9 @@ interface LintFlaw { errorDetail?: string } -/** - * Determines if a lint result should be included in the automated report - */ function shouldIncludeInReport(flaw: LintFlaw): boolean { const allRuleNames = getAllRuleNames(flaw) - // Check if severity should be included if (reportingConfig.includeSeverities.includes(flaw.severity)) { return true } @@ -95,12 +88,10 @@ async function main() { // Keep track of warnings so we can print an alert when they exceed a manageable number let totalWarnings = 0 - // Filter results based on reporting configuration const filteredResults: Record = {} for (const [file, flaws] of Object.entries(parsedResults)) { const filteredFlaws = (flaws as LintFlaw[]).filter((flaw) => shouldIncludeInReport(flaw)) - // Only include files that have remaining flaws after filtering if (filteredFlaws.length > 0) { totalWarnings += filteredFlaws.filter((flaw) => flaw.severity === 'warning').length filteredResults[file] = filteredFlaws @@ -119,7 +110,6 @@ async function main() { for (const [file, flaws] of Object.entries(filteredResults)) { const fileEntry = `File: \`${file}\`:\n\`\`\`json\n${JSON.stringify(flaws, null, 2)}\n\`\`\`\n` - // Check if adding this file would exceed the size limit if (reportBody.length + fileEntry.length > MAX_ISSUE_BODY_SIZE) { truncated = true break @@ -129,7 +119,6 @@ async function main() { filesIncluded++ } - // Add truncation notice if needed if (truncated) { const remaining = totalFiles - filesIncluded reportBody += `\n---\n\n⚠️ **Output truncated**: Showing ${filesIncluded} of ${totalFiles} files with lint issues. ${remaining} additional files have been omitted to stay within GitHub's issue size limits.\n` diff --git a/src/content-linter/scripts/pretty-print-results.ts b/src/content-linter/scripts/pretty-print-results.ts index bd758d0d949f..1bc20181b91f 100644 --- a/src/content-linter/scripts/pretty-print-results.ts +++ b/src/content-linter/scripts/pretty-print-results.ts @@ -37,9 +37,9 @@ export function prettyPrintResults( for (const [file, flaws] of Object.entries(results)) { console.log(chalk.bold(file)) - console.log('') // blank line + console.log('') - // It's very possible that a the same file has multiple flaws of the + // It's very possible that the same file has multiple flaws of the // same rule but on different line numbers. const sorted = [...flaws] .sort((a, b) => a.lineNumber - b.lineNumber) diff --git a/src/content-linter/tests/category-pages.ts b/src/content-linter/tests/category-pages.ts index 2c31c6ef04ca..e12311db0328 100644 --- a/src/content-linter/tests/category-pages.ts +++ b/src/content-linter/tests/category-pages.ts @@ -66,13 +66,12 @@ describe.skip('category pages', () => { // Only include category directories, not standalone category files like content/actions/quickstart.md .filter((link) => fs.existsSync(getPath(productDir, link, 'index'))) - // Map those to the Markdown file paths that represent that category page index const categoryPaths = categoryLinks.map((link) => getPath(productDir, link, 'index')) // Make them relative for nicer display in test names const categoryRelativePaths = categoryPaths.map((p) => path.relative(contentDir, p)) - // Combine those to fit vitests's `.each` usage + // Combine those to fit vitest's `.each` usage const categoryTuples = zip(categoryRelativePaths, categoryPaths, categoryLinks) as [ string, string, @@ -121,7 +120,6 @@ describe.skip('category pages', () => { await contextualize(req as ExtendedRequest, res as Response, next) await shortVersions(req as ExtendedRequest, res as Response, next) - // Read the product index data for rendering const productIndexContents = await fs.promises.readFile(productIndex, 'utf8') const productIndexData = getFrontmatterData(productIndexContents) @@ -145,7 +143,7 @@ describe.skip('category pages', () => { const articleContents = await fs.promises.readFile(articlePath, 'utf8') const articleData = getFrontmatterData(articleContents) - // Do not include subcategories in list of published articles + // Do not include subcategories nor hidden pages in list of published articles if (articleData.subcategory || articleData.hidden) return null // ".../content/github/{category}/{article}.md" => "/{article}" @@ -154,7 +152,6 @@ describe.skip('category pages', () => { ) ).filter(Boolean) as string[] - // Get all of the child articles that exist in the subdir const childEntries = await fs.promises.readdir(categoryDir, { withFileTypes: true }) const childFileEntries = childEntries.filter( (ent) => ent.isFile() && ent.name !== 'index.md', @@ -212,7 +209,6 @@ describe.skip('category pages', () => { test('slugified title matches parent directory name', () => { if (allowTitleToDifferFromFilename) return - // Get the parent directory name const categoryDirPath = path.dirname(indexAbsPath) const categoryDirName = path.basename(categoryDirPath) @@ -230,7 +226,6 @@ describe.skip('category pages', () => { const expectedSlug = expectedSlugs.at(-1) as string const newCategoryDirPath = path.join(path.dirname(categoryDirPath), expectedSlug) customMessage += `\nTo resolve this consider running:\n ./src/content-render/scripts/move-content.ts ${categoryDirPath} ${newCategoryDirPath}\n` - // Check if the directory name matches the expected slug expect(expectedSlugs.includes(categoryDirName), customMessage).toBeTruthy() }) }, diff --git a/src/content-linter/tests/integration/lint-cli.ts b/src/content-linter/tests/integration/lint-cli.ts index c089f08df799..bbc7a701c9c5 100644 --- a/src/content-linter/tests/integration/lint-cli.ts +++ b/src/content-linter/tests/integration/lint-cli.ts @@ -1,24 +1,9 @@ -/** - * Integration tests for the content linter CLI script. - * - * These tests verify the actual end-to-end behavior of the lint-content script - * by running it via npm commands and checking the output. Unlike unit tests that - * test individual functions in isolation, these tests catch issues in the full - * CLI workflow including: - * - * - Command-line argument parsing - * - File discovery and processing logic - * - Rule configuration and filtering - * - Error reporting and exit codes - * - * Test file structure: - * - Test files are created in content/test-integration/ during tests - * - This ensures the linter actually processes them (it only processes files in content/ or data/) - * - Files are cleaned up after each test - * - * These tests serve as regression protection and verify that the linter - * continues to work as expected when changes are made to the CLI logic. - */ +// End-to-end tests for the lint-content script, run via npm and checked by +// their output. They cover argument parsing, file discovery, rule filtering, +// and exit codes. +// +// Test files are written to content/test-integration/ because the linter only +// processes files under content/ or data/. import { execSync } from 'child_process' import { beforeEach, afterEach, describe, test, expect } from 'vitest' @@ -29,18 +14,14 @@ const rootDir = path.join(__dirname, '../../../..') const testContentDir = path.join(rootDir, 'content/test-integration') describe('Content Linter CLI Integration Tests', { timeout: 30000 }, () => { - // Run all tests in sequence to avoid npm process conflicts beforeEach(async () => { - // Create test directory await fs.mkdir(testContentDir, { recursive: true }) }) afterEach(async () => { - // Clean up test files await fs.rm(testContentDir, { recursive: true, force: true }) }) - // Helper function to run linter commands async function runLinter(args: string): Promise<{ output: string; exitCode: number }> { let output = '' let exitCode = 0 @@ -50,7 +31,7 @@ describe('Content Linter CLI Integration Tests', { timeout: 30000 }, () => { encoding: 'utf8', cwd: rootDir, stdio: 'pipe', - timeout: 10000, // 10 second timeout + timeout: 10000, }) } catch (error: unknown) { const execError = error as { stdout?: string; stderr?: string; status?: number } @@ -63,7 +44,7 @@ describe('Content Linter CLI Integration Tests', { timeout: 30000 }, () => { describe('Linter functionality verification', () => { test('should detect errors when explicitly running search-replace rule', async () => { - // Baseline test - ensures the linter can detect errors + // Baseline: if this fails, the linter is not detecting anything at all. const testFile = path.join(testContentDir, 'baseline-test.md') const testContent = `--- title: Baseline Test @@ -110,10 +91,9 @@ TODOCS This is placeholder content that should now be detected by default. const { output, exitCode } = await runLinter(`--paths "${testFile}"`) - // Verify that the linter properly detects errors when no --rules are specified - expect(exitCode).toBe(1) // Should exit with error due to TODOCS - expect(output).toContain('todocs-placeholder') // TODOCS should be detected by default - expect(output).toContain('ERROR') // Errors should be detected + expect(exitCode).toBe(1) + expect(output).toContain('todocs-placeholder') + expect(output).toContain('ERROR') }) test('should respect rule filtering when specific rules are provided', async () => { @@ -137,7 +117,7 @@ TODOCS This file has multiple error types. `--paths "${testFile}" --rules heading-increment`, ) - expect(exitCode).toBe(0) // heading-increment rule behavior with filtering + expect(exitCode).toBe(0) expect(output).not.toContain('ERROR') expect(output).not.toContain('todocs-placeholder') }) diff --git a/src/content-linter/tests/lint-files.ts b/src/content-linter/tests/lint-files.ts index 1cd3f18a2a0a..dd6a6f916721 100755 --- a/src/content-linter/tests/lint-files.ts +++ b/src/content-linter/tests/lint-files.ts @@ -166,7 +166,6 @@ const yamlWalkOptions = { includeBasePath: true, } -// different lint rules apply to different content types let ymlToLint // compile lists of all the files we want to lint @@ -199,7 +198,6 @@ function formatLinkError(message: string, links: string[]) { // Returns `content` if its a string, or `content.description` if it can. // Used for getting the nested `description` key in glossary files. -// Using any because content can be string | { description: string } | other YAML structures function getContent(content: unknown) { if (typeof content === 'string') return content if ( @@ -214,7 +212,7 @@ function getContent(content: unknown) { const diffFiles = getDiffFiles() -// If present, and not empty, leverage it because in most cases it's empty. +// If it is present and not empty, use it. In most cases it is empty. if (diffFiles.length > 0) { // It's faster to do this once and then re-use over and over in the // .filter() later on. diff --git a/src/content-linter/tests/site-data-references.ts b/src/content-linter/tests/site-data-references.ts index c980541b8fc0..c0828043b187 100644 --- a/src/content-linter/tests/site-data-references.ts +++ b/src/content-linter/tests/site-data-references.ts @@ -33,7 +33,7 @@ describe('data references', () => { vi.setConfig({ testTimeout: 60 * 1000 }) test('every data reference found in English variable files is defined and has a value', async () => { - // value can be any type returned by getDataByLanguage - we check if it's a string + // getDataByLanguage can return any YAML type, so the string check happens below. let errors: Array<{ key: string; value: unknown; variableFile: string }> = [] const allVariables = getDeepDataByLanguage('variables', 'en') const variables = Object.values(allVariables) @@ -54,7 +54,7 @@ describe('data references', () => { }), ) - errors = uniqWith(errors, isEqual) // remove duplicates + errors = uniqWith(errors, isEqual) expect(errors.length, JSON.stringify(errors, null, 2)).toBe(0) }) }) diff --git a/src/content-linter/tests/unit/ctas-schema.ts b/src/content-linter/tests/unit/ctas-schema.ts index 0712e6541857..9fa8139057b7 100644 --- a/src/content-linter/tests/unit/ctas-schema.ts +++ b/src/content-linter/tests/unit/ctas-schema.ts @@ -82,11 +82,11 @@ try_ghec_for_free: '{% ifversion ghec %}https://github.com/account/enterprises/n expect(errors.length).toBe(1) // Should detect and try to convert the old CTA format expect(errors[0].fixInfo).toBeDefined() - // The extracted URL should not include the curly brace - verify by checking the fix + // The extracted URL should not include the curly brace from the Liquid tag. const fixedUrl = errors[0].fixInfo?.insertText expect(fixedUrl).toBeDefined() - expect(fixedUrl).not.toContain('{') // Should not include curly brace from Liquid syntax - expect(fixedUrl).not.toContain('}') // Should not include curly brace from Liquid syntax + expect(fixedUrl).not.toContain('{') + expect(fixedUrl).not.toContain('}') expect(fixedUrl).toContain('ref_product=ghec') // Should have converted old format correctly }) diff --git a/src/content-linter/tests/unit/frontmatter-content-type.ts b/src/content-linter/tests/unit/frontmatter-content-type.ts index 932e88902f6e..84e5a5ed83e3 100644 --- a/src/content-linter/tests/unit/frontmatter-content-type.ts +++ b/src/content-linter/tests/unit/frontmatter-content-type.ts @@ -38,9 +38,7 @@ describe('GHD065 - frontmatter-content-type', () => { resetCache() }) - // ------------------------------------------------------------------- // Passing cases - // ------------------------------------------------------------------- test('file with correct contentType matching directory passes', async () => { const strings = { @@ -101,7 +99,7 @@ describe('GHD065 - frontmatter-content-type', () => { test('file outside qualifying product is not checked', async () => { // actions in fixtures has non-EDI subdirs (category/, using-workflows/), - // so it does NOT qualify — the rule should skip it entirely. + // so it does NOT qualify and the rule should skip it entirely. const strings = { 'content/actions/category/test-file.md': md(['title: Test', 'versions:', " fpt: '*'"]), } @@ -119,9 +117,7 @@ describe('GHD065 - frontmatter-content-type', () => { expect(errors).toEqual([]) }) - // ------------------------------------------------------------------- // Failing cases - // ------------------------------------------------------------------- test('missing contentType in qualifying product triggers error', async () => { const strings = { diff --git a/src/content-linter/tests/unit/frontmatter-landing-carousels.ts b/src/content-linter/tests/unit/frontmatter-landing-carousels.ts index 3238d9555f7e..2aaeeefd3f63 100644 --- a/src/content-linter/tests/unit/frontmatter-landing-carousels.ts +++ b/src/content-linter/tests/unit/frontmatter-landing-carousels.ts @@ -92,14 +92,9 @@ describe(ruleName, () => { }) test('absolute paths are prioritized over relative paths', async () => { - // This test verifies that when both absolute and relative paths exist with the same name, - // the absolute path is chosen over the relative path. - // - // Setup: - // - /article-one should resolve to src/fixtures/fixtures/content/article-one.md (absolute) - // - article-one (relative) would resolve to src/content-linter/tests/fixtures/landing-carousels/article-one.md - // - // The test passes because our logic prioritizes the absolute path resolution first + // /article-one exists both as src/fixtures/fixtures/content/article-one.md + // and as src/content-linter/tests/fixtures/landing-carousels/article-one.md. + // The absolute resolution wins. const result = await runRule(frontmatterLandingCarousels, { files: [ABSOLUTE_PRIORITY], ...fmOptions, @@ -108,16 +103,7 @@ describe(ruleName, () => { }) test('path priority resolution works correctly', async () => { - // This test verifies that absolute paths are prioritized over relative paths - // when both files exist with the same name. - // - // Setup: - // - /article-one could resolve to EITHER: - // 1. src/fixtures/fixtures/content/article-one.md (absolute - should be chosen) - // 2. src/content-linter/tests/fixtures/landing-carousels/article-one.md (relative - should be ignored) - // - // Our prioritization logic should choose #1 (absolute) over #2 (relative) - // This test passes because the absolute path exists and is found first + // Same collision as the test above, reached through a different fixture. const result = await runRule(frontmatterLandingCarousels, { files: [PATH_PRIORITY], ...fmOptions, @@ -126,10 +112,7 @@ describe(ruleName, () => { }) test('absolute-only paths work when no relative path exists', async () => { - // This test verifies that absolute path resolution works when no relative path exists - // /article-two exists in src/fixtures/fixtures/content/article-two.md - // but NOT in src/content-linter/tests/fixtures/landing-carousels/article-two.md - // This test would fail if we didn't prioritize absolute paths properly + // /article-two resolves from src/fixtures/fixtures/content/article-two.md. const result = await runRule(frontmatterLandingCarousels, { files: [ABSOLUTE_ONLY], ...fmOptions, diff --git a/src/content-linter/tests/unit/frontmatter-schema.ts b/src/content-linter/tests/unit/frontmatter-schema.ts index a4ca19a5c20b..8fa299079eb2 100644 --- a/src/content-linter/tests/unit/frontmatter-schema.ts +++ b/src/content-linter/tests/unit/frontmatter-schema.ts @@ -3,7 +3,7 @@ import { describe, expect, test } from 'vitest' import { runRule } from '../../lib/init-test' import { frontmatterSchema } from '../../lib/linting-rules/frontmatter-schema' -// Configure the test figure to not split frontmatter and content +// Configure the test fixture to not split frontmatter and content const fmOptions = { markdownlintOptions: { frontMatter: null } } describe(frontmatterSchema.names.join(' - '), () => { diff --git a/src/content-linter/tests/unit/frontmatter-search-replace.ts b/src/content-linter/tests/unit/frontmatter-search-replace.ts index 152e61e67290..788f41102dbf 100644 --- a/src/content-linter/tests/unit/frontmatter-search-replace.ts +++ b/src/content-linter/tests/unit/frontmatter-search-replace.ts @@ -19,7 +19,6 @@ describe('search-replace rule in frontmatter', () => { const errors = result.markdown || [] - // Should find TODOCS in frontmatter const todosErrors = errors.filter((e) => e.errorDetail && /TODOCS/.test(e.errorDetail)) expect(todosErrors.length).toBe(1) expect(todosErrors[0].lineNumber).toBe(2) // title: TODOCS @@ -47,7 +46,6 @@ describe('search-replace rule in frontmatter', () => { const errors = result.markdown || [] - // Should find all TODOCS instances in frontmatter const todosErrors = errors.filter((e) => e.errorDetail && /TODOCS/.test(e.errorDetail)) expect(todosErrors.length).toBe(3) expect(todosErrors[0].lineNumber).toBe(2) // title: TODOCS @@ -77,7 +75,6 @@ describe('search-replace rule in frontmatter', () => { const errors = result.markdown || [] - // Should find domain errors in frontmatter const domainErrors = errors.filter( (e) => e.errorDetail && /docs-domain|help-domain|developer-domain/.test(e.errorDetail), ) @@ -108,7 +105,6 @@ describe('search-replace rule in frontmatter', () => { const errors = result.markdown || [] - // Should find deprecated syntax errors in frontmatter const deprecatedErrors = errors.filter( (e) => e.errorDetail && /site\.data|octicon/.test(e.errorDetail), ) diff --git a/src/content-linter/tests/unit/frontmatter-versions-whitespace.ts b/src/content-linter/tests/unit/frontmatter-versions-whitespace.ts index 99ca3a013552..d81bf4350f8d 100644 --- a/src/content-linter/tests/unit/frontmatter-versions-whitespace.ts +++ b/src/content-linter/tests/unit/frontmatter-versions-whitespace.ts @@ -18,7 +18,6 @@ interface InvalidTestCase { expectedMessage?: string } -// Valid cases - should pass const validCases: ValidTestCase[] = [ { name: 'valid-simple-versions', @@ -63,7 +62,6 @@ This is a test. }, ] -// Invalid cases - should fail const invalidCases: InvalidTestCase[] = [ { name: 'trailing-whitespace', diff --git a/src/content-linter/tests/unit/image-alt-text-end-punctuation.ts b/src/content-linter/tests/unit/image-alt-text-end-punctuation.ts index c4e05da23279..956692c95240 100644 --- a/src/content-linter/tests/unit/image-alt-text-end-punctuation.ts +++ b/src/content-linter/tests/unit/image-alt-text-end-punctuation.ts @@ -59,9 +59,8 @@ describe(imageAltTextEndPunctuation.names.join(' - '), () => { ].join('\n') const result = await runRule(imageAltTextEndPunctuation, { strings: { markdown } }) const errors = result.markdown - // This rule is not concerned with empty alt text - // That will be caught by the incorrect-alt-text-length rule - // So technically, it's not imageAltTextEndPunctuation's problem. + // This rule is not concerned with empty alt text. The + // incorrect-alt-text-length rule catches that instead. expect(errors.length).toBe(0) }) }) diff --git a/src/content-linter/tests/unit/image-alt-text-exclude-start-words.ts b/src/content-linter/tests/unit/image-alt-text-exclude-start-words.ts index 7b2bdac0f7b1..885c7f470e80 100644 --- a/src/content-linter/tests/unit/image-alt-text-exclude-start-words.ts +++ b/src/content-linter/tests/unit/image-alt-text-exclude-start-words.ts @@ -39,9 +39,8 @@ describe(imageAltTextExcludeStartWords.names.join(' - '), () => { ].join('\n') const result = await runRule(imageAltTextExcludeStartWords, { strings: { markdown } }) const errors = result.markdown - // This rule is not concerned with empty alt text - // That will be caught by the incorrect-alt-text-empty rule - // So technically, it's not imageAltTextEndPunctuation's problem. + // This rule is not concerned with empty alt text. The + // incorrect-alt-text-length rule catches that instead. expect(errors.length).toBe(0) }) }) diff --git a/src/content-linter/tests/unit/internal-links-no-lang.ts b/src/content-linter/tests/unit/internal-links-no-lang.ts index e883adf5a55c..66d8eaf970bb 100644 --- a/src/content-linter/tests/unit/internal-links-no-lang.ts +++ b/src/content-linter/tests/unit/internal-links-no-lang.ts @@ -29,7 +29,7 @@ describe(internalLinksNoLang.names.join(' - '), () => { // a // means the link is external 'These are the [Docs](//ja/actions) we need.', 'This is the [actions Docs](/actions)', - // A link that starts with a language code + // Starts with a path segment that is not a language code '[Enterprise](/enterprise/overview)', ].join('\n') const result = await runRule(internalLinksNoLang as Rule, { strings: { markdown } }) diff --git a/src/content-linter/tests/unit/internal-links-old-version.ts b/src/content-linter/tests/unit/internal-links-old-version.ts index 84c0510dd77e..39e4e4590de6 100644 --- a/src/content-linter/tests/unit/internal-links-old-version.ts +++ b/src/content-linter/tests/unit/internal-links-old-version.ts @@ -24,7 +24,7 @@ describe(internalLinksOldVersion.names.join(' - '), () => { const markdown = [ // External links with enterprise in them '[External link](https://someservice.com/enterprise/1.0/admin/yes)', - // Current versioning links is excluded from this test + // Current versioning links are excluded from this test '[New versioning](/github/site-policy/enterprise/2.2/yes)', ].join('\n') const result = await runRule(internalLinksOldVersion as Rule, { strings: { markdown } }) diff --git a/src/content-linter/tests/unit/lint-report-exclusions.ts b/src/content-linter/tests/unit/lint-report-exclusions.ts index 7879f14a3987..e9fe1bd8c6d3 100644 --- a/src/content-linter/tests/unit/lint-report-exclusions.ts +++ b/src/content-linter/tests/unit/lint-report-exclusions.ts @@ -51,7 +51,6 @@ describe('content linter configuration', () => { function shouldIncludeInReport(flaw: LintFlaw): boolean { const allRuleNames = getAllRuleNames(flaw) - // Check if severity should be included if (reportingConfig.includeSeverities.includes(flaw.severity)) { return true } diff --git a/src/content-linter/tests/unit/liquid-ifversion-versions.ts b/src/content-linter/tests/unit/liquid-ifversion-versions.ts index 9b602487cda2..7a3c831d3b8d 100644 --- a/src/content-linter/tests/unit/liquid-ifversion-versions.ts +++ b/src/content-linter/tests/unit/liquid-ifversion-versions.ts @@ -114,8 +114,7 @@ describe(liquidIfversionVersions.names.join(' - '), () => { }) test.skip('ifversion using feature based version extended with shortname all versions', async () => { - // That `features/volvo.yml` contains `fpt:'*', ghec:'*'` - // so combined with the + // That `features/volvo.yml` contains `fpt:'*', ghec:'*'`. const markdown = ` {% ifversion volvo or ghes %}{% endif %} ` diff --git a/src/content-linter/tests/unit/liquid-syntax.ts b/src/content-linter/tests/unit/liquid-syntax.ts index 2cc769ce9bbd..a503b869def0 100644 --- a/src/content-linter/tests/unit/liquid-syntax.ts +++ b/src/content-linter/tests/unit/liquid-syntax.ts @@ -3,7 +3,7 @@ import { describe, expect, test } from 'vitest' import { runRule } from '../../lib/init-test' import { frontmatterLiquidSyntax, liquidSyntax } from '../../lib/linting-rules/liquid-syntax' -// Configure the test figure to not split frontmatter and content +// Configure the test fixture to not split frontmatter and content const fmOptions = { markdownlintOptions: { frontMatter: null } } describe(frontmatterLiquidSyntax.names.join(' - '), () => { diff --git a/src/content-linter/tests/unit/liquid-versioning.ts b/src/content-linter/tests/unit/liquid-versioning.ts index 2711ce83ee9e..0d142a66b43d 100644 --- a/src/content-linter/tests/unit/liquid-versioning.ts +++ b/src/content-linter/tests/unit/liquid-versioning.ts @@ -58,7 +58,7 @@ describe(liquidIfVersionTags.names.join(' - '), () => { '{% ifversion ghes < 2.9 %}', // Incorrect syntax '{% ifversion ghec or ifversion fpt %}', - // Typo - should be not ghec + // Typo: should be `not ghec` '{% ifversion no ghec %}', ] const result = await runRule(liquidIfVersionTags, { diff --git a/src/content-linter/tests/unit/rai-app-card-structure.ts b/src/content-linter/tests/unit/rai-app-card-structure.ts index 82394e1ad94c..ef1f838dacc1 100644 --- a/src/content-linter/tests/unit/rai-app-card-structure.ts +++ b/src/content-linter/tests/unit/rai-app-card-structure.ts @@ -3,11 +3,7 @@ import { describe, expect, test } from 'vitest' import { runRule } from '../../lib/init-test' import { raiAppCardStructure } from '../../lib/linting-rules/rai-app-card-structure' -// --------------------------------------------------------------------------- -// Helpers -// --------------------------------------------------------------------------- - -/** A minimal valid RAI card with all required H2s, H3s, and reusables. */ +// A minimal valid RAI card with all required H2s, H3s, and reusables. function validCard(): string { return [ '---', @@ -102,9 +98,7 @@ function validCard(): string { } describe(raiAppCardStructure.names.join(' - '), () => { - // ----------------------------------------------------------------------- - // Happy path & filtering - // ----------------------------------------------------------------------- + // Happy path and filtering test('valid RAI card produces zero errors', async () => { const markdown = validCard() @@ -128,9 +122,7 @@ describe(raiAppCardStructure.names.join(' - '), () => { expect(errors.length).toBe(0) }) - // ----------------------------------------------------------------------- - // One negative test per validator — proves each code path fires - // ----------------------------------------------------------------------- + // One negative test per validator, to prove each code path fires test('missing a required H2 section reports an error', async () => { const markdown = validCard() diff --git a/src/content-linter/tests/unit/rule-filtering.ts b/src/content-linter/tests/unit/rule-filtering.ts index 7488c5f94b76..0da64c2b514a 100644 --- a/src/content-linter/tests/unit/rule-filtering.ts +++ b/src/content-linter/tests/unit/rule-filtering.ts @@ -1,7 +1,6 @@ import { describe, test, expect, vi } from 'vitest' import { shouldIncludeRule } from '../../scripts/lint-content' -// Mock the get-rules module to provide test data for rule definitions vi.mock('../../lib/helpers/get-rules', () => ({ allRules: [ { diff --git a/src/content-linter/tests/unit/search-replace.ts b/src/content-linter/tests/unit/search-replace.ts index a498e4b98bbb..2cc4cd9f17d5 100644 --- a/src/content-linter/tests/unit/search-replace.ts +++ b/src/content-linter/tests/unit/search-replace.ts @@ -79,7 +79,6 @@ describe(searchReplace.names.join(' - '), () => { markdownlintOptions: { frontMatter: null }, // Include frontmatter in linting }) const errors = result.markdown - // Should find 3 TODOCS occurrences in frontmatter expect(errors.length).toBe(3) expect(errors[0].lineNumber).toBe(2) // title: TODOCS expect(errors[1].lineNumber).toBe(3) // shortTitle: TODOCS @@ -102,7 +101,6 @@ describe(searchReplace.names.join(' - '), () => { markdownlintOptions: { frontMatter: null }, // Include frontmatter in linting }) const errors = result.markdown - // Should find 4 TODOCS occurrences total (2 in frontmatter + 2 in content) expect(errors.length).toBe(4) expect(errors[0].lineNumber).toBe(2) // title: TODOCS expect(errors[1].lineNumber).toBe(3) // intro: TODOCS diff --git a/src/content-pipelines/state/copilot-cli.sha b/src/content-pipelines/state/copilot-cli.sha index dcbb3c91d1b3..93d3d808abd3 100644 --- a/src/content-pipelines/state/copilot-cli.sha +++ b/src/content-pipelines/state/copilot-cli.sha @@ -1 +1 @@ -bc65d3739bbe4d7f9832b2bceea9d03f633b6d0b +5ce1aa09128c57a8a240d93f5089e35969c8c4d9 diff --git a/src/content-render/liquid/data.ts b/src/content-render/liquid/data.ts index bafe90d364a0..44c0151cd40b 100644 --- a/src/content-render/liquid/data.ts +++ b/src/content-render/liquid/data.ts @@ -91,7 +91,6 @@ function handleIndent(tagToken: TagToken, text: string): string { // keep the blockquote character on every successive line. const blockquoteRegexp = /^\n?([ \t]*>[ \t]?)/ function handleBlockquote(tagToken: TagToken, text: string): string { - // If the text isn't multiline, skip if (text.split('\n').length <= 1) return text // If the line with the liquid tag starts with a blockquote... @@ -100,7 +99,6 @@ function handleBlockquote(tagToken: TagToken, text: string): string { const inputLine = input.split('\n').find((line) => line.includes(content)) if (!inputLine || !blockquoteRegexp.test(inputLine)) return text - // Keep the character on successive lines const match = inputLine.match(blockquoteRegexp) if (!match) return text const start = match[0] diff --git a/src/content-render/liquid/engine.ts b/src/content-render/liquid/engine.ts index 034fa453ddf2..11418f9cfd9a 100644 --- a/src/content-render/liquid/engine.ts +++ b/src/content-render/liquid/engine.ts @@ -56,8 +56,27 @@ engine.registerFilter('version_num', (input: string): string => { }) /** - * Convert the input to a slug + * Render a string that itself contains Liquid. + * + * Values interpolated with `{{ }}` are not given a second Liquid pass, so + * `{% data %}` or `{% ifversion %}` stored in a data file would otherwise be + * printed literally. This filter lets data files keep using Liquid instead of + * hardcoding product names or version logic. + * + * Usage: {{ row.action | render_liquid }} */ +interface FilterScope { + context: { + environments: Record + } +} + +engine.registerFilter('render_liquid', function (this: FilterScope, input: unknown): unknown { + if (typeof input !== 'string') return input + if (!input.includes('{%') && !input.includes('{{')) return input + return engine.parseAndRender(input, this.context.environments) +}) + engine.registerFilter('slugify', (input: string): string => { const slugger = new GithubSlugger() return slugger.slug(input) diff --git a/src/content-render/liquid/ifversion.ts b/src/content-render/liquid/ifversion.ts index adc1b16d5ccb..38c724517a18 100644 --- a/src/content-render/liquid/ifversion.ts +++ b/src/content-render/liquid/ifversion.ts @@ -95,21 +95,19 @@ export default class Ifversion extends Tag { for (const branch of this.branches) { let resolvedBranchCond = branch.cond - // Resolve "not" keywords in the conditional, if any. resolvedBranchCond = this.handleNots(resolvedBranchCond) // Resolve special operators in the conditional, if any. // This will replace syntax like `fpt or ghes < 3.0` with `fpt or true` or `fpt or false`. resolvedBranchCond = this.handleOperators(resolvedBranchCond) - // Resolve version names to boolean values for Markdown API context. - // This will replace syntax like `fpt or ghec` with `true or false` based on current version. - // Only apply this transformation in Markdown API context to avoid breaking existing functionality. + // Replace syntax like `fpt or ghec` with `true or false` based on the current + // version. Only done for the Markdown API, where the version names would + // otherwise be undefined. if ((ctx.environments as IfversionEnvironments).markdownRequested) { resolvedBranchCond = this.handleVersionNames(resolvedBranchCond) } - // Use Liquid's native function for the final evaluation. const cond = yield new Value(resolvedBranchCond, this.liquid).value(ctx, ctx.opts.lenientIf) if (isTruthy(cond, ctx)) { @@ -125,7 +123,6 @@ export default class Ifversion extends Tag { const condArray = resolvedBranchCond.split(' ') - // Find the first index in the array that contains "not". const notIndex = condArray.findIndex((el: string) => el === 'not') // E.g., ['not', 'fpt'] @@ -156,7 +153,6 @@ export default class Ifversion extends Tag { // If this conditional contains multiple parts using `or` or `and`, get only the conditional with operators. const condArray = resolvedBranchCond.split(' ') - // Find the first index in the array that contains an operator. const operatorIndex = condArray.findIndex((el: string) => supportedOperators.find((op: string) => el === op), ) @@ -164,7 +160,6 @@ export default class Ifversion extends Tag { // E.g., ['ghes', '<', '3.1'] const condParts = condArray.slice(operatorIndex - 1, operatorIndex + 2) - // Assign to vars. const [versionShortName, operator, releaseToEvaluate] = condParts // Make sure the operator is supported and the release number matches `\d\d?\.\d\d?` @@ -219,17 +214,12 @@ export default class Ifversion extends Tag { return resolvedBranchCond } - // Split the condition into tokens for processing const tokens = resolvedBranchCond.split(/\s+/) const processedTokens = tokens.map((token: string) => { - // Check if the token is a version short name (fpt, ghec, ghes, ghae) const versionShortNames = ['fpt', 'ghec', 'ghes', 'ghae'] if (versionShortNames.includes(token)) { - // Transform version names to boolean values for Markdown API - // This fixes the original issue where version names were undefined in API context return token === this.currentVersionObj!.shortName ? 'true' : 'false' } - // Return the token unchanged if it's not a version name return token }) diff --git a/src/content-render/liquid/indented-data-reference.ts b/src/content-render/liquid/indented-data-reference.ts index 63ad23e1c942..b5b7f589d73b 100644 --- a/src/content-render/liquid/indented-data-reference.ts +++ b/src/content-render/liquid/indented-data-reference.ts @@ -47,7 +47,6 @@ const IndentedDataReference = { assert(parseInt(numSpaces) || numSpaces === '0', '"spaces=NUMBER" must include a number') - // Get the referenced value from the context const text: string | undefined = getDataByLanguage( dataReference, scope.environments.currentLanguage, @@ -63,7 +62,6 @@ const IndentedDataReference = { return } - // add spaces to each line const renderedReferenceWithIndent: string = text.replace(/^/gm, ' '.repeat(parseInt(numSpaces))) return this.liquid.parseAndRender(renderedReferenceWithIndent, scope.environments) diff --git a/src/content-render/liquid/octicon.ts b/src/content-render/liquid/octicon.ts index ca5a40fa7379..aacb8927e791 100644 --- a/src/content-render/liquid/octicon.ts +++ b/src/content-render/liquid/octicon.ts @@ -25,7 +25,6 @@ const Octicon = { throw new TokenizationError(SyntaxHelp, tagToken) } - // Memoize the icon this.icon = match.groups.icon // Breaking change in octicons 12 // https://github.com/primer/octicons/releases/tag/v12.0.0 @@ -36,29 +35,24 @@ const Octicon = { this.options = {} - // Memoize any options passed if (match.groups.options) { let optionsMatch: RegExpExecArray | null - // Loop through each option matching the OptionsSyntax regex while ((optionsMatch = OptionsSyntax.exec(match.groups.options))) { // Pull out the key/value ([0] is the whole input) const [, key, value] = optionsMatch this.options[key] = value - // Alias label to aria-label if (key === 'label') this.options['aria-label'] = value } } }, async render(): Promise { - // Throw an error if the requested octicon does not exist. if (!Object.prototype.hasOwnProperty.call(octicons, this.icon)) { throw new Error(`Octicon ${this.icon} does not exist`) } - // Auto-generate aria-label if not provided // Replace non-alphanumeric characters with spaces and append " icon" if (!this.options['aria-label']) { const defaultLabel = `${this.icon.toLowerCase().replace(/[^a-z0-9]+/gi, ' ')} icon` diff --git a/src/content-render/liquid/prompt.ts b/src/content-render/liquid/prompt.ts index dbba2b28b3c4..1df9e1bcd28a 100644 --- a/src/content-render/liquid/prompt.ts +++ b/src/content-render/liquid/prompt.ts @@ -1,4 +1,3 @@ -// src/content-render/liquid/prompt.ts // Defines {% prompt %}…{% endprompt %} to wrap its content in and append the Copilot icon. import octicons from '@primer/octicons' @@ -15,7 +14,6 @@ interface LiquidTag { export const Prompt: LiquidTag = { type: 'block', - // Collect everything until {% endprompt %} parse(tagToken: TagToken, remainTokens: TopLevelToken[]): void { this.templates = [] const stream = this.liquid.parser.parseStream(remainTokens) @@ -28,12 +26,10 @@ export const Prompt: LiquidTag = { stream.start() }, - // Render the inner Markdown, wrap in , then append the SVG *render(scope: unknown): Generator { const content = yield this.liquid.renderer.renderTemplates(this.templates, scope) const contentString = String(content) - // build a URL with the prompt text encoded as query parameter const promptParam: string = encodeURIComponent(contentString) const href: string = `https://github.com/copilot?prompt=${promptParam}` // Use murmur hash for deterministic ID (avoids hydration mismatch) diff --git a/src/content-render/scripts/add-content-type.ts b/src/content-render/scripts/add-content-type.ts index 588b484bdaf0..f6286ea7b4a2 100644 --- a/src/content-render/scripts/add-content-type.ts +++ b/src/content-render/scripts/add-content-type.ts @@ -107,7 +107,6 @@ function processFile(filePath: string, scriptOptions: ScriptOptions) { return { processed: true, updated: false } } - // Check if we're actually changing an existing contentType const isChangingContentType = data.contentType && data.contentType !== newContentType const isAddingContentType = !data.contentType @@ -119,7 +118,6 @@ function processFile(filePath: string, scriptOptions: ScriptOptions) { console.log(`Adding contentType '${newContentType}' on ${relativePath}`) } - // Only update if there's actually a change needed if (isChangingContentType || isAddingContentType) { data.contentType = newContentType } else { @@ -127,7 +125,6 @@ function processFile(filePath: string, scriptOptions: ScriptOptions) { return { processed: true, updated: false } } - // Write the file back fs.writeFileSync( filePath, frontmatter.stringify( @@ -183,7 +180,6 @@ function determineContentType(relativePath: string): string { return LANDING_TYPE } - // Classify anything else as 'other'. return OTHER_TYPE } diff --git a/src/content-render/scripts/cta-builder.ts b/src/content-render/scripts/cta-builder.ts index bd633c63dbb6..96ca90b65f00 100644 --- a/src/content-render/scripts/cta-builder.ts +++ b/src/content-render/scripts/cta-builder.ts @@ -31,7 +31,6 @@ type CTASchemaProperties = { [K in keyof CTAParams]-?: CTASchemaProperty } -// Conversion mappings from old CTA format to new schema const ctaToTypeMapping: Record = { 'GHEC trial': 'trial', 'Copilot trial': 'trial', @@ -51,18 +50,15 @@ const ctaToPlanMapping: Record = { 'GHEC trial': 'enterprise', } -// Keywords that suggest a button context vs inline text link const buttonKeywords = ['landing', 'signup', 'download', 'trial'] const program = new Command() -// CLI setup program .name('cta-builder') .description('Create a properly formatted Call-to-Action URL with tracking parameters.') .version('1.0.0') -// Add conversion command program .command('convert') .description('Convert old CTA URLs to new schema format') @@ -72,7 +68,6 @@ program convertUrls(options) }) -// Add validation command program .command('validate') .description('Validate a CTA URL against the schema') @@ -81,7 +76,6 @@ program validateUrl(options) }) -// Add programmatic build command program .command('build') .description('Build a CTA URL programmatically with flags (outputs URL only)') @@ -94,7 +88,6 @@ program buildProgrammaticCTA(options) }) -// Default to interactive mode program.action(() => { interactiveBuilder() }) @@ -104,7 +97,6 @@ if (import.meta.url === `file://${process.argv[1]}`) { program.parse() } -// Helper function to select from lettered options async function selectFromOptions( paramName: string, message: string, @@ -139,7 +131,6 @@ async function selectFromOptions( } } -// Helper function to confirm yes/no async function confirmChoice( message: string, promptFn: (question: string) => Promise, @@ -161,7 +152,6 @@ async function confirmChoice( } } -// Extract CTA parameters from a URL function extractCTAParams(url: string): CTAParams { const urlObj = new URL(url) const ctaParams: CTAParams = {} @@ -224,7 +214,6 @@ function validateCTAParams(params: CTAParams): { isValid: boolean; errors: strin } } -// Build URL with CTA parameters function buildCTAUrl(baseUrl: string, params: CTAParams): string { const url = new URL(baseUrl) @@ -237,17 +226,15 @@ function buildCTAUrl(baseUrl: string, params: CTAParams): string { return url.toString() } -// Convert old CTA URL to new schema format export function convertOldCTAUrl(oldUrl: string): { newUrl: string; notes: string[] } { const notes: string[] = [] try { const url = new URL(oldUrl) - // Build new parameters const newParams: CTAParams = {} - // First, check if any of the new params already exist, and preserve those if so + // Preserve any new-style params that are already on the URL. for (const [key, value] of url.searchParams.entries()) { for (const param of Object.keys(ctaSchema.properties)) { if (key === param && key in ctaSchema.properties) { @@ -264,17 +251,14 @@ export function convertOldCTAUrl(oldUrl: string): { newUrl: string; notes: strin } } - // Try to convert old params to new params const refCta = url.searchParams.get('ref_cta') || '' const refLoc = url.searchParams.get('ref_loc') || '' - // Map ref_product if (!newParams.ref_product) { newParams.ref_product = inferProductFromUrl(oldUrl, refCta) notes.push(`- Missing ref_product - made an inference, manually update if needed`) } - // Map ref_type if (!newParams.ref_type) { newParams.ref_type = ctaToTypeMapping[refCta] || 'engagement' if (!ctaToTypeMapping[refCta]) { @@ -282,13 +266,11 @@ export function convertOldCTAUrl(oldUrl: string): { newUrl: string; notes: strin } } - // Map ref_style if (!newParams.ref_style) { newParams.ref_style = inferStyleFromContext(refLoc) notes.push(`- Missing ref_style - made an inference, manually update if needed`) } - // Map ref_plan (optional) if (!newParams.ref_plan) { if (ctaToPlanMapping[refCta]) { newParams.ref_plan = ctaToPlanMapping[refCta] @@ -298,12 +280,10 @@ export function convertOldCTAUrl(oldUrl: string): { newUrl: string; notes: strin // Build new URL - preserve all existing parameters except old ref_ parameters const newUrl = new URL(url.toString()) - // Remove old CTA parameters newUrl.searchParams.delete('ref_cta') newUrl.searchParams.delete('ref_loc') newUrl.searchParams.delete('ref_page') - // Add new CTA parameters for (const [key, value] of Object.entries(newParams)) { if (value) { newUrl.searchParams.set(key, value) @@ -343,7 +323,6 @@ function inferProductFromUrl(url: string, refCta: string): string { } catch { // Fallback if url isn't valid: leave hostname empty } - // Strict hostname check for desktop.github.com if (hostname === 'desktop.github.com' || refCta.includes('desktop')) { return 'desktop' } @@ -361,7 +340,6 @@ function inferProductFromUrl(url: string, refCta: string): string { ) { return 'ghec' } - // Default fallback return 'copilot' } @@ -372,15 +350,12 @@ function inferStyleFromContext(refLoc: string): string { return isButton ? 'button' : 'text' } -// Interactive CTA builder async function interactiveBuilder(): Promise { - // Create readline interface for interactive mode const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }) - // Helper function to prompt user (scoped to this function) function prompt(question: string): Promise { return new Promise((resolve) => { rl.question(question, (answer) => { @@ -392,7 +367,6 @@ async function interactiveBuilder(): Promise { try { console.log(chalk.blue.bold('🚀 Guided CTA URL builder\n')) - // Get base URL with validation let baseUrl = '' while (!baseUrl) { const input = await prompt('Enter the base URL (e.g., https://github.com/features/copilot): ') @@ -406,7 +380,6 @@ async function interactiveBuilder(): Promise { const params: CTAParams = {} - // Required parameters console.log(chalk.white(`\nRequired parameters:`)) const schemaProps = ctaSchema.properties as CTASchemaProperties @@ -442,7 +415,6 @@ async function interactiveBuilder(): Promise { } } - // Validate parameters const validation = validateCTAParams(params) if (!validation.isValid) { @@ -454,7 +426,6 @@ async function interactiveBuilder(): Promise { return } - // Build and display URL const ctaUrl = buildCTAUrl(baseUrl, params) console.log(chalk.green('\n✅ CTA URL generated successfully!')) @@ -477,7 +448,6 @@ async function interactiveBuilder(): Promise { } } -// Convert URLs command handler async function convertUrls(options: { url?: string; quiet?: boolean }): Promise { try { if (!options.quiet) { @@ -540,7 +510,6 @@ async function convertUrls(options: { url?: string; quiet?: boolean }): Promise< // The convert command doesn't use readline, so script should exit naturally } -// Validate URLs command handler async function validateUrl(options: { url?: string }): Promise { try { console.log(chalk.blue.bold('CTA URL validator')) @@ -549,7 +518,6 @@ async function validateUrl(options: { url?: string }): Promise { console.log(chalk.white('\nValidating URL:')) console.log(chalk.gray(options.url)) - // Extract CTA parameters from URL let ctaParams: CTAParams try { ctaParams = extractCTAParams(options.url) @@ -558,7 +526,6 @@ async function validateUrl(options: { url?: string }): Promise { return } - // Check if URL has any CTA parameters if (Object.keys(ctaParams).length === 0) { console.log(chalk.yellow('\nℹ️ No CTA parameters found in URL')) return @@ -598,7 +565,6 @@ async function validateUrl(options: { url?: string }): Promise { } } -// Programmatic build command handler async function buildProgrammaticCTA(options: { url: string product: string @@ -607,7 +573,6 @@ async function buildProgrammaticCTA(options: { plan?: string }): Promise { try { - // Validate base URL let baseUrl: string try { baseUrl = new URL(options.url).toString() @@ -618,19 +583,16 @@ async function buildProgrammaticCTA(options: { process.exit(1) } - // Build CTA parameters object const params: CTAParams = { ref_product: options.product, ref_type: options.type, ref_style: options.style, } - // Add optional parameters if (options.plan) { params.ref_plan = options.plan } - // Validate parameters against schema const validation = validateCTAParams(params) if (!validation.isValid) { // Output validation errors to stderr and exit with error code @@ -640,7 +602,6 @@ async function buildProgrammaticCTA(options: { process.exit(1) } - // Build and output the URL (stdout only) const ctaUrl = buildCTAUrl(baseUrl, params) console.log(ctaUrl) } catch (error) { diff --git a/src/content-render/scripts/liquid-tags.ts b/src/content-render/scripts/liquid-tags.ts index e15a3e3ab6f4..e24fdf6cfc73 100644 --- a/src/content-render/scripts/liquid-tags.ts +++ b/src/content-render/scripts/liquid-tags.ts @@ -11,7 +11,6 @@ import path from 'path' import { load, dump } from 'js-yaml' import chalk from 'chalk' -// Type definitions interface ExpandOptions { paths: string[] verbose?: boolean @@ -30,7 +29,6 @@ interface LiquidReference { endIndex: number } -// Constants const ROOT = process.env.ROOT || '.' const DATA_ROOT = path.resolve(path.join(ROOT, 'data')) const REUSABLES_ROOT = path.join(DATA_ROOT, 'reusables') @@ -43,14 +41,9 @@ function getErrorMessage(error: unknown): string { // Regex pattern to match expanded content blocks const EXPANDED_PATTERN = /(.+?)/gs -/** - * Get the file path for a data reference - * - * Validates and normalizes the incoming dataPath to prevent path traversal - * and ensure the final resolved path remains within the expected root. - */ +// Validates and normalizes the incoming dataPath to prevent path traversal +// and ensure the final resolved path remains within the expected root. function getDataFilePath(type: 'reusable' | 'variable', dataPath: string): string { - // Basic validation of the raw dataPath if (path.isAbsolute(dataPath)) { throw new Error(`Invalid ${type} data path: absolute paths are not allowed: ${dataPath}`) } @@ -89,9 +82,6 @@ function getDataFilePath(type: 'reusable' | 'variable', dataPath: string): strin } } -/** - * Convert a file path back to data path format (for consistent verbose output) - */ function convertFilePathToDataPath(filePath: string): string { const normalizedPath = path.normalize(filePath) @@ -134,9 +124,6 @@ program program.parse() -/** - * Get allowed types based on command options - */ function getAllowedTypes(options: ExpandOptions): Array<'reusable' | 'variable'> { if (options.reusablesOnly && options.variablesOnly) { console.log( @@ -155,13 +142,9 @@ function getAllowedTypes(options: ExpandOptions): Array<'reusable' | 'variable'> return ['variable'] } - // Default: process both types return ['reusable', 'variable'] } -/** - * Expand Liquid data references in content files - */ async function expandReferences(options: ExpandOptions): Promise { const { paths, verbose, markers, shallow } = options // markers will be true by default, false when --no-markers is used @@ -217,7 +200,6 @@ async function expandReferences(options: ExpandOptions): Promise { } } - // Check for remaining references const remainingRefs = findLiquidReferences(expandedContent, allowedTypes) hasRemainingRefs = remainingRefs.length > 0 @@ -278,9 +260,6 @@ async function expandReferences(options: ExpandOptions): Promise { } } -/** - * Restore content by restoring original Liquid statements from HTML comments - */ async function restoreReferences(options: ExpandOptions): Promise { const { paths, verbose } = options const allowedTypes = getAllowedTypes(options) @@ -306,7 +285,6 @@ async function restoreReferences(options: ExpandOptions): Promise { const content = fs.readFileSync(filePath, 'utf-8') - // Check for content edits before restoring const hasEdits = await detectContentEdits(content, verbose, allowedTypes) if (hasEdits) { console.log( @@ -361,9 +339,6 @@ async function restoreReferences(options: ExpandOptions): Promise { } } -/** - * Expand all Liquid data references in file content - */ async function expandFileContent( content: string, filePath: string, @@ -421,14 +396,10 @@ async function expandFileContent( } } - // Note: Remaining reference detection is now handled in expandReferences function for recursive mode - + // expandReferences handles remaining-reference detection in recursive mode. return expandedContent } -/** - * Detect if expanded content has been edited by comparing with original data - */ async function detectContentEdits( content: string, verbose?: boolean, @@ -441,7 +412,6 @@ async function detectContentEdits( const [, type, dataPath, resolvedContent] = match const refType = type as 'reusable' | 'variable' - // Only check if this type is allowed if (!allowedTypes || allowedTypes.includes(refType)) { try { // Load the original content from data files @@ -478,9 +448,6 @@ async function detectContentEdits( return hasEdits } -/** - * Load data value from file system (helper for edit detection) - */ function loadDataValue(type: 'reusable' | 'variable', dataPath: string): string | null { try { const targetPath = getDataFilePath(type, dataPath) @@ -498,7 +465,6 @@ function loadDataValue(type: 'reusable' | 'variable', dataPath: string): string const yamlContent = fs.readFileSync(targetPath, 'utf8') const data = load(yamlContent) as Record - // Navigate to the nested property const pathParts = dataPath.split('.') let current: unknown = data for (let i = 1; i < pathParts.length; i++) { @@ -517,9 +483,6 @@ function loadDataValue(type: 'reusable' | 'variable', dataPath: string): string return null } -/** - * Restore content by restoring original Liquid statements - */ function restoreFileContent( content: string, verbose?: boolean, @@ -528,7 +491,6 @@ function restoreFileContent( return content.replace(EXPANDED_PATTERN, (match, type, dataPath) => { const refType = type as 'reusable' | 'variable' - // Only restore if this type is allowed if (!allowedTypes || allowedTypes.includes(refType)) { const originalLiquid = `{% data ${type}s.${dataPath} %}` @@ -539,15 +501,10 @@ function restoreFileContent( return originalLiquid } - // Return unchanged if type is not allowed return match }) } -/** - * Update data files with content from expanded blocks - * Returns array of file paths that were updated - */ function updateDataFiles( filePath: string, verbose?: boolean, @@ -564,7 +521,6 @@ function updateDataFiles( return [] } - // Group updates by file path const updatesByFile = new Map() for (const update of updates) { const key = `${update.type}:${update.path}` @@ -576,7 +532,6 @@ function updateDataFiles( const updatedFiles: string[] = [] - // Apply updates to each data file for (const [key, contents] of updatesByFile) { const [type, dataPath] = key.split(':') const targetFilePath = applyDataUpdates( @@ -594,9 +549,6 @@ function updateDataFiles( return updatedFiles } -/** - * Extract data updates from expanded content blocks - */ function extractDataUpdates( content: string, allowedTypes?: Array<'reusable' | 'variable'>, @@ -608,13 +560,11 @@ function extractDataUpdates( const [, type, dataPath, resolvedContent] = match const refType = type as 'reusable' | 'variable' - // Only include if this type is allowed if (!allowedTypes || allowedTypes.includes(refType)) { // Check if this content was actually changed before including it try { const originalContent = loadDataValue(refType, dataPath.trim()) if (originalContent !== null && resolvedContent.trim() !== originalContent.trim()) { - // Only add to updates if content was actually changed updates.push({ type: refType, path: dataPath.trim(), @@ -635,10 +585,6 @@ function extractDataUpdates( return updates } -/** - * Apply updates to a specific data file - * Returns the file path if file was updated, null otherwise - */ function applyDataUpdates( type: 'reusable' | 'variable', dataPath: string, @@ -648,7 +594,6 @@ function applyDataUpdates( ): string | null { const targetPath = getDataFilePath(type, dataPath) - // Check if file exists if (!fs.existsSync(targetPath)) { if (verbose) { console.log(chalk.red(` Error: Data file not found: ${targetPath}`)) @@ -701,7 +646,6 @@ function applyDataUpdates( const yamlContent = fs.readFileSync(targetPath, 'utf8') const data = load(yamlContent) as Record - // Navigate to the nested property const pathParts = dataPath.split('.') const propertyPath = pathParts.slice(1) // Skip the file name @@ -713,7 +657,6 @@ function applyDataUpdates( current = current[propertyPath[i]] as Record } - // Update the final property const finalKey = propertyPath[propertyPath.length - 1] if (contents.length > 1) { console.log( @@ -728,7 +671,6 @@ function applyDataUpdates( const finalYaml = hasTrailingNewline && !yamlOutput.endsWith('\n') ? `${yamlOutput}\n` : yamlOutput - // Write back to file fs.writeFileSync(targetPath, finalYaml) if (verbose) { console.log(chalk.green(` Updated: ${type}s.${dataPath}`)) @@ -743,9 +685,6 @@ function applyDataUpdates( } } -/** - * Find all Liquid data references in content - */ function findLiquidReferences( content: string, allowedTypes?: Array<'reusable' | 'variable'>, @@ -761,7 +700,6 @@ function findLiquidReferences( const [original, type, dataPath] = match const refType = type.slice(0, -1) as 'reusable' | 'variable' // Remove 's' from end - // Only include if this type is allowed if (types.includes(refType)) { references.push({ original, @@ -776,9 +714,6 @@ function findLiquidReferences( return references } -/** - * Resolve a single Liquid data reference to its content - */ async function resolveLiquidReference( ref: LiquidReference, verbose?: boolean, @@ -798,9 +733,6 @@ async function resolveLiquidReference( return null } -/** - * Resolve a reusable reference by reading the markdown file - */ async function resolveReusable(reusablePath: string, verbose?: boolean): Promise { const filePath = getDataFilePath('reusable', reusablePath) @@ -826,9 +758,6 @@ async function resolveReusable(reusablePath: string, verbose?: boolean): Promise } } -/** - * Resolve a variable reference by reading from YAML files - */ async function resolveVariable(variablePath: string, verbose?: boolean): Promise { const pathParts = variablePath.split('.') @@ -866,7 +795,6 @@ async function resolveVariable(variablePath: string, verbose?: boolean): Promise } } - // Convert value to string if (typeof value === 'string') { return value } else if (value !== null && value !== undefined) { diff --git a/src/content-render/scripts/move-by-content-type.ts b/src/content-render/scripts/move-by-content-type.ts index c64ef0ed27fc..e7773d92d881 100644 --- a/src/content-render/scripts/move-by-content-type.ts +++ b/src/content-render/scripts/move-by-content-type.ts @@ -26,7 +26,6 @@ const contentTypeToDir = (contentType: string): string => { const validContentTypeDirs = new Set(CONTENT_TYPES.map(contentTypeToDir)) -// Helper: Should we skip this index.md file from processing? function shouldSkipIndexFile(filePath: string): boolean { const relativePath = path.relative(process.cwd(), filePath) const parts = relativePath.split(path.sep) @@ -44,17 +43,14 @@ function shouldSkipIndexFile(filePath: string): boolean { return false } -// Helper: Calculate target directory for a file function calculateTarget(filePath: string, contentType: string, productDir: string) { const relativePath = path.relative(process.cwd(), filePath) const parts = relativePath.split(path.sep) const contentIndex = parts.indexOf('content') const fileName = path.basename(filePath) - // Determine target content-type directory const targetContentType = contentTypeToDir(contentType) - // Calculate target path if (targetContentType === 'how-tos') { // Preserve subdirectory structure for how-tos const pathAfterProduct = parts.slice(contentIndex + 2, -1) @@ -85,9 +81,7 @@ program .description('Reorganize content files into subdirectories based on their contentType property') .argument('[paths...]', 'Content paths to process') .action(async (paths: string[]) => { - // ==================== - // 1. GATHER FILES - // ==================== + // Gather files. const filesToProcess: string[] = [] if (paths?.length > 0) { for (const p of paths) { @@ -104,9 +98,6 @@ program console.log(chalk.white(`Processing ${filesToProcess.length} files...\n`)) - // ==================== - // 2. ANALYZE & PLAN MOVES - // ==================== console.log(chalk.white('Analyzing files...\n')) const filesToMove: FileMove[] = [] @@ -125,7 +116,6 @@ program continue } - // Read and validate contentType const fileContent = await fs.readFile(filePath, 'utf-8') const { data } = readFrontmatter(fileContent) @@ -145,7 +135,6 @@ program continue } - // Validate contentType if (!CONTENT_TYPES.includes(contentType)) { skipped.push({ file: relativePath, reason: `Invalid contentType: ${contentType}` }) console.log( @@ -154,7 +143,6 @@ program continue } - // Get product directory if (contentIndex === -1 || contentIndex + 1 >= parts.length) { console.log( chalk.yellow(`⚠ Skipping ${relativePath}: Cannot determine product directory`), @@ -168,13 +156,10 @@ program if (contentType === 'rai') productsWithRai.add(productName) - // Calculate target const { targetDir, targetPath } = calculateTarget(filePath, contentType, productDir) - // Skip if already in correct location if (path.dirname(filePath) === targetDir) continue - // Skip if target exists try { await fs.access(targetPath) skipped.push({ file: relativePath, reason: 'Target already exists' }) @@ -184,7 +169,6 @@ program // Good, doesn't exist } - // Track this move filesToMove.push({ filePath, targetDir, targetPath, contentType }) const relativeTargetDir = path.relative(process.cwd(), targetDir) @@ -209,9 +193,6 @@ program } } - // ==================== - // 3. ENSURE STANDARD DIRECTORIES - // ==================== console.log(chalk.white('Ensuring standard content-type directories exist...\n')) // Add standard content-type directories for each affected product @@ -236,9 +217,6 @@ program } } - // ==================== - // 4. CREATE PLACEHOLDERS - // ==================== console.log(chalk.white('Creating placeholder index.md files...\n')) const newPlaceholders: string[] = [] @@ -295,9 +273,6 @@ contentType: ${placeholderContentType} } } - // ==================== - // 5. GENERATE INTROS - // ==================== if (newPlaceholders.length > 0) { console.log(chalk.white('\nGenerating intros for placeholder files...\n')) @@ -337,9 +312,6 @@ contentType: ${placeholderContentType} } } - // ==================== - // 6. MOVE FILES - // ==================== console.log(chalk.white('\nMoving files...\n')) const moved: Array<{ file: string; from: string; to: string }> = [] @@ -397,7 +369,6 @@ contentType: ${placeholderContentType} } } - // Move regular files for (const file of regularFiles) { try { await fs.mkdir(file.targetDir, { recursive: true }) @@ -427,7 +398,6 @@ contentType: ${placeholderContentType} } } - // Delete source subdirectory index files for (const sourcePath of indexFilesToDeleteLater) { try { await fs.unlink(sourcePath) @@ -437,7 +407,6 @@ contentType: ${placeholderContentType} } } - // Move top-level index files for (const file of topLevelIndexFiles) { try { await fs.mkdir(file.targetDir, { recursive: true }) @@ -462,9 +431,6 @@ contentType: ${placeholderContentType} } } - // ==================== - // 7. CLEANUP & UPDATE - // ==================== console.log( chalk.white('\nCleaning up old directories and updating parent index.md files...\n'), ) @@ -498,7 +464,6 @@ contentType: ${placeholderContentType} console.log(chalk.yellow(`⚠ Could not read product directory ${productDir}: ${error}`)) } - // Update product index.md const productIndexPath = path.join(productDir, 'index.md') try { const content = await fs.readFile(productIndexPath, 'utf-8') @@ -507,7 +472,6 @@ contentType: ${placeholderContentType} if (data) { let updated = false - // Build children array const productRelativePath = path.relative(process.cwd(), productDir) const newChildren: string[] = [] for (const ct of CONTENT_TYPES.map(contentTypeToDir)) { @@ -520,7 +484,6 @@ contentType: ${placeholderContentType} updated = true } - // Add redirects for deleted directories const deletedPaths = deletedByProduct.get(productName) || [] if (deletedPaths.length > 0) { if (!data.redirect_from) data.redirect_from = [] @@ -551,9 +514,6 @@ contentType: ${placeholderContentType} } } - // ==================== - // 8. SORT CHILDREN ARRAYS - // ==================== console.log(chalk.white('\nSorting children arrays...\n')) for (const dirPath of targetDirs) { @@ -612,9 +572,6 @@ contentType: ${placeholderContentType} } } - // ==================== - // 9. SUMMARY - // ==================== console.log(chalk.white(`\n${'='.repeat(60)}`)) console.log(chalk.white('Summary:')) console.log(chalk.white(` Moved: ${moved.length} files`)) diff --git a/src/content-render/scripts/move-content.ts b/src/content-render/scripts/move-content.ts index 6bbdcb1a0635..004cb880363d 100755 --- a/src/content-render/scripts/move-content.ts +++ b/src/content-render/scripts/move-content.ts @@ -33,7 +33,6 @@ import escapeStringRegexp from 'escape-string-regexp' import fm from '@/frame/lib/frontmatter' import readFrontmatter from '@/frame/lib/read-frontmatter' -// Type definitions interface MoveOptions { verbose: boolean undo: boolean @@ -156,8 +155,7 @@ async function main(opts: MoveOptions, nameTuple: string[]) { if (!fs.existsSync(indexFilePath)) { throw new Error(`${oldPath} does not have an index.md file`) } - // Gather individual files by walking `oldPath` recursively - // The second argument is + // Gather individual files by walking `oldPath` recursively. const files = findFilesInFolder(oldPath, newPath, opts) // First take care of the `git mv` (or regular rename) part. diff --git a/src/content-render/scripts/reusables-cli/find/potential-uses.ts b/src/content-render/scripts/reusables-cli/find/potential-uses.ts index cb423a475038..c0827117caa9 100644 --- a/src/content-render/scripts/reusables-cli/find/potential-uses.ts +++ b/src/content-render/scripts/reusables-cli/find/potential-uses.ts @@ -26,7 +26,6 @@ export function findPotentialUses({ const filesThatCouldUseReusable: FilesWithLineNumbers = [] const filesThatCouldUseReusableSimilar: FilesWithSimilarity = [] - // Read all content & data files into memory const allFileContents = allFilePaths.map((filePath) => { return { filePath, @@ -69,7 +68,6 @@ export function findPotentialUses({ const indices = findIndicesOfSubstringInString(reusableContents.trim(), fileContents) if (indices.length > 0) { - // Find line numbers of each index in fileContents const lineNumbers = indices.map((index) => fileContents.slice(0, index).split('\n').length) filesThatCouldUseReusable.push({ diff --git a/src/content-render/scripts/reusables-cli/find/used.ts b/src/content-render/scripts/reusables-cli/find/used.ts index 589b87e12e6c..6f56c31512d6 100644 --- a/src/content-render/scripts/reusables-cli/find/used.ts +++ b/src/content-render/scripts/reusables-cli/find/used.ts @@ -33,7 +33,6 @@ export function findUsed(reusablePath: string, { absolute }: { absolute: boolean const indices = getIndicesOfLiquidVariable(reusableLiquidVar, fileContents) if (indices.length > 0) { - // Find line numbers of each index in fileContents const lineNumbers = indices.map((index) => fileContents.slice(0, index).split('\n').length) filesWithReusables.push({ diff --git a/src/content-render/scripts/reusables-cli/shared.ts b/src/content-render/scripts/reusables-cli/shared.ts index 792f48828bdc..c04e24725d15 100644 --- a/src/content-render/scripts/reusables-cli/shared.ts +++ b/src/content-render/scripts/reusables-cli/shared.ts @@ -48,7 +48,6 @@ export function getAllContentFilePaths() { return [...allContentFiles, ...allDataFiles] } -// Get the string that represents the reusable in the content files export function getReusableLiquidString(reusablePath: string): string { const relativePath = path.relative(reusablesDirectory, reusablePath) return `reusables.${relativePath.slice(0, -3).split('/').join('.')}` @@ -73,7 +72,6 @@ export function getIndicesOfLiquidVariable(liquidVariable: string, fileContents: return indices } -// Find the path to a reusable file. export function resolveReusablePath(reusablePath: string): string { // Try .md if extension is not provided if (!reusablePath.endsWith('.md') && !reusablePath.endsWith('.yml')) { @@ -150,7 +148,6 @@ export function findSimilarSubStringInString(substr: string, str: string) { } } - // Normalize the similarity score return Math.round((similarityScore / substrSentences.length) * corpus.length) } diff --git a/src/content-render/scripts/update-filepaths.ts b/src/content-render/scripts/update-filepaths.ts index f86693010639..7760d5c7b441 100755 --- a/src/content-render/scripts/update-filepaths.ts +++ b/src/content-render/scripts/update-filepaths.ts @@ -101,13 +101,11 @@ async function processFile( const isDirectory = isDirectoryCheck(file) - // Assess the frontmatter and other conditions to determine if we want to process the path. const processPage: boolean = determineProcessStatus(data, isDirectory, scriptOptions) if (!processPage) return null let stringToSlugify: string = data.shortTitle || data.title - // Check if we need to process Liquid if (stringToSlugify.includes('{%')) { stringToSlugify = await renderContent(stringToSlugify, context, { textOnly: true }) } @@ -118,7 +116,6 @@ async function processFile( // Fall back to title if shortTitle doesn't exist. const slug: string = slugger.slug(decode(stringToSlugify)) - // Get the basename, depending on whether it's a file or dir. let basename: string if (isDirectory) { // Where: content location = content/foobar/index.md @@ -133,12 +130,10 @@ async function processFile( // If slug and basename already match, all set here. Return early. if (slug === basename) return null - // Build the new path based on file type. const newPath = isDirectory ? path.join(path.dirname(path.dirname(file)), slug, 'index.md') : path.join(path.dirname(file), `${slug}.md`) - // Get relative paths and adjust for directories. const getContentPath = (filePath: string): string => { const relativePath = path.relative(process.cwd(), filePath) return isDirectory ? path.dirname(relativePath) : relativePath @@ -187,26 +182,21 @@ function sortFiles(filesArray: string[]): string[] { // 2. Deepest subdirectory path // 3. Shallowest subdirectory path (up to category level, e.g., content/product/category) return filesArray.toSorted((a, b) => { - // If A is a file and B is a directory, A comes first (negative) if (!isDirectoryCheck(a) && isDirectoryCheck(b)) { return -1 } - // If A is a directory and B is a file, B comes first (positive) if (isDirectoryCheck(a) && !isDirectoryCheck(b)) { return 1 } - // If A and B are both files, neutral if (!isDirectoryCheck(a) && !isDirectoryCheck(b)) { return 0 } - // If both are directories, sort by depth (deepest first) if (isDirectoryCheck(a) && isDirectoryCheck(b)) { const aDepth = a.split(path.sep).length const bDepth = b.split(path.sep).length return bDepth - aDepth // Deeper paths first } - // This should never be reached, but return 0 for safety return 0 }) } @@ -246,20 +236,16 @@ function determineProcessStatus( isDirectory: boolean, scriptOptions: ScriptOptions, ): boolean { - // Assess the conditions in this order: - // If it's a directory AND we're excluding dirs, do not process it no matter what. + // A directory is never processed when dirs are excluded, whatever else is set. if (isDirectory && scriptOptions.excludeDirs) { return false } - // If the force option is passed, process it no matter what. if (scriptOptions.force) { return true } - // If the page has the override set, do not process it. if (data.allowTitleToDifferFromFilename) { return false } - // In all other cases, process it. return true } diff --git a/src/content-render/tests/annotate.ts b/src/content-render/tests/annotate.ts index 20083164d3bf..c47a78d6fb76 100644 --- a/src/content-render/tests/annotate.ts +++ b/src/content-render/tests/annotate.ts @@ -22,33 +22,27 @@ describe('annotate', () => { const res = await renderContent(example) const $ = load(res) - // Check that the annotation structure is rendered correctly const annotation = $('.annotate') expect(annotation.length).toBe(1) expect(annotation.hasClass('beside')).toBe(true) - // Check annotation header exists const header = $('.annotate-header') expect(header.length).toBe(1) - // Check both beside and inline modes are rendered const beside = $('.annotate-beside') const inline = $('.annotate-inline') expect(beside.length).toBe(1) expect(inline.length).toBe(1) - // Check that we have the correct number of annotation rows const rows = $('.annotate-row') expect(rows.length).toBe(2) - // Check that each row has both code and note sections rows.each((i, row) => { const $row = $(row) expect($row.find('.annotate-code').length).toBe(1) expect($row.find('.annotate-note').length).toBe(1) }) - // Check specific content of the annotations const notes = $('.annotate-note p') const noteTexts = notes.map((i, el) => $(el).text()).get() expect(noteTexts).toEqual([ @@ -56,7 +50,6 @@ describe('annotate', () => { 'Add the pull_request event, so that the workflow runs automatically\nevery time a pull request is created.', ]) - // Check code content const codes = $('.annotate-code pre') const codeTexts = codes.map((i, el) => $(el).text()).get() expect(codeTexts).toEqual([ @@ -157,7 +150,6 @@ on: [push] const rows = $('.annotate-row') const notes = $('.annotate-note', rows) - // Check that AUTOTITLE links were resolved to actual titles const firstNote = notes.eq(0).html() const secondNote = notes.eq(1).html() diff --git a/src/content-render/tests/copilot-code-blocks.ts b/src/content-render/tests/copilot-code-blocks.ts index 51209f95663e..2dfe76d6b4c2 100644 --- a/src/content-render/tests/copilot-code-blocks.ts +++ b/src/content-render/tests/copilot-code-blocks.ts @@ -18,11 +18,8 @@ describe('code-header plugin', () => { const html = await renderContent(markdown) - // Should keep copilot as the language (not convert to text without copy meta) expect(html).toContain('language-copilot') - // Should NOT wrap in code-example div since no copy meta expect(html).not.toContain('code-example') - // Should NOT have header since no copy meta expect(html).not.toContain(' { const html = await renderContent(markdown) - // Should be wrapped in code-example div expect(html).toContain('code-example') - // Should have header with copy button expect(html).toContain(' { const html = await renderContent(markdown) - // Should be wrapped in code-example div expect(html).toContain('code-example') - // Should have header expect(html).toContain(' { const html = await renderContent(markdown) - // Should be wrapped in code-example div expect(html).toContain('code-example') - // Should have header with copy button expect(html).toContain(' { let mockContext: Context beforeEach(async () => { - // Set up file system mocking fs = await import('fs') originalReadFileSync = fs.default.readFileSync originalExistsSync = fs.default.existsSync fs.default.existsSync = () => true - // Set up basic mock context mockContext = { currentLanguage: 'en', currentVersion: 'free-pro-team@latest', @@ -30,13 +28,11 @@ describe('link error line numbers', () => { }) afterEach(() => { - // Restore original functions fs.default.readFileSync = originalReadFileSync fs.default.existsSync = originalExistsSync }) test('reports correct line numbers for broken AUTOTITLE links', async () => { - // Test content with frontmatter followed by content with a broken link const template = `--- title: Test Page version: 1.0 @@ -72,7 +68,6 @@ More content here.` fullPath: '/fake/test-file-2.md', } as unknown as Context['page'] - // Test with more extensive frontmatter const template = `--- title: Another Test Page description: This is a test @@ -109,7 +104,6 @@ Content with a [AUTOTITLE](/another/nonexistent/page) link.` fullPath: '/fake/no-frontmatter.md', } as unknown as Context['page'] - // Test content without frontmatter const template = `# Simple Title This is content without frontmatter. @@ -148,7 +142,6 @@ title: Message Test } catch (error) { expect(error).toBeInstanceOf(TitleFromAutotitleError) - // Check that the new error message format is used expect((error as TitleFromAutotitleError).message).toContain( 'could not be resolved in one or more versions', ) @@ -157,7 +150,6 @@ title: Message Test ) expect((error as TitleFromAutotitleError).message).toContain('/test/broken/link') - // Check that the old error message format is NOT used expect((error as TitleFromAutotitleError).message).not.toContain('Unable to find Page by') expect((error as TitleFromAutotitleError).message).not.toContain('To fix it, look at') } diff --git a/src/content-render/tests/liquid-tags.ts b/src/content-render/tests/liquid-tags.ts index 0209be92c090..db28d494733b 100644 --- a/src/content-render/tests/liquid-tags.ts +++ b/src/content-render/tests/liquid-tags.ts @@ -10,16 +10,13 @@ describe('liquid-tags script integration tests', () => { vi.setConfig({ testTimeout: 60 * 1000 }) beforeEach(async () => { - // Create test directory await fs.mkdir(testContentDir, { recursive: true }) }) afterEach(async () => { - // Clean up test files await fs.rm(testContentDir, { recursive: true, force: true }) }) - // Helper function to run script commands async function runScript(args: string): Promise<{ output: string; exitCode: number }> { let output = '' let exitCode = 0 @@ -41,7 +38,6 @@ describe('liquid-tags script integration tests', () => { } test('expand command should complete successfully with basic content', async () => { - // Create a test file with liquid reference const testFile = path.join(testContentDir, 'basic-test.md') const testContent = `--- title: Test @@ -54,11 +50,9 @@ This uses {% data variables.product.prodname_dotcom %} in content. const { output, exitCode } = await runScript(`expand --paths "${testFile}"`) - // Should complete without error expect(exitCode, `Script failed with output: ${output}`).toBe(0) expect(output.length).toBeGreaterThan(0) - // Check that the file was modified const expandedContent = await fs.readFile(testFile, 'utf8') expect(expandedContent).not.toBe(testContent) expect(expandedContent).toContain('GitHub') // Should expand to actual fixture value @@ -75,16 +69,13 @@ This uses {% data variables.product.prodname_dotcom %} in content. await fs.writeFile(testFile, originalContent) - // First expand await runScript(`expand --paths "${testFile}"`) - // Then restore const { output, exitCode } = await runScript(`restore --paths "${testFile}"`) expect(exitCode, `Restore script failed with output: ${output}`).toBe(0) expect(output.length).toBeGreaterThan(0) - // Should be back to original liquid tags const restoredContent = await fs.readFile(testFile, 'utf8') expect(restoredContent).toContain('{% data variables.product.prodname_dotcom %}') expect(restoredContent).not.toContain('GitHub') diff --git a/src/content-render/tests/prompt-id.ts b/src/content-render/tests/prompt-id.ts index ce7441e8832b..71e046b0fd48 100644 --- a/src/content-render/tests/prompt-id.ts +++ b/src/content-render/tests/prompt-id.ts @@ -55,7 +55,6 @@ describe('generatePromptId', () => { expect(typeof id).toBe('string') expect(id.length).toBeGreaterThan(0) - // Should be different from just the prompt text alone expect(id).not.toBe(generatePromptId(promptText)) }) diff --git a/src/content-render/tests/prompt.ts b/src/content-render/tests/prompt.ts index 65de51fea1c3..e8e250e166e1 100644 --- a/src/content-render/tests/prompt.ts +++ b/src/content-render/tests/prompt.ts @@ -6,18 +6,14 @@ describe('prompt tag', () => { const input: string = 'Here is your prompt: {% prompt %}example prompt text{% endprompt %}.' const output: string = await renderContent(input) - // Should have code element with ID expect(output).toContain(' { + const context = contextFor('free-pro-team@latest') + const output = await liquid.parseAndRender('{{ value | render_liquid }}', { + ...context, + value: 42, + }) + expect(output).toBe('42') + }) +}) diff --git a/src/content-render/types.ts b/src/content-render/types.ts index 1f01894583a0..b23e94106e9f 100644 --- a/src/content-render/types.ts +++ b/src/content-render/types.ts @@ -1,10 +1,3 @@ -/** - * Types for the content-render module - */ - -/** - * Context interface for content rendering operations - */ export interface Context { currentLanguage?: string autotitleLanguage?: string @@ -20,9 +13,6 @@ export interface Context { [key: string]: unknown } -/** - * Options for rendering operations - */ export interface RenderOptions { cache?: boolean | ((template: string, context: Context) => string | null) filename?: string @@ -30,22 +20,13 @@ export interface RenderOptions { [key: string]: unknown } -/** - * Unified processor plugin function type - */ export type UnifiedPlugin = (context?: Context) => unknown -/** - * VFile interface for unified processing - */ export interface VFile { toString(): string [key: string]: unknown } -/** - * Unified processor interface - */ export interface UnifiedProcessor { process(content: string): Promise use(plugin: unknown, ...args: unknown[]): UnifiedProcessor diff --git a/src/content-render/unified/annotate.ts b/src/content-render/unified/annotate.ts index 3b0c98272c33..120acb615e87 100644 --- a/src/content-render/unified/annotate.ts +++ b/src/content-render/unified/annotate.ts @@ -134,17 +134,13 @@ function createAnnotatedNode(node: ElementNode, context: Context): Element { const lang = node.children[0].properties!.className![0].replace('language-', '') const code = node.children[0].children![0].value as string - // Check the code is parse-able validate(lang, code) - // Group into code and notes const lines = code.split('\n').filter(hasChar) const groups = chunkBy(lines, matchComment(lang)) - // Group groups into rows const rows = chunk(groups, 2) - // Check the rows are formatted correctly for (const [note, codeBlock] of rows) { if (note === undefined || codeBlock === undefined) { throw new Error( @@ -153,7 +149,6 @@ function createAnnotatedNode(node: ElementNode, context: Context): Element { } } - // Render the HTML return template({ lang, code, rows, context }) } @@ -278,20 +273,16 @@ function template({ function mdToHast(text: string, context: Context): Nodes { const mdast: Root = fromMarkdown(text) - // Process AUTOTITLE links processAutotitleInMdast(mdast, context) return toHast(mdast) } -// Helper method to process AUTOTITLE links in MDAST -// This can be reused for other MDAST processing that needs AUTOTITLE support function processAutotitleInMdast(mdast: Root, context: Context): void { visit(mdast, 'link', (node) => { if (node.url && node.url.startsWith('/')) { for (const child of node.children) { if (child.type === 'text' && /^\s*AUTOTITLE\s*$/.test(child.value)) { - // Find the page and get its title const page = findPage(node.url, context.pages, context.redirects) if (page) { try { diff --git a/src/content-render/unified/collect-mini-toc.ts b/src/content-render/unified/collect-mini-toc.ts index bbd8b8a82722..de6be1a1d569 100644 --- a/src/content-render/unified/collect-mini-toc.ts +++ b/src/content-render/unified/collect-mini-toc.ts @@ -64,7 +64,6 @@ const collectMiniToc: Plugin<[CollectMiniTocOptions], Root> = ({ collectInto }) const title = textChildren.map((child) => toString(child)).join('') - // Detect platform from ghd-tool ancestor let platform = '' for (const anc of ancestors) { if (anc.type === 'element' && hasClassName(anc as Element, 'ghd-tool')) { diff --git a/src/content-render/unified/copilot-prompt.ts b/src/content-render/unified/copilot-prompt.ts index 6b8e463e48ba..69eb3b7b7236 100644 --- a/src/content-render/unified/copilot-prompt.ts +++ b/src/content-render/unified/copilot-prompt.ts @@ -47,7 +47,6 @@ function buildPromptData( tree: Root, code: string, ): { promptContent: string; ariaLabel: string } { - // Find a ref meta in the format 'ref=' const ref = getPreMeta(node).ref if (!ref) { diff --git a/src/content-render/unified/module-types.d.ts b/src/content-render/unified/module-types.d.ts index 60c0cf6d00a9..298ecdc023c5 100644 --- a/src/content-render/unified/module-types.d.ts +++ b/src/content-render/unified/module-types.d.ts @@ -1,7 +1,3 @@ -/** - * Type declarations for modules without TypeScript definitions - */ - declare module 'remark-gemoji-to-emoji' { import type { Plugin } from 'unified' const plugin: Plugin diff --git a/src/content-render/unified/rewrite-local-links.ts b/src/content-render/unified/rewrite-local-links.ts index 6596969de7f4..727ccef09a8e 100644 --- a/src/content-render/unified/rewrite-local-links.ts +++ b/src/content-render/unified/rewrite-local-links.ts @@ -278,13 +278,11 @@ function getNewHref(node: LinkNode, languageCode: string, version: string): stri // start clean with no language (TOC pages already include the lang codes via lib/liquid-tags/link.ts) const hrefWithoutLang = getPathWithoutLanguage(url) - // normalize any legacy links so they conform to new link structure newHref = path.posix.join('/', languageCode, getNewVersionedPath(hrefWithoutLang)) - // get the current version from the link const versionFromHref = getVersionStringFromPath(newHref) - // ------ BEGIN ONE-OFF OVERRIDES ------// + // One-off overrides: // desktop links always point to dotcom if (patterns.desktop.test(hrefWithoutLang)) { version = nonEnterpriseDefaultVersion @@ -294,9 +292,7 @@ function getNewHref(node: LinkNode, languageCode: string, version: string): stri if (patterns.adminProduct.test(hrefWithoutLang) && version === nonEnterpriseDefaultVersion) { version = 'enterprise-cloud@latest' } - // ------ END ONE-OFF OVERRIDES ------// - // update the version in the link newHref = newHref.replace(versionFromHref, version) } newHref = removeFPTFromPath(newHref) diff --git a/src/content-render/unified/rewrite-table-captions.ts b/src/content-render/unified/rewrite-table-captions.ts index aa898ee8ddc5..2c4fdd3b1d4b 100644 --- a/src/content-render/unified/rewrite-table-captions.ts +++ b/src/content-render/unified/rewrite-table-captions.ts @@ -3,11 +3,9 @@ import type { Node, Parent } from 'unist' import type { Element, Text } from 'hast' /** - * A rehype plugin that automatically adds aria-labelledby attributes to tables - * based on their preceding headings for accessibility. - * - * This plugin improves table accessibility by ensuring screen readers can - * announce table names when users navigate with the 'T' shortcut key. + * Adds aria-labelledby to tables, pointing at the nearest preceding heading, + * so screen readers announce a table name when users navigate with the 'T' + * shortcut key. * * Transforms this structure: * @@ -24,12 +22,6 @@ import type { Element, Text } from 'hast' * ... * ... * - * - * The plugin works by: - * 1. Finding table elements in the HTML AST - * 2. Looking backwards for the nearest preceding heading with an id - * 3. Adding aria-labelledby attribute pointing to that heading's id - * 4. Skipping tables that already have accessibility attributes */ interface HeadingInfo { @@ -67,12 +59,10 @@ function hasExistingCaption(tableNode: Element): boolean { function findPrecedingHeading(parent: Parent, tableIndex: number): HeadingInfo | null { if (!parent.children || tableIndex === 0) return null - // Look backwards from the table position for the nearest heading for (let i = tableIndex - 1; i >= 0; i--) { const node = parent.children[i] if (isHeadingElement(node)) { - // Check if the heading has an id attribute const headingId = node.properties?.id if (headingId) { return { @@ -122,13 +112,11 @@ export default function addTableAccessibilityLabels() { return } - // Find the preceding heading const precedingHeading = findPrecedingHeading(parent, index) if (!precedingHeading) { return } - // Add aria-labelledby attribute to the table if (!node.properties) { node.properties = {} } diff --git a/src/content-render/unified/text-only.ts b/src/content-render/unified/text-only.ts index d0a581c37ed8..2f9e6a9b25ff 100644 --- a/src/content-render/unified/text-only.ts +++ b/src/content-render/unified/text-only.ts @@ -1,7 +1,6 @@ import { decode } from 'html-entities' // Strip all HTML tags, leaving only text content. -// Handles nested tags like `

text with code

`. const TAG_RE = /<[^>]+>/g // Given a piece of HTML return it without HTML. E.g. diff --git a/src/content-render/unified/use-english-headings.ts b/src/content-render/unified/use-english-headings.ts index 0109be6be74a..b48fcd1f9044 100644 --- a/src/content-render/unified/use-english-headings.ts +++ b/src/content-render/unified/use-english-headings.ts @@ -17,13 +17,9 @@ export default function useEnglishHeadings({ englishHeadings }: UseEnglishHeadin visit(tree, 'element', (node: Element) => { if (!['h2', 'h3', 'h4'].includes(node.tagName)) return slugger.reset() - // Get the plain text content of the heading node const text: string = toString(node) - // find English heading in the collection const englishHeading: string = englishHeadings[encode(text)] - // get English slug const englishSlug: string = slugger.slug(englishHeading) - // use English slug for heading ID and link if (englishSlug) { // only use English slug if there is one, otherwise we'll end up with // empty IDs diff --git a/src/data-directory/lib/data-directory.ts b/src/data-directory/lib/data-directory.ts index 6098eb0e7f60..05e7049d93a6 100644 --- a/src/data-directory/lib/data-directory.ts +++ b/src/data-directory/lib/data-directory.ts @@ -31,21 +31,17 @@ export default function dataDirectory( const mergedOpts = Object.assign({}, defaultOpts, opts) - // validate input assert(Array.isArray(mergedOpts.ignorePatterns)) assert(mergedOpts.ignorePatterns.every(isRegExp)) assert(Array.isArray(mergedOpts.extensions)) assert(mergedOpts.extensions.length) - // start with an empty data object const data: DataDirectoryResult = {} // find YAML and Markdown files in the given directory, recursively const filenames = walk(dir, { includeBasePath: true }).filter((filename: string) => { - // ignore files that match any of ignorePatterns regexes if (mergedOpts.ignorePatterns.some((pattern) => pattern.test(filename))) return false - // ignore files that don't have a whitelisted file extension return mergedOpts.extensions.includes(path.extname(filename).toLowerCase()) }) diff --git a/src/data-directory/lib/data-schemas/index.ts b/src/data-directory/lib/data-schemas/index.ts index c0c394b4e8cf..bd157c2afb63 100644 --- a/src/data-directory/lib/data-schemas/index.ts +++ b/src/data-directory/lib/data-schemas/index.ts @@ -8,9 +8,7 @@ interface DataSchemas { [key: string]: string } -// Helper function to resolve schema paths based on runtime context function resolveSchemaPath(filename: string): string { - // Check if we're in a test context const isTest = process.env.NODE_ENV === 'test' if (isTest) { @@ -37,7 +35,6 @@ function loadTableSchemas(): DataSchemas { const schemaPath = path.join(schemasDir, `${name}.ts`) if (fs.existsSync(schemaPath)) { - // Use the resolver for consistent path handling tableSchemas[`data/tables/${yamlFile}`] = resolveSchemaPath(`tables/${name}.ts`) } } @@ -61,7 +58,6 @@ const manualSchemas: DataSchemas = { 'data/tables/copilot/matrix-meta.yml': resolveSchemaPath('tables/copilot/matrix-meta.ts'), } -// Combine manual registrations with auto-discovered table schemas const dataSchemas: DataSchemas = { ...manualSchemas, ...loadTableSchemas(), diff --git a/src/data-directory/lib/data-schemas/tables/repository-roles.ts b/src/data-directory/lib/data-schemas/tables/repository-roles.ts new file mode 100644 index 000000000000..6774b9739d4b --- /dev/null +++ b/src/data-directory/lib/data-schemas/tables/repository-roles.ts @@ -0,0 +1,39 @@ +// This schema enforces the structure in data/tables/repository-roles.yml + +const row = { + type: 'object', + additionalProperties: false, + required: ['action', 'roles'], + properties: { + action: { + type: 'string', + lintable: true, + }, + // Liquid that renders non-empty when the row should be shown. When omitted, + // the row is shown on every version. + versions: { + type: 'string', + }, + // Comma separated list of the roles that can perform the action. Roles left + // out render as no. May contain Liquid, so a single role can be conditional. + roles: { + type: 'string', + }, + }, +} + +export default { + type: 'object', + additionalProperties: false, + required: ['permissions', 'securityFeatures'], + properties: { + permissions: { + type: 'array', + items: row, + }, + securityFeatures: { + type: 'array', + items: row, + }, + }, +} diff --git a/src/data-directory/lib/filename-to-key.ts b/src/data-directory/lib/filename-to-key.ts index 2680b0ce5626..a13bf343f676 100644 --- a/src/data-directory/lib/filename-to-key.ts +++ b/src/data-directory/lib/filename-to-key.ts @@ -1,7 +1,6 @@ import path from 'path' import { escapeRegExp } from 'lodash-es' -// slash at the beginning of a filename const leadingPathSeparator = new RegExp(`^${escapeRegExp(path.sep)}`) const windowsLeadingPathSeparator = new RegExp('^/') diff --git a/src/data-directory/middleware/data-tables.ts b/src/data-directory/middleware/data-tables.ts index a29086e9f08c..8edf5262f938 100644 --- a/src/data-directory/middleware/data-tables.ts +++ b/src/data-directory/middleware/data-tables.ts @@ -4,7 +4,6 @@ import { getDeepDataByLanguage } from '@/data-directory/lib/get-data' let tablesCache: Record | null = null -// Lazy loading function const getTables = () => { if (!tablesCache) { // Keep product-name-heavy reference tables in English only for now @@ -13,10 +12,7 @@ const getTables = () => { return tablesCache } -/** - * Middleware that loads data-driven table content into the request context. - * Tables are sourced from YAML files in data/tables/ directory. - */ +// Loads the YAML files under data/tables/ into req.context. export default async function dataTables(req: ExtendedRequest, res: Response, next: NextFunction) { if (!req.context) throw new Error('request not contextualized') diff --git a/src/data-directory/scripts/find-orphaned-features/find.ts b/src/data-directory/scripts/find-orphaned-features/find.ts index e3ca4fd3861d..2398738b896c 100644 --- a/src/data-directory/scripts/find-orphaned-features/find.ts +++ b/src/data-directory/scripts/find-orphaned-features/find.ts @@ -156,7 +156,7 @@ function searchAndRemove(features: Set, pages: Page[], verbose = false) // them in, we'll need the English equivalent content to be able to // use the correctTranslatedContentStrings function. - // Check variables files + // Check the English variable files. for (const filePath of getVariableFiles(path.join(languages.en.dir, 'data', 'variables'))) { const fileContent = fs.readFileSync(filePath, 'utf-8') checkString(fileContent, features, { filePath, verbose, languageCode: 'en' }) diff --git a/src/data-directory/tests/get-data.ts b/src/data-directory/tests/get-data.ts index d9f72f74a09c..7b3a0414f929 100644 --- a/src/data-directory/tests/get-data.ts +++ b/src/data-directory/tests/get-data.ts @@ -73,7 +73,6 @@ describe('get-data', () => { }) test('getDataByLanguage variables English', () => { - // The most basic test { const result = getDataByLanguage('variables.stuff.foo', 'en') expect(result).toBe('Foo') @@ -91,7 +90,6 @@ describe('get-data', () => { }) test('getDataByLanguage variables with non-English', () => { - // The most basic test { const result = getDataByLanguage('variables.stuff.foo', 'ja') expect(result).toBe('フー') @@ -109,7 +107,6 @@ describe('get-data', () => { }) test('getDataByLanguage variables failures', () => { - // The most basic test { const result = getDataByLanguage('variables.stuff.key_non_existent', 'en') expect(result).toBeUndefined() @@ -127,7 +124,6 @@ describe('get-data', () => { }) test('getDataByLanguage reusables English', () => { - // The most basic test { const result = getDataByLanguage('reusables.coolness', 'en') expect(result).toBe('This is *Markdown*') @@ -140,7 +136,6 @@ describe('get-data', () => { }) test('getDataByLanguage reusables non-English', () => { - // The most basic test { const result = getDataByLanguage('reusables.coolness', 'ja') expect(result).toBe('これがマークダウンです') @@ -153,7 +148,6 @@ describe('get-data', () => { }) test('getDataByLanguage failures', () => { - // The most basic test { const result = getDataByLanguage('reusables.neverheardof', 'en') expect(result).toBeUndefined() @@ -166,7 +160,6 @@ describe('get-data', () => { }) test('getUIDataMerged', () => { - // The most basic test { const result = getUIDataMerged('en') expect(result.key).toBe('Value') @@ -183,7 +176,6 @@ describe('get-data', () => { }) test('getDeepDataByLanguage', () => { - // The most basic test { const result = getDeepDataByLanguage('variables', 'en') expect((result.stuff as Record).foo).toBe('Foo') @@ -329,7 +321,7 @@ describe('get-data applies corrections to translated variables', () => { name: '{% データ variables.myproduct.name %}', }, phases: { - // Not corrupted — should pass through unchanged + // Not corrupted, so it should pass through unchanged preview: '{% ifversion ghes < 3.16 %}ベータ{% else %}パブリックプレビュー{% endif %}', }, }, diff --git a/src/data-directory/tests/orphaned-features.ts b/src/data-directory/tests/orphaned-features.ts index 404178ba5efd..ea931b6b4f21 100644 --- a/src/data-directory/tests/orphaned-features.ts +++ b/src/data-directory/tests/orphaned-features.ts @@ -7,7 +7,6 @@ import { describe, expect, test } from 'vitest' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const fixturesDir = path.join(__dirname, 'orphaned-features', 'fixtures') -// Import the actual helper functions from the orphaned features script const { getVariableFiles, getReusableFiles } = await import('@/data-directory/scripts/find-orphaned-features/find') @@ -16,11 +15,9 @@ describe('orphaned features detection', () => { const variablesDir = path.join(fixturesDir, 'data', 'variables') const variableFiles = getVariableFiles(variablesDir) - // Should find our test.yml file expect(variableFiles).toHaveLength(1) expect(variableFiles[0]).toMatch(/test\.yml$/) - // Verify the file exists and contains expected content const testVariableContent = fs.readFileSync(variableFiles[0], 'utf-8') expect(testVariableContent).toContain('used-in-variables') expect(testVariableContent).toContain('ifversion') @@ -30,11 +27,9 @@ describe('orphaned features detection', () => { const reusablesDir = path.join(fixturesDir, 'data', 'reusables') const reusableFiles = getReusableFiles(reusablesDir) - // Should find our test.md file expect(reusableFiles).toHaveLength(1) expect(reusableFiles[0]).toMatch(/test\.md$/) - // Verify the file exists and contains expected content const testReusableContent = fs.readFileSync(reusableFiles[0], 'utf-8') expect(testReusableContent).toContain('used-in-reusables') expect(testReusableContent).toContain('ifversion') @@ -48,7 +43,6 @@ describe('orphaned features detection', () => { const content = fs.readFileSync(testVariableFile, 'utf-8') - // Verify the test file has the expected feature usage patterns expect(content).toContain('{% ifversion used-in-variables %}') expect(content).toContain('test_variable_with_feature') expect(content).toContain('complex_variable') @@ -60,30 +54,25 @@ describe('orphaned features detection', () => { const nestedVariablesDir = path.join(tempDir, 'variables', 'nested') const nestedReusablesDir = path.join(tempDir, 'reusables', 'nested') - // Create directories fs.mkdirSync(nestedVariablesDir, { recursive: true }) fs.mkdirSync(nestedReusablesDir, { recursive: true }) - // Create test files fs.writeFileSync(path.join(nestedVariablesDir, 'nested.yml'), 'test: value') fs.writeFileSync(path.join(nestedReusablesDir, 'nested.md'), '# Test content') fs.writeFileSync(path.join(tempDir, 'variables', 'root.yml'), 'root: value') fs.writeFileSync(path.join(tempDir, 'reusables', 'root.md'), '# Root content') try { - // Test getVariableFiles with nested structure const variableFiles = getVariableFiles(path.join(tempDir, 'variables')) expect(variableFiles).toHaveLength(2) expect(variableFiles.some((f) => f.includes('nested.yml'))).toBe(true) expect(variableFiles.some((f) => f.includes('root.yml'))).toBe(true) - // Test getReusableFiles with nested structure const reusableFiles = getReusableFiles(path.join(tempDir, 'reusables')) expect(reusableFiles).toHaveLength(2) expect(reusableFiles.some((f) => f.includes('nested.md'))).toBe(true) expect(reusableFiles.some((f) => f.includes('root.md'))).toBe(true) } finally { - // Clean up fs.rmSync(tempDir, { recursive: true, force: true }) } }) @@ -93,7 +82,6 @@ describe('orphaned features detection', () => { const tempDir = path.join(__dirname, 'temp-mixed-files') fs.mkdirSync(tempDir, { recursive: true }) - // Create various file types fs.writeFileSync(path.join(tempDir, 'test.yml'), 'yml: content') fs.writeFileSync(path.join(tempDir, 'test.md'), '# MD content') fs.writeFileSync(path.join(tempDir, 'test.json'), '{"json": true}') @@ -112,7 +100,6 @@ describe('orphaned features detection', () => { expect(reusableFiles).toHaveLength(1) expect(reusableFiles[0]).toMatch(/test\.md$/) } finally { - // Clean up fs.rmSync(tempDir, { recursive: true, force: true }) } }) @@ -128,11 +115,9 @@ describe('orphaned features detection', () => { expect(fs.existsSync(path.join(featuresDir, 'used-in-variables.yml'))).toBe(true) expect(fs.existsSync(path.join(featuresDir, 'truly-orphaned.yml'))).toBe(true) - // Check that the variable file references the feature const variableContent = fs.readFileSync(path.join(variablesDir, 'test.yml'), 'utf-8') expect(variableContent).toContain('used-in-variables') - // Verify that the getVariableFiles function would find this file const variableFiles = getVariableFiles(variablesDir) expect(variableFiles.length).toBeGreaterThan(0) @@ -152,7 +137,6 @@ describe('orphaned features detection', () => { const tempDir = path.join(__dirname, 'temp-mixed-target-files') fs.mkdirSync(tempDir, { recursive: true }) - // Create files that both functions might encounter fs.writeFileSync( path.join(tempDir, 'variables.yml'), 'var: {% ifversion test-feature %}enabled{% endif %}', @@ -174,11 +158,9 @@ describe('orphaned features detection', () => { expect(reusableFiles).toHaveLength(1) expect(reusableFiles[0]).toMatch(/reusable\.md$/) - // Verify no cross-contamination expect(variableFiles.some((f) => f.endsWith('.md'))).toBe(false) expect(reusableFiles.some((f) => f.endsWith('.yml'))).toBe(false) } finally { - // Clean up fs.rmSync(tempDir, { recursive: true, force: true }) } }) diff --git a/src/events/components/Survey.tsx b/src/events/components/Survey.tsx index 624e717494bc..63ee60eb6664 100644 --- a/src/events/components/Survey.tsx +++ b/src/events/components/Survey.tsx @@ -1,7 +1,6 @@ import React, { useState, useRef, useEffect } from 'react' import cx from 'classnames' import { useRouter } from 'next/router' -import { ThumbsdownIcon, ThumbsupIcon } from '@primer/octicons-react' import { useTranslation } from '@/languages/components/useTranslation' import { Link } from '@/frame/components/Link' @@ -111,7 +110,7 @@ export const Survey = () => { data-testid="survey-form" aria-live="polite" > -

{t`able_to_find`}

+

{t`able_to_find`}

{/* Honeypot: token isn't a real field */} { )} htmlFor="survey-yes" > - {' '} {t`yes`} { )} htmlFor="survey-no" > - {' '} {t`no`} @@ -242,13 +233,15 @@ export const Survey = () => {

{t`feedback`}

)} - - {t`privacy_policy`} - + {(voteState || state === ViewState.END) && ( + + {t`privacy_policy`} + + )} ) } diff --git a/src/fixtures/fixtures/data/ui.yml b/src/fixtures/fixtures/data/ui.yml index 7b4565bf4036..812d976a5b0d 100644 --- a/src/fixtures/fixtures/data/ui.yml +++ b/src/fixtures/fixtures/data/ui.yml @@ -93,7 +93,10 @@ search_results: n_results: '{n} results' search_validation_error: Validation error with search query filter: Filter - clear_filter: Clear + clear_all_filters: Clear all + show_filters: Show filters + hide_filters: Hide filters + filter_search_results: Filter search results homepage: explore_by_product: Explore by product @@ -131,7 +134,7 @@ support: ask_community: Ask the GitHub community survey: - able_to_find: Did you find what you needed? + able_to_find: Was this Doc helpful? yes: Yes no: No cancel: Cancel @@ -147,8 +150,8 @@ survey: server_error: Unable to process comment at the moment. Please try again. contribution_cta: - title: Help us make these docs great! - body: All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request. + title: Help us make GitHub Docs great! + body: All Docs are open source. See something that's wrong or unclear? Submit a pull request. button: Make a contribution to_guidelines: Learn how to contribute @@ -314,6 +317,7 @@ webhooks: footer: support_heading: Help and support legal_heading: Legal + back_to_top: Back to top imprint: Imprint terms: Terms privacy: Privacy diff --git a/src/fixtures/playwright.config.ts b/src/fixtures/playwright.config.ts index 9ba48a14ccaf..7d4e382171aa 100644 --- a/src/fixtures/playwright.config.ts +++ b/src/fixtures/playwright.config.ts @@ -1,11 +1,5 @@ import { defineConfig } from '@playwright/test' -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// require('dotenv').config(); - const CI = Boolean(JSON.parse(process.env.CI || 'false')) const PLAYWRIGHT_START_SERVER_COMMAND = @@ -36,7 +30,6 @@ const EXPECT_TIMEOUT = process.env.PLAYWRIGHT_EXPECT_TIMEOUT */ export default defineConfig({ testDir: './tests', - /* Maximum time one test can run for. */ timeout: TIMEOUT, expect: { /** @@ -45,13 +38,9 @@ export default defineConfig({ */ timeout: EXPECT_TIMEOUT, }, - /* Run tests in files in parallel */ fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ forbidOnly: !!process.env.CI, - /* Retry on CI only */ retries: RETRIES, - /* Opt out of parallel tests on CI. */ workers: process.env.PLAYWRIGHT_WORKERS ? JSON.parse(process.env.PLAYWRIGHT_WORKERS) : CI @@ -63,14 +52,12 @@ export default defineConfig({ use: { /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ actionTimeout: 0, - /* Base URL to use in actions like `await page.goto('/')`. */ baseURL: 'http://localhost:4000', /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: 'on-first-retry', }, - /* Configure projects for major browsers */ projects: [ // { // name: 'chromium', @@ -125,7 +112,6 @@ export default defineConfig({ /* Folder for test artifacts such as screenshots, videos, traces, etc. */ // outputDir: 'test-results/', - /* Run your local dev server before starting the tests */ webServer: { command: PLAYWRIGHT_START_SERVER_COMMAND, port: 4000, diff --git a/src/fixtures/tests/api-article-body.ts b/src/fixtures/tests/api-article-body.ts index 05006793549c..fb4d3de6d23a 100644 --- a/src/fixtures/tests/api-article-body.ts +++ b/src/fixtures/tests/api-article-body.ts @@ -55,9 +55,7 @@ describe('article body api', () => { const res = await get(makeURL('/en/get-started/start-your-journey/api-article-body-test-page')) expect(res.statusCode).toBe(200) - // Should not contain frontmatter expect(res.body).not.toMatch(/^---/) - // Should have at least one heading expect(res.body).toMatch(/^#{1,6}\s+\w+/m) }) @@ -80,21 +78,17 @@ describe('article body api', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Should contain all tool-specific content variants expect(res.body).toContain('
') expect(res.body).toContain('
') expect(res.body).toContain('
') - // Should contain the actual content from each tool expect(res.body).toContain('This is webui content') expect(res.body).toContain('This is cli content') expect(res.body).toContain('This is desktop content') - // Should contain tool-specific sections expect(res.body).toContain('Webui section specific content') expect(res.body).toContain('Desktop section specific content') - // Verify multiple instances of the same tool are preserved const webuiMatches = res.body.match(/
/g) const desktopMatches = res.body.match(/
/g) expect(webuiMatches).toBeDefined() @@ -108,11 +102,9 @@ describe('article body api', () => { expect(res.statusCode).toBe(200) expect(res.headers['content-type']).toContain('text/markdown') - // Should contain both webui and codespaces tool content expect(res.body).toContain('
') expect(res.body).toContain('
') - // Should contain the actual content from both tools expect(res.body).toContain('Under your repository name, click **Pull requests**') expect(res.body).toContain('Open the pull request in your codespace') expect(res.body).toContain( @@ -122,7 +114,6 @@ describe('article body api', () => { 'After reviewing the files, you can submit your review directly from Codespaces', ) - // Verify both tools appear in multiple sections const webuiMatches = res.body.match(/
/g) const codespacesMatches = res.body.match(/
/g) expect(webuiMatches).toBeDefined() @@ -139,7 +130,6 @@ describe('article body api', () => { ), ) - // Skip test if page doesn't exist in fixture environment if (res.statusCode === 404) { console.log('Production page not available in fixture environment, skipping test') return @@ -147,11 +137,9 @@ describe('article body api', () => { expect(res.statusCode).toBe(200) - // Verify the fix is working - codespaces content should now be present const hasCodespacesContent = res.body.includes('
') expect(hasCodespacesContent).toBe(true) - // Also verify that webui content is still present expect(res.body).toContain('
') }) @@ -164,7 +152,6 @@ describe('article body api', () => { ), ) - // Skip test if page doesn't exist in fixture environment if (res.statusCode === 404) { console.log( 'Production page not available in fixture environment, skipping issue verification test', @@ -179,11 +166,9 @@ describe('article body api', () => { expect(res.body).toContain('
') expect(res.body).toContain('
') - // Verify specific codespaces content that was missing before the fix expect(res.body).toContain('GitHub Codespaces') expect(res.body).toContain('Open the pull request in a codespace') - // Ensure both tools are rendered with their respective content const webuiMatches = res.body.match(/
/g) const codespacesMatches = res.body.match(/
/g) diff --git a/src/fixtures/tests/categories-and-subcategory.ts b/src/fixtures/tests/categories-and-subcategory.ts index fcbf6375987d..24aa47af6056 100644 --- a/src/fixtures/tests/categories-and-subcategory.ts +++ b/src/fixtures/tests/categories-and-subcategory.ts @@ -17,7 +17,7 @@ describe('subcategories', () => { expect( hrefs.every((href: string) => href.startsWith('/en/get-started/start-your-journey/')), ).toBeTruthy() - // The all resolve to a 200 OK without redirects + // They all resolve to a 200 OK without redirects const responses = await Promise.all(hrefs.map((href: string) => head(href))) expect(responses.every((r: { statusCode: number }) => r.statusCode === 200)).toBeTruthy() }) @@ -53,7 +53,7 @@ describe('categories', () => { // They all have the same prefix const hrefs = links.map((i: number, el: Element) => $(el).attr('href')).get() expect(hrefs.every((href: string) => href.startsWith('/en/actions/category/'))).toBeTruthy() - // The all resolve to a 200 OK without redirects + // They all resolve to a 200 OK without redirects const responses = await Promise.all(hrefs.map((href: string) => head(href))) expect(responses.every((r: { statusCode: number }) => r.statusCode === 200)).toBeTruthy() }) diff --git a/src/fixtures/tests/playwright-a11y.spec.ts b/src/fixtures/tests/playwright-a11y.spec.ts index 5aff5bc5bec9..e3e24039c38d 100644 --- a/src/fixtures/tests/playwright-a11y.spec.ts +++ b/src/fixtures/tests/playwright-a11y.spec.ts @@ -2,6 +2,8 @@ import { test, expect } from '@playwright/test' import AxeBuilder from '@axe-core/playwright' import { turnOffExperimentsInPage, turnOnExperimentsInPage } from '../helpers/turn-off-experiments' +const SEARCH_TESTS = !!process.env.ELASTICSEARCH_URL + const pages: { [key: string]: string } = { category: '/actions/category', codeAnnotations: '/get-started/markdown/code-annotations', @@ -45,3 +47,35 @@ for (const pageName of Object.keys(pages)) { }) }) } + +// The search facet filters collapse behind a "Show filters" disclosure below +// Primer Brand's `medium` breakpoint. The scans above run at the default desktop +// viewport, where that disclosure is display:none, so the expanded panel would +// otherwise never be scanned. +test.describe('search filters (narrow viewport)', () => { + // Without a local Elasticsearch the middleware proxies to production, so there are no + // aggregations, the disclosure never renders, and this would time out rather than + // skip. Matches the guard every search test in playwright-rendering.spec.ts uses. + test.skip(!SEARCH_TESTS, 'No local Elasticsearch, no tests involving search') + + test('expanded filter disclosure passes axe', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 820 }) + await page.goto('/search?query=foo') + await turnOffExperimentsInPage(page) + + const toggle = page.getByTestId('search-filter-toggle') + await expect(toggle).toBeVisible() + await expect(toggle).toHaveAttribute('aria-expanded', 'false') + + await toggle.click() + await expect(toggle).toHaveAttribute('aria-expanded', 'true') + // Scoped to the disclosure's own panel: a bare `fieldset` locator would hit strict + // mode the moment anything else on the page renders one. + const panelId = await toggle.getAttribute('aria-controls') + await expect(page.locator(`#${panelId} fieldset`)).toBeVisible() + + const accessibilityScanResults = await new AxeBuilder({ page }).analyze() + + expect(accessibilityScanResults.violations).toEqual([]) + }) +}) diff --git a/src/fixtures/tests/playwright-rendering.spec.ts b/src/fixtures/tests/playwright-rendering.spec.ts index 461b8e3643a6..c5e18a7880b8 100644 --- a/src/fixtures/tests/playwright-rendering.spec.ts +++ b/src/fixtures/tests/playwright-rendering.spec.ts @@ -145,12 +145,9 @@ test('do a search from home page and click on "Foo" page', async ({ page }) => { await page.goto('/') await turnOffExperimentsInPage(page) - // Use the search overlay await page.locator('[data-testid="search"]:visible').click() await page.getByTestId('overlay-search-input').fill('serve playwright') - // Wait for search results to load await page.waitForTimeout(1000) - // Click "View more results" to get to the search page await page.getByText('View more results').click() await expect(page).toHaveURL( @@ -202,9 +199,7 @@ test('open search, and select a general search article', async ({ page }) => { // Let new suggestions load const searchOverlay = page.getByTestId('general-autocomplete-suggestions') await expect(searchOverlay.getByText('For Playwright')).toBeVisible() - // Navigate to general search item, "For Playwright" await page.keyboard.press('ArrowDown') - // Select the general search item, "For Playwright" await page.keyboard.press('Enter') // We should now be on the page for "For Playwright" @@ -241,9 +236,7 @@ test('open search, and get auto-complete results', async ({ page }) => { await expect(searchInput).toBeVisible() await expect(searchInput).toBeEnabled() - // Type the text "rest" into the search input await searchInput.fill('rest') - // For for 1 second for the suggestions to load await page.waitForTimeout(1000) // Ask AI suggestions @@ -267,12 +260,9 @@ test('search from enterprise-cloud and filter by top-level Fooing', async ({ pag await page.goto('/enterprise-cloud@latest') await turnOffExperimentsInPage(page) - // Use the search overlay await page.locator('[data-testid="search"]:visible').click() await page.getByTestId('overlay-search-input').fill('fixture') - // Wait for search results to load await page.waitForTimeout(1000) - // Click "View more results" to get to the search page await page.getByText('View more results').click() // Now we're on the search results page, apply the filter @@ -309,7 +299,7 @@ test.describe('platform picker', () => { }) test('minitoc matches picker', async ({ page }) => { - // default platform set to windows in fixture fronmatter + // The fixture frontmatter defaults the platform to Windows. await page.goto('/get-started/liquid/platform-specific') await turnOffExperimentsInPage(page) await expect( @@ -450,12 +440,10 @@ test('navigate with side bar into article inside a subcategory inside a category }) test('sidebar custom link functionality works', async ({ page }) => { - // Test that sidebar functionality is not broken by custom links feature await page.goto('/get-started') await expect(page).toHaveTitle(/Getting started with HubGit/) - // Verify that regular sidebar navigation still works by clicking on known sections await page.getByTestId('product-sidebar').getByText('Start your journey').click() await page.getByTestId('product-sidebar').getByText('Hello World').click() await expect(page).toHaveURL(/\/en\/get-started\/start-your-journey\/hello-world/) @@ -550,7 +538,6 @@ test.describe('hover cards', () => { ), ).toBeVisible() - // Press Escape to close it await page.keyboard.press('Escape') await expect( page.getByText( @@ -574,7 +561,6 @@ test.describe('hover cards', () => { ), ).toBeVisible() - // click the Esc key to close the hovercard await page.keyboard.press('Escape') await expect( page.getByText( @@ -603,7 +589,7 @@ test.describe('test nav at different viewports', () => { await expect(page.getByTestId('breadcrumbs-bar')).toBeVisible() // breadcrumbs show up in one of the pages that use the AutomatedPage - // component (e.g. graphql, audit log, etc.) -- we test the webhooks + // component (e.g. graphql, audit log). This one uses the webhooks // reference page here await page.goto('/webhooks/webhook-events-and-payloads') await expect(page.getByTestId('breadcrumbs-bar')).toBeVisible() @@ -627,7 +613,7 @@ test.describe('test nav at different viewports', () => { height: 700, }) - // Opening the mobile nav must still render the doc-tree drawer -- before the + // Opening the mobile nav must still render the doc-tree drawer. Before the // fix, `collapsed` short-circuited the sidebar to null while the open state // hid the content column, leaving a blank area with no drawer. await page.getByTestId('sidebar-mobile-toggle').click() @@ -651,7 +637,7 @@ test.describe('test nav at different viewports', () => { const nav = page.locator('[data-container="nav"]') await expect(nav).toHaveAttribute('data-mobile-open', 'true') - // Resize up to the desktop breakpoint -- the inline nav should close and the + // Resize up to the desktop breakpoint. The inline nav should close and the // fixed desktop rail (326px) should take over rather than the full-width // mobile markup persisting over the page. await page.setViewportSize({ @@ -669,16 +655,13 @@ test.describe('test nav at different viewports', () => { }) await page.goto('/get-started/foo/bar') - // version picker should be visible await page.getByTestId('version-picker').getByRole('button').click() expect((await page.getByRole('menuitemradio').all()).length).toBeGreaterThan(0) await expect(page.getByRole('menuitemradio', { name: 'Enterprise Cloud' })).toBeVisible() - // language picker is visible await page.getByRole('button', { name: 'Select language: current language is English' }).click() await expect(page.getByRole('menuitemradio', { name: 'English' })).toBeVisible() - // header sign up button is visible await expect(page.getByTestId('header-signup')).toBeVisible() }) @@ -707,19 +690,15 @@ test.describe('test nav at different viewports', () => { }) await page.goto('/get-started/foo/bar') - // version picker is visible await page.getByTestId('version-picker').getByRole('button').click() expect((await page.getByRole('menuitemradio').all()).length).toBeGreaterThan(0) await expect(page.getByRole('menuitemradio', { name: 'Enterprise Cloud' })).toBeVisible() - // language picker is in mobile menu await page.getByTestId('mobile-menu').click() await expect(page.getByRole('menuitemradio', { name: 'English' })).toBeVisible() - // sign up button is in mobile menu await expect(page.getByTestId('mobile-signup')).toBeVisible() - // hamburger button for sidebar overlay is visible await expect(page.getByTestId('sidebar-mobile-toggle')).toBeVisible() await page.getByTestId('sidebar-mobile-toggle').click() await expect(page.getByTestId('sidebar')).toBeVisible() @@ -732,23 +711,17 @@ test.describe('test nav at different viewports', () => { }) await page.goto('/get-started/foo/bar') - // header sign-up button is not visible await expect(page.getByTestId('header-signup')).not.toBeVisible() - // language picker is not visible await expect(page.getByTestId('language-picker')).not.toBeVisible() - // version picker is visible await expect(page.getByTestId('version-picker').getByRole('button')).toBeVisible() - // language picker is in mobile menu await page.getByTestId('mobile-menu').click() await expect(page.getByRole('menuitemradio', { name: 'English' })).toBeVisible() - // sign up button is in mobile menu await expect(page.getByTestId('mobile-signup')).toBeVisible() - // hamburger button for sidebar overlay is visible await expect(page.getByTestId('sidebar-mobile-toggle')).toBeVisible() await page.getByTestId('sidebar-mobile-toggle').click() await expect(page.getByTestId('sidebar')).toBeVisible() @@ -762,27 +735,20 @@ test.describe('test nav at different viewports', () => { await page.goto('/get-started/foo/bar') await turnOffExperimentsInPage(page) - // header sign-up button is not visible await expect(page.getByTestId('header-signup')).not.toBeVisible() - // language picker is not visible await expect(page.getByTestId('language-picker')).not.toBeVisible() - // version picker is not visible await expect(page.getByTestId('version-picker').getByRole('button')).not.toBeVisible() - // version picker is in mobile menu await expect(page.getByTestId('version-picker')).not.toBeVisible() await page.getByTestId('mobile-menu').click() await expect(page.getByTestId('open-mobile-menu').getByTestId('version-picker')).toBeVisible() - // language picker is in mobile menu await expect(page.getByTestId('open-mobile-menu').getByTestId('language-picker')).toBeVisible() - // sign up button is in mobile menu await expect(page.getByTestId('mobile-signup')).toBeVisible() - // hamburger button for sidebar overlay is visible await expect(page.getByTestId('sidebar-mobile-toggle')).toBeVisible() await page.getByTestId('sidebar-mobile-toggle').click() await expect(page.getByTestId('sidebar')).toBeVisible() @@ -798,12 +764,9 @@ test.describe('test nav at different viewports', () => { await page.goto('/get-started/foo/bar') await turnOffExperimentsInPage(page) - // Use the search overlay await page.locator('[data-testid="mobile-search-button"]:visible').click() await page.getByTestId('overlay-search-input').fill('serve playwright') - // Wait for search results to load await page.waitForTimeout(1000) - // Click "View more results" to get to the search page await page.getByText('View more results').click() await expect(page).toHaveURL( @@ -822,12 +785,9 @@ test.describe('test nav at different viewports', () => { await page.goto('/get-started/foo/bar') await turnOffExperimentsInPage(page) - // Use the search overlay await page.locator('[data-testid="mobile-search-button"]:visible').click() await page.getByTestId('overlay-search-input').fill('serve playwright') - // Wait for search results to load await page.waitForTimeout(1000) - // Click "View more results" to get to the search page await page.getByText('View more results').click() await expect(page).toHaveURL( @@ -841,7 +801,7 @@ test.describe('secondary-bar breadcrumb scroller', () => { // The secondary bar (and its breadcrumb scroller) only renders at wide // viewports, and the fixture trail is short enough to fit there, so we cap the // scroller width to force a deterministic overflow independent of title - // lengths — then exercise the chevrons. + // lengths, then exercise the chevrons. test('chevrons scroll one crumb at a time instead of jumping to the ends', async ({ page }) => { // Smooth-scroll settle waits across several chevron clicks add up past the // default 5s cap. diff --git a/src/frame/components/CodeTabsGroup.tsx b/src/frame/components/CodeTabsGroup.tsx index 2d326d26eb03..d6b701399090 100644 --- a/src/frame/components/CodeTabsGroup.tsx +++ b/src/frame/components/CodeTabsGroup.tsx @@ -27,11 +27,11 @@ import { useTranslation } from '@/languages/components/useTranslation' // React-native replacement for the imperative CodeTabs enhancer (#6619). The old // component scanned `#article-contents` for `.ghd-codetabs`, inserted a foreign // `.ghd-codetabs-nav` mountPoint as the container's first child, portaled a nav -// into it, and toggled panel attributes — destructive surgery on React-owned -// nodes that breaks on client-side navigation teardown. Instead, the article body -// hast maps each `.ghd-codetabs` container to , which reads its -// `.ghd-codetab` panel children straight from props and renders the nav + panels -// itself. No DOM scanning, no portal, no foreign nodes. +// into it, and toggled panel attributes. Those mutations are destructive surgery +// on React-owned nodes and break on client-side navigation teardown. Instead, the +// article body hast maps each `.ghd-codetabs` container to , which +// reads its `.ghd-codetab` panel children straight from props and renders the nav +// and panels itself. No DOM scanning, no portal, no foreign nodes. // // The selected language lives in CodeLanguageContext so multiple code-tab groups // on one page stay in sync and share the language cookie, matching the previous diff --git a/src/frame/components/DefaultLayout.module.scss b/src/frame/components/DefaultLayout.module.scss index 9d113e41e172..d71ccc296c89 100644 --- a/src/frame/components/DefaultLayout.module.scss +++ b/src/frame/components/DefaultLayout.module.scss @@ -1,10 +1,20 @@ @import "src/frame/stylesheets/breakpoint-xxl.scss"; +@import "@primer/react-brand/lib/design-tokens/scss/tokens/functional/size/breakpoints.scss"; .mainContent { scroll-margin-top: 5rem; } -// When the inline mobile/tablet nav is open, it takes over the viewport — hide +// The search results page splits into rail + results at brand's `medium` +// breakpoint rather than waiting for `d-lg-flex` at 1012px, so the facet rail is +// available on tablets. Applied only on /search. +.searchColumns { + @media (min-width: $brand-breakpoint-medium) { + display: flex; + } +} + +// When the inline mobile/tablet nav is open, it takes over the viewport, so hide // the content column so the full-width rail isn't squeezed beside it. Above the // xxl breakpoint the rail is a fixed-width sibling, so content always shows. .contentHiddenForNav { diff --git a/src/frame/components/DefaultLayout.tsx b/src/frame/components/DefaultLayout.tsx index 68e014aa4261..ea174a327aa8 100644 --- a/src/frame/components/DefaultLayout.tsx +++ b/src/frame/components/DefaultLayout.tsx @@ -10,9 +10,7 @@ import { SidebarCollapseProvider, useSidebarCollapsed, } from '@/frame/components/sidebar/SidebarCollapseContext' -import { LegalFooter } from '@/frame/components/page-footer/LegalFooter' -import { ScrollButton } from '@/frame/components/ui/ScrollButton' -import { SupportSection } from '@/frame/components/page-footer/SupportSection' +import { DocsFooter } from '@/frame/components/page-footer/DocsFooter' import { DeprecationBanner } from '@/versions/components/DeprecationBanner' import { RestBanner } from '@/rest/components/RestBanner' import { useMainContext } from '@/frame/components/context/MainContext' @@ -41,7 +39,7 @@ export const DefaultLayout = (props: Props) => { } = mainContext const xHost = mainContext.xHost const page = mainContext.page! - const { t } = useTranslation(['meta', 'scroll_button']) + const { t } = useTranslation('meta') const router = useRouter() const { languages } = useLanguages() @@ -119,9 +117,7 @@ export const DefaultLayout = (props: Props) => { return getCategoryImageUrl('default') } - // Helper function to build API article URLs with proper query parameter handling function buildApiArticleUrl(apiPath: string): string { - // Parse router.asPath to separate pathname and query parameters const [pathname, queryString] = router.asPath.split('?') const fullPathname = `/${router.locale}${pathname}` const queryParams = queryString ? `&${queryString}` : '' @@ -234,20 +230,13 @@ export const DefaultLayout = (props: Props) => { {props.children} -
- - - -
+
) : ( <> - {props.children} + {props.children} )} @@ -260,17 +249,32 @@ export const DefaultLayout = (props: Props) => { // collapsed; on mobile it shows inline (in the page flow, like desktop) only // when the nav is opened from the secondary bar. The content column (flex-1) // fills the row when the rail is absent. -type LayoutBodyProps = { children?: React.ReactNode; scrollToTopLabel: string } -const LayoutBody = ({ children, scrollToTopLabel }: LayoutBodyProps) => { +type LayoutBodyProps = { children?: React.ReactNode } +const LayoutBody = ({ children }: LayoutBodyProps) => { const { collapsed, mobileNavOpen } = useSidebarCollapsed() + const { currentProduct } = useMainContext() + // Matches SidebarNav's own gate rather than testing router.route. There are two search + // pages, src/pages/search.tsx and src/pages/[versionId]/search.tsx, so a route test + // for '/search' misses every versioned search URL, and this check would then disagree + // with SidebarNav about whether the rail is a facet rail. + const isSearchResultsPage = currentProduct?.id === 'search' return ( -
+ // `d-lg-flex` only goes side-by-side at 1012px. The search page's facet rail + // is meant to sit beside the results from brand's `medium` breakpoint, so it + // gets an earlier split of its own. Route-gated, so no other page moves. +
{/* `collapsed` is the desktop rail-collapse state (persisted). The inline - mobile nav is independent, so still render the sidebar when it's open — - otherwise opening the mobile nav while the desktop rail is collapsed + mobile nav is independent, so still render the sidebar when it's open. + Otherwise opening the mobile nav while the desktop rail is collapsed hides the content column (contentHiddenForNav) with no drawer to show, - so the open nav displays a blank area instead of the doc tree. */} - {collapsed && !mobileNavOpen ? null : } + so the open nav displays a blank area instead of the doc tree. + + Search is exempt: the cookie is shared with the doc-tree rail, but the + search page has no toggle to undo it (DocsSecondaryBar returns null + there), so honouring it would strand the filters with no way back. */} + {collapsed && !mobileNavOpen && !isSearchResultsPage ? null : ( + + )} {/* Need to set an explicit height for sticky elements since we also set overflow to auto */}
{ {children} -
- - - -
+
) diff --git a/src/frame/components/HighlightedCode.tsx b/src/frame/components/HighlightedCode.tsx index 4e5d2c7a31a6..db1d48207990 100644 --- a/src/frame/components/HighlightedCode.tsx +++ b/src/frame/components/HighlightedCode.tsx @@ -10,8 +10,8 @@ import cx from 'classnames' // React-native replacement for the imperative ClientSideHighlightJS enhancer // (#6619). The old enhancer scanned the document for `[data-highlight] code` and -// called `hljs.highlightElement`, which REPLACES the ``'s innerHTML — -// destructive on a React-owned node. Instead, components that render code +// called `hljs.highlightElement`, which REPLACES the ``'s innerHTML. +// That is destructive on a React-owned node. Instead, components that render code // (RestCodeSamples, Webhook) use , which highlights with // `lowlight` (the hast-based highlighter behind rehype-highlight) and renders the // tokens as real React elements via `toJsxRuntime`. No innerHTML, no DOM scan. diff --git a/src/frame/components/UtmPreserver.tsx b/src/frame/components/UtmPreserver.tsx index e92aad49f6bb..a6805d4bf64a 100644 --- a/src/frame/components/UtmPreserver.tsx +++ b/src/frame/components/UtmPreserver.tsx @@ -5,7 +5,6 @@ export const UtmPreserver = () => { const router = useRouter() useEffect(() => { - // Extract UTM parameters from current URL const getUtmParams = (): URLSearchParams => { const urlParams = new URLSearchParams(window.location.search) const utmParams = new URLSearchParams() @@ -22,7 +21,6 @@ export const UtmPreserver = () => { const utmParams = getUtmParams() if (utmParams.toString() === '') return - // Check if a link should have UTM parameters preserved const shouldPreserveUtm = (url: string): boolean => { const lowercaseUrl = url.toLowerCase() @@ -35,7 +33,6 @@ export const UtmPreserver = () => { return hasProtocol && isGithubCom && !isDocsGithubCom } - // Add UTM parameters to a URL const addUtmParamsToUrl = (url: string, params: URLSearchParams): string => { try { const urlObj = new URL(url) @@ -46,12 +43,10 @@ export const UtmPreserver = () => { return urlObj.toString() } catch { - // If URL parsing fails, return original URL return url } } - // Apply UTM parameters to relevant links const applyUtmToLinks = (): void => { const links = document.querySelectorAll('a[href]') @@ -62,7 +57,6 @@ export const UtmPreserver = () => { } } - // Handle click events for dynamic link modification const handleLinkClick = (event: Event): void => { const link = (event.target as Element)?.closest('a') as HTMLAnchorElement if (!link || !link.href) return @@ -72,7 +66,6 @@ export const UtmPreserver = () => { } } - // Apply UTM parameters immediately to existing links applyUtmToLinks() // Also handle clicks for any dynamically added links @@ -86,13 +79,11 @@ export const UtmPreserver = () => { router.events.on('routeChangeComplete', handleRouteChange) - // Cleanup return () => { document.removeEventListener('click', handleLinkClick, true) router.events.off('routeChangeComplete', handleRouteChange) } }, [router.asPath, router.events]) - // This component doesn't render anything return null } diff --git a/src/frame/components/context/ArticleContext.tsx b/src/frame/components/context/ArticleContext.tsx index 2b84f53b0a95..3582e7047469 100644 --- a/src/frame/components/context/ArticleContext.tsx +++ b/src/frame/components/context/ArticleContext.tsx @@ -55,7 +55,7 @@ const PagePathToVaFlowMapping: Record = { 'pages_ssl_check', } -// Request type for context extraction — uses Record for the page +// Request type for context extraction. Uses Record for the page // because the Page type doesn't include all runtime-computed properties. interface ContextRequest { context: { diff --git a/src/frame/components/context/CategoryLandingContext.tsx b/src/frame/components/context/CategoryLandingContext.tsx index 41da55f48f96..d92d382fb29d 100644 --- a/src/frame/components/context/CategoryLandingContext.tsx +++ b/src/frame/components/context/CategoryLandingContext.tsx @@ -32,7 +32,7 @@ export const useCategoryLandingContext = (): CategoryLandingContextT => { return context } -// Request type for context extraction — uses Record for the page +// Request type for context extraction. Uses Record for the page // because the Page type doesn't include all runtime-computed properties. interface ContextRequest { context: { diff --git a/src/frame/components/context/TocLandingContext.tsx b/src/frame/components/context/TocLandingContext.tsx index 7864f3bbbf5b..e69284f5b784 100644 --- a/src/frame/components/context/TocLandingContext.tsx +++ b/src/frame/components/context/TocLandingContext.tsx @@ -27,7 +27,7 @@ export const useTocLandingContext = (): TocLandingContextT => { return context } -// Request type for context extraction — uses Record for the page +// Request type for context extraction. Uses Record for the page // because the Page type doesn't include all runtime-computed properties. interface ContextRequest { context: { diff --git a/src/frame/components/lib/prefetch.ts b/src/frame/components/lib/prefetch.ts index 84f7b3833a0c..7213b3cacca0 100644 --- a/src/frame/components/lib/prefetch.ts +++ b/src/frame/components/lib/prefetch.ts @@ -4,7 +4,7 @@ import type { useRouter } from 'next/router' type Router = ReturnType // Session-lived de-dupe set. Module scope (not a per-component useRef) so it -// survives the sidebar's per-navigation remount — otherwise the cache would +// survives the sidebar's per-navigation remount. Otherwise the cache would // reset every nav and "de-duped per href" would only hold within a single page. // Bounded by the number of distinct internal hrefs the user hovers/focuses. const prefetchedHrefs = new Set() diff --git a/src/frame/components/lib/toggle-annotations.ts b/src/frame/components/lib/toggle-annotations.ts index cdce002b7821..628391ec7c1e 100644 --- a/src/frame/components/lib/toggle-annotations.ts +++ b/src/frame/components/lib/toggle-annotations.ts @@ -8,15 +8,9 @@ enum annotationMode { Inline = 'inline', } -/** - * Validates if a given mode is one of expected annotation modes. If no acceptable mode is found, a default mode is returned.. Optionally, returns a default mode. - * @param mode The mode to validate, ideally "#annotation-beside" or "#annotation-inline" - * @param leaveNull Alters the return value of this function. If false, the function will return the mode that was passed in or, in the case of null, the default mode. If true, the function will return null instead of using the default mode. - * @returns The validated mode, or null if leaveNull is true and no valid mode is found. - */ +// Returns the mode if it is 'beside' or 'inline', otherwise falls back to Beside. function validateMode(mode?: string) { if (mode === annotationMode.Beside || mode === annotationMode.Inline) return mode - // default to Beside else return annotationMode.Beside } @@ -24,15 +18,13 @@ export default function toggleAnnotation() { const annotationButtons = Array.from(document.querySelectorAll('.annotate-toggle button')) if (!annotationButtons.length) return - const cookie = validateMode(Cookies.get(ANNOTATE_MODE_COOKIE_NAME)) // will default to beside + const cookie = validateMode(Cookies.get(ANNOTATE_MODE_COOKIE_NAME)) displayAnnotationMode(annotationButtons, cookie) - // this loop adds event listeners for both the annotation buttons for (const annotationBtn of annotationButtons) { annotationBtn.addEventListener('click', (evt) => { evt.preventDefault() - // validate the annotation mode and set the cookie with the valid mode const validMode = validateMode(annotationBtn.getAttribute('value')!) Cookies.set(ANNOTATE_MODE_COOKIE_NAME, validMode!) sendEvent({ @@ -41,14 +33,15 @@ export default function toggleAnnotation() { preference_value: validMode, }) - // set and display the annotation mode setActive(annotationButtons, validMode) displayAnnotationMode(annotationButtons, validMode) }) } } -// sets the active element's aria-current, if no targetMode is set we default to "Beside", errors if it can't set either Beside or the passed in targetMode +// Sets aria-current on every button whose value matches the validated mode, and +// clears it from the rest. Missing or invalid modes validate to Beside. Throws if +// no button matches. function setActive(annotationButtons: Array, targetMode?: string) { const activeElements: Array = [] targetMode = validateMode(targetMode) @@ -69,7 +62,6 @@ function setActive(annotationButtons: Array, targetMode?: string) { return activeElements } -// displays the chosen annotation mode function displayAnnotationMode(annotationBtnItems: Array, targetMode?: string) { if (!targetMode || targetMode === annotationMode.Beside) { for (const el of annotationBtnItems) { diff --git a/src/frame/components/page-footer/Contribution.tsx b/src/frame/components/page-footer/Contribution.tsx index 17875ec0e82a..0468a0dfd5f8 100644 --- a/src/frame/components/page-footer/Contribution.tsx +++ b/src/frame/components/page-footer/Contribution.tsx @@ -1,5 +1,3 @@ -import { GitPullRequestIcon } from '@primer/octicons-react' - import { useMainContext } from '@/frame/components/context/MainContext' import { useTranslation } from '@/languages/components/useTranslation' @@ -11,19 +9,16 @@ export const Contribution = () => { ? `https://github.com/github/docs/blob/main/content/${relativePath}` : 'https://github.com/github/docs' + // Heading and body styling comes from the footer column rules in + // SupportSection.module.scss. The Docs 2026 design renders these as plain body + // text rather than a bold heading plus muted copy. return (
-

{t`title`}

-

{t`body`}

+

{t`title`}

+

{t`body`}

- {t`button`} -

- - {t`to_guidelines`} - -

) } diff --git a/src/frame/components/page-footer/DocsFooter.module.scss b/src/frame/components/page-footer/DocsFooter.module.scss new file mode 100644 index 000000000000..bd9d633f43b8 --- /dev/null +++ b/src/frame/components/page-footer/DocsFooter.module.scss @@ -0,0 +1,180 @@ +// In dark mode the footer sits on the repo's canvas (#0d1117) while brand's +// canvas-subtle comes from brand's own palette (#0f1511). Those are near-identical, +// so the controls would lose their fill and read as bare outlines. Use Primer's +// surfaces there instead: they're built to contrast with this background. Selector +// pattern follows octicon-table-optimization.scss. +@mixin footer-control-surfaces-dark { + --color-btn-bg: var(--color-canvas-subtle); + --color-btn-border: var(--color-border-default); + --color-btn-text: var(--color-fg-default); + --brand-footer-backToTop-bgColor-rest: var(--color-canvas-subtle); + // Brand's own dark border token is a different grey from Primer's, which would + // leave Back to top outlined differently from the three buttons beside it. + --brand-footer-backToTop-borderColor-rest: var(--color-border-default); +} + +.docsFooter { + // Brand defaults the footer to canvas-subtle (a grey panel); the design puts it on + // the page canvas so it reads as continuous with the article and the band above. + // Deliberately the *repo's* canvas, not brand's: brand's canvas-default is pure + // black in dark mode while these pages sit on #0d1117, which would make the footer + // a visibly darker slab. + --brand-footer-bg-color: var(--bgColor-default, var(--color-canvas-default)); + + // The design draws all four footer controls (Yes, No, Make a contribution and + // Back to top) on brand's subtle canvas with a subtle border (#f2f5f3 on #d2d9d4, + // which is exactly what these brand tokens resolve to). + // + // Yes/No and the contribution CTA are Primer `.btn`s, so set the variables they + // read rather than overriding the rules: the survey's selected states apply + // `color-bg-success-emphasis` / `color-bg-danger-emphasis`, which set + // background-color directly and must keep winning over the rest state. + --color-btn-bg: var(--brand-color-canvas-subtle); + --color-btn-border: var(--brand-color-border-subtle); + --color-btn-text: var(--brand-color-text-default); + + // Brand gives Back to top a near-transparent fill by default; the design gives it + // the same treatment as the other three. Its border already matches. + --brand-footer-backToTop-bgColor-rest: var(--brand-color-canvas-subtle); + + :global([data-color-mode="dark"]) & { + @include footer-control-surfaces-dark; + } + + @media (prefers-color-scheme: dark) { + :global([data-color-mode="auto"][data-dark-theme*="dark"]) & { + @include footer-control-surfaces-dark; + } + } + + // The band above supplies the visual break, and the design puts a 2px emphasized + // rule directly beneath it, on the footer's own top edge. Brand's default here is + // a much brighter green (scale-green-3), so this stays an explicit override. + border-top: 2px solid var(--brand-color-text-emphasized); + + // Brand's section padding is roughly double the design's. Targeted through markers + // we own rather than brand's hashed module classes, which change between releases. + // + // Top bar: 76px in the design, sized by the 44px back-to-top control plus 16px. + > div:has(.backToTop) > section { + padding-top: var(--base-size-16); + padding-bottom: var(--base-size-16); + } + + // Help region: the columns own their padding, so the section adds none. Without + // this the columns sit 32px below the rule that introduces them, and because the + // rules between rows are column borders, those rules would stop short of the + // footer edges instead of spanning it as the design shows. The inline inset moves + // onto the columns in SupportSection.module.scss so content stays aligned with the + // top and bottom bars. + > div:has(.centerSlot) > section { + padding: 0; + } + + // Bottom bar: 76px in the design around a single 18px line. + > div:has(.bottomRow) > section { + padding-top: var(--base-size-28); + padding-bottom: var(--base-size-28); + } + + // `copyrightStatement` renders inside a brand that is a flex item of + // the bottom row. Let it fill the row so the copyright and links can sit at + // opposite ends, and drop the uppercasing the component applies to the whole

+ // (the design uppercases only the copyright, not the links). + p:has(> .bottomRow) { + flex: 1; + // Inert while the bottom row is horizontal (flex-basis wins), but needed at + // narrow, where brand's bottom row turns into a column with align-items: + // flex-start and would otherwise shrink this to its content width. + width: 100%; + min-width: 0; + text-transform: none; + } +} + +.bottomRow { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: var(--base-size-16); + width: 100%; +} + +.copyrightText { + text-transform: uppercase; +} + +// Narrow: the design stacks the legal links above the copyright, and gives each its +// own band separated by a rule that spans the footer. So the bottom section hands its +// padding to the two rows, the same move the help region makes, which lets the rule +// between them reach the edges while both rows stay inset and aligned with each other. +@media (max-width: 767px) { + .docsFooter > div:has(.bottomRow) > section { + padding-block: 0; + } + + .docsFooter > div:has(.bottomRow) > section > div { + padding-inline: 0; + } + + .bottomRow { + flex-direction: column; + align-items: stretch; + gap: 0; + } + + .legalLinks { + order: 1; + padding: var(--base-size-20); + } + + .copyrightText { + order: 2; + padding: var(--base-size-20); + border-top: 1px solid + var(--borderColor-muted, var(--color-border-muted, #d2d9d4)); + } +} + +.legalLinks { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--base-size-24); +} + +.legalLink { + // The design sets these apart from the muted monospace copyright: link blue, and + // the body font at the same size as the other footer link columns. + font-family: var(--brand-body-fontFamily, inherit); + font-size: 14px; + font-weight: 500; + text-transform: none; + // Brand's link token, not Primer's accent blue. There is no + // `--brand-color-text-link`; the real token is `-rest`, and naming it wrong meant + // this quietly fell back to Primer (#0969da) instead of brand (#0055d5). + color: var(--brand-color-text-link-rest); + + &:hover { + text-decoration: underline; + } + + // Pipe separators between links, per the design. Decorative, so a pseudo-element + // keeps them out of the accessibility tree and out of the copied text. + &:not(:first-child)::before { + content: ""; + display: inline-block; + width: 1px; + height: 10px; + margin-right: var(--base-size-24); + vertical-align: -1px; + background-color: var(--brand-color-border-subtle); + } + + // KO law requires the privacy statement link to be conspicuous. + &[data-conspicuous="true"] { + color: var(--fgColor-attention, var(--color-fg-attention, #9a6700)); + font-weight: 600; + } +} diff --git a/src/frame/components/page-footer/DocsFooter.tsx b/src/frame/components/page-footer/DocsFooter.tsx new file mode 100644 index 000000000000..d2c29cdbd782 --- /dev/null +++ b/src/frame/components/page-footer/DocsFooter.tsx @@ -0,0 +1,137 @@ +import { type MouseEvent } from 'react' +import { useRouter } from 'next/router' +import { MinimalFooter, Text } from '@primer/react-brand' +import cx from 'classnames' + +import { FooterDivider } from '@/frame/components/page-footer/FooterDivider' +import { SupportSection } from '@/frame/components/page-footer/SupportSection' +import { useTranslation } from '@/languages/components/useTranslation' + +import styles from './DocsFooter.module.scss' + +// The Docs 2026 site footer (Figma node 123-6013): decorative band, then brand +// MinimalFooter supplying the logomark + back-to-top row, the help region, and the +// legal/copyright strip. +// +// The design puts the legal links in the *bottom* row beside the copyright. +// MinimalFooter.Link children render in the top row instead, and the two rows live +// in separate DOM subtrees so no amount of CSS moves one into the other. Passing the +// links through `copyrightStatement`, which accepts a ReactElement and renders in +// the bottom row, gets the designed layout without overriding brand internals. +// It also sidesteps the component's hard cap of five links. +// +// Note `copyrightStatement` is rendered inside a , so everything here +// must be phrasing content: spans and anchors only, no lists or