Enterprise Server 3.9 release notes
Enterprise Server 3.9.0
Download GitHub Enterprise Server 3.9.0June 08, 2023
For upgrade instructions, see "Upgrading GitHub Enterprise Server."
3.9.0: Features
Instance administration
To improve security posture and protect data from threats, enterprise owners can see user activity from the Management Console within the enterprise audit log, including events from the UI, API, and administrative SSH access. For more information, see "Audit log events for your enterprise."
During an upgrade of an instance to a new release, people with administrative SSH access to the instance can monitor the progress of routine migrations using the
ghe-migrationsutility. For more information, see "Command-line utilities."On an instance with multiple nodes, site administrators can use the Manage GitHub Enterprise Server API to monitor the health of replication. For more information, see "Monitoring a high-availability configuration."
On an instance in a cluster configuration, administrators can ensure a balanced distribution of jobs across nodes by using the
ghe-cluster-rebalanceutility. For more information, see "Rebalancing cluster workloads."On an instance in a cluster configuration, administrators can proactively monitor the health of individual nodes and control the reintroduction of unhealthy nodes into the cluster using Node Eligibility Service. For more information, see "Monitoring the health of your cluster nodes with Node Eligibility Service."
Identity and access management
On an instance configured for SAML SSO, enterprise owners can review information about the Identity Provider (IdP) configured for user authentication using the GraphQL API. The personal access token (PAT) used to authenticate requests to this API requires the
read:enterprisescope. Previously, the PAT required theadmin:enterprisescope. For more information, see "Objects" in the GraphQL API documentation.Authentication
For an instance or organization with 2FA enabled, users can configure a 2FA method to be a preferred method. Users can also update 2FA methods from
http(s)://HOSTNAME/settings/security. For more information, see "Configuring two-factor authentication" and "Changing your preferred two-factor authentication method."REST API
To provide API integrators a smooth migration path and time to update integrations after GitHub makes occasional breaking changes, the REST API now uses calendar-based versioning. GitHub Enterprise Server 3.9 provides version
2022-11-28of the REST API. For more information, see "API Versions" in the REST API documentation.GitHub Connect
Enterprise owners who configure Server Statistics on an instance with GitHub Actions enabled will transmit usage metrics related to GitHub Actions. For more information, see "About Server Statistics."
GitHub Advanced Security
To more easily discover potential security or quality issues in code, users can configure code scanning directly through the web interface without adding a GitHub Actions workflow to the repository. This feature finds and sets up the best CodeQL configuration for the repository, detecting supported languages and enabling CodeQL analysis for every pull request and every push to the default branch and any protected branches. Analysis of JavaScript (including TypeScript), Python, and Ruby code, are currently supported. For more information, see "Configuring code scanning for a repository."
To simplify the configuration of code scanning, organization owners can enable code scanning for all eligible repositories in an organization using a default configuration, either via the web interface or REST API. For more information, see "Configuring code scanning at scale using CodeQL" and "Organizations" in the REST API documentation.
To ensure that relevant alerts remain visible and actionable, users can manually remove stale alerts from code scanning. For more information, see "Managing code scanning alerts for your repository."
To better understand the status of CodeQL and other code scanning tools for a repository, and to help troubleshoot, users can review the tool status page. For more information, see "About the tool status page for code scanning."
To customize the behavior of code scanning on a per-repository basis, repository administrators can configure what severity levels for code scanning alerts will cause checks in a pull request to fail. For more information, see "Triaging code scanning alerts in pull requests."
To protect repositories from pushes that contain custom secret scanning patterns defined at the enterprise, organization, or repository level, users can enable push protection for those patterns. For more information, see "Defining custom patterns for secret scanning."
Organization owners can view the enablement status of security features for the organization's repositories using the REST API. The endpoint provides details for GitHub Advanced Security, secret scanning, and push protection. For more information, see "Repositories" in the REST API documentation.
Repository administrators can programmatically enable code scanning with a default CodeQL configuration using the REST API. For more information, see the following documentation.
- "Configuring code scanning for a repository"
- "Get the code scanning default setup configuration" in the Code Scanning REST API documentation
- "Update the code scanning default setup configuration" in the Code Scanning REST API documentation
Dependabot
To improve the security of GitHub Actions workflows that pin references, Dependabot can update the versioning for calls to reusable workflows within workflow files. For more information, see "About Dependabot version updates."
On an instance with GitHub Actions and the dependency graph enabled, as well as automatic access to GitHub.com actions using GitHub Connect, the web interface will suggest submission actions within a repository with supported languages. For more information, see the following documentation.
- "Using the Dependency submission API"
- "About GitHub Actions for enterprises"
- "Enabling automatic access to GitHub.com actions using GitHub Connect"
For repositories that use a language that has a submission action, when users with write access visit their dependency graph (this page), we will show them a prompt that directs them to the Marketplace to find an action that would help them.
To improve the security of projects that use npm v9, the dependency graph and Dependabot can parse and update
package-lock.jsonfiles that specifylockfileVersion: 3. For more information, see "About the dependency graph," "About Dependabot version updates," andlockfileVersionin the npm documentation.To improve the security of Gradle projects, the dependency graph and Dependabot can parse and update Gradle version catalogs in
settings.gradle. For more information, see "About Dependabot version updates" and Sharing dependency versions between projects in the Gradle User Manual.To ensure that users receive the most relevant and actionable alerts about dependency updates, repository administrators and organization owners can enable or disable Dependabot alerts for an individual repository or organization. For more information, see "Securing your repository" or "Securing your organization."
If people with access to a repository do not interact with Dependabot security updates for over 90 days, Dependabot will pause automated pull request activity. For more information, see "About Dependabot security updates."
To help users evaluate the stability risk of a dependency update, Dependabot can fetch release notes, changelogs, and commit history in pull requests that update Docker dependencies. For more information, see "Configuration options for the dependabot.yml file."
To assist with software security and supply chain risk management, people with read access to a repository can export a software bill of materials (SBOM) for a repository's dependency graph using the web interface or REST API. The SBOM adheres to the SPDX 2.3 specification. For more information, see "Using the Dependency submission API," "Exporting a software bill of materials for your repository," and The Software Package Data Exchange® (SPDX®) Specification Version 2.3 on the SPDX website.
The dependency graph can parse Python dependencies for
pyproject.tomlfiles that follow the PEP 621 standard. For more information, see "About the dependency graph" and PEP 621 – Storing project metadata in pyproject.toml in the Index of Python Enhancement Proposals.Users can use the GraphQL API to review dependencies submitted using the Dependency submission API. For more information, see "Schema previews."
GitHub Actions
On instances in a cluster configuration, GitHub Actions is available as a private beta. Beta features are subject to change. For more information, and to enroll in the beta, contact your representative on GitHub's Sales team.
Administrators of self-hosted runners for GitHub Actions can configure auto-scaling runners using Actions Runner Controller and runner scale sets. For more information, see "About Actions Runner Controller."
Administrators can bypass all protection rules for a given environment and force the pending jobs referencing the environment to proceed. For more information, see "Using environments for deployment."
Users who deploy with OIDC can define more advanced access policies by including additional custom claims within a token. To help uniquely verify the source of a workflow job, include the following claims.
actor_idrepository_idrepository_owner_idworkflow_refworkflow_shajob_workflow_sha
For more information, see Security hardening your deployments.
To improve security for workflows that use
GITHUB_TOKEN, the following defaults apply to new organizations and repositories.- New organizations that users create inherit permissions from the instance's enterprise-level configuration. For more information, see "Disabling or limiting GitHub Actions for your organization."
- New repositories that users create within an organization inherit permissions from the organization. For more information, see "Managing GitHub Actions settings for a repository."
- New user-owned repositories have a read-only
GITHUB_TOKEN. For more information, see "Managing GitHub Actions settings for a repository."
To allow workflow authors to pin a required workflow file to a fully validated version, required workflows can be referenced using any branch, tag, or commit SHA from the repository containing the workflow file. For more information, see "Disabling or limiting GitHub Actions for your organization."
To enforce required workflows throughout an organization, GitHub Enterprise Server blocks direct pushes to branches where required workflows are enforced. To allow direct pushes for a particular repository, remove the repository as a target for the required workflow. For more information, see "Disabling or limiting GitHub Actions for your organization."
To improve performance for workflows that build Go, caching is enabled by default when using the
setup-goaction. For more information, see "Building and testing Go."Organizations
Organization owners can improve security posture and protect data from threats by enabling the display of organization members' IP addresses in audit log events. This feature is in beta and is subject to change. For more information, see "Displaying IP addresses in the audit log for your organization."
To allow the management of branch protection rules without granting admin access, organization owners can create a custom role with the "Edit repository rules" permission. For more information, see "Managing custom repository roles for an organization."
Users of the REST API can programmatically create and update least-privilege roles for repositories using the Custom Repository Roles REST API. The API is generally available, with a breaking change to the API's endpoint paths. Previously, the API was accessible at
/orgs/{org}/custom_roles, and is now accessible at/orgs/{org}/custom-repository-roles. The List custom repository roles in an organization will no longer be available in the next version of the REST API. For more information, see "About custom repository roles" and "Custom Repository Roles" in the REST API documentation.Enterprise and organization owners can delete an organization and all of the organization's repositories using the REST API. After deletion, organization names are locked for 90 days. For more information, see "Organizations" in the REST API documentation.
Repositories
Within the "Insights" tab for a repository, the sidebar's "Forks" tab provides more information about a project's forks, including a sortable and filterable list of forks and more details about each fork.
Repository administrators can unarchive a repository using the REST API. For more information, see "Repositories" in the REST API documentation.
Projects
To visualize a project at a high level and across a configurable timespan, users can apply a roadmap layout to any project view. For more information, see "Changing the layout of a view."
To get started with a new project faster, users can copy an existing project, including the source project's views, custom fields, and draft issues. For more information, see "Copying an existing project."
To save time when adding items to a project, users can configure a workflow to automatically add new items from a repository as people create or update items that match specific criteria. For more information, see "Adding items automatically."
To keep a long-lived project focused, users can define filters to automatically archive items. For more information, see "Archiving items automatically."
To easily organize items within a project's columns while using the board layout, users can sort the project by field values using the view configuration menu. For more information, see "Customizing the board layout."
To quickly add a new issue to a project without changing context, users can create a new issue from a project's omnibar by clicking
+, then clicking Create new issue. For more information, see "Adding items to your project."To help people scan a project and take action, users can add a color and a text description to each value for a project's single select fields. For more information, see "About single select fields."
Users of the GitHub CLI can manage projects from the command line. For more information, see "About GitHub CLI" and the README for the
github/gh-projectsrepository on GitHub.com.For users who programmatically access projects using the GraphQL API, additional mutations are available. For more information, see "createProjectV2Field," "deleteProjectV2Field," and "deleteProjectV2" in the "Mutations" GraphQL documentation.
GitHub Discussions
To indicate that a discussion is resolved, outdated, or a duplicate, users can close the discussion. For more information, see "Managing discussions."
To encourage other users to include specific, structured information in discussions, users can create discussion category forms. For more information, see "Creating discussion category forms."
After a user locks a discussion and disallows further comments, the user can permit emoji reactions on the discussion. For more information, see "Moderating discussions."
Pull requests
To provide feedback on an entire file, or a file that's been deleted, users can comment on a file from a pull request's "Files changed" tab. For more information, see "Commenting on a pull request."
Users of the GraphQL API can revert a merged pull request by using the revertPullRequest mutation. For more information, see "Reverting a pull request" and "Mutations" in the GraphQL API documentation.
3.9.0: Changes
Field names for some service logs on GitHub Enterprise Server have changed as part of GitHub's gradual migration to internal semantic conventions for OpenTelemetry. Additional field names will change in upcoming releases. If any tooling or processes in your environment rely on specific field names within logs, or log entries in specific files, the following changes may affect you.
levelis nowSeverityText.log_message,msg, ormessageis nowBody.nowis nowTimestamp.- Custom field names such as
gh.repo.idorgraphql.operation.nameuse semantic names. - Log statements that the instance would previously write to
auth.log,ldap.log, orldap-sync.lognow appear in containerized logs forgithub-unicornif the statement originated from a web request, or in logs forgithub-resquedif the statement originated from a background job.
For a full list of mappings, download the OpenTelemetry attribute mapping CSV.
On a configured instance, the name for the HAProxy service is now
haproxy-frontend. Previously, the name washaproxy. Additionally, on an unconfigured instance, there is a new service namedhaproxy-pre-config. If your instance forwards logs to an external system, update your rules to reflect these changes. For more information, see "Log forwarding" articleFor an instance or organization with 2FA enabled, when a user sets up 2FA, GitHub Enterprise Server suggests an authenticator app (TOTP) by default.
When a person with administrative SSH access to an instance submits a support bundle using either the
ghe-support-bundleorghe-cluster-support-bundleutility, a period for log collection specified with the-por--periodno longer requires quotes to enclose the date value. For more information, see "Command-line utilities."To provide additional context within the web interface on an instance where Dependabot alerts are enabled, links to Dependabot alerts in an issue or pull request comment display an improved label and hovercard with alert details.
On an instance with Dependabot alerts enabled, people with write or maintain access to a repository can view or act on Dependabot alerts by default. Custom roles, the security manager role, organization permissions, and notification settings are not affected.
On an instance with a GitHub Advanced Security license and GitHub Connect enabled for the synchronization of actions from GitHub.com, CodeQL code scanning is up to 16% faster. For more information, see "Configuring code scanning for your appliance."
On an instance with a GitHub Advanced Security license and email configured for notifications, users can receive notifications for secret scanning alerts by watching a repository and choosing "All activity" or "Security alerts". To continue receiving notifications for secret scanning alerts in GitHub Enterprise Server 3.9 and later, users must enable email notifications in the web interface at
http(s)://HOSTNAME/settings/notificationsunder "Watching" by choosing "Email".On an instance with a GitHub Advanced Security license, secret scanning alerts display whether detected tokens from GitHub are valid.
On an instance with a GitHub Advanced Security license, the enterprise and organization audit logs now display an event when an owner enables or disables a push protection for a custom pattern for a repository, organization, or the enterprise. For more information, see "Reviewing the audit log for your organization" and "Audit log events for your enterprise."
Users can filter the lists of alerts for Dependabot, code scanning, and secret scanning by repository topic or team in the security overview for an organization. For more information, see "Filtering alerts in security overview."
In the security overview for an organization, the following improvements apply to the "Security coverage" view during feature enablement.
- To provide insight into the number of GitHub Advanced Security licenses used, active committers for the repository are visible. For repositories where GitHub Advanced Security is not enabled, the number indicates the number of licenses required to enable the feature.
- Unsaved changes are now labeled with a "Modified" tag, and the "Save security settings" button now displays the total number of changes to save.
- While a security feature is being enabled, the "Security coverage" view shows a status of "Updating..." to inform you of the ongoing process.
For more information, see "About security overview."
In the security overview's "Security risk" and "Security coverage" views, when a user selects a team from the "Team" drop-down or filters by team, results appear for repositories where the team has write or administrative access or has been granted access to security alerts. Previously, users could only view results for repositories where the team had administrative access or had been granted access to security alerts.
To provide more context within a project, users can share a deep link to a specific issue in a project to have the issue open in the project's side panel.
Organization owners can create up to five custom repository roles. Previously, the limit was three. For more information, see "About custom repository roles."
When transferring a repository, users can also rename the repository. For more information, see "Transferring a repository."
If a user archives a repository, responses from the GraphQL API that include information about the repository now include an
archivedAtvalue with a timestamp representing the archival date.
3.9.0: Backups
Before beginning a backup with GitHub Enterprise Server Backup Utilities 3.9.0 and later, the
ghe-host-checkutility will now perform a preflight check on the backup host to confirm the software version and disk space requirements. For more information, see the 3.9.0 release in thegithub/backup-utilsrepository on GitHub.com.GitHub Enterprise Server Backup Utilities 3.9.0 allows administrators to view the progress of backup and restoration operations on the backup host using the
ghe-backup-progressutility. For more information, see "Configuring backups on your instance."
3.9.0: Known issues
If you upgrade from GitHub Enterprise Server 3.7 or 3.8 to 3.9, the database server on your instance will be upgraded from MySQL 5.7 to MySQL 8.0. I/O utilization will increase as a result, and in some cases this may affect your instance's performance. Do not upgrade to this RC in a production environment, and ensure that you take and verify a backup of the instance before upgrading to the GA release. For more information, see "Known issues with upgrades to your instance."
After restoration of a backup created using GitHub Enterprise Server Backup Utilities 3.7.0 or 3.8.0, users may not be able to sign into the instance. For more information, see "Known issues with backups for your instance." [Updated: 2023-06-29]
After upgrading an existing instance to GitHub Enterprise Server 3.9, the Manage GitHub Enterprise Server API is unavailable. To enable the API, SSH into the instance and run the following commands.
Shell sudo mkdir -p /data/ghes-manage-gateway/current sudo chown -R ghes-manage-gateway:ghes-manage-gateway /data/ghes-manage-gateway/current sudo systemctl restart ghes-manage-gateway ghes-manage-gateway-consul
sudo mkdir -p /data/ghes-manage-gateway/current sudo chown -R ghes-manage-gateway:ghes-manage-gateway /data/ghes-manage-gateway/current sudo systemctl restart ghes-manage-gateway ghes-manage-gateway-consulFor more information about the Manage GitHub Enterprise Server API, see "Manage GitHub Enterprise Server" in the REST API documentation. [Updated: 2023-06-22]
On an instance in a cluster configuration, after you upgrade nodes other than the primary MySQL node and before you upgrade the primary MySQL node, the following output may appear multiple times after you run
ghe-config-apply.Error response from daemon: conflict: unable to delete IMAGE_ID (cannot be forced) - image is being used by running container CONTAINER_IDYou can safely ignore this message.
Custom firewall rules are removed during the upgrade process.
The GitHub Packages npm registry no longer returns a time value in metadata responses. This was done to allow for substantial performance improvements. We continue to have all the data necessary to return a time value as part of the metadata response and will resume returning this value in the future once we have solved the existing performance issues.
On an instance in a high-availability configuration, passive replica nodes accept Git client requests and forward the requests to the primary node.
The
mbind: Operation not permittederror in the/var/log/mysql/mysql.errfile can be ignored. MySQL 8 does not gracefully handle when theCAP_SYS_NICEcapability isn't required, and outputs an error instead of a warning.When using an outbound web proxy server, the
ghe-btopcommand may fail in some circumstances with the error "Error querying allocation: Unexpected response code: 401".If an instance is configured to forward logs to a target server with TLS enabled, certificate authority (CA) bundles that a site administrator uploads using
ghe-ssl-ca-certificate-installare not respected, and connections to the server fail.When running
ghe-config-apply, the process may stall with the messageDeployment is running pending automatic promotion. During the validation phase of a configuration run, aNo such objecterror 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 will 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 Management Console."
3.9.0: Deprecations
Change to command-line utility for management of replication
On an instance with multiple nodes, people with administrative SSH access to the instance should use
ghe-spokesctlfor management of Git replication instead ofghe-spokes. For more information, see "Command-line utilities."Dependency graph no longer ingests go.sum files
Because
go.sumfiles are not lock files and may result in false positive Dependabot alerts, on an instance with the dependency graph enabled, thego.sumfiles are no longer ingested for users' Go repositories. If Dependabot alerts are enabled, Dependabot will no longer alert users for vulnerabilities in ago.sumfile's dependencies. The dependency graph continues to supportgo.modfiles, the recommended format for Go projects. Use Go 1.17 or higher to ensure yourgo.modfile contains a comprehensive view of all direct and transitive dependencies. For more information, see "About the dependency graph."Only GitHub Actions can publish a GitHub Pages site if source includes symbolic links
To improve the security of an instance where users deploy sites using GitHub Pages, sites that contain symbolic links will no longer build outside of GitHub Actions. If a user's site is affected and a site administrator has configured email for the instance, the user will receive an email with instructions about how to fix the error. To continue using symbolic links in the site's source, the instance must be configured for GitHub Actions, and the user must write a GitHub Actions workflow to use as a publishing source. For more information, see "About GitHub Pages."