diff --git a/.github/workflows/feedback-prompt.yml b/.github/workflows/feedback-prompt.yml new file mode 100644 index 000000000000..5d5e2ca88aac --- /dev/null +++ b/.github/workflows/feedback-prompt.yml @@ -0,0 +1,64 @@ +name: Feedback prompt for non-Docs team contributors 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 a feedback request + # to non-Docs team contributors when their PR is merged into the main branch. + # The feedback request asks contributors to leave feedback on their contributing experience in Slack. + 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@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + github-token: ${{ secrets.DOCS_BOT_PAT_BASE }} + script: | + try { + const pr = context.payload.pull_request; + await github.rest.teams.getMembershipForUserInOrg({ + org: 'github', + team_slug: 'docs-content', + username: pr.user.login, + }); + // Author is in the team. Do nothing! + } catch(err) { + // Author not in team + core.exportVariable('NON_DOCS_HUBBER', 'true'); + } + + - name: Post changelog instructions comment + + if: env.NON_DOCS_HUBBER == 'true' + + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.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 as a plain text message to post on the PR + const commentBody = + "👋 @" + prAuthor + + " - Please leave us feedback on your contributing experience! " + + "To do this, please go to `#docs-contributor-feedback` on Slack."; + + // 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/assets/images/banner-images/hero-home.png b/assets/images/banner-images/hero-home.png new file mode 100644 index 000000000000..e45537a06d38 Binary files /dev/null and b/assets/images/banner-images/hero-home.png differ diff --git a/assets/images/help/projects-v2/project-settings-navigation.png b/assets/images/help/projects-v2/project-settings-navigation.png new file mode 100644 index 000000000000..924e9c929a93 Binary files /dev/null and b/assets/images/help/projects-v2/project-settings-navigation.png differ diff --git a/content/admin/monitoring-and-managing-your-instance/updating-the-virtual-machine-and-physical-resources/increasing-storage-capacity.md b/content/admin/monitoring-and-managing-your-instance/updating-the-virtual-machine-and-physical-resources/increasing-storage-capacity.md index ab3af4b21c4f..6ac3bbd6c1a7 100644 --- a/content/admin/monitoring-and-managing-your-instance/updating-the-virtual-machine-and-physical-resources/increasing-storage-capacity.md +++ b/content/admin/monitoring-and-managing-your-instance/updating-the-virtual-machine-and-physical-resources/increasing-storage-capacity.md @@ -54,6 +54,50 @@ Root storage refers to the total size of your instance's root disk. The availabl 1. Ensure system services are functioning correctly, then release maintenance mode. For more information, see [AUTOTITLE](/admin/configuration/configuring-your-enterprise/enabling-and-scheduling-maintenance-mode). +> [!WARNING] +> If the `ghe-storage-extend` command (or a prior automatic check) reports: `ghe_user_data contains a file system with errors`, you must repair the filesystem before retrying the resize. Do not rerun `ghe-storage-extend` until the check completes cleanly. For recovery instructions, see [Repairing filesystem errors](#repairing-filesystem-errors). + +### Repairing filesystem errors + +If the filesystem check fails during `ghe-storage-extend`, follow these steps to repair it. + +Ensure the appliance is in maintenance mode and no background jobs are running: + + ```shell copy + ghe-maintenance -s + ghe-resque-info + ``` + +1. Stop and activate the user volume, then run a forced filesystem check (auto‑answer yes): + + ```shell copy + sudo systemctl stop ghe-user-disk + VGNAME=$(sudo lvs --noheadings -o vg_name | grep ghe_storage_ | awk '{ print $1 }') + sudo vgchange -ay "$VGNAME" + sudo vgscan --mknodes + sudo fsck -fy /dev/mapper/${VGNAME}-ghe_user_data + ``` + +1. Retry the resize: + + ```shell copy + ghe-storage-extend + ``` + +1. Remount and verify new size: + + ```shell copy + sudo systemctl start ghe-user-disk + df -h /data/user + ``` + +1. Reboot and verify: + + ```shell copy + sudo reboot + df -h /data/user + ``` + ## Increasing the root partition size using a new appliance 1. Set up a new {% data variables.product.prodname_ghe_server %} instance with a larger root disk using the same version as your current appliance. For more information, see [AUTOTITLE](/admin/installation/setting-up-a-github-enterprise-server-instance). diff --git a/content/copilot/concepts/agents/coding-agent/about-custom-agents.md b/content/copilot/concepts/agents/coding-agent/about-custom-agents.md index b4455eb73ede..d81af5a8c82e 100644 --- a/content/copilot/concepts/agents/coding-agent/about-custom-agents.md +++ b/content/copilot/concepts/agents/coding-agent/about-custom-agents.md @@ -49,7 +49,7 @@ Focus on the following instructions: ## Where you can configure {% data variables.copilot.custom_agents_short %} -You can define {% data variables.copilot.agent_profiles %} at the repository level (`.github/agents/CUSTOM-AGENT-NAME.md` in your repository) for project-specific agents, or at the organization or enterprise level for broader availability. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents). +You can define {% data variables.copilot.agent_profiles %} at the repository level (`.github/agents/CUSTOM-AGENT-NAME.md` in your repository) for project-specific agents, or at the organization or enterprise level (`/agents/CUSTOM-AGENT-NAME.md` in a `.github-private` repository) for broader availability. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents). ## Where you can use {% data variables.copilot.custom_agents_short %} 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 03df4ed28a7c..b331eac244d6 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 @@ -17,7 +17,9 @@ Enterprise-level {% data variables.copilot.custom_agents_short %} are defined in ## Creating a repository for your {% data variables.copilot.custom_agents_short %} 1. Choose an organization in your enterprise to own the repository containing your enterprise-level {% data variables.copilot.custom_agents_short %}. -1. Using the [{% data variables.copilot.custom_agents_short %} template repository](https://github.com/docs/custom-agents-template?ref_product=copilot&ref_type=engagement&ref_style=text&ref_plan=enterprise&utm_source=docs-web-custom-agents&utm_medium=docs&utm_campaign=universe25post), create a new **private** repository in your chosen organization named `.github-private`. +1. Using the [{% data variables.copilot.custom_agents_short %} template repository](https://github.com/docs/custom-agents-template?ref_product=copilot&ref_type=engagement&ref_style=text&ref_plan=enterprise&utm_source=docs-web-custom-agents&utm_medium=docs&utm_campaign=universe25post), create a new repository in your chosen organization named `.github-private`. Set the visibility of the repository as follows: + * To grant **read access to all members** of your enterprise, choose {% octicon "organization" aria-hidden="true" aria-label="organization" %} **Internal**. + * To **manually grant access after creation**, choose {% octicon "lock" aria-hidden="true" aria-label="lock" %} **Private**. 1. Update the template README as needed. Consider including creation guidelines for {% data variables.copilot.custom_agents_short %} or compliance considerations specific to your enterprise. ## Enabling and protecting {% data variables.copilot.custom_agents_short %} in your enterprise @@ -35,4 +37,4 @@ Enterprise-level {% data variables.copilot.custom_agents_short %} are defined in To reduce your administrative burden and empower your SMEs, you can delegate the creation and management of {% data variables.copilot.custom_agents_short %} in your enterprise by creating a team of AI managers. See [AUTOTITLE](/copilot/tutorials/roll-out-at-scale/establish-ai-managers). -If you prefer to maintain full control over your enterprise's tooling to ensure security and compliance, you can create and manage {% data variables.copilot.custom_agents_short %} yourself. See [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents). +If you prefer to maintain full control over your enterprise's tooling to ensure security and compliance, you can create and manage {% data variables.copilot.custom_agents_short %} yourself. See [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/test-custom-agents). diff --git a/content/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents.md b/content/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents.md index 3f3eb08d2116..abb5885d194a 100644 --- a/content/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents.md +++ b/content/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents.md @@ -23,10 +23,13 @@ Before following this article, you should understand what {% data variables.copi 1. Start creating your {% data variables.copilot.copilot_custom_agent_short %} repository using [{% data variables.product.github %}'s template repository](https://github.com/docs/custom-agents-template?ref_product=copilot&ref_type=engagement&ref_style=text&utm_source=docs-web-custom-agents&utm_medium=docs&utm_campaign=universe25post). The template repository contains a starter README and the necessary file structure to speed up your configuration. 1. Select the **Choose an owner** {% octicon "triangle-down" aria-hidden="true" aria-label="triangle-down" %} dropdown menu, then click your organization. -1. Name the repository `.github-private`, then write a brief description and set the visibility of the repository to private. +1. Name the repository `.github-private`, then write a brief description. +1. Select the visibility dropdown menu, then choose one of the following options: + * To grant **read access to all members** of your organization or enterprise, click {% octicon "organization" aria-hidden="true" aria-label="organization" %} **Internal**. + * To **manually grant access after creation**, or if internal visibility is not an option, click {% octicon "lock" aria-hidden="true" aria-label="lock" %} **Private**. {% data reusables.repositories.create-repo %} 1. Update the template README as needed. Consider including creation guidelines for {% data variables.copilot.custom_agents_short %} or compliance considerations specific to your organization. ## Next steps -To implement {% data variables.copilot.custom_agents_short %} in your organization, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents). +To implement {% data variables.copilot.custom_agents_short %} in your organization, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/test-custom-agents). diff --git a/content/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents.md b/content/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents.md index 14e0fb2ba68e..24b377966510 100644 --- a/content/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents.md +++ b/content/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents.md @@ -19,12 +19,13 @@ topics: 1. Using the dropdown menu in the prompt box, select the repository you want to create the {% data variables.copilot.copilot_custom_agent_short %} profile in. > [!NOTE] - > Organization and enterprise owners can create organization and enterprise-level {% data variables.copilot.custom_agents_short %} that are available across all repositories within their organization or enterprise. For more information, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents). + > Organization and enterprise owners can create organization and enterprise-level {% data variables.copilot.custom_agents_short %} in a `.github-private` repository that are available across all repositories within their organization or enterprise. For more information, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents) and [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents). 1. Optionally, select the branch you want to create the {% data variables.copilot.agent_profile %} in. The default is the main branch. -1. Click {% octicon "copilot" aria-hidden="true" aria-label="copilot" %}, then click **{% octicon "plus" aria-label="Plus button" %} Create an agent**. -1. An {% data variables.copilot.agent_profile %} template called `my-agent.md` will open in the `.github/agents` directory of the repository you chose. Edit the filename and configure the {% data variables.copilot.agent_profile %}, including the name, description, tools, and prompts. For more information on what the {% data variables.copilot.agent_profile %} can include, see the section below. -1. Commit the file to the repository. Go back to the agents tab and refresh the page if needed. Your custom agent will now appear in the dropdown when you click {% octicon "copilot" aria-hidden="true" aria-label="copilot" %} in the prompt box. +1. Click {% octicon "copilot" aria-label="Select a custom agent" %}, then click **{% octicon "plus" aria-label="Plus button" %} Create an agent**. This will open a template agent profile called `my-agent.md` in the `.github/agents` directory of your target repository. +1. If you are creating an organization or enterprise-level custom agent, delete the `.github/` portion of the file path to move your template to the root `agents` directory. +1. Edit the filename and configure the {% data variables.copilot.agent_profile %}, including the name, description, tools, and prompts. For more information on what the {% data variables.copilot.agent_profile %} can include, see the section below. +1. Commit the file to the repository and merge it into the default branch. Go back to the agents tab and refresh the page if needed. Your custom agent will now appear in the dropdown when you click {% octicon "copilot" aria-hidden="true" aria-label="copilot" %} in the prompt box. ## Configuring an {% data variables.copilot.agent_profile %} diff --git a/content/copilot/how-tos/use-copilot-agents/coding-agent/index.md b/content/copilot/how-tos/use-copilot-agents/coding-agent/index.md index b4b7827d62b1..68b24ae9c466 100644 --- a/content/copilot/how-tos/use-copilot-agents/coding-agent/index.md +++ b/content/copilot/how-tos/use-copilot-agents/coding-agent/index.md @@ -12,6 +12,7 @@ children: - /track-copilot-sessions - /review-copilot-prs - /create-custom-agents + - /test-custom-agents - /extend-coding-agent-with-mcp - /integrate-coding-agent-with-slack - /integrate-coding-agent-with-teams diff --git a/content/copilot/how-tos/use-copilot-agents/coding-agent/test-custom-agents.md b/content/copilot/how-tos/use-copilot-agents/coding-agent/test-custom-agents.md new file mode 100644 index 000000000000..a88da29ac0ae --- /dev/null +++ b/content/copilot/how-tos/use-copilot-agents/coding-agent/test-custom-agents.md @@ -0,0 +1,46 @@ +--- +title: Testing and releasing {% data variables.copilot.custom_agents_short %} in your organization or enterprise +intro: 'Ensure your {% data variables.copilot.custom_agents_short %} are performant and compliant before releasing them to your company.' +versions: + feature: copilot +topics: + - Copilot +shortTitle: Test custom agents +contentType: how-tos +--- + +{% data reusables.copilot.custom-agents-preview-note %} + +## Introduction + +Before you release or update a {% data variables.copilot.copilot_custom_agent_short %} in your organization or enterprise, you can test the agent privately to ensure it meets your standards. Once you are satisfied, you can then easily change the location of your {% data variables.copilot.agent_profile %} to make it available across your company. + +## Prerequisites + +Before you can test a {% data variables.copilot.copilot_custom_agent_short %}, you need to set up your organization or enterprise for {% data variables.copilot.custom_agents_short %}. See [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-organization/prepare-for-custom-agents) or [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/prepare-for-custom-agents). + +## 1. Create your test {% data variables.copilot.copilot_custom_agent_short %} + +1. In your organization or enterprise's `.github-private` repository, create a new directory called `.github/agents`. Agents stored in this directory are only available to members of your organization or enterprise who have access to the `.github-private` repository, and can only be used when they start a task within that repository. +1. In your `.github/agents` directory, create the {% data variables.copilot.agent_profile %} for your test agent. You can create a net-new profile or duplicate an existing profile to test potential updates. For information on configuring an {% data variables.copilot.agent_profile %}, see [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents#configuring-an-agent-profile). +1. Merge your test {% data variables.copilot.agent_profile %} into the default branch of your repository. + +## 2. Test your {% data variables.copilot.copilot_custom_agent_short %} + +1. Navigate to the agents tab at [https://github.com/copilot/agents](https://github.com/copilot/agents?ref_product=copilot&ref_type=engagement&ref_style=text&utm_source=docs-signup-custom-agents&utm_medium=docs&utm_campaign=universe25post). +1. Using the dropdown menu in the prompt box, select your `.github-private` repository. +1. Select {% octicon "copilot" aria-label="Select a custom agent" %}, then click your test agent. +1. To test your {% data variables.copilot.copilot_custom_agent_short %}, send {% data variables.product.prodname_copilot_short %} a prompt. +1. In the "Recent sessions" section, click your session to see detailed information about your results. +1. Continue making changes and testing your {% data variables.copilot.copilot_custom_agent_short %} as needed until you are satisfied with its performance. + +## 3. Release your {% data variables.copilot.copilot_custom_agent_short %} + +1. In your `.github-private` repository, move your {% data variables.copilot.agent_profile %} from the `.github/agents` directory into the `agents` directory. +1. Merge your changes into the default branch. Your {% data variables.copilot.copilot_custom_agent_short %} is now available to all users in your organization or enterprise. + +## Next steps + +To monitor the usage of {% data variables.copilot.custom_agents_short %} in your organization, filter your organization's audit log by `actor:Copilot`. See [AUTOTITLE](/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/reviewing-the-audit-log-for-your-organization). + +To monitor the usage of {% data variables.copilot.custom_agents_short %} in your enterprise, see [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-agents/monitor-agentic-activity). diff --git a/content/copilot/how-tos/use-copilot-agents/use-copilot-cli.md b/content/copilot/how-tos/use-copilot-agents/use-copilot-cli.md index 59f7ce3621b9..a7b6722747b2 100644 --- a/content/copilot/how-tos/use-copilot-agents/use-copilot-cli.md +++ b/content/copilot/how-tos/use-copilot-agents/use-copilot-cli.md @@ -152,7 +152,7 @@ For more information, see [AUTOTITLE](/copilot/how-tos/configure-custom-instruct | --- | --- | --- | | User-level {% data variables.copilot.copilot_custom_agent_short %} | local `~/.copilot/agents` directory | All projects | | Repository-level {% data variables.copilot.copilot_custom_agent_short %} | `.github/agents` directory in your local and remote repositories | Current project | -| Organization and Enterprise-level {% data variables.copilot.copilot_custom_agent_short %} | `.github/agents` directory in the `.github-private` repository in an organization or enterprise | All projects under your organization and enterprise account | +| Organization and Enterprise-level {% data variables.copilot.copilot_custom_agent_short %} | `/agents` directory in the `.github-private` repository in an organization or enterprise | All projects under your organization and enterprise account | In the case of naming conflicts, a system-level agent overrides a repository-level agent, and the repository-level agent would override an organization-level agent. diff --git a/content/copilot/index.md b/content/copilot/index.md index 7908be2e8e65..3535e7226fed 100644 --- a/content/copilot/index.md +++ b/content/copilot/index.md @@ -29,7 +29,7 @@ featuredLinks: - '{% ifversion ghec %}/copilot/tutorials/roll-out-at-scale/enable-developers/drive-adoption{% endif %}' - '{% ifversion ghec %}/copilot/tutorials/roll-out-at-scale/enable-developers/integrate-ai-agents{% endif %}' layout: discovery-landing -heroImage: /assets/images/banner-images/hero-6.png +heroImage: /assets/images/banner-images/hero-6 versions: feature: copilot children: diff --git a/content/copilot/tutorials/customization-library/custom-agents/your-first-custom-agent.md b/content/copilot/tutorials/customization-library/custom-agents/your-first-custom-agent.md index 854ccacb7a1f..103a7315380c 100644 --- a/content/copilot/tutorials/customization-library/custom-agents/your-first-custom-agent.md +++ b/content/copilot/tutorials/customization-library/custom-agents/your-first-custom-agent.md @@ -76,7 +76,7 @@ Test this agent by giving it a task to complete: 1. Using the dropdown menus in the text box, select the repository and branch you're comfortable testing with (ideally one with a minimal or outdated README). 1. Click {% octicon "copilot" aria-hidden="true" aria-label="copilot" %}, then click **{% octicon "plus" aria-label="Plus button" %} Create an agent**. 1. An {% data variables.copilot.agent_profile %} template called `my-agent.md` will open in the `.github/agents` directory, in the repository you chose. Name the file `readme-specialist.md` and paste in the example {% data variables.copilot.agent_profile %}. -1. Go back to the agents tab (you may need to refresh the page), and in the text box, select your "readme-specialist" agent from the dropdown. +1. Commit and merge this file into your repository's default branch. Go back to the agents tab (you may need to refresh the page), and in the text box, select your "readme-specialist" agent from the dropdown. 1. In the text box, enter a task for the agent (such as the example below) and click **{% octicon "paper-airplane" aria-label="Start task" %} Start task** or press Return. ```copilot copy diff --git a/content/copilot/tutorials/index.md b/content/copilot/tutorials/index.md index 7cae76f357b2..57e753dd0b5d 100644 --- a/content/copilot/tutorials/index.md +++ b/content/copilot/tutorials/index.md @@ -30,7 +30,7 @@ children: redirect_from: - /copilot/using-github-copilot/guides-on-using-github-copilot contentType: tutorials -heroImage: /assets/images/banner-images/hero-3.png +heroImage: /assets/images/banner-images/hero-3 layout: bespoke-landing sidebarLink: text: All tutorials diff --git a/content/copilot/tutorials/roll-out-at-scale/establish-ai-managers.md b/content/copilot/tutorials/roll-out-at-scale/establish-ai-managers.md index d7d7cfd30de4..ca7052a9fbbf 100644 --- a/content/copilot/tutorials/roll-out-at-scale/establish-ai-managers.md +++ b/content/copilot/tutorials/roll-out-at-scale/establish-ai-managers.md @@ -71,4 +71,4 @@ If you have created a ruleset targeting {% data variables.copilot.agent_profiles Now that you have established AI managers for your enterprise, help them customize and manage your enterprise's AI experience by sharing the following resources: * [AUTOTITLE](/copilot/how-tos/administer-copilot/manage-for-enterprise/manage-enterprise-policies) -* [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents) +* [AUTOTITLE](/copilot/how-tos/use-copilot-agents/coding-agent/test-custom-agents) diff --git a/content/issues/planning-and-tracking-with-projects/learning-about-projects/quickstart-for-projects.md b/content/issues/planning-and-tracking-with-projects/learning-about-projects/quickstart-for-projects.md index bed015f3470a..8638f8c3df47 100644 --- a/content/issues/planning-and-tracking-with-projects/learning-about-projects/quickstart-for-projects.md +++ b/content/issues/planning-and-tracking-with-projects/learning-about-projects/quickstart-for-projects.md @@ -21,7 +21,7 @@ This guide demonstrates how to use {% data variables.product.prodname_projects_v You can either create an organization project or a user project. To create an organization project, you need a {% data variables.product.prodname_dotcom %} organization. For more information about creating an organization, see [AUTOTITLE](/organizations/collaborating-with-groups-in-organizations/creating-a-new-organization-from-scratch). -In this guide, you will add existing issues from repositories owned by your organization (for organization projects) or by you (for user projects) to your new project. For more information about creating issues, see [AUTOTITLE](/issues/tracking-your-work-with-issues/creating-an-issue). +In this guide, you will add issues from repositories owned by your organization (for organization projects) or by you (for user projects) to your new project. For more information about creating issues, see [AUTOTITLE](/issues/tracking-your-work-with-issues/creating-an-issue). ## Creating a project @@ -76,8 +76,8 @@ Now, create a custom field named `Priority` and containing the values: `High`, ` {% data reusables.projects.new-field %} 1. Select **Single select** -1. Below "Options", type the first option, "High". -1. To add additional fields, for "Medium" and "Low", click **Add option**. +1. Below "Options," type the first option, "High." +1. To add additional fields, for "Medium" and "Low," click **Add option**. 1. Click **Save**. Specify a priority for all items in your project. @@ -110,7 +110,7 @@ Select visible fields for your view to communicate the priority and progress of ![Screenshot of a project. The "Add field" button, indicated by a plus icon, is highlighted with an orange outline.](/assets/images/help/projects-v2/new-field-button.png) -1. Under "Hidden fields", click {% ifversion issue-types %}**Type**, {% endif %}**Status**, {% ifversion sub-issues %}**Sub-issues progress**, {% endif %}**Assignees**, **Linked pull requests**, **Priority**, and **Estimate**. +1. Under "Hidden fields," click {% ifversion issue-types %}**Type**, {% endif %}**Status**, {% ifversion sub-issues %}**Sub-issues progress**, {% endif %}**Assignees**, **Linked pull requests**, **Priority**, and **Estimate**. Next, group all of the items in your project by priority to make it easier to focus on the high priority items. @@ -157,7 +157,7 @@ First, create a new view. Next, switch to the board layout. {% data reusables.projects.open-view-menu %} -1. Under "Layout", click **Board**. +1. Under "Layout," click **Board**. To indicate the purpose of the view, give it a descriptive name. @@ -191,7 +191,7 @@ First, create a new view. Next, switch to the roadmap layout. {% data reusables.projects.open-view-menu %} -1. Under "Layout", click **Roadmap**. +1. Under "Layout," click **Roadmap**. You can add vertical markers on a roadmap to show the milestones associated with items in your project. @@ -224,8 +224,8 @@ Next, configure the auto-add workflow to automatically add issues opened in a re ![Screenshot showing the workflow menu bar. The "Edit" button is highlighted with an orange rectangle.](/assets/images/help/projects-v2/workflow-start-editing.png) -1. Under "Filters", select the repository you want to add items from. -1. Next to the repository selection, type the filter criteria you want items to match before they are automatically added to your project. For example, to catch all issues and pull requests opened with the label "question", use `is:issue,pr label:question`. +1. Under "Filters," select the repository you want to add items from. +1. Next to the repository selection, type the filter criteria you want items to match before they are automatically added to your project. For example, to catch all issues and pull requests opened with the label "question," use `is:issue,pr label:question`. 1. To enable the new workflow, click **Save and turn on workflow**. Finally, add a built in workflow to set the status to **Todo** when an item is added to your project. diff --git a/content/issues/planning-and-tracking-with-projects/managing-your-project/adding-your-project-to-a-repository.md b/content/issues/planning-and-tracking-with-projects/managing-your-project/adding-your-project-to-a-repository.md index fe203967de25..bf3a5dcfe1b4 100644 --- a/content/issues/planning-and-tracking-with-projects/managing-your-project/adding-your-project-to-a-repository.md +++ b/content/issues/planning-and-tracking-with-projects/managing-your-project/adding-your-project-to-a-repository.md @@ -12,6 +12,8 @@ topics: allowTitleToDifferFromFilename: true --- +## Linking a repository to your project + You can list relevant projects in a repository. You can only list projects that are owned by the same user or organization that owns the repository. In order for repository members to see a project listed in a repository, they must have visibility for the project. For more information, see [AUTOTITLE](/issues/planning-and-tracking-with-projects/managing-your-project/managing-visibility-of-your-projects) and [AUTOTITLE](/issues/planning-and-tracking-with-projects/managing-your-project/managing-access-to-your-projects). @@ -22,3 +24,18 @@ In order for repository members to see a project listed in a repository, they mu 1. Click **Link a project**. 1. In the search bar that appears, search for projects that are owned by the same user or organization that owns the repository. 1. Click on a project to list it in your repository. + +{% ifversion project-default-repositories %} + +## Setting a default repository for your project + +You can set a default repository for a project. When you set a default repository, new issues created from your project are automatically assigned to that repository. After you set a default repository, your project also appears in the repository’s **Projects** tab. + +To update the default repository for your project: + +1. In your repository, click **{% octicon "table" aria-hidden="true" aria-label="table" %} Projects**. +1. Under "Projects," find and click your project in the list. +1. In the top-right of the project page, click the {% octicon "kebab-horizontal" aria-label="repository settings" %} dropdown menu, then select **{% octicon "gear" aria-label="Settings" %} Settings** to go to the project settings page. + ![Screenshot showing the location of the "Settings" button in the project menu, highlighted with a red outline.](/assets/images/help/projects-v2/project-settings-navigation.png) +1. Under "Default repository," select a default repository for your project. +1. Click **Save changes** to confirm your changes.{% endif %} diff --git a/content/subscriptions-and-notifications/how-tos/managing-your-scheduled-reminders.md b/content/subscriptions-and-notifications/how-tos/managing-your-scheduled-reminders.md index b0adfbc99720..dbc4d0df2a8c 100644 --- a/content/subscriptions-and-notifications/how-tos/managing-your-scheduled-reminders.md +++ b/content/subscriptions-and-notifications/how-tos/managing-your-scheduled-reminders.md @@ -4,6 +4,7 @@ intro: Get reminders in Slack when you or your team have pull requests waiting f versions: fpt: '*' ghec: '*' + ghes: '>= 3.17' topics: - Accounts redirect_from: diff --git a/data/features/project-default-repositories.yml b/data/features/project-default-repositories.yml new file mode 100644 index 000000000000..794ce77279c0 --- /dev/null +++ b/data/features/project-default-repositories.yml @@ -0,0 +1,5 @@ +# Issue #19931 +versions: + fpt: '*' + ghec: '*' + ghes: '>=3.20' diff --git a/data/reusables/projects/create-project.md b/data/reusables/projects/create-project.md index 9b94492e5aca..666ec9e8b2f2 100644 --- a/data/reusables/projects/create-project.md +++ b/data/reusables/projects/create-project.md @@ -5,8 +5,11 @@ ![Screenshot showing profile tabs. The 'Projects' tab is highlighted with an orange outline.](/assets/images/help/projects-v2/tab-projects.png) 1. Click **New project**. 1. Select which type of project or template you want to use. - * To create a blank project, under "Start from scratch", click **Table**, **Roadmap**, or **Board**. + * To create a blank project, under "Start from scratch," click **Table**, **Roadmap**, or **Board**. * To create a project from a template, click the template you want to use. You can select from the built-in templates curated by {% data variables.product.company_short %}, the templates created by your organization, and the recommended templates that have been chosen by your organization. 1. Optionally, if you selected a template, review the fields, views, workflows, and insights that will be created. -1. In the text box under "Project name", type a name for your new project. +1. In the text box under "Project name," type a name for your new project. +{%- ifversion project-default-repositories %} +1. Optionally, start your project with items already added by selecting **Import items from repository**. All new and existing items from the chosen repository will be added to your project, and it will be designated as your project's default repository. +{%- endif %} 1. Click **Create project**. diff --git a/src/github-apps/lib/config.json b/src/github-apps/lib/config.json index 9c5aeeef728d..5ff5c141d960 100644 --- a/src/github-apps/lib/config.json +++ b/src/github-apps/lib/config.json @@ -60,5 +60,5 @@ "2022-11-28" ] }, - "sha": "e973182b530ffad0765b7713d0a9f80a0f46a220" + "sha": "76075d48c896654c8e9e122ee1e162ccc546ace1" } \ No newline at end of file diff --git a/src/graphql/data/fpt/changelog.json b/src/graphql/data/fpt/changelog.json index 7f034577ce2a..64e1aa8979ef 100644 --- a/src/graphql/data/fpt/changelog.json +++ b/src/graphql/data/fpt/changelog.json @@ -1,4 +1,17 @@ [ + { + "schemaChanges": [ + { + "title": "The GraphQL schema includes these changes:", + "changes": [ + "

