From 0a0269999b8382aeb94922a111463eee6fc6d4de Mon Sep 17 00:00:00 2001 From: "release-controller[bot]" <110195724+release-controller[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 05:30:18 +1000 Subject: [PATCH] Patch release notes for GitHub Enterprise Server (#53601) Co-authored-by: Release-Controller Co-authored-by: Rachael Rose Renk <91027132+rachaelrenk@users.noreply.github.com> Co-authored-by: Vanessa Co-authored-by: Devin Dooley --- .../enterprise-server/3-11/19.yml | 52 ++++++++++ .../enterprise-server/3-12/13.yml | 56 +++++++++++ .../enterprise-server/3-13/9.yml | 60 ++++++++++++ .../enterprise-server/3-14/6.yml | 78 +++++++++++++++ .../enterprise-server/3-15/1.yml | 94 +++++++++++++++++++ 5 files changed, 340 insertions(+) create mode 100644 data/release-notes/enterprise-server/3-11/19.yml create mode 100644 data/release-notes/enterprise-server/3-12/13.yml create mode 100644 data/release-notes/enterprise-server/3-13/9.yml create mode 100644 data/release-notes/enterprise-server/3-14/6.yml create mode 100644 data/release-notes/enterprise-server/3-15/1.yml diff --git a/data/release-notes/enterprise-server/3-11/19.yml b/data/release-notes/enterprise-server/3-11/19.yml new file mode 100644 index 000000000000..7dad0338bad2 --- /dev/null +++ b/data/release-notes/enterprise-server/3-11/19.yml @@ -0,0 +1,52 @@ +date: '2024-12-17' +sections: + security_fixes: + - | + Packages have been updated to the latest security versions. + bugs: + - | + The audit log cluster rebalance script incorrectly proceeded before all shards were ready. This caused the script to exit before the necessary data was available, potentially leading to issues with the audit log migration. + - | + For instances hosted on Azure, if a pre-upgrade check failed due to insufficient user disk size, the Management Console displayed an internal server error. + - | + Pull request synchronization—the process keeping pull requests up to date with the latest commits to a branch—sometimes failed to retry if the initial synchronization process failed. + - | + When creating a pre-receive hook environment, attempts to include an image URL over 255 characters failed with a database error. The maximum length is still 255 characters, but the URL length is now validated before the process starts. + - | + Performing a browser back navigation to a pull request now displays up-to-date status checks. + - | + Subversion services were non-functional in some cases. + changes: + - | + Pull request merges are handled more efficiently, allowing more Git objects to be created before timeout. Additionally, loose objects created by merges that time out are now discarded, limiting the accumulation of these objects. + known_issues: + - | + Custom firewall rules are removed during the upgrade process. + - | + 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 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 [AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + The `mbind: Operation not permitted` error in the `/var/log/mysql/mysql.err` file can be ignored. MySQL 8 does not gracefully handle when the `CAP_SYS_NICE` capability isn't required, and outputs an error instead of a warning. + - | + {% data reusables.release-notes.2023-11-aws-system-time %} + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.2023-10-git-push-made-but-not-registered %} + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + {% data reusables.release-notes.2024-01-haproxy-upgrade-causing-increased-errors %} + - | + Repositories originally imported using ghe-migrator will not correctly track Advanced Security contributions. + - | + The `reply.[hostname]` subdomain is falsely always displaying as having no ssl and dns record, when testing the domain settings via management console **without subdomain isolation**. When regenerating the certificates with management console, the `subdomain reply.[hostname]` is missing from the ssl certification. + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + Some customers upgrading from 3.11.x or 3.12.x may experience a bug with the feature "Automatic update checks", filling the root disk with logs causing a system degradation. To prevent this, you can turn off the feature [Enable automatic update check](/admin/upgrading-your-instance/preparing-to-upgrade/enabling-automatic-update-checks#enabling-automatic-update-checks) in the management console. diff --git a/data/release-notes/enterprise-server/3-12/13.yml b/data/release-notes/enterprise-server/3-12/13.yml new file mode 100644 index 000000000000..028f9855e693 --- /dev/null +++ b/data/release-notes/enterprise-server/3-12/13.yml @@ -0,0 +1,56 @@ +date: '2024-12-17' +sections: + security_fixes: + - | + Packages have been updated to the latest security versions. + bugs: + - | + The `--no-async` flag was not implemented for the `ghe-cluster-support-bundle` command, leading to a potentially increased load. + - | + In a high availability configuration, with GitHub Actions, replication would fail on nodes where MSSQL was not configured to run. + - | + The audit log cluster rebalance script incorrectly proceeded before all shards were ready. This caused the script to exit before the necessary data was available, potentially leading to issues with the audit log migration. + - | + For instances hosted on Azure, if a pre-upgrade check failed due to insufficient user disk size, the Management Console displayed an internal server error. + - | + On an instance with secret scanning enabled, when selecting repositories for a dry run of an enterprise-level custom pattern, searches for full repository names (`ORGANIZATION/REPOSITORY`) did not return results. + - | + When creating a pre-receive hook environment, attempts to include an image URL over 255 characters failed with a database error. The maximum length is still 255 characters, but the URL length is now validated before the process starts. + - | + Performing a browser back navigation to a pull request now displays up-to-date status checks. + - | + Subversion services were non-functional in some cases. + changes: + - | + When exporting repositories to blob storage using the migrations REST API endpoint to start an organization migration, the maximum compressed archive size is limited to 90 GB. This is an increase from 30 GB. + - | + Pull request merges are handled more efficiently, allowing more Git objects to be created before timeout. Additionally, loose objects created by merges that time out are now discarded, limiting the accumulation of these objects. + - | + When exporting repositories using the migrations REST API, prior to blob storage upload the tarball is staged in the root volume. For more disk capacity, the tarball will now be staged in the data volume. + known_issues: + - | + Custom firewall rules are removed during the upgrade process. + - | + 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 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 [AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + The `mbind: Operation not permitted` error in the `/var/log/mysql/mysql.err` file can be ignored. MySQL 8 does not gracefully handle when the `CAP_SYS_NICE` capability isn't required, and outputs an error instead of a warning. + - | + {% data reusables.release-notes.2023-11-aws-system-time %} + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Repositories originally imported using ghe-migrator will not correctly track Advanced Security contributions. + - | + The `reply.[hostname]` subdomain is falsely always displaying as having no ssl and dns record, when testing the domain settings via management console **without subdomain isolation**. When regenerating the certificates with management console, the `subdomain reply.[hostname]` is missing from the ssl certification. + - | + Admin stats REST API endpoints may timeout on appliances with many users or repositories. Retrying the request until data is returned is advised. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + Some customers upgrading from 3.11.x or 3.12.x may experience a bug with the feature "Automatic update checks", filling the root disk with logs causing a system degradation. To prevent this, you can turn off the feature [Enable automatic update check](/admin/upgrading-your-instance/preparing-to-upgrade/enabling-automatic-update-checks#enabling-automatic-update-checks) in the management console. diff --git a/data/release-notes/enterprise-server/3-13/9.yml b/data/release-notes/enterprise-server/3-13/9.yml new file mode 100644 index 000000000000..7f9064cbcc91 --- /dev/null +++ b/data/release-notes/enterprise-server/3-13/9.yml @@ -0,0 +1,60 @@ +date: '2024-12-17' +sections: + security_fixes: + - | + Packages have been updated to the latest security versions. + bugs: + - | + On an instance in a cluster configuration, `ghe-repl-promote` failed if the primary node was unavailable. + - | + In a high availability configuration, with GitHub Actions, replication would fail on nodes where MSSQL was not configured to run. + - | + The `--no-async` flag was not implemented for the `ghe-cluster-support-bundle` command, leading to a potentially increased load. + - | + Pre-receive hook environments with shared memory enabled could not access shared memory at runtime. + - | + For instances hosted on Azure, if a pre-upgrade check failed due to insufficient user disk size, the Management Console displayed an internal server error. + - | + The Enterprise Overview page incorrectly displayed a Beta label, even though it is generally available. + - | + After a user made changes to the isolated subdomain setting, some user assets did not display properly. + - | + On an instance with secret scanning enabled, when selecting repositories for a dry run of an enterprise-level custom pattern, searches for full repository names (`ORGANIZATION/REPOSITORY`) did not return results. + - | + When adding bypass permissions to a ruleset, the dropdown menu failed to load if one of the suggested actors was an invalid integration. + - | + When creating a pre-receive hook environment, attempts to include an image URL over 255 characters failed with a database error. The maximum length is still 255 characters, but the URL length is now validated before the process starts. + - | + Performing a browser back navigation to a pull request now displays up-to-date status checks. + - | + Jekyll-build tooling for GitHub pages could fail when using the `jekyll-relative-links` plugin, see [Failure details](https://github.com/jekyll/jekyll/issues/9544). + - | + Subversion services were non-functional in some cases. + changes: + - | + When exporting repositories to blob storage using the migrations REST API endpoint to start an organization migration, the maximum compressed archive size is limited to 90 GB. This is an increase from 30 GB. + - | + Removes the minimum date for the new commit filter bar. + - | + When exporting repositories using the migrations REST API, prior to blob storage upload the tarball is staged in the root volume. For more disk capacity, the tarball will now be staged in the data volume. + known_issues: + - | + 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 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 [AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + Repositories originally imported using ghe-migrator will not correctly track Advanced Security contributions. + - | + For an instance in a cluster configuration and with GitHub Actions enabled, restoring a cluster from backup requires targeting the primary DB node. + - | + 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, shutdown the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 appliance onto a 3.13 appliance, 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 restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. diff --git a/data/release-notes/enterprise-server/3-14/6.yml b/data/release-notes/enterprise-server/3-14/6.yml new file mode 100644 index 000000000000..8b17d6293d58 --- /dev/null +++ b/data/release-notes/enterprise-server/3-14/6.yml @@ -0,0 +1,78 @@ +date: '2024-12-17' +sections: + security_fixes: + - | + Packages have been updated to the latest security versions. + bugs: + - | + On an instance in a cluster configuration, `ghe-repl-promote` failed if the primary node was unavailable. + - | + In a high availability configuration, with GitHub Actions, replication would fail on nodes where MSSQL was not configured to run. + - | + The `--no-async` flag was not implemented for the `ghe-cluster-support-bundle` command, leading to a potentially increased load. + - | + Pre-receive hook environments with shared memory enabled could not access shared memory at runtime. + - | + For instances hosted on Azure, if a pre-upgrade check failed due to insufficient user disk size, the Management Console displayed an internal server error. + - | + The Enterprise Overview page incorrectly displayed a Beta label, even though it is generally available. + - | + After a user made changes to the isolated subdomain setting, some user assets did not display properly. + - | + On an instance with secret scanning enabled, when selecting repositories for a dry run of an enterprise-level custom pattern, searches for full repository names (`ORGANIZATION/REPOSITORY`) did not return results. + - | + When adding bypass permissions to a ruleset, the dropdown menu failed to load if one of the suggested actors was an invalid integration. + - | + When creating a pre-receive hook environment, attempts to include an image URL over 255 characters failed with a database error. The maximum length is still 255 characters, but the URL length is now validated before the process starts. + - | + On an instance with GitHub Actions disabled, status check icons on a repositorys commit list failed to render. + - | + Site administrators were unable to use the "Disable repository access" functionality on the site admin dashboard. + - | + Attempting to access the code security settings page for a non-existent enterprise returned a 500 error instead of a 404 error. + - | + Performing a browser back navigation to a pull request now displays up-to-date status checks. + - | + Jekyll-build tooling for GitHub pages could fail when using the `jekyll-relative-links` plugin, see [Failure details](https://github.com/jekyll/jekyll/issues/9544). + - | + The removal rate of issues from Git repositories was slower than necessary. + changes: + - | + Log output for git maintenance now includes the time taken to complete the maintenance process. + - | + When exporting repositories to blob storage using the migrations REST API endpoint to start an organization migration, the maximum compressed archive size is limited to 90 GB. This is an increase from 30 GB. + - | + Removes the minimum date for the new commit filter bar. + - | + When exporting repositories using the migrations REST API, prior to blob storage upload the tarball is staged in the root volume. For more disk capacity, the tarball will now be staged in the data volume. + known_issues: + - | + 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 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 [AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Repositories originally imported using ghe-migrator will not correctly track Advanced Security contributions. + - | + Admin stats REST API endpoints may timeout 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, shutdown the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 appliance onto a 3.13 appliance, 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`. + - | + An organization-level code scanning configuration page is displayed on instances that do not use GitHub Advanced Security or code scanning. + - | + 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. + - | + In the header bar displayed to site administrators, some icons are not available. + - | + When enabling automatic update checks for the first time in the Management Console, the status is not dynamically reflected until the "Updates" page is reloaded. + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. diff --git a/data/release-notes/enterprise-server/3-15/1.yml b/data/release-notes/enterprise-server/3-15/1.yml new file mode 100644 index 000000000000..bf92ed5bcde1 --- /dev/null +++ b/data/release-notes/enterprise-server/3-15/1.yml @@ -0,0 +1,94 @@ +date: '2024-12-17' +sections: + security_fixes: + - | + Packages have been updated to the latest security versions. + bugs: + - | + On an instance in a cluster configuration, `ghe-repl-promote` failed if the primary node was unavailable. + - | + In a high availability configuration, with GitHub Actions, replication would fail on nodes where MSSQL was not configured to run. + - | + The `--no-async` flag was not implemented for the `ghe-cluster-support-bundle` command, leading to a potentially increased load. + - | + Pre-receive hook environments with shared memory enabled could not access shared memory at runtime. + - | + For instances hosted on Azure, if a pre-upgrade check failed due to insufficient user disk size, the Management Console displayed an internal server error. + - | + Preflight checks now recognize the updated 500GB user disk as a recommendation, not a requirement. + - | + The Enterprise Overview page incorrectly displayed a Beta label, even though it is generally available. + - | + After a user made changes to the isolated subdomain setting, some user assets did not display properly. + - | + Customers performing a feature version upgrade to 3.13.6 or 3.14.3 could experience issues with database migrations due to data issues during database conversions. + - | + On an instance with secret scanning enabled, when selecting repositories for a dry run of an enterprise-level custom pattern, searches for full repository names (`ORGANIZATION/REPOSITORY`) did not return results. + - | + When adding bypass permissions to a ruleset, the dropdown menu failed to load if one of the suggested actors was an invalid integration. + - | + When creating a pre-receive hook environment, attempts to include an image URL over 255 characters failed with a database error. The maximum length is still 255 characters, but the URL length is now validated before the process starts. + - | + On an instance with GitHub Actions disabled, status check icons on a repositorys commit list failed to render. + - | + Site administrators were unable to use the "Disable repository access" functionality on the site admin dashboard. + - | + Attempting to access the code security settings page for a non-existent enterprise returned a 500 error instead of a 404 error. + - | + Performing a browser back navigation to a pull request now displays up-to-date status checks + - | + The removal rate of issues from Git repositories was slower than necessary. + changes: + - | + When connecting to an appliance via SSH, a notification about upcoming root disk changes displays. + - | + Log output for git maintenance now includes the time taken to complete the maintenance process. + - | + When exporting repositories to blob storage using the migrations REST API endpoint to start an organization migration, the maximum compressed archive size is limited to 90 GB. This is an increase from 30 GB. + - | + Removes the minimum date for the new commit filter bar. + - | + When exporting repositories using the migrations REST API, prior to blob storage upload the tarball is staged in the root volume. For more disk capacity, the tarball will now be staged in the data volume. + known_issues: + - | + Admins setting up cluster high availability (HA) may encounter a `spokes` error when running `ghe-cluster-repl-status` if a new organization and repositories are created before using the `ghe-cluster-repl-bootstrap` command. To avoid this issue, complete the cluster HA setup with `ghe-cluster-repl-bootstrap` before creating new organizations and repositories. + - | + 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 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 [AUTOTITLE](/admin/configuration/administering-your-instance-from-the-management-console/troubleshooting-access-to-the-management-console#unlocking-the-root-site-administrator-account). + - | + On an instance with the HTTP `X-Forwarded-For` header configured for use behind a load balancer, all client IP addresses in the instance's audit log erroneously appear as 127.0.0.1. + - | + {% data reusables.release-notes.large-adoc-files-issue %} + - | + Repositories originally imported using ghe-migrator will not correctly track Advanced Security contributions. + - | + Admin stats REST API endpoints may timeout 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, shutdown the node and repeat the steps. + - | + {% data reusables.release-notes.2024-06-possible-frontend-5-minute-outage-during-hotpatch-upgrade %} + - | + When restoring data originally backed up from a 3.13 appliance onto a 3.13 appliance, 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`. + - | + An organization-level code scanning configuration page is displayed on instances that do not use GitHub Advanced Security or code scanning. + - | + 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. + - | + In the header bar displayed to site administrators, some icons are not available. + - | + When enabling automatic update checks for the first time in the Management Console, the status is not dynamically reflected until the "Updates" page is reloaded. + - | + When restoring from a backup snapshot, a large number of `mapper_parsing_exception` errors may be displayed. + - | + An organization-level code scanning configuration page is displayed on instances that do not use GitHub Advanced Security or code scanning. + - | + 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. + deprecations: + # https://github.com/github/releases/issues/4037 + - heading: Upcoming deprecation of projects (classic) + notes: + - | + Projects (classic) will be removed from GitHub Enterprise Server 3.16 and later. For more information, see [Sunset Notice – Projects (classic)](https://github.blog/changelog/2024-05-23-sunset-notice-projects-classic).