Input field 'projectV2Idsof type[ID!]was added to input object typeCreateIssueInput'

" + ] + } + ], + "previewChanges": [], + "upcomingChanges": [], + "date": "2025-11-06" + }, { "schemaChanges": [ { diff --git a/src/graphql/data/fpt/schema.docs.graphql b/src/graphql/data/fpt/schema.docs.graphql index 1189fcc8b080..2f9785a8669a 100644 --- a/src/graphql/data/fpt/schema.docs.graphql +++ b/src/graphql/data/fpt/schema.docs.graphql @@ -8162,6 +8162,11 @@ input CreateIssueInput { """ projectIds: [ID!] @possibleTypes(concreteTypes: ["Project"]) + """ + An array of Node IDs for Projects V2 associated with this issue. + """ + projectV2Ids: [ID!] @possibleTypes(concreteTypes: ["ProjectV2"]) + """ The Node ID of the repository. """ diff --git a/src/graphql/data/fpt/schema.json b/src/graphql/data/fpt/schema.json index f07f0e466f71..a00e3c2d8211 100644 --- a/src/graphql/data/fpt/schema.json +++ b/src/graphql/data/fpt/schema.json @@ -101351,6 +101351,15 @@ "href": "/graphql/reference/scalars#id", "isDeprecated": false }, + { + "name": "projectV2Ids", + "description": "

An array of Node IDs for Projects V2 associated with this issue.

", + "type": "[ID!]", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, { "name": "repositoryId", "description": "

The Node ID of the repository.

", diff --git a/src/graphql/data/ghec/schema.docs.graphql b/src/graphql/data/ghec/schema.docs.graphql index 1189fcc8b080..2f9785a8669a 100644 --- a/src/graphql/data/ghec/schema.docs.graphql +++ b/src/graphql/data/ghec/schema.docs.graphql @@ -8162,6 +8162,11 @@ input CreateIssueInput { """ projectIds: [ID!] @possibleTypes(concreteTypes: ["Project"]) + """ + An array of Node IDs for Projects V2 associated with this issue. + """ + projectV2Ids: [ID!] @possibleTypes(concreteTypes: ["ProjectV2"]) + """ The Node ID of the repository. """ diff --git a/src/graphql/data/ghec/schema.json b/src/graphql/data/ghec/schema.json index f07f0e466f71..a00e3c2d8211 100644 --- a/src/graphql/data/ghec/schema.json +++ b/src/graphql/data/ghec/schema.json @@ -101351,6 +101351,15 @@ "href": "/graphql/reference/scalars#id", "isDeprecated": false }, + { + "name": "projectV2Ids", + "description": "

An array of Node IDs for Projects V2 associated with this issue.

", + "type": "[ID!]", + "id": "id", + "kind": "scalars", + "href": "/graphql/reference/scalars#id", + "isDeprecated": false + }, { "name": "repositoryId", "description": "

The Node ID of the repository.

", diff --git a/src/landings/components/HomePageHero.module.scss b/src/landings/components/HomePageHero.module.scss new file mode 100644 index 000000000000..32755c81f36b --- /dev/null +++ b/src/landings/components/HomePageHero.module.scss @@ -0,0 +1,24 @@ +.section { + height: 21rem; + background-image: image-set( + url("/assets/images/banner-images/hero-home.webp") type("image/webp"), + url("/assets/images/banner-images/hero-home.png") type("image/png") + ); + background-size: cover; + background-position: center right; + background-repeat: no-repeat; +} + +.section h1 { + font-size: 4rem; + line-height: 1.2; +} + +.content { + backdrop-filter: blur(1rem); + background-color: color-mix( + in srgb, + var(--color-canvas-subtle) 70%, + transparent + ); +} diff --git a/src/landings/components/HomePageHero.tsx b/src/landings/components/HomePageHero.tsx index d5ee7b2f7257..043f166f35d2 100644 --- a/src/landings/components/HomePageHero.tsx +++ b/src/landings/components/HomePageHero.tsx @@ -1,21 +1,25 @@ -import { OctocatHeader } from '@/landings/components/OctocatHeader' import { useTranslation } from '@/languages/components/useTranslation' +import styles from './HomePageHero.module.scss' +import cx from 'classnames' export const HomePageHero = () => { const { t } = useTranslation(['header', 'homepage']) return ( -
-
-
-
- -
-
-

{t('github_docs')}

-

{t('description')}

-
-
+
+
+

+ {t('github_docs')} +

+

{t('description')}

) diff --git a/src/landings/components/OctocatHeader.tsx b/src/landings/components/OctocatHeader.tsx deleted file mode 100644 index 15bec0d38ba2..000000000000 --- a/src/landings/components/OctocatHeader.tsx +++ /dev/null @@ -1,346 +0,0 @@ -import { ComponentProps } from 'react' - -type Props = ComponentProps<'svg'> -export function OctocatHeader(props: Props) { - return ( - - ) -} diff --git a/src/landings/components/shared/LandingHero.tsx b/src/landings/components/shared/LandingHero.tsx index d3342d23eba9..25f45650a51c 100644 --- a/src/landings/components/shared/LandingHero.tsx +++ b/src/landings/components/shared/LandingHero.tsx @@ -9,6 +9,16 @@ type LandingHeroProps = { introLinks?: Record | null } +function heroBackgroundCss(heroImage: string | undefined) { + if (!heroImage) return {} + return { + backgroundImage: `image-set( + url("${heroImage}.webp") type('image/webp'), + url("${heroImage}.png") type('image/png') + )`, + } +} + export const LandingHero = ({ title, intro, heroImage, introLinks }: LandingHeroProps) => { const { t } = useTranslation(['product_landing']) @@ -17,16 +27,7 @@ export const LandingHero = ({ title, intro, heroImage, introLinks }: LandingHero const secondaryAction = linkEntries[1] return ( -
+

{title}

diff --git a/src/landings/context/LandingContext.tsx b/src/landings/context/LandingContext.tsx index 25994d5d2f44..20bdfec9d0bc 100644 --- a/src/landings/context/LandingContext.tsx +++ b/src/landings/context/LandingContext.tsx @@ -78,7 +78,7 @@ export const getLandingContextFromRequest = async ( renderedPage: req.context.renderedPage, currentLearningTrack: req.context.currentLearningTrack, currentLayout: req.context.currentLayoutName, - heroImage: page.heroImage || '/assets/images/banner-images/hero-1.png', + heroImage: page.heroImage || '/assets/images/banner-images/hero-1', introLinks: page.introLinks || null, recommended, journeyTracks, diff --git a/src/rest/data/fpt-2022-11-28/schema.json b/src/rest/data/fpt-2022-11-28/schema.json index 9611ce5cee34..cf1efd70a995 100644 --- a/src/rest/data/fpt-2022-11-28/schema.json +++ b/src/rest/data/fpt-2022-11-28/schema.json @@ -298447,7 +298447,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -301801,7 +301800,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -318248,7 +318246,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, diff --git a/src/rest/data/ghec-2022-11-28/schema.json b/src/rest/data/ghec-2022-11-28/schema.json index 9640f9829a83..12c770ae4826 100644 --- a/src/rest/data/ghec-2022-11-28/schema.json +++ b/src/rest/data/ghec-2022-11-28/schema.json @@ -345244,7 +345244,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -348598,7 +348597,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -365045,7 +365043,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, diff --git a/src/rest/data/ghes-3.14-2022-11-28/schema.json b/src/rest/data/ghes-3.14-2022-11-28/schema.json index f49a866fe0e5..4d5abce48836 100644 --- a/src/rest/data/ghes-3.14-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.14-2022-11-28/schema.json @@ -242714,7 +242714,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -246062,7 +246061,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -262479,7 +262477,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, diff --git a/src/rest/data/ghes-3.15-2022-11-28/schema.json b/src/rest/data/ghes-3.15-2022-11-28/schema.json index 83c70fd7b4c7..6ab3477b980e 100644 --- a/src/rest/data/ghes-3.15-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.15-2022-11-28/schema.json @@ -245635,7 +245635,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -248989,7 +248988,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -265436,7 +265434,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, diff --git a/src/rest/data/ghes-3.16-2022-11-28/schema.json b/src/rest/data/ghes-3.16-2022-11-28/schema.json index ff7c4fca9348..a8fc4343e116 100644 --- a/src/rest/data/ghes-3.16-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.16-2022-11-28/schema.json @@ -250795,7 +250795,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -254149,7 +254148,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -270596,7 +270594,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, diff --git a/src/rest/data/ghes-3.17-2022-11-28/schema.json b/src/rest/data/ghes-3.17-2022-11-28/schema.json index 8d5384221d69..bec3ae6bccfa 100644 --- a/src/rest/data/ghes-3.17-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.17-2022-11-28/schema.json @@ -251702,7 +251702,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -255056,7 +255055,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -271503,7 +271501,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, diff --git a/src/rest/data/ghes-3.18-2022-11-28/schema.json b/src/rest/data/ghes-3.18-2022-11-28/schema.json index 30ef2d5e0831..cb208e3026d2 100644 --- a/src/rest/data/ghes-3.18-2022-11-28/schema.json +++ b/src/rest/data/ghes-3.18-2022-11-28/schema.json @@ -254029,7 +254029,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -257383,7 +257382,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, @@ -273830,7 +273828,6 @@ "pull": true }, "allow_rebase_merge": true, - "template_repository": null, "temp_clone_token": "ABTLWHOULUVAXGTRYU7OC2876QJ2O", "allow_squash_merge": true, "allow_auto_merge": false, diff --git a/src/rest/lib/config.json b/src/rest/lib/config.json index 342c5cad5b5b..5c0a986a2f98 100644 --- a/src/rest/lib/config.json +++ b/src/rest/lib/config.json @@ -47,5 +47,5 @@ ] } }, - "sha": "e973182b530ffad0765b7713d0a9f80a0f46a220" + "sha": "76075d48c896654c8e9e122ee1e162ccc546ace1" } \ No newline at end of file diff --git a/src/webhooks/lib/config.json b/src/webhooks/lib/config.json index e2868013455a..900e7b1ece96 100644 --- a/src/webhooks/lib/config.json +++ b/src/webhooks/lib/config.json @@ -1,3 +1,3 @@ { - "sha": "e973182b530ffad0765b7713d0a9f80a0f46a220" + "sha": "76075d48c896654c8e9e122ee1e162ccc546ace1" } \ No newline at end of file