From ad3ca0a97b80d25da4ccef7e74c85ad1dcd7dd9e Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 10 Jul 2024 16:22:45 +1000 Subject: [PATCH 001/102] Initial restructuring of docs. --- data/nav.yml | 149 ++++++++++++++++++++++-------------------- data/tiles.yml | 22 ------- pages/integrations.md | 2 +- pages/platform.md | 5 ++ 4 files changed, 84 insertions(+), 94 deletions(-) create mode 100644 pages/platform.md diff --git a/data/nav.yml b/data/nav.yml index b32c6ba474..f810f9f55c 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -232,14 +232,6 @@ path: "agent/v2/cli-artifact" - name: "pipeline" path: "agent/v2/cli-pipeline" - - name: "CLI" - children: - - name: "Overview" - path: "cli" - - name: "Installation" - path: "cli/installation" - - name: "Configuration" - path: "cli/configuration" - name: "Configure pipelines" children: - name: "Overview" @@ -358,16 +350,6 @@ path: "pipelines/security/oidc" - name: "OIDC with AWS" path: "pipelines/security/oidc/aws" - - name: "Team management" - children: - - name: "Overview" - path: "team-management" - - name: "User and team permissions" - path: "team-management/permissions" - - name: "Enforce 2FA" - path: "team-management/enforce-2fa" - - name: "System banners" - path: "team-management/system-banners" - name: "Governance" children: - name: "Overview" @@ -391,6 +373,38 @@ - name: "Cluster queue metrics" path: "pipelines/cluster-queue-metrics" pill: "beta" + - name: "Integrations" + children: + - name: "Overview" + path: "integrations" + - name: "Plugins" + children: + - name: "Overview" + path: "plugins" + - name: "Using plugins" + path: "plugins/using" + - name: "Plugins directory" + path: "plugins/directory" + - name: "Plugin tools" + path: "plugins/tools" + - name: "Writing plugins" + path: "plugins/writing" + - name: "Other integrations" + children: + - name: "Amazon EventBridge" + path: "integrations/amazon-eventbridge" + - name: "Artifactory" + path: "integrations/artifactory" + - name: "Build status badges" + path: "integrations/build-status-badges" + - name: "CCMenu & CCTray" + path: "integrations/cc-menu" + - name: "Docker Hub" + path: "integrations/docker-hub" + - name: "PagerDuty" + path: "integrations/pagerduty" + - name: "Slack" + path: "integrations/slack" - name: "Test Analytics" path: "test-analytics" children: @@ -502,6 +516,52 @@ path: "packages/ruby" - name: "Terraform" path: "packages/terraform" +- name: "Platform" + path: "platform" + children: + - name: "Overview" + path: "platform" + - name: "Team management" + start_expanded: true + children: + - name: "Overview" + path: "team-management" + - name: "User and team permissions" + path: "team-management/permissions" + - name: "Enforce 2FA" + path: "team-management/enforce-2fa" + - name: "System banners" + path: "team-management/system-banners" + - name: "CLI" + children: + - name: "Overview" + path: "cli" + - name: "Installation" + path: "cli/installation" + - name: "Configuration" + path: "cli/configuration" + - name: "SSO" + children: + - name: "Overview" + path: "integrations/sso" + - name: "Okta" + path: "integrations/sso/okta" + - name: "ADFS" + path: "integrations/sso/adfs" + - name: "Google Workspace" + path: "integrations/sso/google-workspace" + - name: "Google Workspace (SAML)" + path: "integrations/sso/google-workspace-saml" + - name: "GitHub" + path: "integrations/sso/github-sso" + - name: "OneLogin" + path: "integrations/sso/onelogin" + - name: "Azure AD" + path: "integrations/sso/azure-ad" + - name: "Custom SAML" + path: "integrations/sso/custom-saml" + - name: "Set up with GraphQL" + path: "integrations/sso/sso-setup-with-graphql" - name: "APIs" path: "apis" children: @@ -595,56 +655,3 @@ path: "apis/webhooks/ping-events" - name: "Integrations" path: "apis/webhooks/integrations" -- name: "Integrations" - path: "integrations" - children: - - name: "Overview" - path: "integrations" - - name: "Plugins" - children: - - name: "Overview" - path: "plugins" - - name: "Using plugins" - path: "plugins/using" - - name: "Plugins directory" - path: "plugins/directory" - - name: "Plugin tools" - path: "plugins/tools" - - name: "Writing plugins" - path: "plugins/writing" - - name: "SSO" - children: - - name: "Overview" - path: "integrations/sso" - - name: "Okta" - path: "integrations/sso/okta" - - name: "ADFS" - path: "integrations/sso/adfs" - - name: "Google Workspace" - path: "integrations/sso/google-workspace" - - name: "Google Workspace (SAML)" - path: "integrations/sso/google-workspace-saml" - - name: "GitHub" - path: "integrations/sso/github-sso" - - name: "OneLogin" - path: "integrations/sso/onelogin" - - name: "Azure AD" - path: "integrations/sso/azure-ad" - - name: "Custom SAML" - path: "integrations/sso/custom-saml" - - name: "Set up with GraphQL" - path: "integrations/sso/sso-setup-with-graphql" - - name: "Amazon EventBridge" - path: "integrations/amazon-eventbridge" - - name: "Artifactory" - path: "integrations/artifactory" - - name: "Build status badges" - path: "integrations/build-status-badges" - - name: "CCMenu & CCTray" - path: "integrations/cc-menu" - - name: "Docker Hub" - path: "integrations/docker-hub" - - name: "PagerDuty" - path: "integrations/pagerduty" - - name: "Slack" - path: "integrations/slack" diff --git a/data/tiles.yml b/data/tiles.yml index f120f99eb3..e00abeaba1 100644 --- a/data/tiles.yml +++ b/data/tiles.yml @@ -57,28 +57,6 @@ integrations: url: "/docs/plugins/tools" - text: "Writing Plugins" url: "/docs/plugins/writing" - - title: "SSO" - desc: "You can use a single sign-on (SSO) provider to protect access to your organization's data in Buildkite. Buildkite supports many different SSO providers." - url: "/docs/integrations/sso" - links: - - text: "Okta" - url: "/docs/integrations/sso/okta" - - text: "ADFS" - url: "/docs/integrations/sso/adfs" - - text: "Google Workspace" - url: "/docs/integrations/sso/google-workspace" - - text: "Google Workspace (SAML)" - url: "/docs/integrations/sso/google-workspace-saml" - - text: "GitHub" - url: "/docs/integrations/sso/github-sso" - - text: "OneLogin" - url: "/docs/integrations/sso/onelogin" - - text: "Azure AD" - url: "/docs/integrations/sso/azure-ad" - - text: "Custom SAML" - url: "/docs/integrations/sso/custom-saml" - - text: "Setup with GraphQL" - url: "/docs/integrations/sso/sso-setup-with-graphql" - title: "Other integrations" desc: "Buildkite offers other integrations to improve your workflow." links: diff --git a/pages/integrations.md b/pages/integrations.md index 102346ae5b..82a810f7d5 100644 --- a/pages/integrations.md +++ b/pages/integrations.md @@ -6,4 +6,4 @@ template: "landing_page" <%= tiles "integrations" %> -If you're looking for [Source control integrations](/docs/integrations/source-control) for Pipelines, they are over in the [Pipelines](/docs/integrations/source-control) nav. +Learn more about source control integrations in [Connect source control](/docs/integrations/source-control). diff --git a/pages/platform.md b/pages/platform.md new file mode 100644 index 0000000000..80c7b2179d --- /dev/null +++ b/pages/platform.md @@ -0,0 +1,5 @@ +--- +template: "landing_page" +--- + +# The Buildkite platform From 1803ade02bff02d32efe3e047b7c1833c734112e Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 11 Jul 2024 09:29:26 +1000 Subject: [PATCH 002/102] Add 'permissions' page back to Pipelines docs. --- config/routes.rb | 3 +- data/nav.yml | 6 +- pages/packages/security.md | 7 +- pages/packages/{ => security}/permissions.md | 0 pages/pipelines/security/permissions.md | 82 ++++++++++++++++++++ pages/team_management/permissions.md | 59 +------------- 6 files changed, 96 insertions(+), 61 deletions(-) rename pages/packages/{ => security}/permissions.md (100%) create mode 100644 pages/pipelines/security/permissions.md diff --git a/config/routes.rb b/config/routes.rb index 1d262438e2..6bd7b81222 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -64,12 +64,13 @@ get "/docs/integrations/sso/g-cloud-identity", to: redirect("/docs/integrations/sso/google-workspace-saml") get "/docs/packages/manage-repositories", to: redirect("/docs/packages/manage-registries") get "/docs/packages/nodejs", to: redirect("/docs/packages/javascript") + get "/docs/packages/permissions", to: redirect("/docs/packages/security/permissions") get "/docs/pipelines/emoji", to: redirect("/docs/pipelines/emojis") get "/docs/pipelines/images-in-log-output", to: redirect("/docs/pipelines/links-and-images-in-log-output") get "/docs/pipelines/pipelines", to: redirect("/docs/pipelines") get "/docs/pipelines/ignoring-a-commit", to: redirect("/docs/pipelines/skipping#ignore-a-commit") get "/docs/pipelines/parallel-builds", to: redirect("/docs/tutorials/parallel-builds") - get "/docs/pipelines/permissions", to: redirect("/docs/team-management/permissions") + get "/docs/pipelines/permissions", to: redirect("/docs/pipelines/security/permissions") get "/docs/pipelines/plugins", to: redirect("/docs/plugins") get "/docs/pipelines/uploading-pipelines", to: redirect("/docs/pipelines/defining-steps") get "/docs/pipelines/security-overview", to: redirect("/docs/pipelines/security/overview") diff --git a/data/nav.yml b/data/nav.yml index f810f9f55c..a218327c89 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -350,6 +350,8 @@ path: "pipelines/security/oidc" - name: "OIDC with AWS" path: "pipelines/security/oidc/aws" + - name: "Permissions" + path: "pipelines/security/permissions" - name: "Governance" children: - name: "Overview" @@ -488,8 +490,8 @@ path: "packages/security" - name: "OIDC" path: "packages/security/oidc" - - name: "Permissions" - path: "packages/permissions" + - name: "Permissions" + path: "packages/security/permissions" - name: "Package ecosystems" start_expanded: true children: diff --git a/pages/packages/security.md b/pages/packages/security.md index 91cfd29a30..05c96b27ca 100644 --- a/pages/packages/security.md +++ b/pages/packages/security.md @@ -4,6 +4,9 @@ toc: false # Security -Customer security is paramount to Buildkite. Buildkite Packages provides mechanisms to restrict access to your registries from Buildkite Agents and their pipeline's jobs, as well as other 3rd party systems that implement OIDC-compatible policies. +Customer security is paramount to Buildkite. Buildkite Packages provides mechanisms to restrict access to your registries from Buildkite Agents and their pipeline's jobs, as well as other 3rd party systems that implement OIDC-compatible policies, as well as how to manage access to Buildkite Packages. -Learn more about OIDC tokens in [OIDC with Buildkite Packages](/docs/packages/security/oidc). +This section contains the following topics: + +- [OIDC with Buildkite Packages](/docs/packages/security/oidc) and how to restrict access registries through OIDC tokens. +- [User, team, and registry permissions](/docs/packages/security/permissions) and how to manage team and user access to registries. diff --git a/pages/packages/permissions.md b/pages/packages/security/permissions.md similarity index 100% rename from pages/packages/permissions.md rename to pages/packages/security/permissions.md diff --git a/pages/pipelines/security/permissions.md b/pages/pipelines/security/permissions.md new file mode 100644 index 0000000000..9e51a3bc75 --- /dev/null +++ b/pages/pipelines/security/permissions.md @@ -0,0 +1,82 @@ +# User, team, and pipeline permissions + +Customers on the Buildkite [Pro and Enterprise](https://buildkite.com/pricing) plans can manage registry permissions using the [_teams_ feature](#manage-teams-and-permissions). This feature allows you to apply access permissions and functionality controls for one or more groups of users (that is, _teams_) on each pipeline throughout your organization. + +Enterprise customers can configure pipeline permissions for all users across their Buildkite organization through the **Security** page. Learn more about this feature in [Manage organization security for pipelines](#manage-organization-security-for-pipelines). + +## Manage teams and permissions + +To manage teams across the Buildkite Packages application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions section of Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions). + +Once the _teams_ feature is enabled, you can see the teams that you're a member of from the **Users** page, which: + +- As a Buildkite organization administrator, you can access by selecting **Settings** in the global navigation > [**Users**](https://buildkite.com/organizations/~/users/). + +- As any other user, you can access by selecting **Teams** in the global navigation > [**Users**](https://buildkite.com/organizations/~/users/). + +### Organization-level permissions + +Learn more about what a _Buildkite organization administrator_ can do in the [Organization-level permissions section of the Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions-organization-level-permissions). + +As an organization administrator, you can access the [**Organization Settings** page](https://buildkite.com/organizations/~/settings) by selecting **Settings** in the global navigation, where you can do the following: + +- Add new teams or edit existing ones in the [**Team** section](https://buildkite.com/organizations/~/teams). + +- After selecting a team, you can view and administer the member-, [pipeline-](/docs/team-management/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. + +**Note:** Registry-level settings are only available once [Buildkite Packages has been enabled](/docs/packages/permissions#enabling-buildkite-packages). + +### Team-level permissions + +Learn more about what _team members_ are and what _team maintainers_ can do in the [Team-level permissions section of the Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions). + +### Pipeline-level permissions + +When the [teams feature is enabled](#manage-teams-and-permissions), any user can create a new pipeline, as long as this user is a member of at least one team within the Buildkite organization, and this team has the **Create pipelines** [team member permission](#manage-teams-and-permissions-team-level-permissions). + +When you create a new pipeline in Buildkite: + +- You are automatically granted the **Full Access** (`MANAGE_BUILD_AND_READ`) permission to this pipeline. +- Any members of teams to which you provide access to this pipeline are also granted the **Full Access** permission. + +**Full Access** on a pipeline allows you to: + +- View and create builds or rebuilds. +- Edit pipeline settings, which includes the ability to change the pipeline's visibility. +- Archive the pipeline or delete the pipeline. +- Provide access to other users, by adding the pipeline to other teams that you are a [team maintainer](#manage-teams-and-permissions-team-level-permissions) on. + +Any user with the **Full Access** permission on a pipeline can change its permission to either: + +- **Build & Read** (`BUILD_AND_READ`), which allows you to view and create builds or rebuilds, but _not_: + * Edit the pipeline settings. + * Archive or delete the pipeline. + * Provide access to other users. +- **Read Only** (`READ_ONLY`), which allows you to view builds only, but _not_: + * Create builds or issue rebuilds. + * Edit the pipeline settings. + * Archive or delete the pipeline. + * Provide access to other users. + +A user who is a member of at least one team with **Full Access** permission to a pipeline can change the permission on this pipeline. However, once this user loses **Full Access** through their last team with this permission on this pipeline, the user then loses the ability to change the pipeline's permissions in any team they are a member of. + +Another user with **Full Access** to this pipeline or a [Buildkite organization administrator](#manage-teams-and-permissions-organization-level-permissions) is required to change the pipeline's permission back to **Full Access** again. + +## Manage organization security for pipelines + +Enterprise customers can configure pipeline action permissions and related security features for all users across their Buildkite organization. These features can be used either with or without the [teams feature enabled](#manage-teams-and-permissions). + +These user-level permissions and security features are managed by _Buildkite organization administrators_. To access this feature: + +1. Select **Settings** in the global navigation to access the [**Organization Settings**](https://buildkite.com/organizations/~/settings) page. + +1. Select [**Security** > **Pipelines** tab](https://buildkite.com/organizations/~/security/pipelines) to access your organization's security for pipelines page. + +From this page, you can configure the following permissions for all users across your Buildkite organization: + +- **Create Pipelines**—if the [teams feature](#manage-teams-and-permissions) is enabled, then this permission is controlled at a [team-level](#manage-teams-and-permissions-team-level-permissions) and therefore, this option will be unavailable on this page. +- **Delete pipelines** +- **Change Pipeline Visibility**—Make private pipelines publicly available. +- **Change Notification Services**—Allows notification services to be created, edited, and deleted. +- **Manage Agent Registration Tokens**—Allows [agent tokens](/docs/agent/v3/tokens) to be created, edited, and deleted. +- **Stop Agents**—Allows users to disconnect agents from Buildkite. diff --git a/pages/team_management/permissions.md b/pages/team_management/permissions.md index 7e64b916e7..b52d61c76a 100644 --- a/pages/team_management/permissions.md +++ b/pages/team_management/permissions.md @@ -2,8 +2,6 @@ Customers on the Buildkite [Pro and Enterprise](https://buildkite.com/pricing) plans can manage permissions using the _teams_ feature. Learn more about this feature in [Manage teams and permissions](#manage-teams-and-permissions). -Enterprise customers can configure pipeline permissions and security features for all users across their Buildkite organization through the **Security** page. Learn more about this feature in [Manage organization security for pipelines](#manage-organization-security-for-pipelines). - ## Manage teams and permissions The _teams_ feature allows you to apply access permissions and functionality controls for one or more groups of users (that is, _teams_) on each pipeline, test suite, registry, or any combination of these, throughout your organization. @@ -33,7 +31,7 @@ A user who is a _Buildkite organization administrator_ can access the [**Organiz - From the **Teams** page: * Create a new team, using the **New Team** button. - * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. + * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. **Note:** Registry-level settings are only available once [Buildkite Packages has been enabled](/docs/packages/permissions#enabling-buildkite-packages). @@ -59,7 +57,7 @@ A user who is a _team maintainer_ on an existing team can: * Remove a user from this team, by selecting the user's **Remove** button. * Change the permission for all users in this team on any: - - [pipeline](#manage-teams-and-permissions-pipeline-level-permissions) in the team to **Full Access**, **Build & Read** or **Read Only**. + - [pipeline](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions) in the team to **Full Access**, **Build & Read** or **Read Only**. - [test suite](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions) in the team to **Full Access** or **Read Only**. - [registry](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team to **Full Access**, **Read & Write** or **Read Only**. @@ -86,44 +84,12 @@ A user who is a _team maintainer_ on an existing team can: As indicated in the Buildkite interface, a user who is in a team is known as a **Team Member**, and such users have fewer permissions within the team (that is, no team management capabilities) than a **Team Maintainer**. -All team members in a team have the same level of access to the [pipelines](#manage-teams-and-permissions-pipeline-level-permissions), [test suites](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), and [registries](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team. If you need to have more fine grained control over the pipelines, test suites or registries in a team, you can create more teams with different permissions. +All team members in a team have the same level of access to the [pipelines](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suites](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), and [registries](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team. If you need to have more fine grained control over the pipelines, test suites or registries in a team, you can create more teams with different permissions. > 🚧 Changing **Full Access** permissions on pipelines, test suites and registries > As a team maintainer, once you change the permission on any of these items away from **Full Access**, you could lose the ability to change the permissions on that item again. This can happen if you are no longer a member of a team that provides **Full Access** to this item. > A [Buildkite organization administrator](#manage-teams-and-permissions-organization-level-permissions) is required to change any item's permissions back to **Full Access** again. -### Pipeline-level permissions - -When the [teams feature is enabled](#manage-teams-and-permissions), any user can create a new pipeline, as long as this user is a member of at least one team within the Buildkite organization, and this team has the **Create pipelines** [team member permission](#manage-teams-and-permissions-team-level-permissions). - -When you create a new pipeline in Buildkite: - -- You are automatically granted the **Full Access** (`MANAGE_BUILD_AND_READ`) permission to this pipeline. -- Any members of teams to which you provide access to this pipeline are also granted the **Full Access** permission. - -**Full Access** on a pipeline allows you to: - -- View and create builds or rebuilds. -- Edit pipeline settings, which includes the ability to change the pipeline's visibility. -- Archive the pipeline or delete the pipeline. -- Provide access to other users, by adding the pipeline to other teams that you are a [team maintainer](#manage-teams-and-permissions-team-level-permissions) on. - -Any user with the **Full Access** permission on a pipeline can change its permission to either: - -- **Build & Read** (`BUILD_AND_READ`), which allows you to view and create builds or rebuilds, but _not_: - * Edit the pipeline settings. - * Archive or delete the pipeline. - * Provide access to other users. -- **Read Only** (`READ_ONLY`), which allows you to view builds only, but _not_: - * Create builds or issue rebuilds. - * Edit the pipeline settings. - * Archive or delete the pipeline. - * Provide access to other users. - -A user who is a member of at least one team with **Full Access** permission to a pipeline can change the permission on this pipeline. However, once this user loses **Full Access** through their last team with this permission on this pipeline, the user then loses the ability to change the pipeline's permissions in any team they are a member of. - -Another user with **Full Access** to this pipeline or a [Buildkite organization administrator](#manage-teams-and-permissions-organization-level-permissions) is required to change the pipeline's permission back to **Full Access** again. - ### Programmatically managing teams You can programmatically manage your teams using our GraphQL API. @@ -207,25 +173,6 @@ mutation RemoveOrganizationMember { } ``` -## Manage organization security for pipelines - -Enterprise customers can configure pipeline action permissions and related security features for all users across their Buildkite organization. These features can be used either with or without the [teams feature enabled](#manage-teams-and-permissions). - -These user-level permissions and security features are managed by _Buildkite organization administrators_. To access this feature: - -1. Select **Settings** in the global navigation to access the [**Organization Settings**](https://buildkite.com/organizations/~/settings) page. - -1. Select [**Security** > **Pipelines** tab](https://buildkite.com/organizations/~/security/pipelines) to access your organization's security for pipelines page. - -From this page, you can configure the following permissions for all users across your Buildkite organization: - -- **Create Pipelines**—if the [teams feature](#manage-teams-and-permissions) is enabled, then this permission is controlled at a [team-level](#manage-teams-and-permissions-team-level-permissions) and therefore, this option will be unavailable on this page. -- **Delete pipelines** -- **Change Pipeline Visibility**—Make private pipelines publicly available. -- **Change Notification Services**—Allows notification services to be created, edited, and deleted. -- **Manage Agent Registration Tokens**—Allows [agent tokens](/docs/agent/v3/tokens) to be created, edited, and deleted. -- **Stop Agents**—Allows users to disconnect agents from Buildkite. - ## Removing users during a security incident If you believe that a user account has been compromised, the recommended incident response is to remove such a user from your Buildkite organization immediately. This will entirely remove their ability to impact your organization and protect you from any further actions that the user could take. From 829e96e3f1d766cb53bb20be7d10e2bb1a5a8e57 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 11 Jul 2024 09:52:31 +1000 Subject: [PATCH 003/102] Fix broken links resulting from shifting pages around. --- pages/apis/rest_api/agents.md | 4 ++-- pages/packages/security/permissions.md | 2 +- pages/pipelines/security/permissions.md | 2 +- pages/test_analytics/permissions.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pages/apis/rest_api/agents.md b/pages/apis/rest_api/agents.md index d371ce8786..77b30424a8 100644 --- a/pages/apis/rest_api/agents.md +++ b/pages/apis/rest_api/agents.md @@ -142,8 +142,8 @@ Success response: `200 OK` > 📘 Required permissions > To stop an agent you need either -- An Admin user API token with `write_agents` scope -- Or, if you're using the Buildkite organization's security for pipelines feature, a user token with the Stop Agents permission. +- An Admin user API token with `write_agents` [scope](/docs/apis/managing-api-tokens#token-scopes) +- Or, if you're using the Buildkite organization's [security for pipelines](/docs/pipelines/security/permissions#manage-organization-security-for-pipelines) feature, a user token with the Stop Agents permission. Instruct an agent to stop accepting new build jobs and shut itself down. diff --git a/pages/packages/security/permissions.md b/pages/packages/security/permissions.md index 2033f63852..f58ffe12eb 100644 --- a/pages/packages/security/permissions.md +++ b/pages/packages/security/permissions.md @@ -22,7 +22,7 @@ As an organization administrator, you can access the [**Organization Settings** - Add new teams or edit existing ones in the [**Team** section](https://buildkite.com/organizations/~/teams). - * After selecting a team, you can view and administer the member-, [pipeline-](/docs/team-management/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. + * After selecting a team, you can view and administer the member-, [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. - [Enable Buildkite Packages](#enabling-buildkite-packages) for your Buildkite organization. diff --git a/pages/pipelines/security/permissions.md b/pages/pipelines/security/permissions.md index 9e51a3bc75..a0687bc63a 100644 --- a/pages/pipelines/security/permissions.md +++ b/pages/pipelines/security/permissions.md @@ -22,7 +22,7 @@ As an organization administrator, you can access the [**Organization Settings** - Add new teams or edit existing ones in the [**Team** section](https://buildkite.com/organizations/~/teams). -- After selecting a team, you can view and administer the member-, [pipeline-](/docs/team-management/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. +- After selecting a team, you can view and administer the member-, [pipeline-](#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. **Note:** Registry-level settings are only available once [Buildkite Packages has been enabled](/docs/packages/permissions#enabling-buildkite-packages). diff --git a/pages/test_analytics/permissions.md b/pages/test_analytics/permissions.md index 96c348c569..dc202a6cfd 100644 --- a/pages/test_analytics/permissions.md +++ b/pages/test_analytics/permissions.md @@ -26,7 +26,7 @@ As an organization administrator, you can access the [**Organization Settings** <%= image "team-section-list.png", alt: "Screenshot of the Team section, showing a list of Teams" %> -- After selecting a team, you can view and administer the member-, [pipeline-](/docs/team-management/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. +- After selecting a team, you can view and administer the member-, [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. <%= image "team-section-test-suites-list.png", alt: "Screenshot of the Team section, showing a list of Test Suites the team has access to" %> From fc39ffe019f5e9315d531fd19c3f0df079691455 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 11 Jul 2024 10:13:53 +1000 Subject: [PATCH 004/102] Change '(in the) Pipelines documentation' references to 'in the Platform documentation'. --- pages/packages/security/permissions.md | 6 +++--- pages/pipelines/security/permissions.md | 6 +++--- pages/test_analytics/permissions.md | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pages/packages/security/permissions.md b/pages/packages/security/permissions.md index f58ffe12eb..2800e42566 100644 --- a/pages/packages/security/permissions.md +++ b/pages/packages/security/permissions.md @@ -6,7 +6,7 @@ Enterprise customers can configure registry permissions for all users across the ## Manage teams and permissions -To manage teams across the Buildkite Packages application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions section of Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions). +To manage teams across the Buildkite Packages application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions). Once the _teams_ feature is enabled, you can see the teams that you're a member of from the **Users** page, which: @@ -16,7 +16,7 @@ Once the _teams_ feature is enabled, you can see the teams that you're a member ### Organization-level permissions -Learn more about what a _Buildkite organization administrator_ can do in the [Organization-level permissions section of the Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions-organization-level-permissions). +Learn more about what a _Buildkite organization administrator_ can do in the [Organization-level permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions-organization-level-permissions). As an organization administrator, you can access the [**Organization Settings** page](https://buildkite.com/organizations/~/settings) by selecting **Settings** in the global navigation, where you can do the following: @@ -43,7 +43,7 @@ To do this: ### Team-level permissions -Learn more about what _team members_ are and what _team maintainers_ can do in the [Team-level permissions section of the Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions). +Learn more about what _team members_ are and what _team maintainers_ can do in the [Team-level permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions). ### Registry-level permissions diff --git a/pages/pipelines/security/permissions.md b/pages/pipelines/security/permissions.md index a0687bc63a..c0a113c8b3 100644 --- a/pages/pipelines/security/permissions.md +++ b/pages/pipelines/security/permissions.md @@ -6,7 +6,7 @@ Enterprise customers can configure pipeline permissions for all users across the ## Manage teams and permissions -To manage teams across the Buildkite Packages application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions section of Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions). +To manage teams across the Buildkite Packages application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions). Once the _teams_ feature is enabled, you can see the teams that you're a member of from the **Users** page, which: @@ -16,7 +16,7 @@ Once the _teams_ feature is enabled, you can see the teams that you're a member ### Organization-level permissions -Learn more about what a _Buildkite organization administrator_ can do in the [Organization-level permissions section of the Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions-organization-level-permissions). +Learn more about what a _Buildkite organization administrator_ can do in the [Organization-level permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions-organization-level-permissions). As an organization administrator, you can access the [**Organization Settings** page](https://buildkite.com/organizations/~/settings) by selecting **Settings** in the global navigation, where you can do the following: @@ -28,7 +28,7 @@ As an organization administrator, you can access the [**Organization Settings** ### Team-level permissions -Learn more about what _team members_ are and what _team maintainers_ can do in the [Team-level permissions section of the Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions). +Learn more about what _team members_ are and what _team maintainers_ can do in the [Team-level permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions). ### Pipeline-level permissions diff --git a/pages/test_analytics/permissions.md b/pages/test_analytics/permissions.md index dc202a6cfd..d971f3843e 100644 --- a/pages/test_analytics/permissions.md +++ b/pages/test_analytics/permissions.md @@ -6,7 +6,7 @@ Enterprise customers can configure test suite permissions and security features ## Manage teams and permissions -To manage teams across the Buildkite Test Analytics application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions section of Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions). +To manage teams across the Buildkite Test Analytics application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions). Once the _teams_ feature is enabled, you can see the teams that you're a member of from the **User** page, which: @@ -18,7 +18,7 @@ Once the _teams_ feature is enabled, you can see the teams that you're a member ### Organization-level permissions -Learn more about what a _Buildkite organization administrator_ can do in the [Organization-level permissions section of the Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions-organization-level-permissions). +Learn more about what a _Buildkite organization administrator_ can do in the [Organization-level permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions-organization-level-permissions). As an organization administrator, you can access the [**Organization Settings** page](https://buildkite.com/organizations/~/settings) by selecting **Settings** in the global navigation, where you can do the following: @@ -34,7 +34,7 @@ As an organization administrator, you can access the [**Organization Settings** ### Team-level permissions -Learn more about what _team members_ are and what _team maintainers_ can do in the [Team-level permissions section of the Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions). +Learn more about what _team members_ are and what _team maintainers_ can do in the [Team-level permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions). ### Test suite-level permissions From 0c61e148b63cb64ac0ad1220e5b086e7c6d708e4 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 7 Aug 2024 14:26:38 +1000 Subject: [PATCH 005/102] Re-instate sub-page links to 'Security' landing page in the Packages docs. --- pages/packages/security.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pages/packages/security.md b/pages/packages/security.md index f65db01a9b..e7eff09e5e 100644 --- a/pages/packages/security.md +++ b/pages/packages/security.md @@ -6,4 +6,7 @@ toc: false Customer security is paramount to Buildkite. Buildkite Packages provides mechanisms to restrict access to your registries from Buildkite Agents and their pipeline's jobs, as well as other third-party systems that can issue [Open ID Connect (OIDC)](https://openid.net/developers/how-connect-works/) tokens. -Learn more about OIDC tokens and defining OIDC policies for registries in [OIDC with Buildkite Packages](/docs/packages/security/oidc). +This section contains the following topics: + +- [OIDC with Buildkite Packages](/docs/packages/security/oidc) and how to restrict access to registries through OIDC policies. +- [User, team, and registry permissions](/docs/packages/security/permissions) and how to manage team and user access to registries. From e899ddb8adfa2348aff3a5ada863d15ed6e5ae39 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Fri, 30 Aug 2024 10:54:55 +1000 Subject: [PATCH 006/102] Initial path changes and redirects updates for Test Analytics to Test Engine rebrand. --- config/routes.rb | 7 +-- data/nav.yml | 50 +++++++++---------- .../android_collectors.md | 0 .../ci_environments.md | 0 .../dotnet_collectors.md | 0 .../elixir_collectors.md | 0 .../flaky_test_assignment.md | 0 .../golang_collectors.md | 0 .../importing_json.md | 0 .../importing_junit_xml.md | 0 .../javascript_collectors.md | 0 .../other_collectors.md | 0 .../permissions.md | 0 .../public_test_suites.md | 0 .../python_collectors.md | 0 .../ruby_collectors.md | 0 .../rust_collectors.md | 0 .../swift_collectors.md | 0 .../test_executions.md | 0 .../test_ownership.md | 0 .../test_splitting.md | 0 .../test_suites.md | 0 .../your_own_collectors.md | 0 23 files changed, 29 insertions(+), 28 deletions(-) rename pages/{test_analytics => test_engine}/android_collectors.md (100%) rename pages/{test_analytics => test_engine}/ci_environments.md (100%) rename pages/{test_analytics => test_engine}/dotnet_collectors.md (100%) rename pages/{test_analytics => test_engine}/elixir_collectors.md (100%) rename pages/{test_analytics => test_engine}/flaky_test_assignment.md (100%) rename pages/{test_analytics => test_engine}/golang_collectors.md (100%) rename pages/{test_analytics => test_engine}/importing_json.md (100%) rename pages/{test_analytics => test_engine}/importing_junit_xml.md (100%) rename pages/{test_analytics => test_engine}/javascript_collectors.md (100%) rename pages/{test_analytics => test_engine}/other_collectors.md (100%) rename pages/{test_analytics => test_engine}/permissions.md (100%) rename pages/{test_analytics => test_engine}/public_test_suites.md (100%) rename pages/{test_analytics => test_engine}/python_collectors.md (100%) rename pages/{test_analytics => test_engine}/ruby_collectors.md (100%) rename pages/{test_analytics => test_engine}/rust_collectors.md (100%) rename pages/{test_analytics => test_engine}/swift_collectors.md (100%) rename pages/{test_analytics => test_engine}/test_executions.md (100%) rename pages/{test_analytics => test_engine}/test_ownership.md (100%) rename pages/{test_analytics => test_engine}/test_splitting.md (100%) rename pages/{test_analytics => test_engine}/test_suites.md (100%) rename pages/{test_analytics => test_engine}/your_own_collectors.md (100%) diff --git a/config/routes.rb b/config/routes.rb index 1d262438e2..e3ca23a831 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -81,7 +81,8 @@ get "/docs/quickstart/*page", to: redirect("/docs/tutorials/%{page}") get "/docs/rest-api", to: redirect("/docs/apis/rest-api") get "/docs/rest-api/*page", to: redirect("/docs/apis/rest-api/%{page}") - get "/docs/test-analytics/js-collectors", to: redirect("/docs/test-analytics/javascript-collectors") + get "/docs/test-analytics/*page", to: redirect("/docs/test-engine/%{page}") + get "/docs/test-analytics/js-collectors", to: redirect("/docs/test-engine/javascript-collectors") get "/docs/tutorials/gitlab", to: redirect("/docs/integrations/gitlab") get "/docs/tutorials/github-enterprise", to: redirect("/docs/integrations/github-enterprise") get "/docs/tutorials/bitbucket", to: redirect("/docs/integrations/bitbucket") @@ -133,7 +134,7 @@ get "/docs/agent/upgrading", to: redirect("/docs/agent/v3/upgrading", status: 301) get "/docs/agent/upgrading-to-v3", to: redirect("/docs/agent/v3/upgrading", status: 301) get "/docs/clusters/queue-metrics", to: redirect("/docs/pipelines/cluster-queue-metrics", status: 301) - get "/docs/test-analytics/java", to: redirect("/docs/test-analytics/importing-junit-xml", status: 301) + get "/docs/test-analytics/java", to: redirect("/docs/test-engine/importing-junit-xml", status: 301) # Old docs routes that we changed around during the development of the v3 agent docs get "/docs/agent/upgrading-to-v2", to: redirect("/docs/agent/v2/upgrading-to-v2", status: 301) @@ -143,7 +144,7 @@ get "/docs/agent/v3/agent-meta-data", to: redirect("/docs/agent/v3/cli-start#setting-tags", status: 301) # Pre GA test analytics - get "/docs/test-analytics/integrations", to: redirect("/docs/test-analytics", status: 301) + get "/docs/test-analytics/integrations", to: redirect("/docs/test-engine", status: 301) # Quick Reference JSON get "/docs/quick-reference/pipelines", to: "quick_reference#pipelines", as: :pipelines_quick_reference diff --git a/data/nav.yml b/data/nav.yml index a3c678ffc9..a0ef83e442 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -391,65 +391,65 @@ - name: "Cluster queue metrics" path: "pipelines/cluster-queue-metrics" pill: "beta" -- name: "Test Analytics" - path: "test-analytics" +- name: "Test Engine" + path: "test-engine" children: - name: "Overview" - path: "test-analytics" + path: "test-engine" - name: "Getting started" start_expanded: true children: - name: "Configuring test suites" - path: "test-analytics/test-suites" + path: "test-engine/test-suites" - name: "Configuring test splitting" - path: "test-analytics/test-splitting" + path: "test-engine/test-splitting" - name: "Permissions" - path: "test-analytics/permissions" + path: "test-engine/permissions" - name: "CI environment variables" - path: "test-analytics/ci-environments" + path: "test-engine/ci-environments" - name: "Test executions" - path: "test-analytics/test-executions" + path: "test-engine/test-executions" - name: "Public test suites" - path: "test-analytics/public-test-suites" + path: "test-engine/public-test-suites" - name: "Test ownership" pill: "beta" - path: "test-analytics/test-ownership" + path: "test-engine/test-ownership" - name: "Flaky test assignment" - path: "test-analytics/flaky-test-assignment" + path: "test-engine/flaky-test-assignment" - name: "Languages" start_expanded: true children: - name: "Ruby" - path: "test-analytics/ruby-collectors" + path: "test-engine/ruby-collectors" - name: "JavaScript" - path: "test-analytics/javascript-collectors" + path: "test-engine/javascript-collectors" - name: "Swift" - path: "test-analytics/swift-collectors" + path: "test-engine/swift-collectors" - name: "Android" - path: "test-analytics/android-collectors" + path: "test-engine/android-collectors" - name: "Python" - path: "test-analytics/python-collectors" + path: "test-engine/python-collectors" - name: "Go" - path: "test-analytics/golang-collectors" + path: "test-engine/golang-collectors" - name: ".NET" - path: "test-analytics/dotnet-collectors" + path: "test-engine/dotnet-collectors" - name: "Elixir" - path: "test-analytics/elixir-collectors" + path: "test-engine/elixir-collectors" - name: "Rust" - path: "test-analytics/rust-collectors" + path: "test-engine/rust-collectors" - name: "Java" - path: "test-analytics/java" + path: "test-engine/java" - name: "Other languages" - path: "test-analytics/other-collectors" + path: "test-engine/other-collectors" - name: "References" start_expanded: true children: - name: "Importing JUnit XML" - path: "test-analytics/importing-junit-xml" + path: "test-engine/importing-junit-xml" - name: "Importing JSON" - path: "test-analytics/importing-json" + path: "test-engine/importing-json" - name: "Writing your own collectors" - path: "test-analytics/your-own-collectors" + path: "test-engine/your-own-collectors" - name: "Packages" path: "packages" children: diff --git a/pages/test_analytics/android_collectors.md b/pages/test_engine/android_collectors.md similarity index 100% rename from pages/test_analytics/android_collectors.md rename to pages/test_engine/android_collectors.md diff --git a/pages/test_analytics/ci_environments.md b/pages/test_engine/ci_environments.md similarity index 100% rename from pages/test_analytics/ci_environments.md rename to pages/test_engine/ci_environments.md diff --git a/pages/test_analytics/dotnet_collectors.md b/pages/test_engine/dotnet_collectors.md similarity index 100% rename from pages/test_analytics/dotnet_collectors.md rename to pages/test_engine/dotnet_collectors.md diff --git a/pages/test_analytics/elixir_collectors.md b/pages/test_engine/elixir_collectors.md similarity index 100% rename from pages/test_analytics/elixir_collectors.md rename to pages/test_engine/elixir_collectors.md diff --git a/pages/test_analytics/flaky_test_assignment.md b/pages/test_engine/flaky_test_assignment.md similarity index 100% rename from pages/test_analytics/flaky_test_assignment.md rename to pages/test_engine/flaky_test_assignment.md diff --git a/pages/test_analytics/golang_collectors.md b/pages/test_engine/golang_collectors.md similarity index 100% rename from pages/test_analytics/golang_collectors.md rename to pages/test_engine/golang_collectors.md diff --git a/pages/test_analytics/importing_json.md b/pages/test_engine/importing_json.md similarity index 100% rename from pages/test_analytics/importing_json.md rename to pages/test_engine/importing_json.md diff --git a/pages/test_analytics/importing_junit_xml.md b/pages/test_engine/importing_junit_xml.md similarity index 100% rename from pages/test_analytics/importing_junit_xml.md rename to pages/test_engine/importing_junit_xml.md diff --git a/pages/test_analytics/javascript_collectors.md b/pages/test_engine/javascript_collectors.md similarity index 100% rename from pages/test_analytics/javascript_collectors.md rename to pages/test_engine/javascript_collectors.md diff --git a/pages/test_analytics/other_collectors.md b/pages/test_engine/other_collectors.md similarity index 100% rename from pages/test_analytics/other_collectors.md rename to pages/test_engine/other_collectors.md diff --git a/pages/test_analytics/permissions.md b/pages/test_engine/permissions.md similarity index 100% rename from pages/test_analytics/permissions.md rename to pages/test_engine/permissions.md diff --git a/pages/test_analytics/public_test_suites.md b/pages/test_engine/public_test_suites.md similarity index 100% rename from pages/test_analytics/public_test_suites.md rename to pages/test_engine/public_test_suites.md diff --git a/pages/test_analytics/python_collectors.md b/pages/test_engine/python_collectors.md similarity index 100% rename from pages/test_analytics/python_collectors.md rename to pages/test_engine/python_collectors.md diff --git a/pages/test_analytics/ruby_collectors.md b/pages/test_engine/ruby_collectors.md similarity index 100% rename from pages/test_analytics/ruby_collectors.md rename to pages/test_engine/ruby_collectors.md diff --git a/pages/test_analytics/rust_collectors.md b/pages/test_engine/rust_collectors.md similarity index 100% rename from pages/test_analytics/rust_collectors.md rename to pages/test_engine/rust_collectors.md diff --git a/pages/test_analytics/swift_collectors.md b/pages/test_engine/swift_collectors.md similarity index 100% rename from pages/test_analytics/swift_collectors.md rename to pages/test_engine/swift_collectors.md diff --git a/pages/test_analytics/test_executions.md b/pages/test_engine/test_executions.md similarity index 100% rename from pages/test_analytics/test_executions.md rename to pages/test_engine/test_executions.md diff --git a/pages/test_analytics/test_ownership.md b/pages/test_engine/test_ownership.md similarity index 100% rename from pages/test_analytics/test_ownership.md rename to pages/test_engine/test_ownership.md diff --git a/pages/test_analytics/test_splitting.md b/pages/test_engine/test_splitting.md similarity index 100% rename from pages/test_analytics/test_splitting.md rename to pages/test_engine/test_splitting.md diff --git a/pages/test_analytics/test_suites.md b/pages/test_engine/test_suites.md similarity index 100% rename from pages/test_analytics/test_suites.md rename to pages/test_engine/test_suites.md diff --git a/pages/test_analytics/your_own_collectors.md b/pages/test_engine/your_own_collectors.md similarity index 100% rename from pages/test_analytics/your_own_collectors.md rename to pages/test_engine/your_own_collectors.md From 2bef5309017e860bc5b2af0cff2b06e909e2f038 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Fri, 30 Aug 2024 11:07:39 +1000 Subject: [PATCH 007/102] Update 'test-analytics' paths to 'test-engine'. --- .../analytics/_flaky_tests_query_strings.md | 2 +- pages/packages/permissions.md | 2 +- pages/pipelines/migrate_from_jenkins.md | 2 +- pages/team_management/permissions.md | 6 +-- pages/test_analytics.md | 52 ------------------- pages/test_engine.md | 52 +++++++++++++++++++ pages/test_engine/android_collectors.md | 8 +-- pages/test_engine/ci_environments.md | 12 ++--- pages/test_engine/dotnet_collectors.md | 6 +-- pages/test_engine/elixir_collectors.md | 6 +-- pages/test_engine/flaky_test_assignment.md | 4 +- pages/test_engine/golang_collectors.md | 2 +- pages/test_engine/importing_json.md | 12 ++--- pages/test_engine/importing_junit_xml.md | 10 ++-- pages/test_engine/javascript_collectors.md | 10 ++-- pages/test_engine/other_collectors.md | 2 +- pages/test_engine/python_collectors.md | 6 +-- pages/test_engine/ruby_collectors.md | 8 +-- pages/test_engine/rust_collectors.md | 6 +-- pages/test_engine/swift_collectors.md | 8 +-- pages/test_engine/test_ownership.md | 6 +-- pages/test_engine/test_suites.md | 2 +- 22 files changed, 112 insertions(+), 112 deletions(-) delete mode 100644 pages/test_analytics.md create mode 100644 pages/test_engine.md diff --git a/pages/apis/rest_api/analytics/_flaky_tests_query_strings.md b/pages/apis/rest_api/analytics/_flaky_tests_query_strings.md index 459a7e50e5..5b0f11972a 100644 --- a/pages/apis/rest_api/analytics/_flaky_tests_query_strings.md +++ b/pages/apis/rest_api/analytics/_flaky_tests_query_strings.md @@ -5,7 +5,7 @@ search - Returns flaky tests with a name or scope that contains the search string. Users with the Ruby test collector installed can also filter results by location. + Returns flaky tests with a name or scope that contains the search string. Users with the Ruby test collector installed can also filter results by location.

Example: ?search="User#find_email", ?search="/billing_spec"

diff --git a/pages/packages/permissions.md b/pages/packages/permissions.md index 91ecdb1b28..f440230420 100644 --- a/pages/packages/permissions.md +++ b/pages/packages/permissions.md @@ -22,7 +22,7 @@ As an organization administrator, you can access the [**Organization Settings** - Add new teams or edit existing ones in the [**Team** section](https://buildkite.com/organizations/~/teams). - * After selecting a team, you can view and administer the member-, [pipeline-](/docs/team-management/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. + * After selecting a team, you can view and administer the member-, [pipeline-](/docs/team-management/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. - [Enable Buildkite Packages](#enabling-buildkite-packages) for your Buildkite organization. diff --git a/pages/pipelines/migrate_from_jenkins.md b/pages/pipelines/migrate_from_jenkins.md index 4f06a4cae1..338d01d487 100644 --- a/pages/pipelines/migrate_from_jenkins.md +++ b/pages/pipelines/migrate_from_jenkins.md @@ -200,4 +200,4 @@ Remember that it may take some time to adapt to the new platform, and be prepare If you need further assistance or have any questions, please don't hesitate to reach out to [support](https://buildkite.com/support). We're here to help you use Buildkite to build your dream CI/CD workflows. -After configuring Buildkite Pipelines for your team, you could get actionable insights from the tests running in pipelines using [Test Analytics](/docs/test-analytics). +After configuring Buildkite Pipelines for your team, you could get actionable insights from the tests running in pipelines using [Test Analytics](/docs/test-engine). diff --git a/pages/team_management/permissions.md b/pages/team_management/permissions.md index 7e64b916e7..4e31bdb9ee 100644 --- a/pages/team_management/permissions.md +++ b/pages/team_management/permissions.md @@ -33,7 +33,7 @@ A user who is a _Buildkite organization administrator_ can access the [**Organiz - From the **Teams** page: * Create a new team, using the **New Team** button. - * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. + * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. **Note:** Registry-level settings are only available once [Buildkite Packages has been enabled](/docs/packages/permissions#enabling-buildkite-packages). @@ -60,7 +60,7 @@ A user who is a _team maintainer_ on an existing team can: * Change the permission for all users in this team on any: - [pipeline](#manage-teams-and-permissions-pipeline-level-permissions) in the team to **Full Access**, **Build & Read** or **Read Only**. - - [test suite](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions) in the team to **Full Access** or **Read Only**. + - [test suite](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) in the team to **Full Access** or **Read Only**. - [registry](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team to **Full Access**, **Read & Write** or **Read Only**. To do this, select the appropriate tab (**Pipelines**, **Test Suites** or **Package Registries**) and then select the required permission for the item, although be aware of the [caveat below](#changing-full-access-permissions-on-pipelines-test-suites-and-registries). @@ -86,7 +86,7 @@ A user who is a _team maintainer_ on an existing team can: As indicated in the Buildkite interface, a user who is in a team is known as a **Team Member**, and such users have fewer permissions within the team (that is, no team management capabilities) than a **Team Maintainer**. -All team members in a team have the same level of access to the [pipelines](#manage-teams-and-permissions-pipeline-level-permissions), [test suites](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), and [registries](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team. If you need to have more fine grained control over the pipelines, test suites or registries in a team, you can create more teams with different permissions. +All team members in a team have the same level of access to the [pipelines](#manage-teams-and-permissions-pipeline-level-permissions), [test suites](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), and [registries](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team. If you need to have more fine grained control over the pipelines, test suites or registries in a team, you can create more teams with different permissions. > 🚧 Changing **Full Access** permissions on pipelines, test suites and registries > As a team maintainer, once you change the permission on any of these items away from **Full Access**, you could lose the ability to change the permissions on that item again. This can happen if you are no longer a member of a team that provides **Full Access** to this item. diff --git a/pages/test_analytics.md b/pages/test_analytics.md deleted file mode 100644 index bde6c54a6a..0000000000 --- a/pages/test_analytics.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -template: "landing_page" ---- - -# Buildkite Test Analytics - -Where Buildkite Pipelines help you automate your build pipelines, -Test Analytics helps you track and analyze the steps in that pipeline that involve tests: - -- Ship code to production faster by optimizing test suites -- Works with any continuous integration -- Identify, fix, and monitor test suite performance -- Track, improve, and monitor test suite reliability - -<%= image "overview.png", width: 975, height: 205, alt: "Screenshot of test suite trend showing five metrics over 28 days" %> - -## Get started - - - -
- <%= button ":rspec: RSpec", "/docs/test-analytics/ruby-collectors#rspec-collector" %> - <%= button ":ruby: minitest", "/docs/test-analytics/ruby-collectors#minitest-collector" %> - <%= button ":jest: Jest", "/docs/test-analytics/javascript-collectors#configure-the-test-framework-jest" %> - <%= button ":mocha: Mocha", "/docs/test-analytics/javascript-collectors#configure-the-test-framework-mocha" %> - <%= button ":cypress: Cypress", "/docs/test-analytics/javascript-collectors#configure-the-test-framework-cypress" %> - <%= button ":jasmine: Jasmine", "/docs/test-analytics/javascript-collectors#configure-the-test-framework-jasmine" %> - <%= button ":playwright: Playwright", "/docs/test-analytics/javascript-collectors#configure-the-test-framework-playwright" %> - <%= button ":swift: Swift", "/docs/test-analytics/swift-collectors" %> - <%= button ":android: Android", "/docs/test-analytics/android-collectors" %> - <%= button ":pytest: pytest", "/docs/test-analytics/python-collectors" %> - <%= button ":golang: Go", "/docs/test-analytics/golang-collectors" %> - <%= button ":junit: JUnit", "/docs/test-analytics/importing-junit-xml" %> - <%= button ":dotnet: .NET", "/docs/test-analytics/dotnet-collectors" %> - <%= button ":elixir: Elixir", "/docs/test-analytics/elixir-collectors" %> - <%= button ":rust: Rust", "/docs/test-analytics/rust-collectors" %> -
- - - -You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). - ->📘 Data retention -> The data uploaded to Test Analytics is stored in S3 and deleted after six months. - ----- - -<%= tiles "test_analytics_features" %> - ----- - -<%= tiles "test_analytics_guides" %> diff --git a/pages/test_engine.md b/pages/test_engine.md new file mode 100644 index 0000000000..0c87b04f47 --- /dev/null +++ b/pages/test_engine.md @@ -0,0 +1,52 @@ +--- +template: "landing_page" +--- + +# Buildkite Test Analytics + +Where Buildkite Pipelines help you automate your build pipelines, +Test Analytics helps you track and analyze the steps in that pipeline that involve tests: + +- Ship code to production faster by optimizing test suites +- Works with any continuous integration +- Identify, fix, and monitor test suite performance +- Track, improve, and monitor test suite reliability + +<%= image "overview.png", width: 975, height: 205, alt: "Screenshot of test suite trend showing five metrics over 28 days" %> + +## Get started + + + +
+ <%= button ":rspec: RSpec", "/docs/test-engine/ruby-collectors#rspec-collector" %> + <%= button ":ruby: minitest", "/docs/test-engine/ruby-collectors#minitest-collector" %> + <%= button ":jest: Jest", "/docs/test-engine/javascript-collectors#configure-the-test-framework-jest" %> + <%= button ":mocha: Mocha", "/docs/test-engine/javascript-collectors#configure-the-test-framework-mocha" %> + <%= button ":cypress: Cypress", "/docs/test-engine/javascript-collectors#configure-the-test-framework-cypress" %> + <%= button ":jasmine: Jasmine", "/docs/test-engine/javascript-collectors#configure-the-test-framework-jasmine" %> + <%= button ":playwright: Playwright", "/docs/test-engine/javascript-collectors#configure-the-test-framework-playwright" %> + <%= button ":swift: Swift", "/docs/test-engine/swift-collectors" %> + <%= button ":android: Android", "/docs/test-engine/android-collectors" %> + <%= button ":pytest: pytest", "/docs/test-engine/python-collectors" %> + <%= button ":golang: Go", "/docs/test-engine/golang-collectors" %> + <%= button ":junit: JUnit", "/docs/test-engine/importing-junit-xml" %> + <%= button ":dotnet: .NET", "/docs/test-engine/dotnet-collectors" %> + <%= button ":elixir: Elixir", "/docs/test-engine/elixir-collectors" %> + <%= button ":rust: Rust", "/docs/test-engine/rust-collectors" %> +
+ + + +You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). + +>📘 Data retention +> The data uploaded to Test Analytics is stored in S3 and deleted after six months. + +---- + +<%= tiles "test_analytics_features" %> + +---- + +<%= tiles "test_analytics_guides" %> diff --git a/pages/test_engine/android_collectors.md b/pages/test_engine/android_collectors.md index 1a641cf272..4b3618a05a 100644 --- a/pages/test_engine/android_collectors.md +++ b/pages/test_engine/android_collectors.md @@ -6,13 +6,13 @@ toc: false To use Test Analytics with your Android projects use the :github: [`test-collector-android`](https://github.com/buildkite/test-collector-android) package. -You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). +You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). ## Android -Before you start, make sure your tests run with access to [CI environment variables](/docs/test-analytics/ci-environments). +Before you start, make sure your tests run with access to [CI environment variables](/docs/test-engine/ci-environments). -1. [Create a test suite](https://buildkite.com/docs/test-analytics) and copy the test suite API token. +1. [Create a test suite](https://buildkite.com/docs/test-engine) and copy the test suite API token. 1. [Securely](/docs/pipelines/security/secrets/managing) set the `BUILDKITE_ANALYTICS_TOKEN` secret on your CI to the API token from the previous step. @@ -96,7 +96,7 @@ Before you start, make sure your tests run with access to [CI environment variab Once you're done, in your Test Analytics dashboard, you'll see analytics of test executions on all branches that include this code. -If you don't see branch names, build numbers, or commit hashes in Test Analytics, then read [CI Environments](/docs/test-analytics/ci-environments) to learn more about exporting your environment to the collector. +If you don't see branch names, build numbers, or commit hashes in Test Analytics, then read [CI Environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. ### Debugging diff --git a/pages/test_engine/ci_environments.md b/pages/test_engine/ci_environments.md index eddab3d8e7..26cd4b63f4 100644 --- a/pages/test_engine/ci_environments.md +++ b/pages/test_engine/ci_environments.md @@ -4,13 +4,13 @@ Buildkite Test Analytics collectors automatically detect common continuous integ If available, test collectors gather information about your test runs, such as branch names and build IDs. Test collectors gather information from the following CI environments: -- [Buildkite](/docs/test-analytics/ci-environments#buildkite) -- [CircleCI](/docs/test-analytics/ci-environments#circleci) -- [GitHub Actions](/docs/test-analytics/ci-environments#github-actions) +- [Buildkite](/docs/test-engine/ci-environments#buildkite) +- [CircleCI](/docs/test-engine/ci-environments#circleci) +- [GitHub Actions](/docs/test-engine/ci-environments#github-actions) -If you run test collectors inside [containers](/docs/test-analytics/ci-environments#containers-and-test-collectors) or use another CI system, you must set variables to report your CI details to Buildkite. +If you run test collectors inside [containers](/docs/test-engine/ci-environments#containers-and-test-collectors) or use another CI system, you must set variables to report your CI details to Buildkite. -If you're not using a test collector, see [Importing JSON](/docs/test-analytics/importing-json) and [Importing JUnit XML](/docs/test-analytics/importing-junit-xml) to learn how to provide run environment data. +If you're not using a test collector, see [Importing JSON](/docs/test-engine/importing-json) and [Importing JUnit XML](/docs/test-engine/importing-junit-xml) to learn how to provide run environment data. ## Recommended environment variables @@ -105,7 +105,7 @@ run_env[key]=$GITHUB_ACTION-$GITHUB_RUN_NUMBER-$GITHUB_RUN_ATTEMPT If you're using other CI providers (or [containers](#containers-and-test-collectors)), then set environment variables for test collectors to gather information about your builds and tests. If you don't set these environment variables, then Test Analytics lacks the details needed to produce useful reports. -Each environment variable corresponds to a `run_env` key in the payload `https://analytics-api.buildkite.com/v1/uploads`. Read [Importing JSON](/docs/test-analytics/importing-json) to learn how these keys are used to make API calls. +Each environment variable corresponds to a `run_env` key in the payload `https://analytics-api.buildkite.com/v1/uploads`. Read [Importing JSON](/docs/test-engine/importing-json) to learn how these keys are used to make API calls. diff --git a/pages/test_engine/dotnet_collectors.md b/pages/test_engine/dotnet_collectors.md index 16aeb63f44..9067502297 100644 --- a/pages/test_engine/dotnet_collectors.md +++ b/pages/test_engine/dotnet_collectors.md @@ -6,11 +6,11 @@ toc: false To use Test Analytics with your .NET projects use the :github: [`test-collector-dotnet`](https://github.com/buildkite/test-collector-dotnet) package with xUnit. -You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). +You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). -Before you start, make sure .NET runs with access to [CI environment variables](/docs/test-analytics/ci-environments). +Before you start, make sure .NET runs with access to [CI environment variables](/docs/test-engine/ci-environments). -1. Create a [test suite](/docs/test-analytics/test-suites) and copy the API token that it gives you. +1. Create a [test suite](/docs/test-engine/test-suites) and copy the API token that it gives you. 1. Add `Buildkite.TestAnalytics.Xunit` to your list of dependencies in your xUnit test project: diff --git a/pages/test_engine/elixir_collectors.md b/pages/test_engine/elixir_collectors.md index f7ba088067..c00de0c2f0 100644 --- a/pages/test_engine/elixir_collectors.md +++ b/pages/test_engine/elixir_collectors.md @@ -6,15 +6,15 @@ toc: false To use Test Analytics with your Elixir projects use :github: [`test_collector_elixir`](https://github.com/buildkite/test_collector_elixir) with ExUnit. -You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). +You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). ## ExUnit [ExUnit](https://hexdocs.pm/ex_unit/) is a Elixir unit test library. -Before you start, make sure ExUnit runs with access to [CI environment variables](/docs/test-analytics/ci-environments). +Before you start, make sure ExUnit runs with access to [CI environment variables](/docs/test-engine/ci-environments). -1. Create a [test suite](/docs/test-analytics/test-suites) and copy the API token that it gives you. +1. Create a [test suite](/docs/test-engine/test-suites) and copy the API token that it gives you. 1. Add `buildkite_test_collector` to your list of dependencies in `mix.exs`: diff --git a/pages/test_engine/flaky_test_assignment.md b/pages/test_engine/flaky_test_assignment.md index a38135128e..77be705060 100644 --- a/pages/test_engine/flaky_test_assignment.md +++ b/pages/test_engine/flaky_test_assignment.md @@ -1,6 +1,6 @@ # Flaky test assignment -Customers on the [Pro and Enterprise plans](https://buildkite.com/pricing) can assign flaky tests to [teams](/docs/test-analytics/permissions#manage-teams-and-permissions). +Customers on the [Pro and Enterprise plans](https://buildkite.com/pricing) can assign flaky tests to [teams](/docs/test-engine/permissions#manage-teams-and-permissions). ## Enabling flaky test assignments @@ -36,6 +36,6 @@ When an assigned test has not flaked in more than 7 days, it is moved to the **O ## Weekly flaky test summary -You're able to schedule a weekly summary of the flakiest tests assigned to your teams. Visit the **Suite settings** page to create new notifications, or manage existing ones. If you would like to set up auto assignment, check out our [Test ownership](/docs/test-analytics/test-ownership) feature. +You're able to schedule a weekly summary of the flakiest tests assigned to your teams. Visit the **Suite settings** page to create new notifications, or manage existing ones. If you would like to set up auto assignment, check out our [Test ownership](/docs/test-engine/test-ownership) feature. <%= image "flaky-test-summary-mailer.png", width: 1960/2, height: 630/2, alt: "Flaky test page showing team assignments" %> diff --git a/pages/test_engine/golang_collectors.md b/pages/test_engine/golang_collectors.md index 6610ba2812..8a71a5f475 100644 --- a/pages/test_engine/golang_collectors.md +++ b/pages/test_engine/golang_collectors.md @@ -4,7 +4,7 @@ toc: false # Configuring Go with Test Analytics -To use Test Analytics with your [Go](https://go.dev/) language projects use [gotestsum](https://github.com/gotestyourself/gotestsum) to generate JUnit XML files, then [upload the JUnit XML files](/docs/test-analytics/importing-junit-xml) to Test Analytics. +To use Test Analytics with your [Go](https://go.dev/) language projects use [gotestsum](https://github.com/gotestyourself/gotestsum) to generate JUnit XML files, then [upload the JUnit XML files](/docs/test-engine/importing-junit-xml) to Test Analytics. 1. Install [gotestsum](https://github.com/gotestyourself/gotestsum): diff --git a/pages/test_engine/importing_json.md b/pages/test_engine/importing_json.md index 68e7f2ecb0..a681aa65b5 100644 --- a/pages/test_engine/importing_json.md +++ b/pages/test_engine/importing_json.md @@ -1,12 +1,12 @@ # Importing JSON -If a test collector is not available for your test framework, you can upload tests results directly to the Test Analytics API or [write your own test collector](/docs/test-analytics/your-own-collectors). -You can upload JSON-formatted test results (described in this page) or [JUnit XML](/docs/test-analytics/importing-junit-xml). +If a test collector is not available for your test framework, you can upload tests results directly to the Test Analytics API or [write your own test collector](/docs/test-engine/your-own-collectors). +You can upload JSON-formatted test results (described in this page) or [JUnit XML](/docs/test-engine/importing-junit-xml). ## How to import JSON in Buildkite -It's possible to import JSON (or [JUnit](/docs/test-analytics/importing-junit-xml#how-to-import-junit-xml-in-buildkite) files) to Buildkite Test Analytics with or without the help of a plugin. +It's possible to import JSON (or [JUnit](/docs/test-engine/importing-junit-xml#how-to-import-junit-xml-in-buildkite) files) to Buildkite Test Analytics with or without the help of a plugin. ### Using a plugin @@ -56,7 +56,7 @@ For example, to import the contents of a [JSON-formatted test results](#json-tes https://analytics-api.buildkite.com/v1/uploads ``` -To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-analytics/ci-environments#buildkite). +To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-engine/ci-environments#buildkite). A single file can have a maximum of 5000 test results, and if that limit is exceeded then the upload request will fail. To upload more than 5000 test results for a single run upload multiple smaller files with the same `run_env[key]`. @@ -85,7 +85,7 @@ For example, to import the contents of a `test-results.json` file in a CircleCI https://analytics-api.buildkite.com/v1/uploads ``` -To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-analytics/ci-environments#circleci). +To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-engine/ci-environments#circleci). A single file can have a maximum of 5000 test results, and if that limit is exceeded then the upload request will fail. To upload more than 5000 test results for a single run upload multiple smaller files with the same `run_env[key]`. @@ -114,7 +114,7 @@ For example, to import the contents of a `test-results.json` file in a GitHub Ac https://analytics-api.buildkite.com/v1/uploads ``` -To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-analytics/ci-environments#github-actions). +To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-engine/ci-environments#github-actions). A single file can have a maximum of 5000 test results, and if that limit is exceeded then the upload request will fail. To upload more than 5000 test results for a single run upload multiple smaller files with the same `run_env[key]`. diff --git a/pages/test_engine/importing_junit_xml.md b/pages/test_engine/importing_junit_xml.md index a300e03478..9709105bab 100644 --- a/pages/test_engine/importing_junit_xml.md +++ b/pages/test_engine/importing_junit_xml.md @@ -1,6 +1,6 @@ # Importing JUnit XML -While most test frameworks have a built-in JUnit XML export feature, these JUnit reports do not provide detailed span information. Therefore, features in Test Analytics that depend on span information aren't available when using JUnit as a data source. If you need span information, consider using the [JSON import](/docs/test-analytics/importing-json) API instead. +While most test frameworks have a built-in JUnit XML export feature, these JUnit reports do not provide detailed span information. Therefore, features in Test Analytics that depend on span information aren't available when using JUnit as a data source. If you need span information, consider using the [JSON import](/docs/test-engine/importing-json) API instead. ## Mandatory JUnit XML attributes @@ -15,7 +15,7 @@ To learn more about the JUnit XML file format, see [Common JUnit XML format & ex ## How to import JUnit XML in Buildkite -It's possible to import XML-formatted JUnit (or [JSON](/docs/test-analytics/importing-json#how-to-import-json-in-buildkite)) test results to Buildkite Test Analytics with or without the help of a plugin. +It's possible to import XML-formatted JUnit (or [JSON](/docs/test-engine/importing-json#how-to-import-json-in-buildkite)) test results to Buildkite Test Analytics with or without the help of a plugin. ### Using a plugin @@ -64,7 +64,7 @@ For example, to import the contents of a `junit.xml` file in a Buildkite pipelin https://analytics-api.buildkite.com/v1/uploads ``` -To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-analytics/ci-environments#buildkite). +To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-engine/ci-environments#buildkite). Note that when a payload is processed, Buildkite validates and queues each test execution result in a loop. For that reason, it is possible for some to be queued and others to be skipped. Even when some or all test executions get skipped, REST API will respond with a `202 Accepted` because the upload and the run were created in the database, but the skipped test execution results were not ingested. @@ -96,7 +96,7 @@ For example, to import the contents of a `junit.xml` file in a CircleCI pipeline https://analytics-api.buildkite.com/v1/uploads ``` -To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-analytics/ci-environments#circleci). +To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-engine/ci-environments#circleci). Note that when a payload is processed, Buildkite validates and queues each test execution result in a loop. For that reason, it is possible for some to be queued and others to be skipped. Even when some or all test executions get skipped, REST API will respond with a `202 Accepted` because the upload and the run were created in the database, but the skipped test execution results were not ingested. @@ -129,7 +129,7 @@ For example, to import the contents of a `junit.xml` file in a GitHub Actions pi https://analytics-api.buildkite.com/v1/uploads ``` -To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-analytics/ci-environments). +To learn more about passing through environment variables to `run_env`-prefixed fields, see [CI environments](/docs/test-engine/ci-environments). Note that when a payload is processed, Buildkite validates and queues each test execution result in a loop. For that reason, it is possible for some to be queued and others to be skipped. Even when some or all test executions get skipped, REST API will respond with a `202 Accepted` because the upload and the run were created in the database, but the skipped test execution results were not ingested. diff --git a/pages/test_engine/javascript_collectors.md b/pages/test_engine/javascript_collectors.md index 3b394eaca4..3227401d70 100644 --- a/pages/test_engine/javascript_collectors.md +++ b/pages/test_engine/javascript_collectors.md @@ -8,7 +8,7 @@ To use Test Analytics with your JavaScript (npm) projects, use the :github: [`te - [Cypress](https://www.cypress.io) - [Playwright](https://playwright.dev) -You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). +You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). ## Add the test collector package @@ -50,7 +50,7 @@ If you're already using Jest, you can add `buildkite-test-collector/jest/reporte To configure Jest: -1. Make sure Jest runs with access to [CI environment variables](/docs/test-analytics/ci-environments). +1. Make sure Jest runs with access to [CI environment variables](/docs/test-engine/ci-environments). 1. Add `"buildkite-test-collector/jest/reporter"` to [Jest's `reporters` configuration array](https://jestjs.io/docs/configuration#reporters-arraymodulename--modulename-options) (typically found in `jest.config.js`, `jest.config.js`, or `package.json`): ```json @@ -127,7 +127,7 @@ To configure Mocha: ### Cypress To configure Cypress: -1. Make sure Cypress runs with access to [CI environment variables](/docs/test-analytics/ci-environments). +1. Make sure Cypress runs with access to [CI environment variables](/docs/test-engine/ci-environments). 1. Update your [Cypress configuration](https://docs.cypress.io/guides/references/configuration). ```js @@ -154,7 +154,7 @@ If you're already using Playwright, you can add `buildkite-test-collector/playwr To configure Playwright: -1. Make sure Playwright runs with access to [CI environment variables](/docs/test-analytics/ci-environments). +1. Make sure Playwright runs with access to [CI environment variables](/docs/test-engine/ci-environments). 1. Add `"buildkite-test-collector/playwright/reporter"` to [Playwright's `reporter` configuration array](https://playwright.dev/docs/test-reporters#multiple-reporters) (typically found in `playwright.config.js`): ```js @@ -193,7 +193,7 @@ When your collector is installed, commit and push your changes: After completing these steps, you'll see the analytics of test executions on all branches that include this code in the Test Analytics dashboard. -If you don't see branch names, build numbers, or commit hashes in the Test Analytics dashboard, see [CI environments](/docs/test-analytics/ci-environments) to learn more about exporting your environment. +If you don't see branch names, build numbers, or commit hashes in the Test Analytics dashboard, see [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment. ## Troubleshooting missing test executions and --forceExit diff --git a/pages/test_engine/other_collectors.md b/pages/test_engine/other_collectors.md index c19815ac59..54a371f7ff 100644 --- a/pages/test_engine/other_collectors.md +++ b/pages/test_engine/other_collectors.md @@ -4,4 +4,4 @@ toc: false # Collecting data from other test frameworks -You can integrate any language and framework by uploading [Test Analytics JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml) after your tests run. You can also [build your own collector](/docs/test-analytics/your-own-collectors). +You can integrate any language and framework by uploading [Test Analytics JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml) after your tests run. You can also [build your own collector](/docs/test-engine/your-own-collectors). diff --git a/pages/test_engine/python_collectors.md b/pages/test_engine/python_collectors.md index 0d16201413..5fba392136 100644 --- a/pages/test_engine/python_collectors.md +++ b/pages/test_engine/python_collectors.md @@ -6,14 +6,14 @@ toc: false To use Test Analytics with your Python projects use the [`buildkite-test-collector`](https://pypi.org/project/buildkite-test-collector/) package with pytest. -You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). +You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). ## pytest collector pytest is a testing framework for Python. If you're already using pytest, then you can install `buildkite-test-collector` to collect test results into your Test Analytics dashboard. -Before you start, make sure pytest runs with access to [CI environment variables](/docs/test-analytics/ci-environments). +Before you start, make sure pytest runs with access to [CI environment variables](/docs/test-engine/ci-environments). To get started with `buildkite-test-collector`: @@ -54,4 +54,4 @@ To get started with `buildkite-test-collector`: Once you're done, in your Test Analytics dashboard, you'll see analytics of test executions on all branches that include this code. -If you don't see branch names, build numbers, or commit hashes in Test Analytics, then read [CI environments](/docs/test-analytics/ci-environments) to learn more about exporting your environment to the collector. +If you don't see branch names, build numbers, or commit hashes in Test Analytics, then read [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. diff --git a/pages/test_engine/ruby_collectors.md b/pages/test_engine/ruby_collectors.md index dba2692bee..8c67f82db0 100644 --- a/pages/test_engine/ruby_collectors.md +++ b/pages/test_engine/ruby_collectors.md @@ -2,7 +2,7 @@ To use Test Analytics with your [Ruby](https://www.ruby-lang.org/) projects use the :github: [`test-collectors-ruby`](https://github.com/buildkite/test-collector-ruby) gem with RSpec or minitest. -You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). +You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). ## RSpec collector @@ -10,7 +10,7 @@ You can also upload test results by importing [JSON](/docs/test-analytics/import [RSpec](https://rspec.info/) is a behavior-driven development library for Ruby. If you're already using RSpec for your tests, add the `buildkite-test_collector` gem to your code to collect your test results into your Test Analytics dashboard. -Before you start, make sure RSpec runs with access to [CI environment variables](/docs/test-analytics/ci-environments). +Before you start, make sure RSpec runs with access to [CI environment variables](/docs/test-engine/ci-environments). 1. Create a new branch: @@ -50,7 +50,7 @@ Before you start, make sure RSpec runs with access to [CI environment variables] Once you're done, in your Test Analytics dashboard, you'll see analytics of test executions on all branches that include this code. -If you don't see branch names, build numbers, or commit hashes in the Test Analytics UI, then see [CI environments](/docs/test-analytics/ci-environments) to learn more about exporting your environment to the collector. +If you don't see branch names, build numbers, or commit hashes in the Test Analytics UI, then see [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. ### Troubleshooting allow_any_instance_of errors @@ -115,7 +115,7 @@ If you're already using minitest for your tests, add the `buildkite-test_collect Once you're done, in your Test Analytics dashboard, you'll see analytics of test executions on all branches that include this code. -If you don't see branch names, build numbers, or commit hashes in the Test Analytics UI, then see [CI environments](/docs/test-analytics/ci-environments) to learn more about exporting your environment to the minitest collector. +If you don't see branch names, build numbers, or commit hashes in the Test Analytics UI, then see [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the minitest collector. ## Adding annotation spans diff --git a/pages/test_engine/rust_collectors.md b/pages/test_engine/rust_collectors.md index 399267316f..3b1f4117e5 100644 --- a/pages/test_engine/rust_collectors.md +++ b/pages/test_engine/rust_collectors.md @@ -6,11 +6,11 @@ toc: false To use Test Analytics with your [Rust](https://www.rust-lang.org/) projects use the :github: [`test-collector-rust`](https://github.com/buildkite/test-collector-rust) package with `cargo test`. -You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). +You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). -Before you start, make sure Rust runs with access to [CI environment variables](/docs/test-analytics/ci-environments). +Before you start, make sure Rust runs with access to [CI environment variables](/docs/test-engine/ci-environments). -1. Create a [test suite](/docs/test-analytics/test-suites) and copy the API token that it gives you. +1. Create a [test suite](/docs/test-engine/test-suites) and copy the API token that it gives you. 1. Install the `buildkite-test-collector` crate: diff --git a/pages/test_engine/swift_collectors.md b/pages/test_engine/swift_collectors.md index 2515cd6122..dfa125e647 100644 --- a/pages/test_engine/swift_collectors.md +++ b/pages/test_engine/swift_collectors.md @@ -6,15 +6,15 @@ toc: false To use Test Analytics with your Swift projects use the :github: [`test-collector-swift`](https://github.com/buildkite/test-collector-swift) package with XCTest. -You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). +You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). ## XCTest [XCTest](https://developer.apple.com/documentation/xctest) is a test framework to write unit tests for your Xcode projects. -Before you start, make sure XCTest runs with access to [CI environment variables](/docs/test-analytics/ci-environments). +Before you start, make sure XCTest runs with access to [CI environment variables](/docs/test-engine/ci-environments). -1. [Create a test suite](https://buildkite.com/docs/test-analytics) and copy the test suite API token. +1. [Create a test suite](https://buildkite.com/docs/test-engine) and copy the test suite API token. 1. [Securely](/docs/pipelines/security/secrets/managing) set the `BUILDKITE_ANALYTICS_TOKEN` secret on your CI to the API token from the previous step. @@ -56,7 +56,7 @@ Before you start, make sure XCTest runs with access to [CI environment variables Once you're done, in your Test Analytics dashboard, you'll see analytics of test executions on all branches that include this code. -If you don't see branch names, build numbers, or commit hashes in Test Analytics, then read [CI environments](/docs/test-analytics/ci-environments) to learn more about exporting your environment to the collector. +If you don't see branch names, build numbers, or commit hashes in Test Analytics, then read [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. ### Debugging diff --git a/pages/test_engine/test_ownership.md b/pages/test_engine/test_ownership.md index e9c334b934..006cd751f2 100644 --- a/pages/test_engine/test_ownership.md +++ b/pages/test_engine/test_ownership.md @@ -2,9 +2,9 @@ Test ownership is critical in adopting a healthy testing culture at your organization. Defining one or more teams as test owners allows these teams to become accountable for maintaining a fast and reliable test suite, ensuring confidence when you deploy your code. -Customers on the [Pro and Enterprise plans](https://buildkite.com/pricing) can assign test ownership to [teams](/docs/test-analytics/permissions#manage-teams-and-permissions). +Customers on the [Pro and Enterprise plans](https://buildkite.com/pricing) can assign test ownership to [teams](/docs/test-engine/permissions#manage-teams-and-permissions). -Test ownership is managed via team assignments in a TESTOWNERS file. The team that is the default owner of a test [will be automatically assigned flaky tests](/docs/test-analytics/flaky-test-assignment) to triage. +Test ownership is managed via team assignments in a TESTOWNERS file. The team that is the default owner of a test [will be automatically assigned flaky tests](/docs/test-engine/flaky-test-assignment) to triage. > 🚧 Buildkite test ownership is currently in private beta > Please reach out to our support team to register for early access. @@ -88,7 +88,7 @@ pipelines/ pipelines ### Permission requirements -The teams listed in your TESTOWNERS file must have [permission to access the test suite](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions) _before_ ownership records are created. +The teams listed in your TESTOWNERS file must have [permission to access the test suite](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) _before_ ownership records are created. ## Setting test ownership diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index 3e46cefca5..56eeb8916b 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -12,7 +12,7 @@ To delete a suite, or regenerate its API token, go to suite settings. Test Analytics works even when your test runs are split across different agents by de-duplicating against the Test Analytics API token and unique build identifier. -The information that serves as a unique build identifier differs between CI environments. For details, see `run_env[key]` environment variables on our [CI environments page](/docs/test-analytics/ci-environments). +The information that serves as a unique build identifier differs between CI environments. For details, see `run_env[key]` environment variables on our [CI environments page](/docs/test-engine/ci-environments). ## Compare across branches From 087fe94de38ecac6e57dab2dd31923bfe33a4b74 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Fri, 30 Aug 2024 11:11:56 +1000 Subject: [PATCH 008/102] Update images path for Test Analytics to Test Engine rebranding. --- config/routes.rb | 2 +- .../flaky_test_assignment/flaky-test-no-teams.png | Bin .../flaky-test-summary-mailer.png | Bin .../flaky_test_assignment/flaky-test-teams.png | Bin .../flaky_test_assignment/outdated-assignments.png | Bin .../flaky_test_assignment/recent-assignments.png | Bin .../flaky_test_assignment/team-settings.png | Bin .../icon-find-flaky-tests.svg | 0 .../icon-monitoring.svg | 0 .../icon-performance-analysis.svg | 0 .../monitors/monitors.png | Bin .../{test_analytics => test_engine}/overview.png | Bin .../permissions/team-section-list.png | Bin .../permissions/team-section-test-suites-list.png | Bin .../permissions/user-section-teams-list.png | Bin .../public_test_suites/security.png | Bin .../public_test_suites/settings.png | Bin .../ruby_collectors/annotation-span.png | Bin .../ruby_collectors/execution-prefix-suffix.png | Bin .../test_executions/test_executions.png | Bin .../test_ownership/test-ownership.png | Bin .../test_suites/execution-issues.png | Bin .../test_suites/run-issues.png | Bin .../test_suites/span-timeline.png | Bin .../test_suites/test-execution-stats.png | Bin .../test_suites/test-stats.png | Bin .../test_suites/test-trendx.png | Bin 27 files changed, 1 insertion(+), 1 deletion(-) rename images/docs/{test_analytics => test_engine}/flaky_test_assignment/flaky-test-no-teams.png (100%) rename images/docs/{test_analytics => test_engine}/flaky_test_assignment/flaky-test-summary-mailer.png (100%) rename images/docs/{test_analytics => test_engine}/flaky_test_assignment/flaky-test-teams.png (100%) rename images/docs/{test_analytics => test_engine}/flaky_test_assignment/outdated-assignments.png (100%) rename images/docs/{test_analytics => test_engine}/flaky_test_assignment/recent-assignments.png (100%) rename images/docs/{test_analytics => test_engine}/flaky_test_assignment/team-settings.png (100%) rename images/docs/{test_analytics => test_engine}/icon-find-flaky-tests.svg (100%) rename images/docs/{test_analytics => test_engine}/icon-monitoring.svg (100%) rename images/docs/{test_analytics => test_engine}/icon-performance-analysis.svg (100%) rename images/docs/{test_analytics => test_engine}/monitors/monitors.png (100%) rename images/docs/{test_analytics => test_engine}/overview.png (100%) rename images/docs/{test_analytics => test_engine}/permissions/team-section-list.png (100%) rename images/docs/{test_analytics => test_engine}/permissions/team-section-test-suites-list.png (100%) rename images/docs/{test_analytics => test_engine}/permissions/user-section-teams-list.png (100%) rename images/docs/{test_analytics => test_engine}/public_test_suites/security.png (100%) rename images/docs/{test_analytics => test_engine}/public_test_suites/settings.png (100%) rename images/docs/{test_analytics => test_engine}/ruby_collectors/annotation-span.png (100%) rename images/docs/{test_analytics => test_engine}/ruby_collectors/execution-prefix-suffix.png (100%) rename images/docs/{test_analytics => test_engine}/test_executions/test_executions.png (100%) rename images/docs/{test_analytics => test_engine}/test_ownership/test-ownership.png (100%) rename images/docs/{test_analytics => test_engine}/test_suites/execution-issues.png (100%) rename images/docs/{test_analytics => test_engine}/test_suites/run-issues.png (100%) rename images/docs/{test_analytics => test_engine}/test_suites/span-timeline.png (100%) rename images/docs/{test_analytics => test_engine}/test_suites/test-execution-stats.png (100%) rename images/docs/{test_analytics => test_engine}/test_suites/test-stats.png (100%) rename images/docs/{test_analytics => test_engine}/test_suites/test-trendx.png (100%) diff --git a/config/routes.rb b/config/routes.rb index e3ca23a831..ddc9ff9a4e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -134,7 +134,7 @@ get "/docs/agent/upgrading", to: redirect("/docs/agent/v3/upgrading", status: 301) get "/docs/agent/upgrading-to-v3", to: redirect("/docs/agent/v3/upgrading", status: 301) get "/docs/clusters/queue-metrics", to: redirect("/docs/pipelines/cluster-queue-metrics", status: 301) - get "/docs/test-analytics/java", to: redirect("/docs/test-engine/importing-junit-xml", status: 301) + get "/docs/test-engine/java", to: redirect("/docs/test-engine/importing-junit-xml", status: 301) # Old docs routes that we changed around during the development of the v3 agent docs get "/docs/agent/upgrading-to-v2", to: redirect("/docs/agent/v2/upgrading-to-v2", status: 301) diff --git a/images/docs/test_analytics/flaky_test_assignment/flaky-test-no-teams.png b/images/docs/test_engine/flaky_test_assignment/flaky-test-no-teams.png similarity index 100% rename from images/docs/test_analytics/flaky_test_assignment/flaky-test-no-teams.png rename to images/docs/test_engine/flaky_test_assignment/flaky-test-no-teams.png diff --git a/images/docs/test_analytics/flaky_test_assignment/flaky-test-summary-mailer.png b/images/docs/test_engine/flaky_test_assignment/flaky-test-summary-mailer.png similarity index 100% rename from images/docs/test_analytics/flaky_test_assignment/flaky-test-summary-mailer.png rename to images/docs/test_engine/flaky_test_assignment/flaky-test-summary-mailer.png diff --git a/images/docs/test_analytics/flaky_test_assignment/flaky-test-teams.png b/images/docs/test_engine/flaky_test_assignment/flaky-test-teams.png similarity index 100% rename from images/docs/test_analytics/flaky_test_assignment/flaky-test-teams.png rename to images/docs/test_engine/flaky_test_assignment/flaky-test-teams.png diff --git a/images/docs/test_analytics/flaky_test_assignment/outdated-assignments.png b/images/docs/test_engine/flaky_test_assignment/outdated-assignments.png similarity index 100% rename from images/docs/test_analytics/flaky_test_assignment/outdated-assignments.png rename to images/docs/test_engine/flaky_test_assignment/outdated-assignments.png diff --git a/images/docs/test_analytics/flaky_test_assignment/recent-assignments.png b/images/docs/test_engine/flaky_test_assignment/recent-assignments.png similarity index 100% rename from images/docs/test_analytics/flaky_test_assignment/recent-assignments.png rename to images/docs/test_engine/flaky_test_assignment/recent-assignments.png diff --git a/images/docs/test_analytics/flaky_test_assignment/team-settings.png b/images/docs/test_engine/flaky_test_assignment/team-settings.png similarity index 100% rename from images/docs/test_analytics/flaky_test_assignment/team-settings.png rename to images/docs/test_engine/flaky_test_assignment/team-settings.png diff --git a/images/docs/test_analytics/icon-find-flaky-tests.svg b/images/docs/test_engine/icon-find-flaky-tests.svg similarity index 100% rename from images/docs/test_analytics/icon-find-flaky-tests.svg rename to images/docs/test_engine/icon-find-flaky-tests.svg diff --git a/images/docs/test_analytics/icon-monitoring.svg b/images/docs/test_engine/icon-monitoring.svg similarity index 100% rename from images/docs/test_analytics/icon-monitoring.svg rename to images/docs/test_engine/icon-monitoring.svg diff --git a/images/docs/test_analytics/icon-performance-analysis.svg b/images/docs/test_engine/icon-performance-analysis.svg similarity index 100% rename from images/docs/test_analytics/icon-performance-analysis.svg rename to images/docs/test_engine/icon-performance-analysis.svg diff --git a/images/docs/test_analytics/monitors/monitors.png b/images/docs/test_engine/monitors/monitors.png similarity index 100% rename from images/docs/test_analytics/monitors/monitors.png rename to images/docs/test_engine/monitors/monitors.png diff --git a/images/docs/test_analytics/overview.png b/images/docs/test_engine/overview.png similarity index 100% rename from images/docs/test_analytics/overview.png rename to images/docs/test_engine/overview.png diff --git a/images/docs/test_analytics/permissions/team-section-list.png b/images/docs/test_engine/permissions/team-section-list.png similarity index 100% rename from images/docs/test_analytics/permissions/team-section-list.png rename to images/docs/test_engine/permissions/team-section-list.png diff --git a/images/docs/test_analytics/permissions/team-section-test-suites-list.png b/images/docs/test_engine/permissions/team-section-test-suites-list.png similarity index 100% rename from images/docs/test_analytics/permissions/team-section-test-suites-list.png rename to images/docs/test_engine/permissions/team-section-test-suites-list.png diff --git a/images/docs/test_analytics/permissions/user-section-teams-list.png b/images/docs/test_engine/permissions/user-section-teams-list.png similarity index 100% rename from images/docs/test_analytics/permissions/user-section-teams-list.png rename to images/docs/test_engine/permissions/user-section-teams-list.png diff --git a/images/docs/test_analytics/public_test_suites/security.png b/images/docs/test_engine/public_test_suites/security.png similarity index 100% rename from images/docs/test_analytics/public_test_suites/security.png rename to images/docs/test_engine/public_test_suites/security.png diff --git a/images/docs/test_analytics/public_test_suites/settings.png b/images/docs/test_engine/public_test_suites/settings.png similarity index 100% rename from images/docs/test_analytics/public_test_suites/settings.png rename to images/docs/test_engine/public_test_suites/settings.png diff --git a/images/docs/test_analytics/ruby_collectors/annotation-span.png b/images/docs/test_engine/ruby_collectors/annotation-span.png similarity index 100% rename from images/docs/test_analytics/ruby_collectors/annotation-span.png rename to images/docs/test_engine/ruby_collectors/annotation-span.png diff --git a/images/docs/test_analytics/ruby_collectors/execution-prefix-suffix.png b/images/docs/test_engine/ruby_collectors/execution-prefix-suffix.png similarity index 100% rename from images/docs/test_analytics/ruby_collectors/execution-prefix-suffix.png rename to images/docs/test_engine/ruby_collectors/execution-prefix-suffix.png diff --git a/images/docs/test_analytics/test_executions/test_executions.png b/images/docs/test_engine/test_executions/test_executions.png similarity index 100% rename from images/docs/test_analytics/test_executions/test_executions.png rename to images/docs/test_engine/test_executions/test_executions.png diff --git a/images/docs/test_analytics/test_ownership/test-ownership.png b/images/docs/test_engine/test_ownership/test-ownership.png similarity index 100% rename from images/docs/test_analytics/test_ownership/test-ownership.png rename to images/docs/test_engine/test_ownership/test-ownership.png diff --git a/images/docs/test_analytics/test_suites/execution-issues.png b/images/docs/test_engine/test_suites/execution-issues.png similarity index 100% rename from images/docs/test_analytics/test_suites/execution-issues.png rename to images/docs/test_engine/test_suites/execution-issues.png diff --git a/images/docs/test_analytics/test_suites/run-issues.png b/images/docs/test_engine/test_suites/run-issues.png similarity index 100% rename from images/docs/test_analytics/test_suites/run-issues.png rename to images/docs/test_engine/test_suites/run-issues.png diff --git a/images/docs/test_analytics/test_suites/span-timeline.png b/images/docs/test_engine/test_suites/span-timeline.png similarity index 100% rename from images/docs/test_analytics/test_suites/span-timeline.png rename to images/docs/test_engine/test_suites/span-timeline.png diff --git a/images/docs/test_analytics/test_suites/test-execution-stats.png b/images/docs/test_engine/test_suites/test-execution-stats.png similarity index 100% rename from images/docs/test_analytics/test_suites/test-execution-stats.png rename to images/docs/test_engine/test_suites/test-execution-stats.png diff --git a/images/docs/test_analytics/test_suites/test-stats.png b/images/docs/test_engine/test_suites/test-stats.png similarity index 100% rename from images/docs/test_analytics/test_suites/test-stats.png rename to images/docs/test_engine/test_suites/test-stats.png diff --git a/images/docs/test_analytics/test_suites/test-trendx.png b/images/docs/test_engine/test_suites/test-trendx.png similarity index 100% rename from images/docs/test_analytics/test_suites/test-trendx.png rename to images/docs/test_engine/test_suites/test-trendx.png From 864fd954aa8e410638eb5ae899c09064fd939a40 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Fri, 6 Sep 2024 11:54:12 +1000 Subject: [PATCH 009/102] Improve landing page wording for Test Engine. --- data/nav.yml | 1 - pages/test_analytics.md | 15 ++++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/data/nav.yml b/data/nav.yml index 08760aca53..e75659a11b 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -692,7 +692,6 @@ path: apis/graphql/cookbooks/teams - name: Limits path: apis/graphql/graphql-resource-limits - - name: "Webhooks" children: - name: "Overview" diff --git a/pages/test_analytics.md b/pages/test_analytics.md index bde6c54a6a..f72d80fb3b 100644 --- a/pages/test_analytics.md +++ b/pages/test_analytics.md @@ -2,20 +2,21 @@ template: "landing_page" --- -# Buildkite Test Analytics +# Buildkite Test Engine -Where Buildkite Pipelines help you automate your build pipelines, -Test Analytics helps you track and analyze the steps in that pipeline that involve tests: +Test Engine is a product that helps you track and analyze the steps in a CI/CD pipelines, which involves: -- Ship code to production faster by optimizing test suites -- Works with any continuous integration -- Identify, fix, and monitor test suite performance -- Track, improve, and monitor test suite reliability +- Shipping code to production faster by optimizing test suites. +- Working with [Buildkite Pipelines](/docs/pipelines), as well as any other CI/CD applications. +- Identifying, fixing, and monitoring test suite performance. +- Tracking, improving, and monitoring test suite reliability. <%= image "overview.png", width: 975, height: 205, alt: "Screenshot of test suite trend showing five metrics over 28 days" %> ## Get started +Run through the **Getting started** section of the Test Engine docs, beginning with [Configuring test suites](/docs/test-analytics/test-suites) for an overview of Test Engine's concepts and functionality, followed by the appropriate test collector for project's langauge: +
From 00d76fa8e73354cec889938c140b211db0421d1f Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Fri, 6 Sep 2024 15:09:00 +1000 Subject: [PATCH 010/102] Improved wording and messaging for the Buildkite Test Engine landing page. --- data/nav.yml | 31 ++++++++++++++----------------- pages/platform.md | 2 ++ pages/test_analytics.md | 18 +++++++++--------- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/data/nav.yml b/data/nav.yml index e75659a11b..d4c6840440 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -484,24 +484,21 @@ path: "packages/background" - name: "Getting started" path: "packages/getting-started" - - name: "Registries" - start_expanded: true - children: - - name: "Manage registries" - path: "packages/manage-registries" - - name: "Private storage" - path: "packages/private-storage" - - name: "Security" - start_expanded: true - children: - - name: "Overview" - path: "packages/security" - - name: "OIDC" - path: "packages/security/oidc" - - name: "Permissions" - path: "packages/security/permissions" + - name: "Registries" + children: + - name: "Manage registries" + path: "packages/manage-registries" + - name: "Private storage" + path: "packages/private-storage" + - name: "Security" + children: + - name: "Overview" + path: "packages/security" + - name: "OIDC" + path: "packages/security/oidc" + - name: "Permissions" + path: "packages/security/permissions" - name: "Package ecosystems" - start_expanded: true children: - name: "Alpine" path: "packages/alpine" diff --git a/pages/platform.md b/pages/platform.md index 80c7b2179d..7cd035a137 100644 --- a/pages/platform.md +++ b/pages/platform.md @@ -3,3 +3,5 @@ template: "landing_page" --- # The Buildkite platform + +The Buildkite platform documentation contains \ No newline at end of file diff --git a/pages/test_analytics.md b/pages/test_analytics.md index f72d80fb3b..05ecc3712f 100644 --- a/pages/test_analytics.md +++ b/pages/test_analytics.md @@ -4,10 +4,12 @@ template: "landing_page" # Buildkite Test Engine -Test Engine is a product that helps you track and analyze the steps in a CI/CD pipelines, which involves: +Scale out your testing across any framework with Buildkite Test Engine. Get more out of fewer tests with performance insights to speed up builds and isolate unreliable tests. -- Shipping code to production faster by optimizing test suites. -- Working with [Buildkite Pipelines](/docs/pipelines), as well as any other CI/CD applications. +Where [Buildkite Pipelines](/docs/pipelines) helps you automate your CI/CD pipelines, Test Engine helps you track and analyze the steps in these pipelines, by: + +- Shipping code to production faster through test suite optimization. +- Working directly with Buildkite Pipelines, as well as other CI/CD applications. - Identifying, fixing, and monitoring test suite performance. - Tracking, improving, and monitoring test suite reliability. @@ -15,7 +17,7 @@ Test Engine is a product that helps you track and analyze the steps in a CI/CD p ## Get started -Run through the **Getting started** section of the Test Engine docs, beginning with [Configuring test suites](/docs/test-analytics/test-suites) for an overview of Test Engine's concepts and functionality, followed by the appropriate test collector for project's langauge: +Run through the 'Getting started' section of these Test Engine docs, beginning with [Configuring test suites](/docs/test-analytics/test-suites) for an overview of Test Engine's concepts and functionality, followed by the appropriate test collector for project's language: @@ -41,13 +43,11 @@ Run through the **Getting started** section of the Test Engine docs, beginning w You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). ->📘 Data retention -> The data uploaded to Test Analytics is stored in S3 and deleted after six months. - ----- +
<%= tiles "test_analytics_features" %> ----- +>📘 Data retention +> The data uploaded to Test Analytics is stored in S3 and deleted after six months. <%= tiles "test_analytics_guides" %> From 60bbac66f0ce1099b529f0deea3215976131f35e Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Fri, 6 Sep 2024 15:44:49 +1000 Subject: [PATCH 011/102] Add new messaging to tops of product landing pages, as well as Platform area. --- app/views/landing_page_pipelines/_hero.html.erb | 2 +- pages/packages.md | 8 +++++--- pages/platform.md | 4 +++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/views/landing_page_pipelines/_hero.html.erb b/app/views/landing_page_pipelines/_hero.html.erb index 4da6d2e746..426b3c983c 100644 --- a/app/views/landing_page_pipelines/_hero.html.erb +++ b/app/views/landing_page_pipelines/_hero.html.erb @@ -2,7 +2,7 @@

Buildkite Pipelines

-

Create fast, secure, and reliable CI/CD with Buildkite Pipelines so you can quickly and confidently ship quality code. We provide the docs, building blocks, and extension points you'll need to build your dream CI/CD workflows. Let's get building! 🚀

+

Create fast, secure, and reliable CI/CD with Buildkite Pipelines so you can quickly and confidently ship quality code. Scale out automated workflows with massive concurrency and flexible compute types on Buildkite Pipelines. Fine-tune each workflow to match your business needs. Buildkite provides the building blocks, docs, and extension points you'll need to build your dream CI/CD workflows. Let's get building! 🚀

diff --git a/pages/packages.md b/pages/packages.md index be5f06f9ad..ddd0c0e8a5 100644 --- a/pages/packages.md +++ b/pages/packages.md @@ -4,11 +4,13 @@ template: "landing_page" # Buildkite Packages -Buildkite Packages is a product that: +Scale out asset management across any ecosystem with Buildkite Packages. Avoid the bottleneck of poorly managed and insecure dependencies. -- Manages artifacts and packages from [Buildkite Pipelines](/docs/pipelines), as well as other CI/CD applications that require artifact management. +Buildkite Packages allows you to: -- Provides registries to store your [packages and other package-like file formats](/docs/packages/background) such as container images and Terraform modules. +- Manage artifacts and packages from [Buildkite Pipelines](/docs/pipelines), as well as other CI/CD applications that require artifact management. + +- Provide registries to store your [packages and other package-like file formats](/docs/packages/background) such as container images and Terraform modules. As well as storing a collection of packages, a registry also surfaces metadata or attributes associated with a package, such as the package's description, version, contents (files and directories), checksum details, distribution type, dependencies, and so on. diff --git a/pages/platform.md b/pages/platform.md index 7cd035a137..565ceb0f98 100644 --- a/pages/platform.md +++ b/pages/platform.md @@ -4,4 +4,6 @@ template: "landing_page" # The Buildkite platform -The Buildkite platform documentation contains \ No newline at end of file +The Buildkite Scale-Out Delivery Platform is an adaptable, composable, and scalable platform with everything platform teams need to build software delivery systems for their businesses—and rapidly deliver value to users. + +The Buildkite platform documentation contains docs for _platform_-level features of Buildkite that can apply to Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-analytics), as well as [Packages](/docs/packages). From dd755d4343735cc0ff142b296d89b2ebf607837a Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 11 Sep 2024 11:21:22 +1000 Subject: [PATCH 012/102] Add more introductory content to the Buildkite platform docs landing page. --- pages/platform.md | 8 +++++++- pages/team_management.md | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pages/platform.md b/pages/platform.md index 565ceb0f98..b1ffffcae1 100644 --- a/pages/platform.md +++ b/pages/platform.md @@ -6,4 +6,10 @@ template: "landing_page" The Buildkite Scale-Out Delivery Platform is an adaptable, composable, and scalable platform with everything platform teams need to build software delivery systems for their businesses—and rapidly deliver value to users. -The Buildkite platform documentation contains docs for _platform_-level features of Buildkite that can apply to Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-analytics), as well as [Packages](/docs/packages). +The Buildkite platform documentation contains docs for _platform_-level features of Buildkite available across Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-analytics), as well as [Packages](/docs/packages). This area of the docs covers the following topics: + +- [Team management](/docs/team-management), with guidelines on how to manage your users and teams across the Buildkite platform for Pipelines, Test Engine and Packages. + +- [Buildkite CLI](/docs/cli), provides command line/terminal access to work with features across the Buildkite platform. + +- [Single sign-on (SSO)](/docs/integrations/sso) provides guidelines on how to protect access to your Buildkite organization using a supported third-party SSO provider. diff --git a/pages/team_management.md b/pages/team_management.md index 5aaec37e9d..aa7594653f 100644 --- a/pages/team_management.md +++ b/pages/team_management.md @@ -4,7 +4,7 @@ toc: false # Team management -Managing users and teams in CI/CD is fundamental to collaboration, streamlined processes, and ensuring adequate access controls. Buildkite provides features to manage team access: +Managing users and teams across your CI/CD platform is fundamental to collaboration, streamlined processes, and ensuring adequate access controls. Buildkite provides features to manage team access: - [User and team permissions](/docs/team-management/permissions) - [Enforce 2FA](/docs/team-management/enforce-2fa) From 8650fbc5e7261e71ccfe9c3c825ffc5a1f936971 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 11 Sep 2024 11:24:49 +1000 Subject: [PATCH 013/102] Move 'Files' button on Packages landing page. --- pages/packages.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/packages.md b/pages/packages.md index ddd0c0e8a5..08f8359e59 100644 --- a/pages/packages.md +++ b/pages/packages.md @@ -29,6 +29,7 @@ If you're familiar with the basics, explore how to use registries for each of Bu <%= button ":alpine: Alpine (apk)", "/docs/packages/alpine" %> <%= button ":docker: Container (Docker)", "/docs/packages/container" %> <%= button ":debian: Debian/Ubuntu (deb)", "/docs/packages/debian" %> + <%= button ":package: Files (generic)", "/docs/packages/files" %> <%= button ":helm: Helm (OCI)", "/docs/packages/helm-oci" %> <%= button ":helm: Helm", "/docs/packages/helm" %> <%= button ":maven: Java (Maven)", "/docs/packages/maven" %> @@ -38,7 +39,6 @@ If you're familiar with the basics, explore how to use registries for each of Bu <%= button ":redhat: Red Hat (RPM)", "/docs/packages/red-hat" %> <%= button ":ruby: Ruby (RubyGems)", "/docs/packages/ruby" %> <%= button ":terraform: Terraform (modules)", "/docs/packages/terraform" %> - <%= button ":package: Files (generic)", "/docs/packages/files" %>
From 7c7ae433d7cc886cacb4101a1e785bac66553ce3 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 16 Sep 2024 10:35:26 +1000 Subject: [PATCH 014/102] More refactoring of 'Test Analytics' links and refs to 'Test Engine' rebranding. --- .github/labeler.yml | 4 +- Gemfile.lock | 2 +- app/views/homepage/_products.html.erb | 6 +-- app/views/homepage/_references.html.erb | 26 ++++++------- data/nav.yml | 22 ++++++----- data/tiles.yml | 38 +++++++++---------- .../{test_analytics.svg => test_engine.svg} | 0 .../_flaky_tests_query_strings.md | 0 .../_runs_list_query_strings.md | 0 .../{analytics => test_engine}/flaky_tests.md | 2 +- .../{analytics => test_engine}/runs.md | 2 +- .../{analytics => test_engine}/suites.md | 0 .../{analytics => test_engine}/tests.md | 0 13 files changed, 52 insertions(+), 50 deletions(-) rename images/docs/home/{test_analytics.svg => test_engine.svg} (100%) rename pages/apis/rest_api/{analytics => test_engine}/_flaky_tests_query_strings.md (100%) rename pages/apis/rest_api/{analytics => test_engine}/_runs_list_query_strings.md (100%) rename pages/apis/rest_api/{analytics => test_engine}/flaky_tests.md (92%) rename pages/apis/rest_api/{analytics => test_engine}/runs.md (96%) rename pages/apis/rest_api/{analytics => test_engine}/suites.md (100%) rename pages/apis/rest_api/{analytics => test_engine}/tests.md (100%) diff --git a/.github/labeler.yml b/.github/labeler.yml index 3d70159e2e..0e34d6298f 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -2,8 +2,8 @@ agent: - pages/agent/**/* cli: - pages/cli/**/* -test-analytics: - - pages/test_analytics/**/* +test-engine: + - pages/test_engine/**/* pipelines: - pages/pipelines/**/* - pages/tutorials/**/* diff --git a/Gemfile.lock b/Gemfile.lock index 6b50c7268c..866c41b59f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -190,7 +190,7 @@ DEPENDENCIES web-console RUBY VERSION - ruby 3.3.3p89 + ruby 3.3.5p100 BUNDLED WITH 2.4.7 diff --git a/app/views/homepage/_products.html.erb b/app/views/homepage/_products.html.erb index a4ccac6a10..45f5a7854b 100644 --- a/app/views/homepage/_products.html.erb +++ b/app/views/homepage/_products.html.erb @@ -9,11 +9,11 @@

Powerful CI/CD built to scale on your infrastructure

- +
- Test Analytics graphic + Test Engine graphic
-

Test Analytics

+

Test Engine

Real-time tracking and monitoring for your tests

diff --git a/app/views/homepage/_references.html.erb b/app/views/homepage/_references.html.erb index b40ef3be60..20a0a1406f 100644 --- a/app/views/homepage/_references.html.erb +++ b/app/views/homepage/_references.html.erb @@ -43,6 +43,19 @@ } ] }, + { + title: "Test Engine", + links: [ + { + title: "JSON test results", + link: "/docs/test-engine/importing-json" + }, + { + title: "Environment variables", + link: "/docs/test-engine/ci-environments" + } + ] + }, { title: "API", links: [ @@ -59,19 +72,6 @@ link: "/docs/apis/webhooks" } ] - }, - { - title: "Test Analytics", - links: [ - { - title: "JSON test results", - link: "/docs/test-analytics/importing-json" - }, - { - title: "Environment variables", - link: "/docs/test-analytics/ci-environments" - } - ] } ] %> diff --git a/data/nav.yml b/data/nav.yml index 8e3d28078b..c2c87647fc 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -540,16 +540,6 @@ path: "apis/agent-api" - name: "Metrics" path: "apis/agent-api/metrics" - - name: "Analytics" - children: - - name: "Flaky tests" - path: "apis/rest-api/analytics/flaky-tests" - - name: "Runs" - path: "apis/rest-api/analytics/runs" - - name: "Suites" - path: "apis/rest-api/analytics/suites" - - name: "Tests" - path: "apis/rest-api/analytics/tests" - name: "Organizations" children: - name: "Overview" @@ -608,6 +598,18 @@ path: "apis/rest-api/teams/pipelines" - name: "Suites" path: "apis/rest-api/teams/suites" + - name: "Test Engine " + # Keep space at end to prevent "Test Engine" in global nav bar being + # highlighted when any child page of "API > REST > Pipelines" is selected. + children: + - name: "Flaky tests" + path: "apis/rest-api/test-engine/flaky-tests" + - name: "Runs" + path: "apis/rest-api/test-engine/runs" + - name: "Suites" + path: "apis/rest-api/test-engine/suites" + - name: "Tests" + path: "apis/rest-api/test-engine/tests" - name: "GraphQL" children: - name: Overview diff --git a/data/tiles.yml b/data/tiles.yml index f120f99eb3..0d82a648f9 100644 --- a/data/tiles.yml +++ b/data/tiles.yml @@ -1,46 +1,46 @@ --- -test_analytics_features: +test_engine_features: - title: "Deep performance analysis" - url: "/docs/test-analytics/test-suites#trends-and-analysis" + url: "/docs/test-engine/test-suites#trends-and-analysis" desc: "Automatic tracing across your test suite, deeply integrated with your programming language and test framework." - title: "Find and fix flaky tests" - url: "/docs/test-analytics/test-suites#detecting-flaky-tests" + url: "/docs/test-engine/test-suites#detecting-flaky-tests" desc: "Quickly identify which tests are the most disruptive for your team, and get a head-start on fixing them." -test_analytics_guides: +test_engine_guides: - title: "Languages" links: - text: "Ruby" - url: "/docs/test-analytics/ruby-collectors" + url: "/docs/test-engine/ruby-collectors" - text: "JavaScript" - url: "/docs/test-analytics/javascript-collectors" + url: "/docs/test-engine/javascript-collectors" - text: "Swift" - url: "/docs/test-analytics/swift-collectors" + url: "/docs/test-engine/swift-collectors" - text: "Android" - url: "/docs/test-analytics/android-collectors" + url: "/docs/test-engine/android-collectors" - text: "Python" - url: "/docs/test-analytics/python-collectors" + url: "/docs/test-engine/python-collectors" - text: "Go" - url: "/docs/test-analytics/golang-collectors" + url: "/docs/test-engine/golang-collectors" - text: ".NET" - url: "/docs/test-analytics/dotnet-collectors" + url: "/docs/test-engine/dotnet-collectors" - text: "Elixir" - url: "/docs/test-analytics/elixir-collectors" + url: "/docs/test-engine/elixir-collectors" - text: "Rust" - url: "/docs/test-analytics/rust-collectors" + url: "/docs/test-engine/rust-collectors" - text: "Java" - url: "/docs/test-analytics/java" + url: "/docs/test-engine/java" - text: "Other languages" - url: "/docs/test-analytics/other-collectors" + url: "/docs/test-engine/other-collectors" - title: "References" links: - text: "Uploading JSON data" - url: "/docs/test-analytics/importing-json" + url: "/docs/test-engine/importing-json" - text: "Uploading JUnit XML results" - url: "/docs/test-analytics/importing-junit-xml" + url: "/docs/test-engine/importing-junit-xml" - text: "Build your own collector" - url: "/docs/test-analytics/your-own-collectors" + url: "/docs/test-engine/your-own-collectors" - text: "CI environment variables" - url: "/docs/test-analytics/ci-environments" + url: "/docs/test-engine/ci-environments" - "" integrations: - title: "Plugins" diff --git a/images/docs/home/test_analytics.svg b/images/docs/home/test_engine.svg similarity index 100% rename from images/docs/home/test_analytics.svg rename to images/docs/home/test_engine.svg diff --git a/pages/apis/rest_api/analytics/_flaky_tests_query_strings.md b/pages/apis/rest_api/test_engine/_flaky_tests_query_strings.md similarity index 100% rename from pages/apis/rest_api/analytics/_flaky_tests_query_strings.md rename to pages/apis/rest_api/test_engine/_flaky_tests_query_strings.md diff --git a/pages/apis/rest_api/analytics/_runs_list_query_strings.md b/pages/apis/rest_api/test_engine/_runs_list_query_strings.md similarity index 100% rename from pages/apis/rest_api/analytics/_runs_list_query_strings.md rename to pages/apis/rest_api/test_engine/_runs_list_query_strings.md diff --git a/pages/apis/rest_api/analytics/flaky_tests.md b/pages/apis/rest_api/test_engine/flaky_tests.md similarity index 92% rename from pages/apis/rest_api/analytics/flaky_tests.md rename to pages/apis/rest_api/test_engine/flaky_tests.md index f5de36c0b7..d621af1cbe 100644 --- a/pages/apis/rest_api/analytics/flaky_tests.md +++ b/pages/apis/rest_api/test_engine/flaky_tests.md @@ -30,7 +30,7 @@ curl -H "Authorization: Bearer $TOKEN" \ Optional [query string parameters](/docs/api#query-string-parameters): -<%= render_markdown partial: 'apis/rest_api/analytics/flaky_tests_query_strings' %> +<%= render_markdown partial: 'apis/rest_api/test_engine/flaky_tests_query_strings' %> Required scope: `read_suites` diff --git a/pages/apis/rest_api/analytics/runs.md b/pages/apis/rest_api/test_engine/runs.md similarity index 96% rename from pages/apis/rest_api/analytics/runs.md rename to pages/apis/rest_api/test_engine/runs.md index f8c52d183b..bfe279c109 100644 --- a/pages/apis/rest_api/analytics/runs.md +++ b/pages/apis/rest_api/test_engine/runs.md @@ -26,7 +26,7 @@ curl -H "Authorization: Bearer $TOKEN" \ Optional [query string parameters](/docs/api#query-string-parameters): -<%= render_markdown partial: 'apis/rest_api/analytics/runs_list_query_strings' %> +<%= render_markdown partial: 'apis/rest_api/test_engine/runs_list_query_strings' %> Required scope: `read_suites` diff --git a/pages/apis/rest_api/analytics/suites.md b/pages/apis/rest_api/test_engine/suites.md similarity index 100% rename from pages/apis/rest_api/analytics/suites.md rename to pages/apis/rest_api/test_engine/suites.md diff --git a/pages/apis/rest_api/analytics/tests.md b/pages/apis/rest_api/test_engine/tests.md similarity index 100% rename from pages/apis/rest_api/analytics/tests.md rename to pages/apis/rest_api/test_engine/tests.md From 8bfb9fc251db89b84263b2e269ba8ef212af0879 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 16 Sep 2024 10:48:42 +1000 Subject: [PATCH 015/102] Fix RSpec build failure. --- spec/features/emojicom_rendering_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/features/emojicom_rendering_spec.rb b/spec/features/emojicom_rendering_spec.rb index c5a1d69ca9..4148ec516d 100644 --- a/spec/features/emojicom_rendering_spec.rb +++ b/spec/features/emojicom_rendering_spec.rb @@ -11,7 +11,7 @@ context "landing page" do scenario "does display emojicom widget" do - visit "/docs/test-analytics" + visit "/docs/test-engine" expect(page).to have_css "#emojicom-widget-inline" end From affff811226f1a93252d3f128184e49fce49297f Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 16 Sep 2024 11:40:24 +1000 Subject: [PATCH 016/102] Rebrand 'Test Analytics' product name in docs to 'Test Engine'. --- ...ml => test_engine_json_fields.schema.yaml} | 0 ...ml => test_engine_json_fields_detail.yaml} | 0 ..._engine_json_fields_failure_expanded.yaml} | 0 ...l => test_engine_json_fields_history.yaml} | 0 ...yaml => test_engine_json_fields_span.yaml} | 0 ... test_engine_json_fields_test_result.yaml} | 2 +- ...a.yaml => test_engine_run_env.schema.yaml} | 0 ..._run_env.yaml => test_engine_run_env.yaml} | 0 data/content/test_splitting_env.yaml | 2 +- pages/test_engine/android_collectors.md | 12 ++++---- pages/test_engine/ci_environments.md | 6 ++-- pages/test_engine/dotnet_collectors.md | 4 +-- pages/test_engine/elixir_collectors.md | 6 ++-- pages/test_engine/golang_collectors.md | 4 +-- pages/test_engine/importing_json.md | 23 ++++++++------- pages/test_engine/importing_junit_xml.md | 14 +++++----- pages/test_engine/javascript_collectors.md | 24 ++++++++-------- pages/test_engine/other_collectors.md | 2 +- pages/test_engine/permissions.md | 4 +-- pages/test_engine/python_collectors.md | 12 ++++---- pages/test_engine/ruby_collectors.md | 28 +++++++++---------- pages/test_engine/rust_collectors.md | 4 +-- pages/test_engine/swift_collectors.md | 12 ++++---- pages/test_engine/test_ownership.md | 26 ++++++++--------- pages/test_engine/test_splitting.md | 2 +- pages/test_engine/test_suites.md | 20 ++++++------- pages/test_engine/your_own_collectors.md | 4 +-- 27 files changed, 105 insertions(+), 106 deletions(-) rename data/content/{test_analytics_json_fields.schema.yaml => test_engine_json_fields.schema.yaml} (100%) rename data/content/{test_analytics_json_fields_detail.yaml => test_engine_json_fields_detail.yaml} (100%) rename data/content/{test_analytics_json_fields_failure_expanded.yaml => test_engine_json_fields_failure_expanded.yaml} (100%) rename data/content/{test_analytics_json_fields_history.yaml => test_engine_json_fields_history.yaml} (100%) rename data/content/{test_analytics_json_fields_span.yaml => test_engine_json_fields_span.yaml} (100%) rename data/content/{test_analytics_json_fields_test_result.yaml => test_engine_json_fields_test_result.yaml} (94%) rename data/content/{test_analytics_run_env.schema.yaml => test_engine_run_env.schema.yaml} (100%) rename data/content/{test_analytics_run_env.yaml => test_engine_run_env.yaml} (100%) diff --git a/data/content/test_analytics_json_fields.schema.yaml b/data/content/test_engine_json_fields.schema.yaml similarity index 100% rename from data/content/test_analytics_json_fields.schema.yaml rename to data/content/test_engine_json_fields.schema.yaml diff --git a/data/content/test_analytics_json_fields_detail.yaml b/data/content/test_engine_json_fields_detail.yaml similarity index 100% rename from data/content/test_analytics_json_fields_detail.yaml rename to data/content/test_engine_json_fields_detail.yaml diff --git a/data/content/test_analytics_json_fields_failure_expanded.yaml b/data/content/test_engine_json_fields_failure_expanded.yaml similarity index 100% rename from data/content/test_analytics_json_fields_failure_expanded.yaml rename to data/content/test_engine_json_fields_failure_expanded.yaml diff --git a/data/content/test_analytics_json_fields_history.yaml b/data/content/test_engine_json_fields_history.yaml similarity index 100% rename from data/content/test_analytics_json_fields_history.yaml rename to data/content/test_engine_json_fields_history.yaml diff --git a/data/content/test_analytics_json_fields_span.yaml b/data/content/test_engine_json_fields_span.yaml similarity index 100% rename from data/content/test_analytics_json_fields_span.yaml rename to data/content/test_engine_json_fields_span.yaml diff --git a/data/content/test_analytics_json_fields_test_result.yaml b/data/content/test_engine_json_fields_test_result.yaml similarity index 94% rename from data/content/test_analytics_json_fields_test_result.yaml rename to data/content/test_engine_json_fields_test_result.yaml index b106c9ee0c..ad0a766857 100644 --- a/data/content/test_analytics_json_fields_test_result.yaml +++ b/data/content/test_engine_json_fields_test_result.yaml @@ -4,7 +4,7 @@ fields: type: UUIDv4 string enumerated_values: desc: | - A unique identifier for this test result. If a test execution with this UUID already exists in the Test Analytics database, this result is ignored. + A unique identifier for this test result. If a test execution with this UUID already exists in the Test Engine database, this result is ignored. examples: - 1b70486f-ca5f-4e6d-beb8-6347b2e49278 - name: scope diff --git a/data/content/test_analytics_run_env.schema.yaml b/data/content/test_engine_run_env.schema.yaml similarity index 100% rename from data/content/test_analytics_run_env.schema.yaml rename to data/content/test_engine_run_env.schema.yaml diff --git a/data/content/test_analytics_run_env.yaml b/data/content/test_engine_run_env.yaml similarity index 100% rename from data/content/test_analytics_run_env.yaml rename to data/content/test_engine_run_env.yaml diff --git a/data/content/test_splitting_env.yaml b/data/content/test_splitting_env.yaml index 48cd7ed914..422ae9aa71 100644 --- a/data/content/test_splitting_env.yaml +++ b/data/content/test_splitting_env.yaml @@ -26,7 +26,7 @@ mandatory: - Buildkite API access token with `read_suites`, `read_test_plan`, and `write_test_plan` scopes. You can create an [API access token](https://buildkite.com/user/api-access-tokens) from **Personal Settings** > **API Access Tokens** in the Buildkite interface. - name: BUILDKITE_SPLITTER_SUITE_SLUG desc: - - The slug of your Buildkite Test Analytics test suite. You can find the suite slug in the url for your test suite. + - The slug of your Buildkite Test Engine test suite. You can find the suite slug in the url for your test suite. - "For example, the slug for the url: `https://buildkite.com/organizations/my-organization/analytics/suites/my-suite` is `my-suite`." optional: diff --git a/pages/test_engine/android_collectors.md b/pages/test_engine/android_collectors.md index 4b3618a05a..1f6b1e0a97 100644 --- a/pages/test_engine/android_collectors.md +++ b/pages/test_engine/android_collectors.md @@ -4,7 +4,7 @@ toc: false # Android collectors -To use Test Analytics with your Android projects use the :github: [`test-collector-android`](https://github.com/buildkite/test-collector-android) package. +To use Test Engine with your Android projects use the :github: [`test-collector-android`](https://github.com/buildkite/test-collector-android) package. You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). @@ -89,14 +89,14 @@ Before you start, make sure your tests run with access to [CI environment variab 1. Commit and push your changes: ```bash - git checkout -b add-buildkite-test-analytics - git commit -am "Add Buildkite Test Analytics" - git push origin add-buildkite-test-analytics + git checkout -b add-buildkite-test-engine + git commit -am "Add Buildkite Test Engine" + git push origin add-buildkite-test-engine ``` -Once you're done, in your Test Analytics dashboard, you'll see analytics of test executions on all branches that include this code. +Once you're done, in your Test Engine dashboard, you'll see analytics of test executions on all branches that include this code. -If you don't see branch names, build numbers, or commit hashes in Test Analytics, then read [CI Environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. +If you don't see branch names, build numbers, or commit hashes in Test Engine, then read [CI Environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. ### Debugging diff --git a/pages/test_engine/ci_environments.md b/pages/test_engine/ci_environments.md index 26cd4b63f4..83ef11afa3 100644 --- a/pages/test_engine/ci_environments.md +++ b/pages/test_engine/ci_environments.md @@ -1,6 +1,6 @@ # CI environments -Buildkite Test Analytics collectors automatically detect common continuous integration (CI) environments. +Buildkite Test Engine collectors automatically detect common continuous integration (CI) environments. If available, test collectors gather information about your test runs, such as branch names and build IDs. Test collectors gather information from the following CI environments: @@ -103,7 +103,7 @@ run_env[key]=$GITHUB_ACTION-$GITHUB_RUN_NUMBER-$GITHUB_RUN_ATTEMPT ## Other CI providers If you're using other CI providers (or [containers](#containers-and-test-collectors)), then set environment variables for test collectors to gather information about your builds and tests. -If you don't set these environment variables, then Test Analytics lacks the details needed to produce useful reports. +If you don't set these environment variables, then Test Engine lacks the details needed to produce useful reports. Each environment variable corresponds to a `run_env` key in the payload `https://analytics-api.buildkite.com/v1/uploads`. Read [Importing JSON](/docs/test-engine/importing-json) to learn how these keys are used to make API calls. @@ -116,7 +116,7 @@ Each environment variable corresponds to a `run_env` key in the payload `https:/
- <% TEST_ANALYTICS_RUN_ENV['keys'].each do |key| -%> + <% TEST_ENGINE_RUN_ENV['keys'].each do |key| -%> diff --git a/pages/test_engine/dotnet_collectors.md b/pages/test_engine/dotnet_collectors.md index 9067502297..1e0a0f548e 100644 --- a/pages/test_engine/dotnet_collectors.md +++ b/pages/test_engine/dotnet_collectors.md @@ -4,7 +4,7 @@ toc: false # .NET collector -To use Test Analytics with your .NET projects use the :github: [`test-collector-dotnet`](https://github.com/buildkite/test-collector-dotnet) package with xUnit. +To use Test Engine with your .NET projects use the :github: [`test-collector-dotnet`](https://github.com/buildkite/test-collector-dotnet) package with xUnit. You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). @@ -32,4 +32,4 @@ Before you start, make sure .NET runs with access to [CI environment variables]( 1. Verify that it works -If all is well, you should see the test run in the test analytics section of the Buildkite dashboard. +If all is well, you should see the test run in the analytics section of the Buildkite dashboard. diff --git a/pages/test_engine/elixir_collectors.md b/pages/test_engine/elixir_collectors.md index c00de0c2f0..aea3fd308d 100644 --- a/pages/test_engine/elixir_collectors.md +++ b/pages/test_engine/elixir_collectors.md @@ -4,7 +4,7 @@ toc: false # Elixir collectors -To use Test Analytics with your Elixir projects use :github: [`test_collector_elixir`](https://github.com/buildkite/test_collector_elixir) with ExUnit. +To use Test Engine with your Elixir projects use :github: [`test_collector_elixir`](https://github.com/buildkite/test_collector_elixir) with ExUnit. You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). @@ -28,7 +28,7 @@ Before you start, make sure ExUnit runs with access to [CI environment variables 1. Set up your API token: - In your `config/test.exs` (or other environment configuration as appropriate) add the analytics API token. We suggest that you retrieve the token from the environment, and configure your CI environment accordingly (for example using secrets). + In your `config/test.exs` (or other environment configuration as appropriate) add the Buildkite Test Engine API token. We suggest that you retrieve the token from the environment, and configure your CI environment accordingly (for example using secrets). ```elixir import Config @@ -60,4 +60,4 @@ Before you start, make sure ExUnit runs with access to [CI environment variables Randomized with seed 12345 ``` -1. Verify that it works. If all is well, you should see the test run in the test analytics section of the Buildkite dashboard. +1. Verify that it works. If all is well, you should see the test run in the analytics section of the Buildkite dashboard. diff --git a/pages/test_engine/golang_collectors.md b/pages/test_engine/golang_collectors.md index 8a71a5f475..e5cac9fef4 100644 --- a/pages/test_engine/golang_collectors.md +++ b/pages/test_engine/golang_collectors.md @@ -2,9 +2,9 @@ toc: false --- -# Configuring Go with Test Analytics +# Configuring Go with Test Engine -To use Test Analytics with your [Go](https://go.dev/) language projects use [gotestsum](https://github.com/gotestyourself/gotestsum) to generate JUnit XML files, then [upload the JUnit XML files](/docs/test-engine/importing-junit-xml) to Test Analytics. +To use Test Engine with your [Go](https://go.dev/) language projects use [gotestsum](https://github.com/gotestyourself/gotestsum) to generate JUnit XML files, then [upload the JUnit XML files](/docs/test-engine/importing-junit-xml) to Test Engine. 1. Install [gotestsum](https://github.com/gotestyourself/gotestsum): diff --git a/pages/test_engine/importing_json.md b/pages/test_engine/importing_json.md index a681aa65b5..d9c7e5daf7 100644 --- a/pages/test_engine/importing_json.md +++ b/pages/test_engine/importing_json.md @@ -1,16 +1,15 @@ # Importing JSON - -If a test collector is not available for your test framework, you can upload tests results directly to the Test Analytics API or [write your own test collector](/docs/test-engine/your-own-collectors). +If a test collector is not available for your test framework, you can upload tests results directly to the Test Engine API or [write your own test collector](/docs/test-engine/your-own-collectors). You can upload JSON-formatted test results (described in this page) or [JUnit XML](/docs/test-engine/importing-junit-xml). ## How to import JSON in Buildkite -It's possible to import JSON (or [JUnit](/docs/test-engine/importing-junit-xml#how-to-import-junit-xml-in-buildkite) files) to Buildkite Test Analytics with or without the help of a plugin. +It's possible to import JSON (or [JUnit](/docs/test-engine/importing-junit-xml#how-to-import-junit-xml-in-buildkite) files) to Buildkite Test Engine with or without the help of a plugin. ### Using a plugin -To import [JSON-formatted test results](#json-test-results-data-reference) to Test Analytics using [Test Collector plugin](https://github.com/buildkite-plugins/test-collector-buildkite-plugin) from a build step: +To import [JSON-formatted test results](#json-test-results-data-reference) to Test Engine using [Test Collector plugin](https://github.com/buildkite-plugins/test-collector-buildkite-plugin) from a build step: ```yml steps: @@ -35,7 +34,7 @@ To import [JSON-formatted test results](#json-test-results-data-reference) in Bu For example, to import the contents of a [JSON-formatted test results](#json-test-results-data-reference) (`test-results.json`): -1. Securely [set the Test Analytics token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). +1. Securely [set the Test Engine token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). 2. Run the following `curl` command: @@ -66,7 +65,7 @@ To import [JSON-formatted test results](#json-test-results-data-reference), make For example, to import the contents of a `test-results.json` file in a CircleCI pipeline: -1. Securely [set the Test Analytics token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). +1. Securely [set the Test Engine token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). 2. Run the following `curl` command: @@ -95,7 +94,7 @@ To import [JSON-formatted test results](#json-test-results-data-reference), make For example, to import the contents of a `test-results.json` file in a GitHub Actions pipeline run: -1. Securely [set the Test Analytics token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). +1. Securely [set the Test Engine token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). 2. Run the following `curl` command: @@ -186,7 +185,7 @@ end - <% TEST_ANALYTICS_JSON_FIELDS_TEST_RESULT['fields'].each do |field| -%> + <% TEST_ENGINE_JSON_FIELDS_TEST_RESULT['fields'].each do |field| -%> @@ -234,7 +233,7 @@ A failure expanded array contains extra details about the failed test. - <% TEST_ANALYTICS_JSON_FIELDS_FAILURE_EXPANDED['fields'].each do |field| -%> + <% TEST_ENGINE_JSON_FIELDS_FAILURE_EXPANDED['fields'].each do |field| -%> @@ -283,7 +282,7 @@ A history object represents the overall duration of the test run and contains de - <% TEST_ANALYTICS_JSON_FIELDS_HISTORY['fields'].each do |field| -%> + <% TEST_ENGINE_JSON_FIELDS_HISTORY['fields'].each do |field| -%> @@ -322,7 +321,7 @@ It represents, for example, the duration of an individual database query within - <% TEST_ANALYTICS_JSON_FIELDS_SPAN['fields'].each do |field| -%> + <% TEST_ENGINE_JSON_FIELDS_SPAN['fields'].each do |field| -%> @@ -361,7 +360,7 @@ Detail objects contains additional information about the span. - <% TEST_ANALYTICS_JSON_FIELDS_DETAIL['fields'].each do |field| -%> + <% TEST_ENGINE_JSON_FIELDS_DETAIL['fields'].each do |field| -%> diff --git a/pages/test_engine/importing_junit_xml.md b/pages/test_engine/importing_junit_xml.md index 9709105bab..d29c05a03e 100644 --- a/pages/test_engine/importing_junit_xml.md +++ b/pages/test_engine/importing_junit_xml.md @@ -1,6 +1,6 @@ # Importing JUnit XML -While most test frameworks have a built-in JUnit XML export feature, these JUnit reports do not provide detailed span information. Therefore, features in Test Analytics that depend on span information aren't available when using JUnit as a data source. If you need span information, consider using the [JSON import](/docs/test-engine/importing-json) API instead. +While most test frameworks have a built-in JUnit XML export feature, these JUnit reports do not provide detailed span information. Therefore, features in Test Engine that depend on span information aren't available when using JUnit as a data source. If you need span information, consider using the [JSON import](/docs/test-engine/importing-json) API instead. ## Mandatory JUnit XML attributes @@ -15,11 +15,11 @@ To learn more about the JUnit XML file format, see [Common JUnit XML format & ex ## How to import JUnit XML in Buildkite -It's possible to import XML-formatted JUnit (or [JSON](/docs/test-engine/importing-json#how-to-import-json-in-buildkite)) test results to Buildkite Test Analytics with or without the help of a plugin. +It's possible to import XML-formatted JUnit (or [JSON](/docs/test-engine/importing-json#how-to-import-json-in-buildkite)) test results to Buildkite Test Engine with or without the help of a plugin. ### Using a plugin -To import XML-formatted JUnit test results to Test Analytics using [Test Collector plugin](https://github.com/buildkite-plugins/test-collector-buildkite-plugin) from a build step: +To import XML-formatted JUnit test results to Test Engine using [Test Collector plugin](https://github.com/buildkite-plugins/test-collector-buildkite-plugin) from a build step: ```yml steps: @@ -40,10 +40,10 @@ Using the plugin is the recommended way as it allows for a better debugging proc If for some reason you cannot or do not want to use the [Test Collector plugin](https://github.com/buildkite-plugins/test-collector-buildkite-plugin), or if you are looking to implement your own integration, another approach is possible. -To import XML-formatted JUnit test results to Test Analytics, make a `POST` request to `https://analytics-api.buildkite.com/v1/uploads` with a `multipart/form-data`. +To import XML-formatted JUnit test results to Test Engine, make a `POST` request to `https://analytics-api.buildkite.com/v1/uploads` with a `multipart/form-data`. For example, to import the contents of a `junit.xml` file in a Buildkite pipeline: -1. Securely [set the Test Analytics token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). +1. Securely [set the Test Engine token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). 1. Run the following `curl` command: @@ -77,7 +77,7 @@ A single file can have a maximum of 5000 test results, and if that limit is exce To import XML-formatted JUnit test results, make a `POST` request to `https://analytics-api.buildkite.com/v1/uploads` with a `multipart/form-data`. For example, to import the contents of a `junit.xml` file in a CircleCI pipeline: -1. Securely [set the Test Analytics token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). +1. Securely [set the Test Engine token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). 1. Run the following `curl` command: @@ -109,7 +109,7 @@ A single file can have a maximum of 5000 test results, and if that limit is exce To import XML-formatted JUnit test results, make a `POST` request to `https://analytics-api.buildkite.com/v1/uploads` with a `multipart/form-data`. For example, to import the contents of a `junit.xml` file in a GitHub Actions pipeline: -1. Securely [set the Test Analytics token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). +1. Securely [set the Test Engine token environment variable](/docs/pipelines/security/secrets/managing) (`BUILDKITE_ANALYTICS_TOKEN`). 1. Run the following `curl` command: diff --git a/pages/test_engine/javascript_collectors.md b/pages/test_engine/javascript_collectors.md index 3227401d70..fd2c4ffd89 100644 --- a/pages/test_engine/javascript_collectors.md +++ b/pages/test_engine/javascript_collectors.md @@ -1,6 +1,6 @@ # JavaScript collectors -To use Test Analytics with your JavaScript (npm) projects, use the :github: [`test-collector-javascript`](https://github.com/buildkite/test-collector-javascript) package with a supported test framework. Test Analytics supports the following test frameworks: +To use Test Engine with your JavaScript (npm) projects, use the :github: [`test-collector-javascript`](https://github.com/buildkite/test-collector-javascript) package with a supported test framework. Test Engine supports the following test frameworks: - [Jest](https://jestjs.io/) - [Jasmine](https://jasmine.github.io/) @@ -17,13 +17,13 @@ Whichever test framework you use, you first need to add and authenticate the [`b To add the test collector package: -1. In your CI environment, set the `BUILDKITE_ANALYTICS_TOKEN` environment variable to your Test Analytics API token. +1. In your CI environment, set the `BUILDKITE_ANALYTICS_TOKEN` environment variable to your Test Engine API token. To learn how to set environment variables securely in Pipelines, see [Managing pipeline secrets](/docs/pipelines/security/secrets/managing). 1. On the command line, create a new branch by running: ``` - git checkout -b install-buildkite-test-analytics + git checkout -b install-buildkite-test-engine ``` 1. Install [`buildkite-test-collector`](https://www.npmjs.com/package/buildkite-test-collector) using your package manager. @@ -46,7 +46,7 @@ With the test collector installed, you need to configure it in the test framewor ### Jest -If you're already using Jest, you can add `buildkite-test-collector/jest/reporter` to the list of reporters to collect test results into your Test Analytics dashboard. +If you're already using Jest, you can add `buildkite-test-collector/jest/reporter` to the list of reporters to collect test results into your Test Engine dashboard. To configure Jest: @@ -59,7 +59,7 @@ To configure Jest: "testLocationInResults": true, } ``` - **Note:** The `"testLocationInResults": true` setting enables column and line capture for Test Analytics. + **Note:** The `"testLocationInResults": true` setting enables column and line capture for Test Engine. ### Jasmine @@ -133,7 +133,7 @@ To configure Cypress: ```js // cypress.config.js - // Send results to Test Analytics + // Send results to Test Engine reporter: "buildkite-test-collector/cypress/reporter", ``` @@ -142,7 +142,7 @@ To configure Cypress: ```js // cypress.config.js - // Send results to Test Analytics + // Send results to Test Engine reporterOptions: { token_name: "CUSTOM_ENV_VAR_NAME" } @@ -150,7 +150,7 @@ To configure Cypress: ### Playwright -If you're already using Playwright, you can add `buildkite-test-collector/playwright/reporter` to the list of reporters to collect test results into your Test Analytics dashboard. +If you're already using Playwright, you can add `buildkite-test-collector/playwright/reporter` to the list of reporters to collect test results into your Test Engine dashboard. To configure Playwright: @@ -180,7 +180,7 @@ When your collector is installed, commit and push your changes: 1. Commit the changes by running: ```shell - git commit -m "Install and set up Buildkite Test Analytics" + git commit -m "Install and set up Buildkite Test Engine" ``` 1. Push the changes by running: @@ -191,13 +191,13 @@ When your collector is installed, commit and push your changes: ## View the results -After completing these steps, you'll see the analytics of test executions on all branches that include this code in the Test Analytics dashboard. +After completing these steps, you'll see the analytics of test executions on all branches that include this code in the Test Engine dashboard. -If you don't see branch names, build numbers, or commit hashes in the Test Analytics dashboard, see [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment. +If you don't see branch names, build numbers, or commit hashes in the Test Engine dashboard, see [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment. ## Troubleshooting missing test executions and --forceExit -Using the [`--forceExit`](https://jestjs.io/docs/cli#--forceexit) option when running Jest could result in missing test executions from Test Analytics. +Using the [`--forceExit`](https://jestjs.io/docs/cli#--forceexit) option when running Jest could result in missing test executions from Test Engine. `--forceExit` could potentially terminate any ongoing processes that are attempting to send test executions to Buildkite. diff --git a/pages/test_engine/other_collectors.md b/pages/test_engine/other_collectors.md index 54a371f7ff..16c1ba20b4 100644 --- a/pages/test_engine/other_collectors.md +++ b/pages/test_engine/other_collectors.md @@ -4,4 +4,4 @@ toc: false # Collecting data from other test frameworks -You can integrate any language and framework by uploading [Test Analytics JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml) after your tests run. You can also [build your own collector](/docs/test-engine/your-own-collectors). +You can integrate any language and framework by uploading [Test Engine JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml) after your tests run. You can also [build your own collector](/docs/test-engine/your-own-collectors). diff --git a/pages/test_engine/permissions.md b/pages/test_engine/permissions.md index 96c348c569..ee999c19f9 100644 --- a/pages/test_engine/permissions.md +++ b/pages/test_engine/permissions.md @@ -6,7 +6,7 @@ Enterprise customers can configure test suite permissions and security features ## Manage teams and permissions -To manage teams across the Buildkite Test Analytics application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions section of Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions). +To manage teams across the Buildkite Test Engine application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions section of Pipelines documentation](/docs/team-management/permissions#manage-teams-and-permissions). Once the _teams_ feature is enabled, you can see the teams that you're a member of from the **User** page, which: @@ -70,7 +70,7 @@ These user-level permissions and security features are managed by _Buildkite org 1. Select **Settings** in the global navigation to access the [**Organization Settings**](https://buildkite.com/organizations/~/settings) page. -1. Select [**Security** > **Test Analytics** tab](https://buildkite.com/organizations/~/security/test-analytics) to access your organization's security for Test Analytics page. +1. Select [**Security** > **Test Engine** tab](https://buildkite.com/organizations/~/security/test-analytics) to access your organization's security for Test Engine page. From this page, you can configure the following permissions for all users across your Buildkite organization: diff --git a/pages/test_engine/python_collectors.md b/pages/test_engine/python_collectors.md index 5fba392136..48b741eb9c 100644 --- a/pages/test_engine/python_collectors.md +++ b/pages/test_engine/python_collectors.md @@ -4,20 +4,20 @@ toc: false # Python collectors -To use Test Analytics with your Python projects use the [`buildkite-test-collector`](https://pypi.org/project/buildkite-test-collector/) package with pytest. +To use Test Engine with your Python projects use the [`buildkite-test-collector`](https://pypi.org/project/buildkite-test-collector/) package with pytest. You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). ## pytest collector pytest is a testing framework for Python. -If you're already using pytest, then you can install `buildkite-test-collector` to collect test results into your Test Analytics dashboard. +If you're already using pytest, then you can install `buildkite-test-collector` to collect test results into your Test Engine dashboard. Before you start, make sure pytest runs with access to [CI environment variables](/docs/test-engine/ci-environments). To get started with `buildkite-test-collector`: -1. In your CI environment, set the `BUILDKITE_ANALYTICS_TOKEN` environment variable [securely](/docs/pipelines/security/secrets/managing) to your Buildkite Test Analytics API token. +1. In your CI environment, set the `BUILDKITE_ANALYTICS_TOKEN` environment variable [securely](/docs/pipelines/security/secrets/managing) to your Buildkite Test Engine API token. 1. Add `buildkite-test-collector` to your list of dependencies. Some examples: @@ -48,10 +48,10 @@ To get started with `buildkite-test-collector`: ```shell $ git add . - $ git commit -m "Install and set up Buildkite Test Analytics" + $ git commit -m "Install and set up Buildkite Test Engine" $ git push ``` -Once you're done, in your Test Analytics dashboard, you'll see analytics of test executions on all branches that include this code. +Once you're done, in your Test Engine dashboard, you'll see analytics of test executions on all branches that include this code. -If you don't see branch names, build numbers, or commit hashes in Test Analytics, then read [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. +If you don't see branch names, build numbers, or commit hashes in Test Engine, then read [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. diff --git a/pages/test_engine/ruby_collectors.md b/pages/test_engine/ruby_collectors.md index 8c67f82db0..fea26b81d1 100644 --- a/pages/test_engine/ruby_collectors.md +++ b/pages/test_engine/ruby_collectors.md @@ -1,6 +1,6 @@ # Ruby collectors -To use Test Analytics with your [Ruby](https://www.ruby-lang.org/) projects use the :github: [`test-collectors-ruby`](https://github.com/buildkite/test-collector-ruby) gem with RSpec or minitest. +To use Test Engine with your [Ruby](https://www.ruby-lang.org/) projects use the :github: [`test-collectors-ruby`](https://github.com/buildkite/test-collector-ruby) gem with RSpec or minitest. You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). @@ -8,14 +8,14 @@ You can also upload test results by importing [JSON](/docs/test-engine/importing ## RSpec collector [RSpec](https://rspec.info/) is a behavior-driven development library for Ruby. -If you're already using RSpec for your tests, add the `buildkite-test_collector` gem to your code to collect your test results into your Test Analytics dashboard. +If you're already using RSpec for your tests, add the `buildkite-test_collector` gem to your code to collect your test results into your Test Engine dashboard. Before you start, make sure RSpec runs with access to [CI environment variables](/docs/test-engine/ci-environments). 1. Create a new branch: ``` - git checkout -b install-buildkite-test-analytics + git checkout -b install-buildkite-test-engine ``` 2. Add `buildkite-test_collector` to your `Gemfile` in the `:test` group: @@ -32,7 +32,7 @@ Before you start, make sure RSpec runs with access to [CI environment variables] bundle ``` -3. Add the Test Analytics code to your application in `spec/spec_helper.rb`, and set the BUILDKITE_ANALYTICS_TOKEN [securely](/docs/pipelines/security/secrets/managing) on your agent or agents. Please ensure gems that patch `Net::HTTP`, like [httplog](https://github.com/trusche/httplog) and [sniffer](https://github.com/aderyabin/sniffer), are required before `buildkite/test_collector` to avoid conflicts. +3. Add the Test Engine code to your application in `spec/spec_helper.rb`, and set the BUILDKITE_ANALYTICS_TOKEN [securely](/docs/pipelines/security/secrets/managing) on your agent or agents. Please ensure gems that patch `Net::HTTP`, like [httplog](https://github.com/trusche/httplog) and [sniffer](https://github.com/aderyabin/sniffer), are required before `buildkite/test_collector` to avoid conflicts. ```rb require "buildkite/test_collector" @@ -44,13 +44,13 @@ Before you start, make sure RSpec runs with access to [CI environment variables] ```sh $ git add . - $ git commit -m "Install and set up Buildkite Test Analytics" + $ git commit -m "Install and set up Buildkite Test Engine" $ git push ``` -Once you're done, in your Test Analytics dashboard, you'll see analytics of test executions on all branches that include this code. +Once you're done, in your Test Engine dashboard, you'll see analytics of test executions on all branches that include this code. -If you don't see branch names, build numbers, or commit hashes in the Test Analytics UI, then see [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. +If you don't see branch names, build numbers, or commit hashes in the Test Engine UI, then see [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. ### Troubleshooting allow_any_instance_of errors @@ -67,15 +67,15 @@ You can fix them by being more specific in your stubbing by replacing `allow_any RSpec supports anonymous test cases—tests which are automatically named based on the subject and/or inputs to the expectations within the test. However, this can lead to unstable test names across different test runs, incorporating elements such as object IDs, database IDs, timestamps, and more. -As a consequence, each test is assigned a new identity per run within Test Analytics. This poses a challenge for utilising the Test Analytics product effectively, as historical data across tests becomes difficult to track and analyze. +As a consequence, each test is assigned a new identity per run within Test Engine. This poses a challenge for using the Test Engine product effectively, as historical data across tests becomes difficult to track and analyze. -To mitigate this issue and ensure the reliability of Test Analytics, it's advisable to provide explicit and stable descriptions for each test case within your RSpec test suite. By doing so, you can maintain consistency in test identification across multiple runs, enabling better tracking and analysis of test performance over time. +To mitigate this issue and ensure the reliability of Test Engine, it's advisable to provide explicit and stable descriptions for each test case within your RSpec test suite. By doing so, you can maintain consistency in test identification across multiple runs, enabling better tracking and analysis of test performance over time. ## minitest collector [minitest](https://github.com/minitest/minitest) provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking. -If you're already using minitest for your tests, add the `buildkite-test_collector` gem to your code to collect your test results into your Test Analytics dashboard. +If you're already using minitest for your tests, add the `buildkite-test_collector` gem to your code to collect your test results into your Test Engine dashboard. 1. Create a new branch: @@ -97,7 +97,7 @@ If you're already using minitest for your tests, add the `buildkite-test_collect bundle ``` -3. Add the Test Analytics code to your application in `test/test_helper.rb`, and set the BUILDKITE_ANALYTICS_TOKEN [securely](/docs/pipelines/security/secrets/managing) on your agent or agents. Please ensure gems that patch `Net::HTTP`, like [httplog](https://github.com/trusche/httplog) and [sniffer](https://github.com/aderyabin/sniffer), are required before `buildkite/test_collector` to avoid conflicts. +3. Add the Test Engine code to your application in `test/test_helper.rb`, and set the BUILDKITE_ANALYTICS_TOKEN [securely](/docs/pipelines/security/secrets/managing) on your agent or agents. Please ensure gems that patch `Net::HTTP`, like [httplog](https://github.com/trusche/httplog) and [sniffer](https://github.com/aderyabin/sniffer), are required before `buildkite/test_collector` to avoid conflicts. ```rb require "buildkite/test_collector" @@ -109,13 +109,13 @@ If you're already using minitest for your tests, add the `buildkite-test_collect ```sh git add . - git commit -m "Install and set up Buildkite Test Analytics" + git commit -m "Install and set up Buildkite Test Engine" git push ``` -Once you're done, in your Test Analytics dashboard, you'll see analytics of test executions on all branches that include this code. +Once you're done, in your Test Engine dashboard, you'll see analytics of test executions on all branches that include this code. -If you don't see branch names, build numbers, or commit hashes in the Test Analytics UI, then see [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the minitest collector. +If you don't see branch names, build numbers, or commit hashes in the Test Engine UI, then see [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the minitest collector. ## Adding annotation spans diff --git a/pages/test_engine/rust_collectors.md b/pages/test_engine/rust_collectors.md index 3b1f4117e5..7ba41b66d6 100644 --- a/pages/test_engine/rust_collectors.md +++ b/pages/test_engine/rust_collectors.md @@ -4,7 +4,7 @@ toc: false # Rust collector -To use Test Analytics with your [Rust](https://www.rust-lang.org/) projects use the :github: [`test-collector-rust`](https://github.com/buildkite/test-collector-rust) package with `cargo test`. +To use Test Engine with your [Rust](https://www.rust-lang.org/) projects use the :github: [`test-collector-rust`](https://github.com/buildkite/test-collector-rust) package with `cargo test`. You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). @@ -34,4 +34,4 @@ Before you start, make sure Rust runs with access to [CI environment variables]( $ cargo test -- -Z unstable-options --format json --report-time | buildkite-test-collector ``` -1. Confirm correct operation. Verify that the run is visible in the Buildkite analytics dashboard. +1. Confirm correct operation. Verify that the run is visible in the Buildkite Test Engine dashboard. diff --git a/pages/test_engine/swift_collectors.md b/pages/test_engine/swift_collectors.md index dfa125e647..8fac43b371 100644 --- a/pages/test_engine/swift_collectors.md +++ b/pages/test_engine/swift_collectors.md @@ -4,7 +4,7 @@ toc: false # Swift collectors -To use Test Analytics with your Swift projects use the :github: [`test-collector-swift`](https://github.com/buildkite/test-collector-swift) package with XCTest. +To use Test Engine with your Swift projects use the :github: [`test-collector-swift`](https://github.com/buildkite/test-collector-swift) package with XCTest. You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). @@ -49,14 +49,14 @@ Before you start, make sure XCTest runs with access to [CI environment variables 1. Commit and push your changes: ```bash - git checkout -b add-buildkite-test-analytics - git commit -am "Add Buildkite Test Analytics" - git push origin add-buildkite-test-analytics + git checkout -b add-buildkite-test-engine + git commit -am "Add Buildkite Test Engine" + git push origin add-buildkite-test-engine ``` -Once you're done, in your Test Analytics dashboard, you'll see analytics of test executions on all branches that include this code. +Once you're done, in your Test Engine dashboard, you'll see analytics of test executions on all branches that include this code. -If you don't see branch names, build numbers, or commit hashes in Test Analytics, then read [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. +If you don't see branch names, build numbers, or commit hashes in Test Engine, then read [CI environments](/docs/test-engine/ci-environments) to learn more about exporting your environment to the collector. ### Debugging diff --git a/pages/test_engine/test_ownership.md b/pages/test_engine/test_ownership.md index 006cd751f2..9adadda3c0 100644 --- a/pages/test_engine/test_ownership.md +++ b/pages/test_engine/test_ownership.md @@ -19,7 +19,7 @@ A TESTOWNERS file uses Buildkite team slugs instead of user names. Your team slu ```bash # Example team name to slug Pipelines => pipelines -Test Analytics => test-analytics +Test Engine => test-engine 📦 Packages => packages ``` @@ -49,8 +49,8 @@ The following example TESTOWNERS file, which you can copy as a starting point, e * team-slug-1 team-slug-2 # In this example, any test file ending with `_spec.rb` will be -# assigned to the `test-analytics` team and not `team-slug-1`. -*_spec.rb test-analytics # This is an inline comment. +# assigned to the `test-engine` team and not `team-slug-1`. +*_spec.rb test-engine # This is an inline comment. # In this example, the `pipelines` team owns all `.rb` test files. *.rb pipelines @@ -64,18 +64,18 @@ The following example TESTOWNERS file, which you can copy as a starting point, e # like `spec/features/application_spec.rb`, but not any test files # nested in any subdirectories of `spec/features`, such as # `spec/features/pipelines/application_spec.rb`. -spec/features/* test-analytics +spec/features/* test-engine # In this example, the `pipelines` team owns any test file in any # `pipelines` directory, anywhere within the test location. pipelines/ pipelines -# In this example, the `test-analytics` team owns any test files -# within an `/analytics` directory such as `/models/analytics`, -# `/features/analytics`, and `/models/organizations/analytics`. -# Any test files directly within the `/analytics` directory itself -# will also belong to the `test-analytics` team. -**/analytics test-analytics +# In this example, the `test-engine` team owns any test files +# within an `/test-engine` directory such as `/models/test-engine`, +# `/features/test-engine`, and `/models/organizations/test-engine`. +# Any test files directly within the `/test-engine` directory itself +# will also belong to the `test-engine` team. +**/test-engine test-engine # In this example, the `pipelines` team owns any test files in the # `/spec` directory at the root of the test location. However, the @@ -117,15 +117,15 @@ A TESTOWNERS file [follows the same rules as a `.gitignore` or `CODEOWNERS` file ```bash # In a regular `.gitignore` or `CODEOWNER` file, the following -# block would set the `test-analytics` team as the owner of any +# block would set the `test-engine` team as the owner of any # file in the `/specs` directory at the root of your test location # except for the `/specs/features` subdirectory, as its owners are # left empty. # This functionality is not supported in a Buildkite `TESTOWNERS` # file, where `/spec/features` would be also be owned by the -# `test-analytics` team. +# `test-engine` team. -/specs/ test-analytics +/specs/ test-engine /specs/features ``` diff --git a/pages/test_engine/test_splitting.md b/pages/test_engine/test_splitting.md index da78ad0ac3..f80ce28693 100644 --- a/pages/test_engine/test_splitting.md +++ b/pages/test_engine/test_splitting.md @@ -1,6 +1,6 @@ # Configuring test splitting -Test splitting is the process of partitioning a test suite to run in parallel across multiple Buildkite agents. Buildkite maintains its open source Test Splitter ([test-splitter](https://github.com/buildkite/test-splitter)) tool. This tool uses your Buildkite Test Analytics test suite data to intelligently partition tests throughout your test suite into multiple sets, such that each set of tests runs in parallel across your agents. This process is known as _orchestration_ and results in a _test plan_, where a test plan defines which tests are run on which agents. Currently, the Test Splitter tool only supports RSpec. +Test splitting is the process of partitioning a test suite to run in parallel across multiple Buildkite agents. Buildkite maintains its open source Test Splitter ([test-splitter](https://github.com/buildkite/test-splitter)) tool. This tool uses your Buildkite Test Engine test suite data to intelligently partition tests throughout your test suite into multiple sets, such that each set of tests runs in parallel across your agents. This process is known as _orchestration_ and results in a _test plan_, where a test plan defines which tests are run on which agents. Currently, the Test Splitter tool only supports RSpec. ## Dependencies diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index 56eeb8916b..5ffdee728a 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -1,16 +1,16 @@ # Configuring test suites -In Test Analytics, a test _suite_ is a collection of tests. A suite has a _run_, which is the execution of tests in a suite. A suite's run is analogous to a pipeline's build. +In Test Engine, a test _suite_ is a collection of tests. A suite has a _run_, which is the execution of tests in a suite. A suite's run is analogous to a pipeline's build. Many organizations set up one suite per test framework, for example one suite for RSpec, and another suite for Jest. Others use a common standard, such as JUnit XML, to combine tests from multiple frameworks to set up custom backend and frontend suites. -Each suite inside Test Analytics has a unique API token that you can use to route test information to the correct suite. Pipelines and test suites do not need to have a one-to-one relationship. +Each suite inside Test Engine has a unique API token that you can use to route test information to the correct suite. Pipelines and test suites do not need to have a one-to-one relationship. To delete a suite, or regenerate its API token, go to suite settings. ## Parallelized builds -Test Analytics works even when your test runs are split across different agents by de-duplicating against the Test Analytics API token and unique build identifier. +Test Engine works even when your test runs are split across different agents by de-duplicating against the Test Engine API token and unique build identifier. The information that serves as a unique build identifier differs between CI environments. For details, see `run_env[key]` environment variables on our [CI environments page](/docs/test-engine/ci-environments). @@ -20,23 +20,23 @@ All test suites have a default branch so you can track trends for your most impo Organizations typically choose their main production branch as their default, although this is not required. -To change your default branch, go to suite settings. You can also filter Test Analytics views by any branch by typing its name into the branch query parameter in the Test Analytics URL. +To change your default branch, go to suite settings. You can also filter Test Engine views by any branch by typing its name into the branch query parameter in the Test Engine URL. ## Detecting flaky tests Flaky tests are automated tests that produce inconsistent or unreliable results, despite being run on the same code and environment. They cause frustration, decrease confidence in testing, and waste time while you investigate whether the failure is due to a genuine bug. -Test Analytics detects flaky tests by surfacing when the same test is run multiple times on the same commit SHA with different results. The tests might run multiple times within a single build or across different builds. Either way, they are detected as flaky if they report both passed and failed results. +Test Engine detects flaky tests by surfacing when the same test is run multiple times on the same commit SHA with different results. The tests might run multiple times within a single build or across different builds. Either way, they are detected as flaky if they report both passed and failed results. -If your test suite supports it, we recommend enabling the option to retry failed tests automatically. Automatic retries are typically run more often and provide more data to detect flaky tests. If you can't use automatic retries, Test Analytics also detects flaky tests from manual retries. +If your test suite supports it, we recommend enabling the option to retry failed tests automatically. Automatic retries are typically run more often and provide more data to detect flaky tests. If you can't use automatic retries, Test Engine also detects flaky tests from manual retries. Alternatively, you can create [scheduled builds](/docs/pipelines/scheduled-builds) to run your test suite on the default branch. You can schedule them outside your typical development time to run the test suite multiple times against the same commit SHA. You can still enable test retries in this setup, but they're less important. The more builds you run, the more likely you'll detect flaky tests that fail infrequently. -Test Analytics reviews the test results to detect flaky tests after every test run. +Test Engine reviews the test results to detect flaky tests after every test run. ## Tracking reliability -Test Analytics calculates reliability of both your entire test suite and individual tests as a measure of flakiness over time. +Test Engine calculates reliability of both your entire test suite and individual tests as a measure of flakiness over time. _Reliability_ is defined as percentage calculated by: @@ -45,7 +45,7 @@ _Reliability_ is defined as percentage calculated by: Other test execution results such as `unknown` and `skipped` are ignored in the test reliability calculation. -In Test Analytics, a run is marked as `failed` as soon as a test execution fails, regardless of whether it passes on a retry. This helps surface unreliable tests. You can have a situation where a build eventually passes on retry in a Pipeline, and the related run is marked as `failed` in Test Analytics. +In Test Engine, a run is marked as `failed` as soon as a test execution fails, regardless of whether it passes on a retry. This helps surface unreliable tests. You can have a situation where a build eventually passes on retry in a Pipeline, and the related run is marked as `failed` in Test Engine. ## Trends and analysis @@ -59,6 +59,6 @@ Select any individual test execution to see more trend and deep-dive information <%= image "test-execution-stats.png", width: 1170, height: 578, alt: "Screenshot of individual test execution page showing test information related to that individual execution of the test" %> -You can also annotate span information to help investigate problems, and see detailed log information inside Test Analytics for any failed test or run. +You can also annotate span information to help investigate problems, and see detailed log information inside Test Engine for any failed test or run. <%= image "span-timeline.png", width: 1125, height: 451, alt: "Screenshot of span timeline with user-defined annotation" %> diff --git a/pages/test_engine/your_own_collectors.md b/pages/test_engine/your_own_collectors.md index 208854dcca..9726ed2999 100644 --- a/pages/test_engine/your_own_collectors.md +++ b/pages/test_engine/your_own_collectors.md @@ -4,6 +4,6 @@ toc: false # Your own collectors -Test Analytics integrates directly with your test runner to provide in-depth information about your tests (including spans) in real time. +Test Engine integrates directly with your test runner to provide in-depth information about your tests (including spans) in real time. -If you're interested in building your own fully integrated analytics collector for specific test runners, have a look at our [example collector](https://github.com/buildkite/rspec-buildkite-analytics) on GitHub. +If you're interested in building your own fully integrated Test Engine collector for specific test runners, have a look at our [example collector](https://github.com/buildkite/rspec-buildkite-analytics) on GitHub. From 46f55c3e986b5c63c317e7cf4d750c8d78d1dd40 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 16 Sep 2024 11:55:01 +1000 Subject: [PATCH 017/102] Implement TA > TE rebrand heading exception. --- vale/styles/Buildkite/h1-h6_sentence_case.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vale/styles/Buildkite/h1-h6_sentence_case.yml b/vale/styles/Buildkite/h1-h6_sentence_case.yml index 97eff668e4..ee02c2bea3 100644 --- a/vale/styles/Buildkite/h1-h6_sentence_case.yml +++ b/vale/styles/Buildkite/h1-h6_sentence_case.yml @@ -147,7 +147,7 @@ exceptions: - S3 - SSH - SSO - - Test Analytics + - Test Engine - TESTOWNER - Ubuntu - URL From 4cc2fb0f606b6581dbf13a26e7df2d0524f602a9 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 16 Sep 2024 13:21:01 +1000 Subject: [PATCH 018/102] Fix TA > TE branding elsewhere throughout the Buildkite Docs. --- pages/pipelines/migrate_from_jenkins.md | 2 +- pages/pipelines/security/audit_log.md | 4 ++-- pages/pipelines/security/secrets/managing.md | 2 +- spec/helpers/application_helper_spec.rb | 8 ++++---- spec/models/page/renderer_spec.rb | 8 ++++---- spec/scripts/graphql_api_content/nav_data_spec.rb | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pages/pipelines/migrate_from_jenkins.md b/pages/pipelines/migrate_from_jenkins.md index 338d01d487..ec7656f103 100644 --- a/pages/pipelines/migrate_from_jenkins.md +++ b/pages/pipelines/migrate_from_jenkins.md @@ -200,4 +200,4 @@ Remember that it may take some time to adapt to the new platform, and be prepare If you need further assistance or have any questions, please don't hesitate to reach out to [support](https://buildkite.com/support). We're here to help you use Buildkite to build your dream CI/CD workflows. -After configuring Buildkite Pipelines for your team, you could get actionable insights from the tests running in pipelines using [Test Analytics](/docs/test-engine). +After configuring Buildkite Pipelines for your team, you could get actionable insights from the tests running in pipelines using [Test Engine](/docs/test-engine). diff --git a/pages/pipelines/security/audit_log.md b/pages/pipelines/security/audit_log.md index 336b49a15c..24dd5c30dd 100644 --- a/pages/pipelines/security/audit_log.md +++ b/pages/pipelines/security/audit_log.md @@ -158,7 +158,7 @@ TEAM_REGISTRY_UPDATED TEAM_REGISTRY_DELETED ``` -#### For Buildkite Test Analytics +#### For Buildkite Test Engine ``` TEAM_SUITE_CREATED @@ -192,7 +192,7 @@ SCM_PIPELINE_SETTINGS_DELETED SCM_PIPELINE_SETTINGS_UPDATED ``` -### Test Analytics +### Test Engine ``` SUITE_API_TOKEN_REGENERATED_EVENT diff --git a/pages/pipelines/security/secrets/managing.md b/pages/pipelines/security/secrets/managing.md index 3aef4d409f..ea998a4f78 100644 --- a/pages/pipelines/security/secrets/managing.md +++ b/pages/pipelines/security/secrets/managing.md @@ -36,7 +36,7 @@ By default, the `environment` hook file is stored in the agent's `hooks` directo The path to this directory varies by platform; read the [installation instructions](/docs/agent/v3/installation) for the path on your platform. The path can also be overridden by the [`hooks-path`](/docs/agent/v3/hooks#hook-locations-agent-hooks) setting. -For example, to expose a Test Analytics API token to a specific pipeline, create an `environment` script in your agent's `hooks` directory that checks for the pipeline slug before exporting the secret: +For example, to expose a Test Engine API token to a specific pipeline, create an `environment` script in your agent's `hooks` directory that checks for the pipeline slug before exporting the secret: ```bash #!/bin/bash diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index f38e61baa6..6f1611e531 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -36,15 +36,15 @@ context "when the path contains dashes" do it "replaces dashes with spaces" do - path = "test-analytics/importing-junit-xml" + path = "test-engine/importing-junit-xml" - expect(top_level_nav_item_name(path)).to eq("Test Analytics") + expect(top_level_nav_item_name(path)).to eq("Test Engine") end it "titleizes" do - path = "test-analytics/importing-junit-xml" + path = "test-engine/importing-junit-xml" - expect(top_level_nav_item_name(path)).to eq("Test Analytics") + expect(top_level_nav_item_name(path)).to eq("Test Engine") end end end diff --git a/spec/models/page/renderer_spec.rb b/spec/models/page/renderer_spec.rb index 29b58fc49d..3192c91383 100644 --- a/spec/models/page/renderer_spec.rb +++ b/spec/models/page/renderer_spec.rb @@ -99,11 +99,11 @@ context "non-external links" do it "does not affect /docs/ links" do md = <<~MD - [Test Analytics](/docs/test-analytics) + [Test Engine](/docs/test-engine) MD html = <<~HTML -

Test Analytics

+

Test Engine

HTML expect(Page::Renderer.render(md).strip).to eql(html.strip) @@ -111,7 +111,7 @@ it "does not affect links to Buildkite domains" do md = <<~MD - [Test Analytics](https://buildkite.com/test-analytics) + [Test Engine](https://buildkite.com/test-engine) [GraphQL Explorer](https://graphql.buildkite.com/explorer) @@ -119,7 +119,7 @@ MD html = <<~HTML -

Test Analytics

+

Test Engine

GraphQL Explorer

diff --git a/spec/scripts/graphql_api_content/nav_data_spec.rb b/spec/scripts/graphql_api_content/nav_data_spec.rb index 771ca40774..407f69684a 100644 --- a/spec/scripts/graphql_api_content/nav_data_spec.rb +++ b/spec/scripts/graphql_api_content/nav_data_spec.rb @@ -10,8 +10,8 @@ "path" => "pipelines" }, { - "name" => "Test Analytics", - "path" => "test-analytics", + "name" => "Test Engine", + "path" => "test-engine", }, { "name" => "APIs", From 5553a046b16d9e309a5584697b215d7e656f1ad9 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 16 Sep 2024 13:27:27 +1000 Subject: [PATCH 019/102] Remaining minor wording tweaks. --- pages/test_engine/dotnet_collectors.md | 2 +- pages/test_engine/elixir_collectors.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/test_engine/dotnet_collectors.md b/pages/test_engine/dotnet_collectors.md index 1e0a0f548e..9d36baa63c 100644 --- a/pages/test_engine/dotnet_collectors.md +++ b/pages/test_engine/dotnet_collectors.md @@ -32,4 +32,4 @@ Before you start, make sure .NET runs with access to [CI environment variables]( 1. Verify that it works -If all is well, you should see the test run in the analytics section of the Buildkite dashboard. +If all is well, you should see the test run analytics on the Buildkite Test Engine dashboard. diff --git a/pages/test_engine/elixir_collectors.md b/pages/test_engine/elixir_collectors.md index aea3fd308d..594b7943ff 100644 --- a/pages/test_engine/elixir_collectors.md +++ b/pages/test_engine/elixir_collectors.md @@ -60,4 +60,4 @@ Before you start, make sure ExUnit runs with access to [CI environment variables Randomized with seed 12345 ``` -1. Verify that it works. If all is well, you should see the test run in the analytics section of the Buildkite dashboard. +1. Verify that it works. If all is well, you should see the test run analytics on the Buildkite Test Engine dashboard. From db65a82beee012a743369ade5b34d97c965de80c Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 16 Sep 2024 13:57:51 +1000 Subject: [PATCH 020/102] Complete nav merge --- data/nav.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/nav.yml b/data/nav.yml index 5dd73ebafa..045cbcbb56 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -413,8 +413,8 @@ path: "integrations/pagerduty" - name: "Slack" path: "integrations/slack" -- name: "Test Analytics" - path: "test-analytics" +- name: "Test Engine" + path: "test-engine" children: - name: "Overview" path: "test-engine" From 5eaa1abc22849d3a3d6a3a351831dcd78eb1b19a Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 16 Sep 2024 14:00:41 +1000 Subject: [PATCH 021/102] Fix Test Engine landing page. --- pages/test_analytics.md | 53 ----------------------------------------- pages/test_engine.md | 29 +++++++++++----------- 2 files changed, 15 insertions(+), 67 deletions(-) delete mode 100644 pages/test_analytics.md diff --git a/pages/test_analytics.md b/pages/test_analytics.md deleted file mode 100644 index 05ecc3712f..0000000000 --- a/pages/test_analytics.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -template: "landing_page" ---- - -# Buildkite Test Engine - -Scale out your testing across any framework with Buildkite Test Engine. Get more out of fewer tests with performance insights to speed up builds and isolate unreliable tests. - -Where [Buildkite Pipelines](/docs/pipelines) helps you automate your CI/CD pipelines, Test Engine helps you track and analyze the steps in these pipelines, by: - -- Shipping code to production faster through test suite optimization. -- Working directly with Buildkite Pipelines, as well as other CI/CD applications. -- Identifying, fixing, and monitoring test suite performance. -- Tracking, improving, and monitoring test suite reliability. - -<%= image "overview.png", width: 975, height: 205, alt: "Screenshot of test suite trend showing five metrics over 28 days" %> - -## Get started - -Run through the 'Getting started' section of these Test Engine docs, beginning with [Configuring test suites](/docs/test-analytics/test-suites) for an overview of Test Engine's concepts and functionality, followed by the appropriate test collector for project's language: - - - -
- <%= button ":rspec: RSpec", "/docs/test-analytics/ruby-collectors#rspec-collector" %> - <%= button ":ruby: minitest", "/docs/test-analytics/ruby-collectors#minitest-collector" %> - <%= button ":jest: Jest", "/docs/test-analytics/javascript-collectors#configure-the-test-framework-jest" %> - <%= button ":mocha: Mocha", "/docs/test-analytics/javascript-collectors#configure-the-test-framework-mocha" %> - <%= button ":cypress: Cypress", "/docs/test-analytics/javascript-collectors#configure-the-test-framework-cypress" %> - <%= button ":jasmine: Jasmine", "/docs/test-analytics/javascript-collectors#configure-the-test-framework-jasmine" %> - <%= button ":playwright: Playwright", "/docs/test-analytics/javascript-collectors#configure-the-test-framework-playwright" %> - <%= button ":swift: Swift", "/docs/test-analytics/swift-collectors" %> - <%= button ":android: Android", "/docs/test-analytics/android-collectors" %> - <%= button ":pytest: pytest", "/docs/test-analytics/python-collectors" %> - <%= button ":golang: Go", "/docs/test-analytics/golang-collectors" %> - <%= button ":junit: JUnit", "/docs/test-analytics/importing-junit-xml" %> - <%= button ":dotnet: .NET", "/docs/test-analytics/dotnet-collectors" %> - <%= button ":elixir: Elixir", "/docs/test-analytics/elixir-collectors" %> - <%= button ":rust: Rust", "/docs/test-analytics/rust-collectors" %> -
- - - -You can also upload test results by importing [JSON](/docs/test-analytics/importing-json) or [JUnit XML](/docs/test-analytics/importing-junit-xml). - -
- -<%= tiles "test_analytics_features" %> - ->📘 Data retention -> The data uploaded to Test Analytics is stored in S3 and deleted after six months. - -<%= tiles "test_analytics_guides" %> diff --git a/pages/test_engine.md b/pages/test_engine.md index 0c87b04f47..fd34867c34 100644 --- a/pages/test_engine.md +++ b/pages/test_engine.md @@ -2,20 +2,23 @@ template: "landing_page" --- -# Buildkite Test Analytics +# Buildkite Test Engine -Where Buildkite Pipelines help you automate your build pipelines, -Test Analytics helps you track and analyze the steps in that pipeline that involve tests: +Scale out your testing across any framework with Buildkite Test Engine. Get more out of fewer tests with performance insights to speed up builds and isolate unreliable tests -- Ship code to production faster by optimizing test suites -- Works with any continuous integration -- Identify, fix, and monitor test suite performance -- Track, improve, and monitor test suite reliability +Where [Buildkite Pipelines](/docs/pipelines) helps you automate your CI/CD pipelines, Test Engine helps you track and analyze the steps in these pipelines, by: + +- Shipping code to production faster through test suite optimization. +- Working directly with Buildkite Pipelines, as well as other CI/CD applications. +- Identifying, fixing, and monitoring test suite performance. +- Tracking, improving, and monitoring test suite reliability. <%= image "overview.png", width: 975, height: 205, alt: "Screenshot of test suite trend showing five metrics over 28 days" %> ## Get started +Run through the 'Getting started' section of these Test Engine docs, beginning with [Configuring test suites](/docs/test-engine/test-suites) for an overview of Test Engine's concepts and functionality, followed by the appropriate test collector for project's language: +
@@ -40,13 +43,11 @@ Test Analytics helps you track and analyze the steps in that pipeline that invol You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). ->📘 Data retention -> The data uploaded to Test Analytics is stored in S3 and deleted after six months. - ----- +
-<%= tiles "test_analytics_features" %> +<%= tiles "test_engine_features" %> ----- +> 📘 Data retention +> The data uploaded to Test Engine is stored in S3 and deleted after six months. -<%= tiles "test_analytics_guides" %> +<%= tiles "test_engine_guides" %> From b20b38bcb12f7ca71f9bcbd3ac9612e5d9b5ca5a Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 16 Sep 2024 14:11:56 +1000 Subject: [PATCH 022/102] Resolve remaining broken links due to page rearrangements. --- pages/packages/security/permissions.md | 2 +- pages/platform.md | 2 +- pages/team_management/permissions.md | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pages/packages/security/permissions.md b/pages/packages/security/permissions.md index bf1fad1ce9..02dde7a9be 100644 --- a/pages/packages/security/permissions.md +++ b/pages/packages/security/permissions.md @@ -22,7 +22,7 @@ As an organization administrator, you can access the [**Organization Settings** - Add new teams or edit existing ones in the [**Team** section](https://buildkite.com/organizations/~/teams). - * After selecting a team, you can view and administer the member-, [pipeline-](/docs/team-management/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. + * After selecting a team, you can view and administer the member-, [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. - [Enable Buildkite Packages](#enabling-buildkite-packages) for your Buildkite organization. diff --git a/pages/platform.md b/pages/platform.md index b1ffffcae1..b8e712948e 100644 --- a/pages/platform.md +++ b/pages/platform.md @@ -6,7 +6,7 @@ template: "landing_page" The Buildkite Scale-Out Delivery Platform is an adaptable, composable, and scalable platform with everything platform teams need to build software delivery systems for their businesses—and rapidly deliver value to users. -The Buildkite platform documentation contains docs for _platform_-level features of Buildkite available across Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-analytics), as well as [Packages](/docs/packages). This area of the docs covers the following topics: +The Buildkite platform documentation contains docs for _platform_-level features of Buildkite available across Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-engine), as well as [Packages](/docs/packages). This area of the docs covers the following topics: - [Team management](/docs/team-management), with guidelines on how to manage your users and teams across the Buildkite platform for Pipelines, Test Engine and Packages. diff --git a/pages/team_management/permissions.md b/pages/team_management/permissions.md index 4ea70272ff..16cc0fc588 100644 --- a/pages/team_management/permissions.md +++ b/pages/team_management/permissions.md @@ -31,7 +31,7 @@ A user who is a _Buildkite organization administrator_ can access the [**Organiz - From the **Teams** page: * Create a new team, using the **New Team** button. - * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. + * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. **Note:** Registry-level settings are only available once [Buildkite Packages has been enabled](/docs/packages/permissions#enabling-buildkite-packages). @@ -57,7 +57,7 @@ A user who is a _team maintainer_ on an existing team can: * Remove a user from this team, by selecting the user's **Remove** button. * Change the permission for all users in this team on any: - - [pipeline](#manage-teams-and-permissions-pipeline-level-permissions) in the team to **Full Access**, **Build & Read** or **Read Only**. + - [pipeline](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions) in the team to **Full Access**, **Build & Read** or **Read Only**. - [test suite](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) in the team to **Full Access** or **Read Only**. - [registry](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team to **Full Access**, **Read & Write** or **Read Only**. @@ -84,7 +84,7 @@ A user who is a _team maintainer_ on an existing team can: As indicated in the Buildkite interface, a user who is in a team is known as a **Team Member**, and such users have fewer permissions within the team (that is, no team management capabilities) than a **Team Maintainer**. -All team members in a team have the same level of access to the [pipelines](#manage-teams-and-permissions-pipeline-level-permissions), [test suites](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), and [registries](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team. If you need to have more fine grained control over the pipelines, test suites or registries in a team, you can create more teams with different permissions. +All team members in a team have the same level of access to the [pipelines](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suites](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), and [registries](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team. If you need to have more fine grained control over the pipelines, test suites or registries in a team, you can create more teams with different permissions. > 🚧 Changing **Full Access** permissions on pipelines, test suites and registries > As a team maintainer, once you change the permission on any of these items away from **Full Access**, you could lose the ability to change the permissions on that item again. This can happen if you are no longer a member of a team that provides **Full Access** to this item. From 18fd9fbe500ee790d4b85ee0bdacbfe711094852 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 16 Sep 2024 16:43:23 +1000 Subject: [PATCH 023/102] Add Packages to Buildkite Docs landing page. --- app/views/homepage/_products.html.erb | 11 ++++- app/views/homepage/_references.html.erb | 55 ++++++++++++++----------- 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/app/views/homepage/_products.html.erb b/app/views/homepage/_products.html.erb index 45f5a7854b..d6b9ebc63a 100644 --- a/app/views/homepage/_products.html.erb +++ b/app/views/homepage/_products.html.erb @@ -14,7 +14,16 @@ Test Engine graphic

Test Engine

-

Real-time tracking and monitoring for your tests

+

Real-time, scalable tracking and monitoring for your tests

+
+ + + +
+ Packages graphic +
+

Packages

+

Scale out asset management across any ecosystem

diff --git a/app/views/homepage/_references.html.erb b/app/views/homepage/_references.html.erb index 20a0a1406f..b1b867764a 100644 --- a/app/views/homepage/_references.html.erb +++ b/app/views/homepage/_references.html.erb @@ -1,7 +1,7 @@ <% references = [ { - title: "Pipeline", + title: "Pipelines", links: [ { title: "Step types", @@ -23,41 +23,29 @@ ] }, { - title: "Agent", + title: "Test Engine", links: [ { - title: "Configuration settings", - link: "/docs/agent/v3/configuration" - }, - { - title: "Lifecycle hooks", - link: "/docs/agent/v3/hooks" - }, - { - title: "CLI commands", - link: "/docs/agent/v3/cli-reference" + title: "JSON test results", + link: "/docs/test-engine/importing-json" }, { - title: "Elastic Stack template parameters", - link: "/docs/agent/v3/elastic-ci-aws/parameters" + title: "Environment variables", + link: "/docs/test-engine/ci-environments" } ] }, { - title: "Test Engine", + title: "Packages", links: [ { - title: "JSON test results", - link: "/docs/test-engine/importing-json" - }, - { - title: "Environment variables", - link: "/docs/test-engine/ci-environments" + title: "Package ecosystems", + link: "/docs/packages/alpine" } ] }, { - title: "API", + title: "APIs", links: [ { title: "REST API", @@ -72,13 +60,34 @@ link: "/docs/apis/webhooks" } ] + }, + { + title: "Agent", + links: [ + { + title: "Configuration settings", + link: "/docs/agent/v3/configuration" + }, + { + title: "Lifecycle hooks", + link: "/docs/agent/v3/hooks" + }, + { + title: "CLI commands", + link: "/docs/agent/v3/cli-reference" + }, + { + title: "Elastic Stack template parameters", + link: "/docs/agent/v3/elastic-ci-aws/parameters" + } + ] } ] %>
-

APIs and references

+

References and APIs

run_env[<%= key['name'] %>] <%= key['environment_variable'] %>
<%= field['name'] %> <%= '(required)' if field['required'] %> <%= field['type'] %> <%= render_enumerated_values(field['enumerated_values']) %>
<%= field['name'] %> <%= '(required)' if field['required'] %> <%= field['type'] %> <%= render_enumerated_values(field['enumerated_values']) %>
<%= field['name'] %> <%= '(required)' if field['required'] %> <%= field['type'] %> <%= render_enumerated_values(field['enumerated_values']) %>
<%= field['name'] %> <%= '(required)' if field['required'] %> <%= field['type'] %> <%= render_enumerated_values(field['enumerated_values']) %>
<%= field['name'] %> <%= '(required)' if field['required'] %> <%= field['type'] %> <%= render_enumerated_values(field['enumerated_values']) %>
- - <% TEST_SPLITTING_ENV['predefined'].each do |var| %> - - - - - <% end %> - -
- <%= var['name'] %> # - - <% var['desc'].each do |d| %> - <%= render_markdown(text: d) %> - <% end %> -
- - - -#### Mandatory environment variables - -The following mandatory environment variables must be set. - - - - <% TEST_SPLITTING_ENV['mandatory'].each do |var| %> - - - - - <% end %> - -
- <%= var['name'] %> # - - <% var['desc'].each do |d| %> - <%= render_markdown(text: d) %> - <% end %> -
- - - -#### Optional environment variables - -The following optional environment variables can also be used to configure the Test Splitter's behavior. - - - - <% TEST_SPLITTING_ENV['optional'].each do |var| %> - - - - - <% end %> - -
- <%= var['name'] %> # -

- Default: - <%= var['default'] %> -

-
- <% var['desc'].each do |d| %> - <%= render_markdown(text: d) %> - <% end %> -
- - -### Update the pipeline step - -With the environment variables configured, you can now update your pipeline step to use test-splitter instead of running RSpec. The following example pipeline step demonstrates how to partition your test suite across 10 nodes. - -``` -steps: - - name: "RSpec" - command: ./test-splitter - parallelism: 10 - env: - BUILDKITE_SPLITTER_SUITE_SLUG: my-suite - BUILDKITE_SPLITTER_API_ACCESS_TOKEN: your-secret-token -``` -{: codeblock-file="pipeline.yml"} +Learn more about how to configure test splitting for your test suites in [Configuring test splitting](/docs/test-engine/test-splitting/configuring). diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md new file mode 100644 index 0000000000..7ace95e015 --- /dev/null +++ b/pages/test_engine/test_splitting/configuring.md @@ -0,0 +1,108 @@ +# Configuring test splitting + +Buildkite maintains its open source Test Splitter ([test-splitter](https://github.com/buildkite/test-splitter)) tool. This tool uses your Buildkite Test Engine test suite data to intelligently partition tests throughout your test suite into multiple sets, such that each set of tests runs in parallel across your agents. This process is known as _orchestration_ and results in a _test plan_, where a test plan defines which tests are run on which agents. Currently, the Test Splitter tool only supports RSpec. + +## Dependencies + +The Test Splitter relies on execution timing data captured by the Buildkite test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](./ruby-collectors) for your test suite. + +## Installation + +The [latest version of test-splitter](https://github.com/buildkite/test-splitter/releases) can be downloaded from GitHub for installation to your agent/s. Binaries are available for both Mac and Linux with 64-bit ARM and AMD architectures. Download the executable and make it available in your testing environment. + +## Using the test splitter + +Once you have downloaded the test-splitter binary and it's executable in your Buildkite pipeline, you'll need to configure some additional environment variables for the test splitter to function. You can then update your pipeline step to call test-splitter instead of calling RSpec to run your tests. + +### Configure environment variables + +The Test Splitter tool uses a number of [predefined](#predefined-environment-variables), [mandatory](#mandatory-environment-variables), and [optional](#optional-environment-variables) environment variables. + + + +#### Predefined environment variables + +By default, the following predefined environment variables are available to your testing environment and do not need any further configuration. If, however, you use Docker or some other type of containerization tool to run your tests, and you wish to use these predefined environment variables in these tests, you may need to expose these environment variables to your containers. + + + + <% TEST_SPLITTING_ENV['predefined'].each do |var| %> + + + + + <% end %> + +
+ <%= var['name'] %> # + + <% var['desc'].each do |d| %> + <%= render_markdown(text: d) %> + <% end %> +
+ + + +#### Mandatory environment variables + +The following mandatory environment variables must be set. + + + + <% TEST_SPLITTING_ENV['mandatory'].each do |var| %> + + + + + <% end %> + +
+ <%= var['name'] %> # + + <% var['desc'].each do |d| %> + <%= render_markdown(text: d) %> + <% end %> +
+ + + +#### Optional environment variables + +The following optional environment variables can also be used to configure the Test Splitter's behavior. + + + + <% TEST_SPLITTING_ENV['optional'].each do |var| %> + + + + + <% end %> + +
+ <%= var['name'] %> # +

+ Default: + <%= var['default'] %> +

+
+ <% var['desc'].each do |d| %> + <%= render_markdown(text: d) %> + <% end %> +
+ + +### Update the pipeline step + +With the environment variables configured, you can now update your pipeline step to use test-splitter instead of running RSpec. The following example pipeline step demonstrates how to partition your test suite across 10 nodes. + +``` +steps: + - name: "RSpec" + command: ./test-splitter + parallelism: 10 + env: + BUILDKITE_SPLITTER_SUITE_SLUG: my-suite + BUILDKITE_SPLITTER_API_ACCESS_TOKEN: your-secret-token +``` +{: codeblock-file="pipeline.yml"} From 21c6a7b03451057f7957b5b2b261d10830d53e97 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 18 Sep 2024 16:41:18 +1000 Subject: [PATCH 026/102] Add test splitting link tile to Test Engine main overview page. --- data/tiles.yml | 3 +++ pages/test_engine/test_splitting.md | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/data/tiles.yml b/data/tiles.yml index 027ac27d87..e590682434 100644 --- a/data/tiles.yml +++ b/data/tiles.yml @@ -6,6 +6,9 @@ test_engine_features: - title: "Find and fix flaky tests" url: "/docs/test-engine/test-suites#detecting-flaky-tests" desc: "Quickly identify which tests are the most disruptive for your team, and get a head-start on fixing them." + - title: "Split tests evenly across agents" + url: "/docs/test-engine/test-splitting" + desc: "Reduce your overall pipeline build times, especially for pipelines with highly complex and computationally intensive test suites." test_engine_guides: - title: "Languages" links: diff --git a/pages/test_engine/test_splitting.md b/pages/test_engine/test_splitting.md index 2b9d8f1b6c..eb631ca148 100644 --- a/pages/test_engine/test_splitting.md +++ b/pages/test_engine/test_splitting.md @@ -2,7 +2,7 @@ Test splitting is a feature that: -- Allows you to substantially reduce your overall build times, especially for pipelines with highly complex and computationally intensive test suites. +- Allows you to substantially reduce the duration of your overall build times, especially for pipelines with highly complex and computationally intensive test suites. - Intelligently partitions your test suites to run in parallel across multiple agents, with the intent to even out test execution times across your agents, such that each agent will complete its partitioned test executions at approximately similar times. The following image from Test Engine's test splitting setup page illustrates how this feature works. In this example, _without_ test splitting, the test suite build time would take as long as it takes for the slowest combination of tests and agent (known as a partition) to run, which is 10 minutes. Since the sum of all test executions across all agents is 16 minutes, _with_ test splitting implemented, all four partitions would take approximately 4 minutes to run, such that the overall test suite build time would be approximately 4 minutes, or a 6-minute reduction. From 194d1a168e963bfe348c308a9284d8d1ced8d644 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 18 Sep 2024 16:48:21 +1000 Subject: [PATCH 027/102] Add link to test splitting overview page from configuring test suites page and fix broken link as a result of page move and URL change. --- pages/test_engine/test_splitting/configuring.md | 2 +- pages/test_engine/test_suites.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 7ace95e015..3e77fb2bc1 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -4,7 +4,7 @@ Buildkite maintains its open source Test Splitter ([test-splitter](https://githu ## Dependencies -The Test Splitter relies on execution timing data captured by the Buildkite test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](./ruby-collectors) for your test suite. +The Test Splitter relies on execution timing data captured by the Buildkite test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite. ## Installation diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index 5ffdee728a..def6a7ac73 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -14,6 +14,8 @@ Test Engine works even when your test runs are split across different agents by The information that serves as a unique build identifier differs between CI environments. For details, see `run_env[key]` environment variables on our [CI environments page](/docs/test-engine/ci-environments). +You can even speed up the duration of tests running in parallel across multiple agents by implementing [test splitting](/docs/test-engine/test-splitting). + ## Compare across branches All test suites have a default branch so you can track trends for your most important codebase, and compare it to results across all branches. From 71859beda24db152594bb419464bd46a0723c741 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 18 Sep 2024 16:59:56 +1000 Subject: [PATCH 028/102] Minor fixes. --- app/views/homepage/_popular_guides.html.erb | 2 +- pages/test_engine.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/homepage/_popular_guides.html.erb b/app/views/homepage/_popular_guides.html.erb index 3382ac42a9..3426fc904b 100644 --- a/app/views/homepage/_popular_guides.html.erb +++ b/app/views/homepage/_popular_guides.html.erb @@ -32,7 +32,7 @@ }, { id: "glossary", - title: "Glossary", + title: "Pipelines glossary", summary: "A list of common terms that describe key concepts", link: "/docs/pipelines/glossary", } diff --git a/pages/test_engine.md b/pages/test_engine.md index fd34867c34..5581e223b4 100644 --- a/pages/test_engine.md +++ b/pages/test_engine.md @@ -4,7 +4,7 @@ template: "landing_page" # Buildkite Test Engine -Scale out your testing across any framework with Buildkite Test Engine. Get more out of fewer tests with performance insights to speed up builds and isolate unreliable tests +Scale out your testing across any framework with Buildkite Test Engine. Get more out of fewer tests with performance insights to speed up builds and isolate unreliable tests. Where [Buildkite Pipelines](/docs/pipelines) helps you automate your CI/CD pipelines, Test Engine helps you track and analyze the steps in these pipelines, by: From f15ebeba33a9ebd9e0dae172db74af3d896642db Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 19 Sep 2024 11:29:32 +1000 Subject: [PATCH 029/102] Use a slightly less ambiguous term. --- pages/test_engine/test_suites.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index def6a7ac73..2a23dd396d 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -14,7 +14,7 @@ Test Engine works even when your test runs are split across different agents by The information that serves as a unique build identifier differs between CI environments. For details, see `run_env[key]` environment variables on our [CI environments page](/docs/test-engine/ci-environments). -You can even speed up the duration of tests running in parallel across multiple agents by implementing [test splitting](/docs/test-engine/test-splitting). +You can also speed up the duration of tests running in parallel across multiple agents by implementing [test splitting](/docs/test-engine/test-splitting). ## Compare across branches From d65ad507b2369fb5eb9f89ec2c639afc847a8461 Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Thu, 19 Sep 2024 15:26:02 +1200 Subject: [PATCH 030/102] Rename BUILDKITE_SPLITTER_* to BUILDKITE_TEST_ENGINE_* --- data/content/test_splitting_env.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/data/content/test_splitting_env.yaml b/data/content/test_splitting_env.yaml index 422ae9aa71..b8514c3cf3 100644 --- a/data/content/test_splitting_env.yaml +++ b/data/content/test_splitting_env.yaml @@ -21,37 +21,37 @@ predefined: - The UUID of the step group in the pipeline build. Test Splitter uses this UUID along with `BUILDKITE_BUILD_ID` to uniquely identify the test plan. mandatory: - - name: BUILDKITE_SPLITTER_API_ACCESS_TOKEN + - name: BUILDKITE_TEST_ENGINE_API_ACCESS_TOKEN desc: - Buildkite API access token with `read_suites`, `read_test_plan`, and `write_test_plan` scopes. You can create an [API access token](https://buildkite.com/user/api-access-tokens) from **Personal Settings** > **API Access Tokens** in the Buildkite interface. - - name: BUILDKITE_SPLITTER_SUITE_SLUG + - name: BUILDKITE_TEST_ENGINE_SUITE_SLUG desc: - The slug of your Buildkite Test Engine test suite. You can find the suite slug in the url for your test suite. - "For example, the slug for the url: `https://buildkite.com/organizations/my-organization/analytics/suites/my-suite` is `my-suite`." optional: - - name: BUILDKITE_SPLITTER_DEBUG_ENABLED + - name: BUILDKITE_TEST_ENGINE_DEBUG_ENABLED default: false desc: - A flag to enable more verbose logging. - - name: BUILDKITE_SPLITTER_RETRY_COUNT + - name: BUILDKITE_TEST_ENGINE_RETRY_COUNT default: 0 desc: - - The number of retries permitted. Test Splitter runs the test command defined in `BUILDKITE_SPLITTER_TEST_CMD`, and retries only the failing tests for a maximum of `BUILDKITE_SPLITTER_RETRY_COUNT` times. For RSpec, the Test Splitter runs `BUILDKITE_SPLITTER_TEST_CMD` with `--only-failures` as the retry command. - - name: BUILDKITE_SPLITTER_SPLIT_BY_EXAMPLE + - The number of retries permitted. Test Splitter runs the test command defined in `BUILDKITE_TEST_ENGINE_TEST_CMD`, and retries only the failing tests for a maximum of `BUILDKITE_TEST_ENGINE_RETRY_COUNT` times. For RSpec, the Test Splitter runs `BUILDKITE_TEST_ENGINE_TEST_CMD` with `--only-failures` as the retry command. + - name: BUILDKITE_TEST_ENGINE_SPLIT_BY_EXAMPLE default: false desc: - A flag to enable split by example. When this option is `true`, the Test Splitter will split the execution of slow test files over multiple partitions. - - name: BUILDKITE_SPLITTER_TEST_CMD + - name: BUILDKITE_TEST_ENGINE_TEST_CMD default: bundle exec rspec {{testExamples}} desc: - The test command to run your tests. The Test Splitter will replace and populate the `{{testExamples}}` placeholder with the test plan. - - name: BUILDKITE_SPLITTER_TEST_FILE_EXCLUDE_PATTERN + - name: BUILDKITE_TEST_ENGINE_TEST_FILE_EXCLUDE_PATTERN desc: - - The glob pattern to exclude certain test files or directories. The exclusion will be applied after discovering the test files using a pattern configured with `BUILDKITE_SPLITTER_TEST_FILE_PATTERN`. + - The glob pattern to exclude certain test files or directories. The exclusion will be applied after discovering the test files using a pattern configured with `BUILDKITE_TEST_ENGINE_TEST_FILE_PATTERN`. - _This option accepts the pattern syntax supported by the [zzglob](https://github.com/DrJosh9000/zzglob?tab=readme-ov-file#pattern-syntax) library._ - - name: BUILDKITE_SPLITTER_TEST_FILE_PATTERN + - name: BUILDKITE_TEST_ENGINE_TEST_FILE_PATTERN default: spec/**/*_spec.rb desc: - - The glob pattern to discover test files. You can exclude certain test files or directories from the discovered test files using a pattern that can be configured with `BUILDKITE_SPLITTER_TEST_FILE_EXCLUDE_PATTERN`. + - The glob pattern to discover test files. You can exclude certain test files or directories from the discovered test files using a pattern that can be configured with `BUILDKITE_TEST_ENGINE_TEST_FILE_EXCLUDE_PATTERN`. - _This option accepts the pattern syntax supported by the [zzglob](https://github.com/DrJosh9000/zzglob?tab=readme-ov-file#pattern-syntax) library._ From f12e00e262c31d20dba4e3b0213d89d201257972 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 19 Sep 2024 13:54:08 +1000 Subject: [PATCH 031/102] Tweak intro to 'Configuring test suites' page. --- pages/test_engine/test_suites.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index 2a23dd396d..ed273cc0c4 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -1,6 +1,6 @@ # Configuring test suites -In Test Engine, a test _suite_ is a collection of tests. A suite has a _run_, which is the execution of tests in a suite. A suite's run is analogous to a pipeline's build. +In Test Engine, a _test suite_ (or _suite_) is a collection of tests. A suite has a _run_, which is the execution of tests in a suite. A suite's run is analogous to a pipeline's build. Many organizations set up one suite per test framework, for example one suite for RSpec, and another suite for Jest. Others use a common standard, such as JUnit XML, to combine tests from multiple frameworks to set up custom backend and frontend suites. @@ -10,11 +10,13 @@ To delete a suite, or regenerate its API token, go to suite settings. ## Parallelized builds -Test Engine works even when your test runs are split across different agents by de-duplicating against the Test Engine API token and unique build identifier. +When your [pipeline's builds are run in parallel across multiple agents](/docs/tutorials/parallel-builds), a test suite can also be run as parallel jobs across these agents, although Test Engine reports this entire build execution as part of the same test run. + +When a test run has been split across multiple agents, each test is de-duplicated by both the Test Engine API token and unique build identifier. The information that serves as a unique build identifier differs between CI environments. For details, see `run_env[key]` environment variables on our [CI environments page](/docs/test-engine/ci-environments). -You can also speed up the duration of tests running in parallel across multiple agents by implementing [test splitting](/docs/test-engine/test-splitting). +You can speed up the duration of parallelized test suite runs (across multiple agents) by implementing [test splitting](/docs/test-engine/test-splitting). ## Compare across branches From 25789a34cfd82d7eecd976888899074542f00fd6 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 19 Sep 2024 14:07:17 +1000 Subject: [PATCH 032/102] Minor wording tweak. --- pages/test_engine/test_suites.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index ed273cc0c4..582b08d5d3 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -10,7 +10,7 @@ To delete a suite, or regenerate its API token, go to suite settings. ## Parallelized builds -When your [pipeline's builds are run in parallel across multiple agents](/docs/tutorials/parallel-builds), a test suite can also be run as parallel jobs across these agents, although Test Engine reports this entire build execution as part of the same test run. +When your [pipeline's builds are run in parallel across multiple agents](/docs/tutorials/parallel-builds), a test suite can also be run as parallel jobs across these agents, although Test Engine will report the entire build execution as part of the same test run. When a test run has been split across multiple agents, each test is de-duplicated by both the Test Engine API token and unique build identifier. From 427188e2a04c9b409c5e8c844e08df2b24afc814 Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Thu, 19 Sep 2024 15:58:12 +1200 Subject: [PATCH 033/102] Add 2 new mandatory variables --- data/content/test_splitting_env.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/data/content/test_splitting_env.yaml b/data/content/test_splitting_env.yaml index b8514c3cf3..c148a3d421 100644 --- a/data/content/test_splitting_env.yaml +++ b/data/content/test_splitting_env.yaml @@ -24,6 +24,15 @@ mandatory: - name: BUILDKITE_TEST_ENGINE_API_ACCESS_TOKEN desc: - Buildkite API access token with `read_suites`, `read_test_plan`, and `write_test_plan` scopes. You can create an [API access token](https://buildkite.com/user/api-access-tokens) from **Personal Settings** > **API Access Tokens** in the Buildkite interface. + - name: BUILDKITE_TEST_ENGINE_RESULT_PATH + desc: + - The path to store the test result. Test Splitter uses this environment variable to tell the runner where to store the test result. Test Splitter reads the test result after each test run for retries and verification. + - For RSpec, the result is generated using the `--format json` and `--out` CLI options, while for Jest, it is generated using the `--json` and `--outputFile` options. We have included these options in the default test command for RSpec and Jest. If you need to customize your test command, make sure to append the CLI options to save the result to a file. + - Please refer to the `BUILDKITE_TEST_ENGINE_TEST_CMD` environment variable for more details. + - "**Note:** Test Splitter will not delete the file after running the test, however it will be deleted by Buildkite Agent as part of build lifecycle." + - name: BUILDKITE_TEST_ENGINE_RUNNER + desc: + - The test runner to use for running tests. Currently `rspec` and `jest` are supported. - name: BUILDKITE_TEST_ENGINE_SUITE_SLUG desc: - The slug of your Buildkite Test Engine test suite. You can find the suite slug in the url for your test suite. From ecb2e2a3cd8bb250673d3766d508cb4bbbf26715 Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Thu, 19 Sep 2024 16:10:08 +1200 Subject: [PATCH 034/102] Rename Test Splitter to bktec --- data/content/test_splitting_env.yaml | 14 +++++------ .../test_engine/test_splitting/configuring.md | 24 ++++++++++--------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/data/content/test_splitting_env.yaml b/data/content/test_splitting_env.yaml index c148a3d421..6df9ca4870 100644 --- a/data/content/test_splitting_env.yaml +++ b/data/content/test_splitting_env.yaml @@ -1,7 +1,7 @@ predefined: - name: BUILDKITE_BUILD_ID desc: - - The UUID of the pipeline build. Test Splitter uses this UUID along with `BUILDKITE_STEP_ID` to uniquely identify the test plan. + - The UUID of the pipeline build. bktec uses this UUID along with `BUILDKITE_STEP_ID` to uniquely identify the test plan. - name: BUILDKITE_JOB_ID desc: - The UUID of the job in the pipeline's build. @@ -18,7 +18,7 @@ predefined: - Ensure you configure `parallelism` in your pipeline definition. Learn more about parallel build steps in [Concurrency and parallelism](https://buildkite.com/docs/pipelines/controlling-concurrency#concurrency-and-parallelism). - name: BUILDKITE_STEP_ID desc: - - The UUID of the step group in the pipeline build. Test Splitter uses this UUID along with `BUILDKITE_BUILD_ID` to uniquely identify the test plan. + - The UUID of the step group in the pipeline build. bktec uses this UUID along with `BUILDKITE_BUILD_ID` to uniquely identify the test plan. mandatory: - name: BUILDKITE_TEST_ENGINE_API_ACCESS_TOKEN @@ -26,10 +26,10 @@ mandatory: - Buildkite API access token with `read_suites`, `read_test_plan`, and `write_test_plan` scopes. You can create an [API access token](https://buildkite.com/user/api-access-tokens) from **Personal Settings** > **API Access Tokens** in the Buildkite interface. - name: BUILDKITE_TEST_ENGINE_RESULT_PATH desc: - - The path to store the test result. Test Splitter uses this environment variable to tell the runner where to store the test result. Test Splitter reads the test result after each test run for retries and verification. + - The path to store the test result. bktec uses this environment variable to tell the runner where to store the test result. bktec reads the test result after each test run for retries and verification. - For RSpec, the result is generated using the `--format json` and `--out` CLI options, while for Jest, it is generated using the `--json` and `--outputFile` options. We have included these options in the default test command for RSpec and Jest. If you need to customize your test command, make sure to append the CLI options to save the result to a file. - Please refer to the `BUILDKITE_TEST_ENGINE_TEST_CMD` environment variable for more details. - - "**Note:** Test Splitter will not delete the file after running the test, however it will be deleted by Buildkite Agent as part of build lifecycle." + - "**Note:** bktec will not delete the file after running the test, however it will be deleted by Buildkite Agent as part of build lifecycle." - name: BUILDKITE_TEST_ENGINE_RUNNER desc: - The test runner to use for running tests. Currently `rspec` and `jest` are supported. @@ -46,15 +46,15 @@ optional: - name: BUILDKITE_TEST_ENGINE_RETRY_COUNT default: 0 desc: - - The number of retries permitted. Test Splitter runs the test command defined in `BUILDKITE_TEST_ENGINE_TEST_CMD`, and retries only the failing tests for a maximum of `BUILDKITE_TEST_ENGINE_RETRY_COUNT` times. For RSpec, the Test Splitter runs `BUILDKITE_TEST_ENGINE_TEST_CMD` with `--only-failures` as the retry command. + - The command to retry the failed tests. bktec will fill in the `{{testExamples}}` placeholder with the failed tests. If not set, bktec will use the same command defined in `BUILDKITE_SPLITTER_TEST_CMD`. - name: BUILDKITE_TEST_ENGINE_SPLIT_BY_EXAMPLE default: false desc: - - A flag to enable split by example. When this option is `true`, the Test Splitter will split the execution of slow test files over multiple partitions. + - A flag to enable split by example. When this option is `true`, bktec will split the execution of slow test files over multiple partitions. - name: BUILDKITE_TEST_ENGINE_TEST_CMD default: bundle exec rspec {{testExamples}} desc: - - The test command to run your tests. The Test Splitter will replace and populate the `{{testExamples}}` placeholder with the test plan. + - The test command to run your tests. bktec will replace and populate the `{{testExamples}}` placeholder with the test plan. - name: BUILDKITE_TEST_ENGINE_TEST_FILE_EXCLUDE_PATTERN desc: - The glob pattern to exclude certain test files or directories. The exclusion will be applied after discovering the test files using a pattern configured with `BUILDKITE_TEST_ENGINE_TEST_FILE_PATTERN`. diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 3e77fb2bc1..7f2303e7bf 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -1,22 +1,22 @@ # Configuring test splitting -Buildkite maintains its open source Test Splitter ([test-splitter](https://github.com/buildkite/test-splitter)) tool. This tool uses your Buildkite Test Engine test suite data to intelligently partition tests throughout your test suite into multiple sets, such that each set of tests runs in parallel across your agents. This process is known as _orchestration_ and results in a _test plan_, where a test plan defines which tests are run on which agents. Currently, the Test Splitter tool only supports RSpec. +Buildkite maintains its open source Buildkite Test Engine Client ([bktec](https://github.com/buildkite/test-engine-client)) tool. This tool uses your Buildkite Test Engine test suite data to intelligently partition tests throughout your test suite into multiple sets, such that each set of tests runs in parallel across your agents. This process is known as _orchestration_ and results in a _test plan_, where a test plan defines which tests are run on which agents. Currently, bktec tool only supports RSpec and Jest. ## Dependencies -The Test Splitter relies on execution timing data captured by the Buildkite test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite. +The bktec relies on execution timing data captured by the Buildkite test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite if you are running Rspec, and [JavaScript test collector](/docs/test-engine/javascript-sollectors) if you are running Jest. ## Installation -The [latest version of test-splitter](https://github.com/buildkite/test-splitter/releases) can be downloaded from GitHub for installation to your agent/s. Binaries are available for both Mac and Linux with 64-bit ARM and AMD architectures. Download the executable and make it available in your testing environment. +The [latest version of bktec](https://github.com/buildkite/test-engine-client/releases) can be downloaded from GitHub for installation to your agent/s. Binaries are available for both Mac and Linux with 64-bit ARM and AMD architectures. Download the executable and make it available in your testing environment. -## Using the test splitter +## Using the bktec -Once you have downloaded the test-splitter binary and it's executable in your Buildkite pipeline, you'll need to configure some additional environment variables for the test splitter to function. You can then update your pipeline step to call test-splitter instead of calling RSpec to run your tests. +Once you have downloaded the bktec binary and it's executable in your Buildkite pipeline, you'll need to configure some additional environment variables for the bktec to function. You can then update your pipeline step to call bktec instead of calling RSpec to run your tests. ### Configure environment variables -The Test Splitter tool uses a number of [predefined](#predefined-environment-variables), [mandatory](#mandatory-environment-variables), and [optional](#optional-environment-variables) environment variables. +The bktec tool uses a number of [predefined](#predefined-environment-variables), [mandatory](#mandatory-environment-variables), and [optional](#optional-environment-variables) environment variables. @@ -68,7 +68,7 @@ The following mandatory environment variables must be set. #### Optional environment variables -The following optional environment variables can also be used to configure the Test Splitter's behavior. +The following optional environment variables can also be used to configure the bktec's behavior. @@ -94,15 +94,17 @@ The following optional environment variables can also be used to configure the T ### Update the pipeline step -With the environment variables configured, you can now update your pipeline step to use test-splitter instead of running RSpec. The following example pipeline step demonstrates how to partition your test suite across 10 nodes. +With the environment variables configured, you can now update your pipeline step to use bktec instead of running RSpec, or Jest directly. The following example pipeline step demonstrates how to partition your Rspec test suite across 10 nodes. ``` steps: - name: "RSpec" - command: ./test-splitter + command: bktec parallelism: 10 env: - BUILDKITE_SPLITTER_SUITE_SLUG: my-suite - BUILDKITE_SPLITTER_API_ACCESS_TOKEN: your-secret-token + BUILDKITE_TEST_ENGINE_API_ACCESS_TOKEN: your-secret-token + BUILDKITE_TEST_ENGINE_RESULT_PATH: tmp/rspec-result.json + BUILDKITE_TEST_ENGINE_SUITE_SLUG: my-suite + BUILDKITE_TEST_ENGINE_RUNNER: rspec ``` {: codeblock-file="pipeline.yml"} From 79510ae72845130b94415305ef4cc082c0b0f615 Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Thu, 19 Sep 2024 17:17:24 +1200 Subject: [PATCH 035/102] Add BUILDKITE_TEST_ENGINE_RETRY_CMD --- data/content/test_splitting_env.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/data/content/test_splitting_env.yaml b/data/content/test_splitting_env.yaml index 6df9ca4870..f743d5f1e6 100644 --- a/data/content/test_splitting_env.yaml +++ b/data/content/test_splitting_env.yaml @@ -43,10 +43,13 @@ optional: default: false desc: - A flag to enable more verbose logging. + - name: BUILDKITE_TEST_ENGINE_RETRY_CMD + desc: + - The command to retry the failed tests. Test Splitter will fill in the `{{testExamples}}` placeholder with the failed tests. If not set, the Test Splitter will use the same command defined in `BUILDKITE_SPLITTER_TEST_CMD`. - name: BUILDKITE_TEST_ENGINE_RETRY_COUNT default: 0 desc: - - The command to retry the failed tests. bktec will fill in the `{{testExamples}}` placeholder with the failed tests. If not set, bktec will use the same command defined in `BUILDKITE_SPLITTER_TEST_CMD`. + - The number of retries. Test Splitter runs the test command defined in `BUILDKITE_SPLITTER_TEST_CMD` and retries only the failed tests up to `BUILDKITE_SPLITTER_RETRY_COUNT` times, using the retry command defined in `BUILDKITE_SPLITTER_RETRY_CMD`. - name: BUILDKITE_TEST_ENGINE_SPLIT_BY_EXAMPLE default: false desc: From a652239fd63edb14525938de09ca59f67c41ad0c Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Fri, 20 Sep 2024 09:00:59 +1200 Subject: [PATCH 036/102] add bktec to vocab list --- vale/styles/vocab.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/vale/styles/vocab.txt b/vale/styles/vocab.txt index 9d48ab082a..8107b0fabc 100644 --- a/vale/styles/vocab.txt +++ b/vale/styles/vocab.txt @@ -29,6 +29,7 @@ Basecamp Basscss Bazel Bitium +bktec boolean Boomper Buildbox From 844cd4025bfa74d497d86f9c7e95097fd9f03792 Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Fri, 20 Sep 2024 09:41:37 +1200 Subject: [PATCH 037/102] Update bktec installation guide --- data/nav.yml | 11 ++++++++ .../client_installation/debian.md | 25 +++++++++++++++++++ .../client_installation/macos.md | 7 ++++++ .../client_installation/red_hat.md | 13 ++++++++++ .../test_engine/test_splitting/configuring.md | 7 +++++- 5 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 pages/test_engine/test_splitting/client_installation/debian.md create mode 100644 pages/test_engine/test_splitting/client_installation/macos.md create mode 100644 pages/test_engine/test_splitting/client_installation/red_hat.md diff --git a/data/nav.yml b/data/nav.yml index 8a2f38315d..38d9094392 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -443,6 +443,17 @@ path: "test-engine/test-splitting" - name: "Configuring" path: "test-engine/test-splitting/configuring" + - name: "Test Engine Client Installation" + children: + - name: "Debian" + path: "test-engine/test-splitting/client-installation/debian" + - name: "Red Hat" + path: "test-engine/test-splitting/client-installation/red-hat" + - name: "macOS" + path: "test-engine/test-splitting/client-installation/macos" + - name: "Docker" + path: "test-engine/test-splitting/client-installation/docker" + - name: "Languages" children: - name: "Ruby" diff --git a/pages/test_engine/test_splitting/client_installation/debian.md b/pages/test_engine/test_splitting/client_installation/debian.md new file mode 100644 index 0000000000..378d21dcc1 --- /dev/null +++ b/pages/test_engine/test_splitting/client_installation/debian.md @@ -0,0 +1,25 @@ +# Installing Buildkite Test Engine Client on Debian + +1. Ensure you have curl and gpg installed first: + + ```shell + apt update && apt install curl gpg -y + ``` + +1. Install the registry signing key: + + ```shell + curl -fsSL "https://packages.buildkite.com/buildkite/test-engine-client-deb/gpgkey" | gpg --dearmor -o /etc/apt/keyrings/buildkite_test-engine-client-deb-archive-keyring.gpg + ``` + +1. Configure the registry: + + ```shell + echo -e "deb [signed-by=/etc/apt/keyrings/buildkite_test-engine-client-deb-archive-keyring.gpg] https://packages.buildkite.com/buildkite/test-engine-client-deb/any/ any main\ndeb-src [signed-by=/etc/apt/keyrings/buildkite_test-engine-client-deb-archive-keyring.gpg] https://packages.buildkite.com/buildkite/test-engine-client-deb/any/ any main" > /etc/apt/sources.list.d/buildkite-buildkite-test-engine-client-deb.list + ``` + +1. Install the package: + + ```shell + apt update && apt install bktec + ``` diff --git a/pages/test_engine/test_splitting/client_installation/macos.md b/pages/test_engine/test_splitting/client_installation/macos.md new file mode 100644 index 0000000000..a619b98bbe --- /dev/null +++ b/pages/test_engine/test_splitting/client_installation/macos.md @@ -0,0 +1,7 @@ +# Installing Buildkite Test Engine Client on macOS + +bktec can be installed using [Homebrew](https://brew.sh) with [Buildkite tap formulae](https://github.com/buildkite/homebrew-buildkite). To install, run: + +```shell +brew tap buildkite/buildkite && brew install buildkite/buildkite/bktec +``` diff --git a/pages/test_engine/test_splitting/client_installation/red_hat.md b/pages/test_engine/test_splitting/client_installation/red_hat.md new file mode 100644 index 0000000000..ac6a610fe5 --- /dev/null +++ b/pages/test_engine/test_splitting/client_installation/red_hat.md @@ -0,0 +1,13 @@ +# Installing Buildkite Test Engine Client on RedHat + +1. Configure the registry: + + ```shell + echo -e "[test-engine-client-rpm]\nname=Test Engine Client - rpm\nbaseurl=https://packages.buildkite.com/buildkite/test-engine-client-rpm/rpm_any/rpm_any/\$basearch\nenabled=1\nrepo_gpgcheck=1\ngpgcheck=0\ngpgkey=https://packages.buildkite.com/buildkite/test-engine-client-rpm/gpgkey\npriority=1" > /etc/yum.repos.d/test-engine-client-rpm.repo + ``` + +2. Install the package: + + ```shell + dnf install -y bktec + ``` diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 7f2303e7bf..2794df3acc 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -7,8 +7,13 @@ Buildkite maintains its open source Buildkite Test Engine Client ([bktec](https: The bktec relies on execution timing data captured by the Buildkite test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite if you are running Rspec, and [JavaScript test collector](/docs/test-engine/javascript-sollectors) if you are running Jest. ## Installation +bktec is supported on both Linux and macOS with 64-bit ARM and AMD architectures. You can install it using the following installers: -The [latest version of bktec](https://github.com/buildkite/test-engine-client/releases) can be downloaded from GitHub for installation to your agent/s. Binaries are available for both Mac and Linux with 64-bit ARM and AMD architectures. Download the executable and make it available in your testing environment. +- [Debian](client-installation/debian) +- [Red Hat](client-installation/red-hat) +- [macOS](client-installation/macos) + +If you need to install the agent on a system not listed above you'll need to perform a manual installation using one of the binaries from [bktec's releases page](https://github.com/buildkite/test-engine-client/releases/latest). Once you have the binary, make it available in your testing environment. ## Using the bktec From fcaf8db7635041c17398fb7c516994ad1183152b Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Fri, 20 Sep 2024 09:58:20 +1200 Subject: [PATCH 038/102] fix RSpec spelling --- pages/test_engine/test_splitting/configuring.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 2794df3acc..a48e81b147 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -4,7 +4,7 @@ Buildkite maintains its open source Buildkite Test Engine Client ([bktec](https: ## Dependencies -The bktec relies on execution timing data captured by the Buildkite test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite if you are running Rspec, and [JavaScript test collector](/docs/test-engine/javascript-sollectors) if you are running Jest. +The bktec relies on execution timing data captured by the Buildkite test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite if you are running RSpec, and [JavaScript test collector](/docs/test-engine/javascript-sollectors) if you are running Jest. ## Installation bktec is supported on both Linux and macOS with 64-bit ARM and AMD architectures. You can install it using the following installers: @@ -99,7 +99,7 @@ The following optional environment variables can also be used to configure the b ### Update the pipeline step -With the environment variables configured, you can now update your pipeline step to use bktec instead of running RSpec, or Jest directly. The following example pipeline step demonstrates how to partition your Rspec test suite across 10 nodes. +With the environment variables configured, you can now update your pipeline step to use bktec instead of running RSpec, or Jest directly. The following example pipeline step demonstrates how to partition your RSpec test suite across 10 nodes. ``` steps: From 61dd8e6651d6678e6e70a31583692bb59f9d4e10 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Fri, 20 Sep 2024 15:40:20 +1000 Subject: [PATCH 039/102] Rebrand Buildkite Packages to Buildkite Package Registries --- data/nav.yml | 2 +- pages/packages.md | 16 ++++++++-------- pages/packages/alpine.md | 2 +- pages/packages/background.md | 6 +++--- pages/packages/container.md | 2 +- pages/packages/debian.md | 2 +- pages/packages/files.md | 2 +- pages/packages/getting_started.md | 8 ++++---- pages/packages/gradle.md | 2 +- pages/packages/helm.md | 2 +- pages/packages/helm_oci.md | 2 +- pages/packages/javascript.md | 2 +- pages/packages/manage_registries.md | 6 +++--- pages/packages/maven.md | 2 +- pages/packages/private_storage.md | 24 ++++++++++++------------ pages/packages/python.md | 2 +- pages/packages/red_hat.md | 2 +- pages/packages/ruby.md | 2 +- pages/packages/security.md | 4 ++-- pages/packages/security/oidc.md | 14 +++++++------- pages/packages/security/permissions.md | 12 ++++++------ pages/packages/terraform.md | 2 +- 22 files changed, 59 insertions(+), 59 deletions(-) diff --git a/data/nav.yml b/data/nav.yml index 045cbcbb56..0cc018cdd5 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -472,7 +472,7 @@ path: "test-engine/importing-json" - name: "Writing your own collectors" path: "test-engine/your-own-collectors" -- name: "Packages" +- name: "Package Registries" path: "packages" children: - name: "Overview" diff --git a/pages/packages.md b/pages/packages.md index 08f8359e59..a46539e8ce 100644 --- a/pages/packages.md +++ b/pages/packages.md @@ -2,11 +2,11 @@ template: "landing_page" --- -# Buildkite Packages +# Buildkite Package Registries -Scale out asset management across any ecosystem with Buildkite Packages. Avoid the bottleneck of poorly managed and insecure dependencies. +Scale out asset management across any ecosystem with Buildkite Package Registries. Avoid the bottleneck of poorly managed and insecure dependencies. -Buildkite Packages allows you to: +Buildkite Package Registries allows you to: - Manage artifacts and packages from [Buildkite Pipelines](/docs/pipelines), as well as other CI/CD applications that require artifact management. @@ -15,13 +15,13 @@ Buildkite Packages allows you to: As well as storing a collection of packages, a registry also surfaces metadata or attributes associated with a package, such as the package's description, version, contents (files and directories), checksum details, distribution type, dependencies, and so on. > 📘 -> You can enable [Buildkite Packages](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/packages/permissions#enabling-buildkite-packages). +> You can enable [Buildkite Package Registries](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/packages/permissions#enabling-buildkite-packages). ## Get started -Run through the [Getting started](/docs/packages/getting-started) tutorial for a step-by-step guide on how to use Buildkite Packages. +Run through the [Getting started](/docs/packages/getting-started) tutorial for a step-by-step guide on how to use Buildkite Package Registries. -If you're familiar with the basics, explore how to use registries for each of Buildkite Packages' supported package ecosystems: +If you're familiar with the basics, explore how to use registries for each of Buildkite Package Registries' supported package ecosystems: @@ -45,6 +45,6 @@ If you're familiar with the basics, explore how to use registries for each of Bu Learn more about how to: -- Work with Buildkite Packages registries in [Manage registries](/docs/packages/manage-registries). +- Work with registries in [Manage registries](/docs/packages/manage-registries). - Manage access to your registries in [User, team, and registry permissions](/docs/packages/permissions). -- Configure your own private storage for Buildkite Packages in [Private storage](/docs/packages/private-storage). +- Configure your own private storage for Buildkite Package Registries in [Private storage](/docs/packages/private-storage). diff --git a/pages/packages/alpine.md b/pages/packages/alpine.md index a87e1d9554..5cc2763efa 100644 --- a/pages/packages/alpine.md +++ b/pages/packages/alpine.md @@ -1,6 +1,6 @@ # Alpine -Buildkite Packages provides registry support for Alpine-based (apk) packages for Alpine Linux operating systems. +Buildkite Package Registries provides registry support for Alpine-based (apk) packages for Alpine Linux operating systems. Once your Alpine registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the relevant `curl` command presented on your Alpine registry's details page. diff --git a/pages/packages/background.md b/pages/packages/background.md index c6355ac5ae..23def6b566 100644 --- a/pages/packages/background.md +++ b/pages/packages/background.md @@ -36,7 +36,7 @@ Some advanced package creation tools include: Learn more about how: -- Buildkite Packages works through this step-by-step [Getting started](/docs/packages/getting-started) tutorial. -- To work with Buildkite Packages registries in [Manage registries](/docs/packages/manage-registries). +- Buildkite Package Registries works through this step-by-step [Getting started](/docs/packages/getting-started) tutorial. +- To work with registries in [Manage registries](/docs/packages/manage-registries). - To manage access to your registries in [Access controls](/docs/packages/permissions). -- To configure your own private storage for Buildkite Packages in [Private storage](/docs/packages/private-storage). +- To configure your own private storage for Buildkite Package Registries in [Private storage](/docs/packages/private-storage). diff --git a/pages/packages/container.md b/pages/packages/container.md index 549e72d6b9..8ed16a994d 100644 --- a/pages/packages/container.md +++ b/pages/packages/container.md @@ -1,6 +1,6 @@ # Container -Buildkite Packages provides registry support for container-based (Docker) images. +Buildkite Package Registries provides registry support for container-based (Docker) images. Once your container registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload images (generated from your application's build) to this registry via relevant `docker` commands presented on your container registry's details page. diff --git a/pages/packages/debian.md b/pages/packages/debian.md index a2b1f4f5f8..1d6b2eee95 100644 --- a/pages/packages/debian.md +++ b/pages/packages/debian.md @@ -1,6 +1,6 @@ # Debian -Buildkite Packages provides registry support for Debian-based (deb) packages for Debian and Ubuntu operating system variants. +Buildkite Package Registries provides registry support for Debian-based (deb) packages for Debian and Ubuntu operating system variants. Once your Debian registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the `curl` command presented on your Debian registry's details page. diff --git a/pages/packages/files.md b/pages/packages/files.md index 5ba0aa15e0..5c495cf2d1 100644 --- a/pages/packages/files.md +++ b/pages/packages/files.md @@ -1,7 +1,7 @@ # Files -Buildkite Packages provides registry support for generic files to cover some cases where native package management isn't required. +Buildkite Package Registries provides registry support for generic files to cover some cases where native package management isn't required. Once your Files registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload files (of any type and extension) to this registry via the relevant `curl` command presented on your registry details page. diff --git a/pages/packages/getting_started.md b/pages/packages/getting_started.md index 57ae2fd495..d7ca461da7 100644 --- a/pages/packages/getting_started.md +++ b/pages/packages/getting_started.md @@ -1,8 +1,8 @@ # Getting started -👋 Welcome to Buildkite Packages! You can use Packages to house your [packages](/docs/packages/background#package-creation-tools) built through [Buildkite Pipelines](/docs/pipelines) or another CI/CD application, and manage them through dedicated registries. This tutorial takes you through creating a JavaScript registry, cloning and running a simple Node.js package locally, and uploading this package to your new JavaScript registry. +👋 Welcome to Buildkite Package Registries! You can use Package Registries to house your [packages](/docs/packages/background#package-creation-tools) built through [Buildkite Pipelines](/docs/pipelines) or another CI/CD application, and manage them through dedicated registries. This tutorial takes you through creating a JavaScript registry, cloning and running a simple Node.js package locally, and uploading this package to your new JavaScript registry. -While this tutorial uses a Node.js package example, Buildkite Packages supports [other package ecosystems](/docs/packages/manage-registries#create-a-registry-manage-packages-in-a-registry) too. +While this tutorial uses a Node.js package example, Buildkite Package Registries supports [other package ecosystems](/docs/packages/manage-registries#create-a-registry-manage-packages-in-a-registry) too. ## Before you start @@ -74,7 +74,7 @@ Next, configure your Node.js environment to publish Node.js packages to [the Jav { "name": "nodejs-example-package", "version": "1.0.1", - "description": "An example Node.js package for Buildkite Packages", + "description": "An example Node.js package for Buildkite Package Registries", "main": "index.js", "scripts": { "main": "node index.js" @@ -131,4 +131,4 @@ Your JavaScript registry's details page should show your new package with the in That's it! You've created a new Buildkite registry, configured your Node.js environment and project to publish to your new JavaScript registry, and published a Node.js package to this registry. 🎉 -Learn more about how to work with Buildkite Packages in [Manage registries](/docs/packages/manage-registries). +Learn more about how to work with Buildkite Package Registries in [Manage registries](/docs/packages/manage-registries). diff --git a/pages/packages/gradle.md b/pages/packages/gradle.md index d4ca27beba..e62cc25fdc 100644 --- a/pages/packages/gradle.md +++ b/pages/packages/gradle.md @@ -1,6 +1,6 @@ # Gradle -Buildkite Packages provides registry support for Gradle-based Java packages (using the [Maven Publish Plugin](https://docs.gradle.org/current/userguide/publishing_maven.html)). +Buildkite Package Registries provides registry support for Gradle-based Java packages (using the [Maven Publish Plugin](https://docs.gradle.org/current/userguide/publishing_maven.html)). Once your Java registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry by configuring your `build.gradle` file with the Gradle snippet presented on your Java registry's details page. diff --git a/pages/packages/helm.md b/pages/packages/helm.md index 75f59fa901..29310fc820 100644 --- a/pages/packages/helm.md +++ b/pages/packages/helm.md @@ -1,6 +1,6 @@ # Helm -Buildkite Packages provides Helm registry support for distributing Helm charts. +Buildkite Package Registries provides Helm registry support for distributing Helm charts. This page is for standard Helm publishing instructions, alternatively you can also publish to an [OCI-based registry](/docs/packages/helm-oci). diff --git a/pages/packages/helm_oci.md b/pages/packages/helm_oci.md index a35541d855..b9578df446 100644 --- a/pages/packages/helm_oci.md +++ b/pages/packages/helm_oci.md @@ -1,6 +1,6 @@ # Helm OCI -Buildkite Packages provides Helm OCI based registry support for distributing Helm charts. Note, this requires [Helm version 3.8.0](https://helm.sh/docs/topics/registries/) or newer. +Buildkite Package Registries provides Helm OCI based registry support for distributing Helm charts. Note, this requires [Helm version 3.8.0](https://helm.sh/docs/topics/registries/) or newer. Once your Helm OCI registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload charts (generated from your application's build) to this registry via relevant `helm` commands presented on your registry's details page. diff --git a/pages/packages/javascript.md b/pages/packages/javascript.md index 23e017e384..60d2812123 100644 --- a/pages/packages/javascript.md +++ b/pages/packages/javascript.md @@ -1,6 +1,6 @@ # JavaScript -Buildkite Packages provides registry support for JavaScript-based (Node.js npm) packages. +Buildkite Package Registries provides registry support for JavaScript-based (Node.js npm) packages. Once your JavaScript registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry by configuring your `~/.npmrc` and application's relevant `package.json` files with the command/code snippets presented on your JavaScript registry's details page. diff --git a/pages/packages/manage_registries.md b/pages/packages/manage_registries.md index 29c682dde2..47c6779ac4 100644 --- a/pages/packages/manage_registries.md +++ b/pages/packages/manage_registries.md @@ -70,7 +70,7 @@ To update a registry: The registry's updates will appear on the **Registries** page, as well as the registry's details page. -1. If the registry's _OIDC policy_ needs to be configured, learn more about this in [OIDC in Buildkite Packages](/docs/packages/security/oidc). +1. If the registry's _OIDC policy_ needs to be configured, learn more about this in [OIDC in Buildkite Package Registries](/docs/packages/security/oidc). 1. If the registry is _private_ and _registry tokens_ (an alternative to API access tokens) need to be configured, learn more about this in [Configure registry tokens](#update-a-registry-configure-registry-tokens). @@ -97,7 +97,7 @@ Unlike other tokens generated elsewhere in Buildkite, registry tokens can contin ### Configure registry storage -When a new registry is [created](#create-a-registry), it automatically uses the [default Buildkite Packages storage](/docs/packages/private-storage#set-the-default-buildkite-packages-storage) location. However, your new registry's default storage location can be overridden to use another configured storage location. Learn more about configuring private storage in [Private storage links](/docs/packages/private-storage). +When a new registry is [created](#create-a-registry), it automatically uses the [default Buildkite Package Registries storage](/docs/packages/private-storage#set-the-default-buildkite-packages-storage) location. However, your new registry's default storage location can be overridden to use another configured storage location. Learn more about configuring private storage in [Private storage links](/docs/packages/private-storage). To configure/change your registry's current storage: @@ -128,4 +128,4 @@ To delete a registry: ## Audit logging -All events performed through Buildkite Packages are logged through the Buildkite organization's [**Audit Log** feature](/docs/pipelines/security/audit-log). +All events performed through Buildkite Package Registries are logged through the Buildkite organization's [**Audit Log** feature](/docs/pipelines/security/audit-log). diff --git a/pages/packages/maven.md b/pages/packages/maven.md index 63c2617a06..06372334d0 100644 --- a/pages/packages/maven.md +++ b/pages/packages/maven.md @@ -1,6 +1,6 @@ # Maven -Buildkite Packages provides registry support for Maven-based Java packages. +Buildkite Package Registries provides registry support for Maven-based Java packages. Once your Java registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry by configuring your `~/.m2/settings.xml` and application's relevant `pom.xml` files with the Maven XML snippets presented on your Java registry's details page. diff --git a/pages/packages/private_storage.md b/pages/packages/private_storage.md index 8cfbfe5ca5..0b40e668fc 100644 --- a/pages/packages/private_storage.md +++ b/pages/packages/private_storage.md @@ -1,22 +1,22 @@ # Private storage link -This page provides details on how to link and configure your private Amazon Web Services (AWS) Simple Storage Service (S3) storage to Buildkite Packages within your Buildkite organization. These processes can only be performed by [Buildkite organization administrators](/docs/packages/permissions#manage-teams-and-permissions-organization-level-permissions). +This page provides details on how to link and configure your private Amazon Web Services (AWS) Simple Storage Service (S3) storage to Buildkite Package Registries within your Buildkite organization. These processes can only be performed by [Buildkite organization administrators](/docs/packages/permissions#manage-teams-and-permissions-organization-level-permissions). -By default, Buildkite Packages provides its own storage to house any packages, container images and modules stored in registries. You can also link your own private AWS S3 bucket to Buildkite Packages, which allows you to: +By default, Buildkite Package Registries provides its own storage to house any packages, container images and modules stored in registries. You can also link your own private AWS S3 bucket to Buildkite Package Registries, which allows you to: - Manage Buildkite registry packages, container images and modules stored within your private AWS S3 bucket (that is, your _private storage_). Private storage: * Located closer to your geographical location may provide faster registry access. * Mitigates network transmission costs. -- Use Buildkite Packages' management and metadata-handling features to manage these files in registries within your private storage. +- Use Buildkite Package Registries' management and metadata-handling features to manage these files in registries within your private storage. -- Maintain control, ownership and sovereignty over the packages, container images and modules stored within your Buildkite Packages registries. +- Maintain control, ownership and sovereignty over the packages, container images and modules stored within your registries managed by Buildkite Package Registries. -Buildkite Packages uses [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) to provision its services within your private AWS S3 storage. +Buildkite Package Registries uses [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) to provision its services within your private AWS S3 storage. ## Before you start -Before you can start linking your private AWS S3 storage to Buildkite Packages, you will need to have created your own empty AWS S3 bucket. +Before you can start linking your private AWS S3 storage to Buildkite Package Registries, you will need to have created your own empty AWS S3 bucket. Learn more about: @@ -24,15 +24,15 @@ Learn more about: - How to create an S3 bucket from the [Amazon S3 documentation's Getting started](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html) guide. -## Link your private storage to Buildkite Packages +## Link your private storage to Buildkite Package Registries -To link your private AWS S3 storage to Buildkite Packages: +To link your private AWS S3 storage to Buildkite Package Registries: 1. Select **Settings** in the global navigation to access the [**Organization Settings**](https://buildkite.com/organizations/~/settings) page. 1. In the **Packages** section, select **Private Storage Link** to open its page. -1. Select **Add private storage link** to begin configuring your private storage for Buildkite Packages. +1. Select **Add private storage link** to begin configuring your private storage for Buildkite Package Registries. 1. On the **Provide your storage's details** page, in **Step 2: Create or locate your AWS S3 bucket**, select **Open AWS** to open the list of S3 buckets in your AWS account, to either retrieve your existing empty S3 bucket, or create a new one if you [haven't already done so](#before-you-start). @@ -51,17 +51,17 @@ To link your private AWS S3 storage to Buildkite Packages: 1. Select **Create stack** to begin creating the CloudFormation stack for your S3 bucket. -1. Once the stack is created, return to the Buildkite interface and select **Run diagnostic** to verify that Buildkite Packages can publish (`PUT`), download (`GET`) and delete (`DELETE`) packages to and from your S3 private storage. +1. Once the stack is created, return to the Buildkite interface and select **Run diagnostic** to verify that Buildkite Package Registries can publish (`PUT`), download (`GET`) and delete (`DELETE`) packages to and from your S3 private storage. 1. Once the **Diagnostic Result** page indicates a **Pass** for each of these three tests, select **Create Private Storage Link** complete this linking process. You are returned to the **Private Storage Link** page, where you can: -- [Set the default Buildkite Packages storage for your Buildkite organization](#set-the-default-buildkite-packages-storage). +- [Set the default Buildkite Package Registries storage for your Buildkite organization](#set-the-default-buildkite-packages-storage). - [Set the storage independently for each of your Buildkite registries](/docs/packages/manage-registries#update-a-registry-configure-registry-storage). -## Set the default Buildkite Packages storage +## Set the default Buildkite Package Registries storage By default, your Buildkite organization uses storage provided by Buildkite (known as **Buildkite-hosted storage**). diff --git a/pages/packages/python.md b/pages/packages/python.md index 020b45147f..5583985272 100644 --- a/pages/packages/python.md +++ b/pages/packages/python.md @@ -1,6 +1,6 @@ # Python -Buildkite Packages provides registry support for Python-based (PyPI) packages. +Buildkite Package Registries provides registry support for Python-based (PyPI) packages. Once your Python registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the `curl` command presented on your Python registry's details page. diff --git a/pages/packages/red_hat.md b/pages/packages/red_hat.md index cfb3a114f7..e95f9c69de 100644 --- a/pages/packages/red_hat.md +++ b/pages/packages/red_hat.md @@ -1,6 +1,6 @@ # Red Hat -Buildkite Packages provides registry support for Red Hat-based (RPM) packages for Red Hat Linux operating systems. +Buildkite Package Registries provides registry support for Red Hat-based (RPM) packages for Red Hat Linux operating systems. Once your Red Hat registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the relevant `curl` command presented on your Red Hat registry's details page. diff --git a/pages/packages/ruby.md b/pages/packages/ruby.md index 34961ad725..7ccd935f1e 100644 --- a/pages/packages/ruby.md +++ b/pages/packages/ruby.md @@ -1,6 +1,6 @@ # Ruby -Buildkite Packages provides registry support for Ruby-based (RubyGems) packages. +Buildkite Package Registries provides registry support for Ruby-based (RubyGems) packages. Once your Ruby registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via a single command, or by configuring your `~/.gem/credentials` and `gemspec` files with the code snippets presented on your Ruby registry's details page. diff --git a/pages/packages/security.md b/pages/packages/security.md index e7eff09e5e..e25596e270 100644 --- a/pages/packages/security.md +++ b/pages/packages/security.md @@ -4,9 +4,9 @@ toc: false # Security -Customer security is paramount to Buildkite. Buildkite Packages provides mechanisms to restrict access to your registries from Buildkite Agents and their pipeline's jobs, as well as other third-party systems that can issue [Open ID Connect (OIDC)](https://openid.net/developers/how-connect-works/) tokens. +Customer security is paramount to Buildkite. Buildkite Package Registries provides mechanisms to restrict access to your registries from Buildkite Agents and their pipeline's jobs, as well as other third-party systems that can issue [Open ID Connect (OIDC)](https://openid.net/developers/how-connect-works/) tokens. This section contains the following topics: -- [OIDC with Buildkite Packages](/docs/packages/security/oidc) and how to restrict access to registries through OIDC policies. +- [OIDC with Buildkite Package Registries](/docs/packages/security/oidc) and how to restrict access to registries through OIDC policies. - [User, team, and registry permissions](/docs/packages/security/permissions) and how to manage team and user access to registries. diff --git a/pages/packages/security/oidc.md b/pages/packages/security/oidc.md index 7cb66fbbe4..f88fb33b7d 100644 --- a/pages/packages/security/oidc.md +++ b/pages/packages/security/oidc.md @@ -1,15 +1,15 @@ -# OIDC in Buildkite Packages +# OIDC in Buildkite Package Registries <%= render_markdown partial: 'platform/oidc_introduction' %> -You can configure Buildkite Packages registries with OIDC policies that only permit Buildkite Agent interactions from specific Buildkite organizations, pipelines, jobs, and agents, associated with a pipeline's job. This is similar to how [third-party products and services can be configured with OIDC policies](/docs/pipelines/security/oidc) to consume Buildkite OIDC tokens from Buildkite pipelines, for deployment, or access management and security purposes. +You can configure your registries in Buildkite Package Registries with OIDC policies that only permit Buildkite Agent interactions from specific Buildkite organizations, pipelines, jobs, and agents, associated with a pipeline's job. This is similar to how [third-party products and services can be configured with OIDC policies](/docs/pipelines/security/oidc) to consume Buildkite OIDC tokens from Buildkite pipelines, for deployment, or access management and security purposes. -A Buildkite OIDC token is a signed [JSON Web Token (JWT)](https://jwt.io/) provided by a Buildkite Agent, containing metadata claims about a pipeline and its job, including the pipeline and organization slugs, as well as job-specific data, such as the branch, the commit SHA, the job ID, and the agent ID. Such a token is associated with a Buildkite Agent interaction to perform one or more actions on a Buildkite Packages registry. If the token's claims do not match or comply with the registry's OIDC policy, the OIDC token and subsequent pipeline jobs' actions are rejected. +A Buildkite OIDC token is a signed [JSON Web Token (JWT)](https://jwt.io/) provided by a Buildkite Agent, containing metadata claims about a pipeline and its job, including the pipeline and organization slugs, as well as job-specific data, such as the branch, the commit SHA, the job ID, and the agent ID. Such a token is associated with a Buildkite Agent interaction to perform one or more actions on a Buildkite Package Registries registry. If the token's claims do not match or comply with the registry's OIDC policy, the OIDC token and subsequent pipeline jobs' actions are rejected. -The [Buildkite Agent's `oidc` command](/docs/agent/v3/cli-oidc) allows you to request an OIDC token from Buildkite containing claims about the pipeline's current job. These tokens are then used by a Buildkite Packages registry to determine (through its OIDC policy) if the organization, pipeline and any other metadata associated with the pipeline and its job are permitted to publish/upload packages to this registry. +The [Buildkite Agent's `oidc` command](/docs/agent/v3/cli-oidc) allows you to request an OIDC token from Buildkite containing claims about the pipeline's current job. These tokens are then used by a Buildkite Package Registries registry to determine (through its OIDC policy) if the organization, pipeline and any other metadata associated with the pipeline and its job are permitted to publish/upload packages to this registry. > 📘 -> Buildkite Packages registries also support OIDC policies that can consume OIDC tokens configured on third-party products and services, such as [GitHub Actions](https://github.com/features/actions), to authenticate interactions from these services. +> Registries in Buildkite Package Registries also support OIDC policies that can consume OIDC tokens configured on third-party products and services, such as [GitHub Actions](https://github.com/features/actions), to authenticate interactions from these services. ## Define an OIDC policy for a registry @@ -80,7 +80,7 @@ buildkite-agent oidc request-token --audience "https://packages.buildkite.com/{o where: -- `--audience` is the target system that consumes this OIDC token. For Buildkite Packages, this value must be based on the URL `https://packages.buildkite.com/{org.slug}/{registry.slug}`. +- `--audience` is the target system that consumes this OIDC token. For Buildkite Package Registries, this value must be based on the URL `https://packages.buildkite.com/{org.slug}/{registry.slug}`. <%= render_markdown partial: 'packages/org_slug' %> @@ -124,7 +124,7 @@ steps: label: "\:docker\: Build" command: docker build --tag packages.buildkite.com/my-organization/my-pipeline/my-image:latest . -- key: "docker-login" # Authenticate the Buildkite Agent to the Buildkite Packages registry using an OIDC token +- key: "docker-login" # Authenticate the Buildkite Agent to the Buildkite Package Registries registry using an OIDC token label: "\:docker\: Login" command: buildkite-agent oidc request-token --audience "https://packages.buildkite.com/my-organization/my-pipeline" --lifetime 300 | docker login packages.buildkite.com/my-organization/my-pipeline --username buildkite --password-stdin depends_on: "docker-build" diff --git a/pages/packages/security/permissions.md b/pages/packages/security/permissions.md index 02dde7a9be..de22291c69 100644 --- a/pages/packages/security/permissions.md +++ b/pages/packages/security/permissions.md @@ -6,7 +6,7 @@ Enterprise customers can configure registry permissions for all users across the ## Manage teams and permissions -To manage teams across the Buildkite Packages application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions). +To manage teams across the Buildkite Package Registries application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions). Once the _teams_ feature is enabled, you can see the teams that you're a member of from the **Users** page, which: @@ -24,11 +24,11 @@ As an organization administrator, you can access the [**Organization Settings** * After selecting a team, you can view and administer the member-, [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. -- [Enable Buildkite Packages](#enabling-buildkite-packages) for your Buildkite organization. +- [Enable Buildkite Package Registries](#enabling-buildkite-packages) for your Buildkite organization. -- Configure [private storage](/docs/packages/private-storage) for your Buildkite Packages registries. +- Configure [private storage](/docs/packages/private-storage) for your registries in Buildkite Package Registries. -

Enabling Buildkite Packages

+

Enabling Buildkite Package Registries

To do this: @@ -39,7 +39,7 @@ To do this: 1. Select the **Enable Buildkite Packages** button, then **Enable Buildkite Packages** in the **Ready to enable Buildkite Packages** confirmation dialog. > 📘 -> Once Buildkite Packages is enabled, the **Enable** link on the **Organization Settings** page changes to **Enabled** and Buildkite Packages can only be disabled by contacting [support](https://buildkite.com/support). +> Once Buildkite Package Registries is enabled, the **Enable** link on the **Organization Settings** page changes to **Enabled** and Buildkite Package Registries can only be disabled by contacting [support](https://buildkite.com/support). ### Team-level permissions @@ -86,7 +86,7 @@ These user-level permissions and security features are managed by _Buildkite org 1. Select **Settings** in the global navigation to access the [**Organization Settings**](https://buildkite.com/organizations/~/settings) page. -1. Select [**Security** > **Packages** tab](https://buildkite.com/organizations/~/security/packages) to access your organization's security for Packages page. +1. Select [**Security** > **Packages** tab](https://buildkite.com/organizations/~/security/packages) to access your organization's security for **Packages** page. From this page, you can configure the following permissions for all users across your Buildkite organization: diff --git a/pages/packages/terraform.md b/pages/packages/terraform.md index 62142883d9..63103458ce 100644 --- a/pages/packages/terraform.md +++ b/pages/packages/terraform.md @@ -1,6 +1,6 @@ # Terraform -Buildkite Packages provides registry support for Terraform modules. +Buildkite Package Registries provides registry support for Terraform modules. Once your Terraform registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload modules (generated from your application's build) to this registry via the `curl` command presented on your Terraform registry's details page. From 34dd5a4443fd937dfb0b0c392f19319ece23c80a Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Sat, 21 Sep 2024 10:16:47 +1000 Subject: [PATCH 040/102] Rebrand Buildkite Packages to Buildkite Package Registries (outside of the Package Registries docs area). --- data/nav.yml | 2 +- pages/agent/v3/cli_oidc.md | 2 +- pages/pipelines/security/audit_log.md | 4 ++-- pages/pipelines/security/oidc.md | 2 +- pages/pipelines/security/permissions.md | 4 ++-- pages/platform.md | 4 ++-- pages/team_management/permissions.md | 8 ++++---- pages/test_engine/permissions.md | 2 +- pages/test_engine/test_ownership.md | 2 +- vale/styles/Buildkite/h1-h6_sentence_case.yml | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/data/nav.yml b/data/nav.yml index 0cc018cdd5..ad7e3ab504 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -606,7 +606,7 @@ - name: "Members" path: "apis/rest-api/organizations/members" pill: "beta" - - name: "Packages " + - name: "Package Registries " # Keep space at end to prevent "Packages" in global nav bar being # highlighted when any child page of "API > REST > Packages" is selected. children: diff --git a/pages/agent/v3/cli_oidc.md b/pages/agent/v3/cli_oidc.md index aef2b3ae4d..fce3ba319e 100644 --- a/pages/agent/v3/cli_oidc.md +++ b/pages/agent/v3/cli_oidc.md @@ -7,7 +7,7 @@ Refer to the following documentation for more information: - The [What is OpenID Connect](https://openid.net/developers/how-connect-works/) overview on the OpenID web site for more details about how OIDC works. - The [OpenID Connect Core documentation](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) for more information about how OIDC tokens are constructed and how to extract and use claims. -Learn more about how to restrict your Buildkite Agents' access to deployment environments like AWS, from the OIDC in [Buildkite Pipelines](/docs/pipelines/security/oidc) and with [AWS](/docs/pipelines/security/oidc/aws) documentation pages, as well as the [Buildkite Packages](/docs/packages/security/oidc) documentation page. +Learn more about how to restrict your Buildkite Agents' access to deployment environments like AWS, from the OIDC in [Buildkite Pipelines](/docs/pipelines/security/oidc) and with [AWS](/docs/pipelines/security/oidc/aws) documentation pages, as well as the [Buildkite Package Registries](/docs/packages/security/oidc) documentation page. ## Request OIDC token diff --git a/pages/pipelines/security/audit_log.md b/pages/pipelines/security/audit_log.md index 24dd5c30dd..38f04c034f 100644 --- a/pages/pipelines/security/audit_log.md +++ b/pages/pipelines/security/audit_log.md @@ -150,7 +150,7 @@ TEAM_PIPELINE_DELETED TEAM_PIPELINE_UPDATED ``` -#### For Buildkite Packages +#### For Buildkite Package Registries ``` TEAM_REGISTRY_CREATED @@ -239,7 +239,7 @@ CLUSTER_PERMISSION_CREATED CLUSTER_PERMISSION_DELETED ``` -### Buildkite Packages +### Buildkite Package Registries ``` REGISTRY_CREATED diff --git a/pages/pipelines/security/oidc.md b/pages/pipelines/security/oidc.md index 9c0ead14e9..e6b08751b0 100644 --- a/pages/pipelines/security/oidc.md +++ b/pages/pipelines/security/oidc.md @@ -6,7 +6,7 @@ keywords: oidc, authentication, IAM, roles <%= render_markdown partial: 'platform/oidc_introduction' %> -You can configure third-party products and services, such as [AWS](https://aws.amazon.com/), [GCP](https://cloud.google.com/), [Azure](https://azure.microsoft.com/) and many others, as well as Buildkite products, such as [Packages](/docs/packages/security/oidc), with OIDC policies that only permit Buildkite Agent interactions from specific Buildkite organizations, pipelines, jobs, and agents, associated with a pipeline's job. +You can configure third-party products and services, such as [AWS](https://aws.amazon.com/), [GCP](https://cloud.google.com/), [Azure](https://azure.microsoft.com/) and many others, as well as Buildkite products, such as [Package Registries](/docs/packages/security/oidc), with OIDC policies that only permit Buildkite Agent interactions from specific Buildkite organizations, pipelines, jobs, and agents, associated with a pipeline's job. A Buildkite OIDC token is a signed [JSON Web Token (JWT)](https://jwt.io/) provided by a Buildkite Agent, containing metadata claims about a pipeline and its job, including the pipeline and organization slugs, as well as job-specific data, such as the branch, the commit SHA, the job ID, and the agent ID. Such a token is associated with a Buildkite Agent interaction to perform one or more actions within the third-party service. If the token's claims do not match or comply with the service's OIDC policy, the OIDC token and subsequent pipeline jobs' interactions are rejected. diff --git a/pages/pipelines/security/permissions.md b/pages/pipelines/security/permissions.md index c0a113c8b3..2023942a0f 100644 --- a/pages/pipelines/security/permissions.md +++ b/pages/pipelines/security/permissions.md @@ -6,7 +6,7 @@ Enterprise customers can configure pipeline permissions for all users across the ## Manage teams and permissions -To manage teams across the Buildkite Packages application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions). +To manage teams across the Buildkite Pipelines application, a _Buildkite organization administrator_ first needs to enable this feature across their organization. Learn more about how to do this in the [Manage teams and permissions in the Platform documentation](/docs/team-management/permissions#manage-teams-and-permissions). Once the _teams_ feature is enabled, you can see the teams that you're a member of from the **Users** page, which: @@ -24,7 +24,7 @@ As an organization administrator, you can access the [**Organization Settings** - After selecting a team, you can view and administer the member-, [pipeline-](#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. -**Note:** Registry-level settings are only available once [Buildkite Packages has been enabled](/docs/packages/permissions#enabling-buildkite-packages). +**Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/packages/permissions#enabling-buildkite-packages). ### Team-level permissions diff --git a/pages/platform.md b/pages/platform.md index b8e712948e..14454e6d18 100644 --- a/pages/platform.md +++ b/pages/platform.md @@ -6,9 +6,9 @@ template: "landing_page" The Buildkite Scale-Out Delivery Platform is an adaptable, composable, and scalable platform with everything platform teams need to build software delivery systems for their businesses—and rapidly deliver value to users. -The Buildkite platform documentation contains docs for _platform_-level features of Buildkite available across Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-engine), as well as [Packages](/docs/packages). This area of the docs covers the following topics: +The Buildkite platform documentation contains docs for _platform_-level features of Buildkite available across Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-engine), as well as [Package Registries](/docs/packages). This area of the docs covers the following topics: -- [Team management](/docs/team-management), with guidelines on how to manage your users and teams across the Buildkite platform for Pipelines, Test Engine and Packages. +- [Team management](/docs/team-management), with guidelines on how to manage your users and teams across the Buildkite platform for Pipelines, Test Engine and Package Registries. - [Buildkite CLI](/docs/cli), provides command line/terminal access to work with features across the Buildkite platform. diff --git a/pages/team_management/permissions.md b/pages/team_management/permissions.md index 16cc0fc588..84834e7b2a 100644 --- a/pages/team_management/permissions.md +++ b/pages/team_management/permissions.md @@ -33,14 +33,14 @@ A user who is a _Buildkite organization administrator_ can access the [**Organiz * Create a new team, using the **New Team** button. * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. - **Note:** Registry-level settings are only available once [Buildkite Packages has been enabled](/docs/packages/permissions#enabling-buildkite-packages). + **Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/packages/permissions#enabling-buildkite-packages). * Delete an existing team, by selecting the team > **Settings** tab > **Delete Team** button. * [Enable](#manage-teams-and-permissions) and disable the teams feature for their organization. This feature can only be disabled once all teams have been deleted from the organization (including the automatically-created **Everyone** team) using the **Disable Teams** button on the **Teams** page. Once the teams feature has been disabled, it can be [re-enabled](#manage-teams-and-permissions) at any time. -- Configure other organization-level settings for Buildkite Pipelines and Packages, as well as various [integrations](/docs/integrations) with Buildkite. +- Configure other organization-level settings for Buildkite Pipelines and Package Registries, as well as various [integrations](/docs/integrations) with Buildkite. -- Access and view Buildkite Pipelines and Packages usage reports and [audit logs](/docs/pipelines/security/audit-log). +- Access and view Buildkite Pipelines and Package Registries usage reports and [audit logs](/docs/pipelines/security/audit-log). ### Team-level permissions @@ -63,7 +63,7 @@ A user who is a _team maintainer_ on an existing team can: To do this, select the appropriate tab (**Pipelines**, **Test Suites** or **Package Registries**) and then select the required permission for the item, although be aware of the [caveat below](#changing-full-access-permissions-on-pipelines-test-suites-and-registries). - **Note:** Managing team permissions for registries is only available once [Buildkite Packages has been enabled](/docs/packages/permissions#enabling-buildkite-packages). + **Note:** Managing team permissions for registries is only available once [Buildkite Package Registries has been enabled](/docs/packages/permissions#enabling-buildkite-packages). * Edit the team's details and other settings using the **Settings** tab, which includes the ability to: diff --git a/pages/test_engine/permissions.md b/pages/test_engine/permissions.md index c0da94c924..248cf5bcf6 100644 --- a/pages/test_engine/permissions.md +++ b/pages/test_engine/permissions.md @@ -30,7 +30,7 @@ As an organization administrator, you can access the [**Organization Settings** <%= image "team-section-test-suites-list.png", alt: "Screenshot of the Team section, showing a list of Test Suites the team has access to" %> - **Note:** Registry-level settings are only available once [Buildkite Packages has been enabled](/docs/packages/permissions#enabling-buildkite-packages). + **Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/packages/permissions#enabling-buildkite-packages). ### Team-level permissions diff --git a/pages/test_engine/test_ownership.md b/pages/test_engine/test_ownership.md index 9adadda3c0..f8a676790c 100644 --- a/pages/test_engine/test_ownership.md +++ b/pages/test_engine/test_ownership.md @@ -20,7 +20,7 @@ A TESTOWNERS file uses Buildkite team slugs instead of user names. Your team slu # Example team name to slug Pipelines => pipelines Test Engine => test-engine -📦 Packages => packages +📦 Package Registries => package-registries ``` The following example TESTOWNERS file, which you can copy as a starting point, explains the syntax of this file and how it works: diff --git a/vale/styles/Buildkite/h1-h6_sentence_case.yml b/vale/styles/Buildkite/h1-h6_sentence_case.yml index ee02c2bea3..79c1175c99 100644 --- a/vale/styles/Buildkite/h1-h6_sentence_case.yml +++ b/vale/styles/Buildkite/h1-h6_sentence_case.yml @@ -47,7 +47,7 @@ exceptions: - Buildkite - Buildkite Agent - Buildkite Agents - - Buildkite Packages + - Buildkite Package Registries - Buildkite Pipelines - buildkite-agent - BuildNotify From dc395381abe5a030552745e0e8133df1b8da9516 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Sat, 21 Sep 2024 10:23:41 +1000 Subject: [PATCH 041/102] Fix broken links as a result of Packages to Package Registries re-branding. --- pages/packages/manage_registries.md | 2 +- pages/packages/private_storage.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/packages/manage_registries.md b/pages/packages/manage_registries.md index 47c6779ac4..8830846711 100644 --- a/pages/packages/manage_registries.md +++ b/pages/packages/manage_registries.md @@ -97,7 +97,7 @@ Unlike other tokens generated elsewhere in Buildkite, registry tokens can contin ### Configure registry storage -When a new registry is [created](#create-a-registry), it automatically uses the [default Buildkite Package Registries storage](/docs/packages/private-storage#set-the-default-buildkite-packages-storage) location. However, your new registry's default storage location can be overridden to use another configured storage location. Learn more about configuring private storage in [Private storage links](/docs/packages/private-storage). +When a new registry is [created](#create-a-registry), it automatically uses the [default Buildkite Package Registries storage](/docs/packages/private-storage#set-the-default-buildkite-package-registries-storage) location. However, your new registry's default storage location can be overridden to use another configured storage location. Learn more about configuring private storage in [Private storage links](/docs/packages/private-storage). To configure/change your registry's current storage: diff --git a/pages/packages/private_storage.md b/pages/packages/private_storage.md index 0b40e668fc..e55e459e5f 100644 --- a/pages/packages/private_storage.md +++ b/pages/packages/private_storage.md @@ -57,7 +57,7 @@ To link your private AWS S3 storage to Buildkite Package Registries: You are returned to the **Private Storage Link** page, where you can: -- [Set the default Buildkite Package Registries storage for your Buildkite organization](#set-the-default-buildkite-packages-storage). +- [Set the default Buildkite Package Registries storage for your Buildkite organization](#set-the-default-buildkite-package-registries-storage). - [Set the storage independently for each of your Buildkite registries](/docs/packages/manage-registries#update-a-registry-configure-registry-storage). @@ -67,7 +67,7 @@ By default, your Buildkite organization uses storage provided by Buildkite (know The _default storage_ is the storage used when a [new registry is created](/docs/packages/manage-registries#create-a-registry). -Once you have [configured at least one other private storage link](#link-your-private-storage-to-buildkite-packages), you can change the default storage to one of these configured private storage configurations. To do this: +Once you have [configured at least one other private storage link](#link-your-private-storage-to-buildkite-package-registries), you can change the default storage to one of these configured private storage configurations. To do this: 1. Select **Settings** in the global navigation to access the [**Organization Settings**](https://buildkite.com/organizations/~/settings) page. From 4e230b4c7e5bcc476a9bdf49f2c5f69a654f885b Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Sat, 21 Sep 2024 10:32:37 +1000 Subject: [PATCH 042/102] Correct page title of GraphQL cookbook entry for 'Packages' to 'Registries' since this page only contains API items for registries. When GraphQL items for Packages themselves come about, create a new 'Packages' cookbook page for it. --- config/routes.rb | 1 + data/nav.yml | 4 ++-- pages/apis/graphql/cookbooks/{packages.md => registries.md} | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) rename pages/apis/graphql/cookbooks/{packages.md => registries.md} (85%) diff --git a/config/routes.rb b/config/routes.rb index 05b5c810ea..b35b10d336 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,6 +9,7 @@ get "/docs/api/organizations", to: redirect("/docs/apis/rest-api/organizations") get "/docs/api/projects", to: redirect("/docs/apis/rest-api/pipelines") get "/docs/api/*page", to: redirect("/docs/apis/rest-api/%{page}") + get "/docs/apis/graphql/cookbooks/packages", to: redirect("/docs/apis/graphql/cookbooks/registries") get "/docs/apis/graphql-tutorial", to: redirect("/docs/apis/graphql/graphql-tutorial") get "/docs/apis/graphql", to: redirect("/docs/apis/graphql-api") get "/docs/apis/graphql/schemas", to: redirect("/docs/apis/graphql-api") diff --git a/data/nav.yml b/data/nav.yml index ad7e3ab504..6a6252ed44 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -689,12 +689,12 @@ path: apis/graphql/cookbooks/clusters - name: Jobs path: apis/graphql/cookbooks/jobs - - name: Packages - path: apis/graphql/cookbooks/packages - name: Pipelines path: apis/graphql/cookbooks/pipelines - name: Pipeline templates path: apis/graphql/cookbooks/pipeline-templates + - name: Registries + path: apis/graphql/cookbooks/registries - name: Rules path: apis/graphql/cookbooks/rules - name: Organizations diff --git a/pages/apis/graphql/cookbooks/packages.md b/pages/apis/graphql/cookbooks/registries.md similarity index 85% rename from pages/apis/graphql/cookbooks/packages.md rename to pages/apis/graphql/cookbooks/registries.md index b119108a96..b22affcd9a 100644 --- a/pages/apis/graphql/cookbooks/packages.md +++ b/pages/apis/graphql/cookbooks/registries.md @@ -1,6 +1,6 @@ -# Packages +# Registries -A collection of common tasks with packages using the GraphQL API. +A collection of common tasks with package registries using the GraphQL API. You can test out the Buildkite GraphQL API using the [Buildkite explorer](https://graphql.buildkite.com/explorer). This includes built-in documentation under the **Docs** panel. From cbb493a743ae96f9c4187e997f019d0eb9c358c5 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Sat, 21 Sep 2024 10:33:39 +1000 Subject: [PATCH 043/102] Correct Cookbooks entry for 'Packages' > 'Registries' change. --- pages/apis/graphql/graphql_cookbook.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/apis/graphql/graphql_cookbook.md b/pages/apis/graphql/graphql_cookbook.md index d154dd8710..43d31bae8d 100644 --- a/pages/apis/graphql/graphql_cookbook.md +++ b/pages/apis/graphql/graphql_cookbook.md @@ -12,9 +12,9 @@ There are recipes for a range of different topics, including: - [Builds](/docs/apis/graphql/cookbooks/builds) - [Clusters](/docs/apis/graphql/cookbooks/clusters) - [Jobs](/docs/apis/graphql/cookbooks/jobs) -- [Packages](/docs/apis/graphql/cookbooks/packages) - [Pipelines](/docs/apis/graphql/cookbooks/pipelines) - [Pipeline templates](/docs/apis/graphql/cookbooks/pipeline-templates) +- [Registries](/docs/apis/graphql/cookbooks/registries) - [Rules](/docs/apis/graphql/cookbooks/rules) - [Organizations](/docs/apis/graphql/cookbooks/organizations) - [Teams](/docs/apis/graphql/cookbooks/teams) From cec12e0f670935fce09a94b4c35189181fc28fbb Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Mon, 23 Sep 2024 10:58:14 +1200 Subject: [PATCH 044/102] Consolidate installation guide into single page --- data/nav.yml | 12 ++-------- .../debian.md => client_installation.md} | 24 ++++++++++++++++++- .../client_installation/macos.md | 7 ------ .../client_installation/red_hat.md | 13 ---------- .../test_engine/test_splitting/configuring.md | 6 ++--- 5 files changed, 28 insertions(+), 34 deletions(-) rename pages/test_engine/test_splitting/{client_installation/debian.md => client_installation.md} (55%) delete mode 100644 pages/test_engine/test_splitting/client_installation/macos.md delete mode 100644 pages/test_engine/test_splitting/client_installation/red_hat.md diff --git a/data/nav.yml b/data/nav.yml index 38d9094392..79b36bd908 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -443,16 +443,8 @@ path: "test-engine/test-splitting" - name: "Configuring" path: "test-engine/test-splitting/configuring" - - name: "Test Engine Client Installation" - children: - - name: "Debian" - path: "test-engine/test-splitting/client-installation/debian" - - name: "Red Hat" - path: "test-engine/test-splitting/client-installation/red-hat" - - name: "macOS" - path: "test-engine/test-splitting/client-installation/macos" - - name: "Docker" - path: "test-engine/test-splitting/client-installation/docker" + - name: "Test Engine Client installation" + path: "test-engine/test-splitting/client-installation" - name: "Languages" children: diff --git a/pages/test_engine/test_splitting/client_installation/debian.md b/pages/test_engine/test_splitting/client_installation.md similarity index 55% rename from pages/test_engine/test_splitting/client_installation/debian.md rename to pages/test_engine/test_splitting/client_installation.md index 378d21dcc1..36fce1fef4 100644 --- a/pages/test_engine/test_splitting/client_installation/debian.md +++ b/pages/test_engine/test_splitting/client_installation.md @@ -1,4 +1,4 @@ -# Installing Buildkite Test Engine Client on Debian +## Debian 1. Ensure you have curl and gpg installed first: @@ -23,3 +23,25 @@ ```shell apt update && apt install bktec ``` + +## RedHat + +1. Configure the registry: + + ```shell + echo -e "[test-engine-client-rpm]\nname=Test Engine Client - rpm\nbaseurl=https://packages.buildkite.com/buildkite/test-engine-client-rpm/rpm_any/rpm_any/\$basearch\nenabled=1\nrepo_gpgcheck=1\ngpgcheck=0\ngpgkey=https://packages.buildkite.com/buildkite/test-engine-client-rpm/gpgkey\npriority=1" > /etc/yum.repos.d/test-engine-client-rpm.repo + ``` + +2. Install the package: + + ```shell + dnf install -y bktec + ``` + +## macOS + +bktec can be installed using [Homebrew](https://brew.sh) with [Buildkite tap formulae](https://github.com/buildkite/homebrew-buildkite). To install, run: + +```shell +brew tap buildkite/buildkite && brew install buildkite/buildkite/bktec +``` diff --git a/pages/test_engine/test_splitting/client_installation/macos.md b/pages/test_engine/test_splitting/client_installation/macos.md deleted file mode 100644 index a619b98bbe..0000000000 --- a/pages/test_engine/test_splitting/client_installation/macos.md +++ /dev/null @@ -1,7 +0,0 @@ -# Installing Buildkite Test Engine Client on macOS - -bktec can be installed using [Homebrew](https://brew.sh) with [Buildkite tap formulae](https://github.com/buildkite/homebrew-buildkite). To install, run: - -```shell -brew tap buildkite/buildkite && brew install buildkite/buildkite/bktec -``` diff --git a/pages/test_engine/test_splitting/client_installation/red_hat.md b/pages/test_engine/test_splitting/client_installation/red_hat.md deleted file mode 100644 index ac6a610fe5..0000000000 --- a/pages/test_engine/test_splitting/client_installation/red_hat.md +++ /dev/null @@ -1,13 +0,0 @@ -# Installing Buildkite Test Engine Client on RedHat - -1. Configure the registry: - - ```shell - echo -e "[test-engine-client-rpm]\nname=Test Engine Client - rpm\nbaseurl=https://packages.buildkite.com/buildkite/test-engine-client-rpm/rpm_any/rpm_any/\$basearch\nenabled=1\nrepo_gpgcheck=1\ngpgcheck=0\ngpgkey=https://packages.buildkite.com/buildkite/test-engine-client-rpm/gpgkey\npriority=1" > /etc/yum.repos.d/test-engine-client-rpm.repo - ``` - -2. Install the package: - - ```shell - dnf install -y bktec - ``` diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index a48e81b147..8422e9df4a 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -9,9 +9,9 @@ The bktec relies on execution timing data captured by the Buildkite test collect ## Installation bktec is supported on both Linux and macOS with 64-bit ARM and AMD architectures. You can install it using the following installers: -- [Debian](client-installation/debian) -- [Red Hat](client-installation/red-hat) -- [macOS](client-installation/macos) +- [Debian](client-installation#debian) +- [Red Hat](client-installation#redhat) +- [macOS](client-installation#macos) If you need to install the agent on a system not listed above you'll need to perform a manual installation using one of the binaries from [bktec's releases page](https://github.com/buildkite/test-engine-client/releases/latest). Once you have the binary, make it available in your testing environment. From 70e60fb7dd2264ffc8c8df3833b73e52c820f2ee Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Mon, 23 Sep 2024 11:14:31 +1200 Subject: [PATCH 045/102] word tweaks --- .../test_splitting/client_installation.md | 2 +- .../test_engine/test_splitting/configuring.md | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pages/test_engine/test_splitting/client_installation.md b/pages/test_engine/test_splitting/client_installation.md index 36fce1fef4..0fd9aebc69 100644 --- a/pages/test_engine/test_splitting/client_installation.md +++ b/pages/test_engine/test_splitting/client_installation.md @@ -40,7 +40,7 @@ ## macOS -bktec can be installed using [Homebrew](https://brew.sh) with [Buildkite tap formulae](https://github.com/buildkite/homebrew-buildkite). To install, run: +The Test Engine Client can be installed using [Homebrew](https://brew.sh) with [Buildkite tap formulae](https://github.com/buildkite/homebrew-buildkite). To install, run: ```shell brew tap buildkite/buildkite && brew install buildkite/buildkite/bktec diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 8422e9df4a..d460f74fda 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -1,27 +1,27 @@ # Configuring test splitting -Buildkite maintains its open source Buildkite Test Engine Client ([bktec](https://github.com/buildkite/test-engine-client)) tool. This tool uses your Buildkite Test Engine test suite data to intelligently partition tests throughout your test suite into multiple sets, such that each set of tests runs in parallel across your agents. This process is known as _orchestration_ and results in a _test plan_, where a test plan defines which tests are run on which agents. Currently, bktec tool only supports RSpec and Jest. +Buildkite maintains its open source Test Engine Client ([bktec](https://github.com/buildkite/test-engine-client)) tool. This tool uses your Test Engine test suite data to intelligently partition tests throughout your test suite into multiple sets, such that each set of tests runs in parallel across your agents. This process is known as _orchestration_ and results in a _test plan_, where a test plan defines which tests are run on which agents. Currently, the Test Engine Client tool only supports RSpec and Jest. ## Dependencies -The bktec relies on execution timing data captured by the Buildkite test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite if you are running RSpec, and [JavaScript test collector](/docs/test-engine/javascript-sollectors) if you are running Jest. +The Test Engine Client relies on execution timing data captured by the test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite if you are running RSpec, and [JavaScript test collector](/docs/test-engine/javascript-sollectors) if you are running Jest. ## Installation -bktec is supported on both Linux and macOS with 64-bit ARM and AMD architectures. You can install it using the following installers: +The Test Engine Client is supported on both Linux and macOS with 64-bit ARM and AMD architectures. You can install the client using the following installers: - [Debian](client-installation#debian) - [Red Hat](client-installation#redhat) - [macOS](client-installation#macos) -If you need to install the agent on a system not listed above you'll need to perform a manual installation using one of the binaries from [bktec's releases page](https://github.com/buildkite/test-engine-client/releases/latest). Once you have the binary, make it available in your testing environment. +If you need to install the client on a system not listed above you'll need to perform a manual installation using one of the binaries from [Test Engine Client's releases page](https://github.com/buildkite/test-engine-client/releases/latest). Once you have the binary, make it executable in your pipeline. -## Using the bktec +## Using the Test Engine Client -Once you have downloaded the bktec binary and it's executable in your Buildkite pipeline, you'll need to configure some additional environment variables for the bktec to function. You can then update your pipeline step to call bktec instead of calling RSpec to run your tests. +Once you have downloaded the Test Engine Client (bktec) binary and it is executable in your pipeline, you'll need to configure some additional environment variables for the Test Engine Client to function. You can then update your pipeline step to call `bktec` instead of calling RSpec to run your tests. ### Configure environment variables -The bktec tool uses a number of [predefined](#predefined-environment-variables), [mandatory](#mandatory-environment-variables), and [optional](#optional-environment-variables) environment variables. +The Test Engine Client tool uses a number of [predefined](#predefined-environment-variables), [mandatory](#mandatory-environment-variables), and [optional](#optional-environment-variables) environment variables. @@ -73,7 +73,7 @@ The following mandatory environment variables must be set. #### Optional environment variables -The following optional environment variables can also be used to configure the bktec's behavior. +The following optional environment variables can also be used to configure the Test Engine Client's behavior.
@@ -99,7 +99,7 @@ The following optional environment variables can also be used to configure the b ### Update the pipeline step -With the environment variables configured, you can now update your pipeline step to use bktec instead of running RSpec, or Jest directly. The following example pipeline step demonstrates how to partition your RSpec test suite across 10 nodes. +With the environment variables configured, you can now update your pipeline step to run the Test Engine Client instead of running RSpec, or Jest directly. The following example pipeline step demonstrates how to partition your RSpec test suite across 10 nodes. ``` steps: From 444ffe1b5be9609f08e83246f7676c0d99fff380 Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Mon, 23 Sep 2024 11:30:02 +1200 Subject: [PATCH 046/102] Add docker installation guide --- .../test_splitting/client_installation.md | 19 +++++++++++++++++++ .../test_engine/test_splitting/configuring.md | 1 + 2 files changed, 20 insertions(+) diff --git a/pages/test_engine/test_splitting/client_installation.md b/pages/test_engine/test_splitting/client_installation.md index 0fd9aebc69..eed6f50d84 100644 --- a/pages/test_engine/test_splitting/client_installation.md +++ b/pages/test_engine/test_splitting/client_installation.md @@ -1,3 +1,6 @@ +# Installing the Test Engine Client + + ## Debian 1. Ensure you have curl and gpg installed first: @@ -45,3 +48,19 @@ The Test Engine Client can be installed using [Homebrew](https://brew.sh) with [ ```shell brew tap buildkite/buildkite && brew install buildkite/buildkite/bktec ``` + +## Docker + +You can run the Test Engine Client inside a Docker container using the official image in [Dockerhub](https://hub.docker.com/r/buildkite/test-engine-client/tags). + +To run the client using Docker: + +```shell +docker run buildkite/test-engine-client +``` + +Or, to add the Test Engine Client binary to your Docker image, include the following in your Dockerfile: + +```dockerfile +COPY --from=buildkite/test-engine-client /usr/local/bin/bktec /usr/local/bin/bktec +``` diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index d460f74fda..e336b87acc 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -12,6 +12,7 @@ The Test Engine Client is supported on both Linux and macOS with 64-bit ARM and - [Debian](client-installation#debian) - [Red Hat](client-installation#redhat) - [macOS](client-installation#macos) +- [Docker](client-installation#docker) If you need to install the client on a system not listed above you'll need to perform a manual installation using one of the binaries from [Test Engine Client's releases page](https://github.com/buildkite/test-engine-client/releases/latest). Once you have the binary, make it executable in your pipeline. From 59eee2d5a2bc578dfe44ddb105a5100fcb5c9eb6 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 09:39:20 +1000 Subject: [PATCH 047/102] Replace landing page product card images with new buttons. --- app/views/homepage/_products.html.erb | 9 ++-- images/docs/home/package_registries.svg | 58 +++++++++++++++++++++++++ images/docs/home/pipelines.svg | 50 ++++++++++++++++++++- images/docs/home/test_engine.svg | 47 +++++++++++++++++++- 4 files changed, 156 insertions(+), 8 deletions(-) create mode 100644 images/docs/home/package_registries.svg diff --git a/app/views/homepage/_products.html.erb b/app/views/homepage/_products.html.erb index d6b9ebc63a..294faee9cc 100644 --- a/app/views/homepage/_products.html.erb +++ b/app/views/homepage/_products.html.erb @@ -3,26 +3,23 @@
- Pipelines graphic
-

Pipelines

+ Pipelines graphic

Powerful CI/CD built to scale on your infrastructure

- Test Engine graphic
-

Test Engine

+ Test Engine graphic

Real-time, scalable tracking and monitoring for your tests

- Packages graphic
-

Packages

+ Packages graphic

Scale out asset management across any ecosystem

diff --git a/images/docs/home/package_registries.svg b/images/docs/home/package_registries.svg new file mode 100644 index 0000000000..9f277746f4 --- /dev/null +++ b/images/docs/home/package_registries.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/docs/home/pipelines.svg b/images/docs/home/pipelines.svg index 547b4645b2..3769fc9a7a 100644 --- a/images/docs/home/pipelines.svg +++ b/images/docs/home/pipelines.svg @@ -1 +1,49 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/docs/home/test_engine.svg b/images/docs/home/test_engine.svg index 4abd0ce9c6..255d8a54e9 100644 --- a/images/docs/home/test_engine.svg +++ b/images/docs/home/test_engine.svg @@ -1 +1,46 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From db6ba9225802239e7d4c3a62715423d59f9e3efb Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 09:59:53 +1000 Subject: [PATCH 048/102] Add spelling exceptions. --- vale/styles/Buildkite/h1-h6_sentence_case.yml | 1 + vale/styles/vocab.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/vale/styles/Buildkite/h1-h6_sentence_case.yml b/vale/styles/Buildkite/h1-h6_sentence_case.yml index ee02c2bea3..ccd106ba5b 100644 --- a/vale/styles/Buildkite/h1-h6_sentence_case.yml +++ b/vale/styles/Buildkite/h1-h6_sentence_case.yml @@ -148,6 +148,7 @@ exceptions: - SSH - SSO - Test Engine + - Test Engine Client - TESTOWNER - Ubuntu - URL diff --git a/vale/styles/vocab.txt b/vale/styles/vocab.txt index 8107b0fabc..cd4cc3cc87 100644 --- a/vale/styles/vocab.txt +++ b/vale/styles/vocab.txt @@ -91,6 +91,7 @@ githooks GitLab globbing gotestsum +gpg Gradle Graviton gz From 2c36b8cfd14dc6d7d83f4204000c98d558007c1e Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Mon, 23 Sep 2024 12:36:15 +1200 Subject: [PATCH 049/102] Update test splitter env --- data/content/test_splitting_env.yaml | 104 ++++++++++++------ .../test_engine/test_splitting/configuring.md | 55 ++++++++- 2 files changed, 123 insertions(+), 36 deletions(-) diff --git a/data/content/test_splitting_env.yaml b/data/content/test_splitting_env.yaml index f743d5f1e6..f1600561b2 100644 --- a/data/content/test_splitting_env.yaml +++ b/data/content/test_splitting_env.yaml @@ -1,7 +1,7 @@ predefined: - name: BUILDKITE_BUILD_ID desc: - - The UUID of the pipeline build. bktec uses this UUID along with `BUILDKITE_STEP_ID` to uniquely identify the test plan. + - The UUID of the pipeline build. The Test Engine Client uses this UUID along with `BUILDKITE_STEP_ID` to uniquely identify the test plan. - name: BUILDKITE_JOB_ID desc: - The UUID of the job in the pipeline's build. @@ -18,7 +18,7 @@ predefined: - Ensure you configure `parallelism` in your pipeline definition. Learn more about parallel build steps in [Concurrency and parallelism](https://buildkite.com/docs/pipelines/controlling-concurrency#concurrency-and-parallelism). - name: BUILDKITE_STEP_ID desc: - - The UUID of the step group in the pipeline build. bktec uses this UUID along with `BUILDKITE_BUILD_ID` to uniquely identify the test plan. + - The UUID of the step group in the pipeline build. The Test Engine Client uses this UUID along with `BUILDKITE_BUILD_ID` to uniquely identify the test plan. mandatory: - name: BUILDKITE_TEST_ENGINE_API_ACCESS_TOKEN @@ -26,44 +26,82 @@ mandatory: - Buildkite API access token with `read_suites`, `read_test_plan`, and `write_test_plan` scopes. You can create an [API access token](https://buildkite.com/user/api-access-tokens) from **Personal Settings** > **API Access Tokens** in the Buildkite interface. - name: BUILDKITE_TEST_ENGINE_RESULT_PATH desc: - - The path to store the test result. bktec uses this environment variable to tell the runner where to store the test result. bktec reads the test result after each test run for retries and verification. + - The path to store the test result. The Test Engine Client uses this environment variable to tell the runner where to store the test result. The Test Engine Client reads the test result after each test run for retries and verification. - For RSpec, the result is generated using the `--format json` and `--out` CLI options, while for Jest, it is generated using the `--json` and `--outputFile` options. We have included these options in the default test command for RSpec and Jest. If you need to customize your test command, make sure to append the CLI options to save the result to a file. - Please refer to the `BUILDKITE_TEST_ENGINE_TEST_CMD` environment variable for more details. - - "**Note:** bktec will not delete the file after running the test, however it will be deleted by Buildkite Agent as part of build lifecycle." + note: + - The Test Engine Client will not delete the file after running the test, however it will be deleted by Buildkite Agent as part of build lifecycle. - name: BUILDKITE_TEST_ENGINE_RUNNER desc: - The test runner to use for running tests. Currently `rspec` and `jest` are supported. - name: BUILDKITE_TEST_ENGINE_SUITE_SLUG desc: - - The slug of your Buildkite Test Engine test suite. You can find the suite slug in the url for your test suite. + - The slug of your Test Engine test suite. You can find the suite slug in the url for your test suite. - "For example, the slug for the url: `https://buildkite.com/organizations/my-organization/analytics/suites/my-suite` is `my-suite`." optional: - - name: BUILDKITE_TEST_ENGINE_DEBUG_ENABLED - default: false - desc: - - A flag to enable more verbose logging. - - name: BUILDKITE_TEST_ENGINE_RETRY_CMD - desc: - - The command to retry the failed tests. Test Splitter will fill in the `{{testExamples}}` placeholder with the failed tests. If not set, the Test Splitter will use the same command defined in `BUILDKITE_SPLITTER_TEST_CMD`. - - name: BUILDKITE_TEST_ENGINE_RETRY_COUNT - default: 0 - desc: - - The number of retries. Test Splitter runs the test command defined in `BUILDKITE_SPLITTER_TEST_CMD` and retries only the failed tests up to `BUILDKITE_SPLITTER_RETRY_COUNT` times, using the retry command defined in `BUILDKITE_SPLITTER_RETRY_CMD`. - - name: BUILDKITE_TEST_ENGINE_SPLIT_BY_EXAMPLE - default: false - desc: - - A flag to enable split by example. When this option is `true`, bktec will split the execution of slow test files over multiple partitions. - - name: BUILDKITE_TEST_ENGINE_TEST_CMD - default: bundle exec rspec {{testExamples}} - desc: - - The test command to run your tests. bktec will replace and populate the `{{testExamples}}` placeholder with the test plan. - - name: BUILDKITE_TEST_ENGINE_TEST_FILE_EXCLUDE_PATTERN - desc: - - The glob pattern to exclude certain test files or directories. The exclusion will be applied after discovering the test files using a pattern configured with `BUILDKITE_TEST_ENGINE_TEST_FILE_PATTERN`. - - _This option accepts the pattern syntax supported by the [zzglob](https://github.com/DrJosh9000/zzglob?tab=readme-ov-file#pattern-syntax) library._ - - name: BUILDKITE_TEST_ENGINE_TEST_FILE_PATTERN - default: spec/**/*_spec.rb - desc: - - The glob pattern to discover test files. You can exclude certain test files or directories from the discovered test files using a pattern that can be configured with `BUILDKITE_TEST_ENGINE_TEST_FILE_EXCLUDE_PATTERN`. - - _This option accepts the pattern syntax supported by the [zzglob](https://github.com/DrJosh9000/zzglob?tab=readme-ov-file#pattern-syntax) library._ + rspec: + - name: BUILDKITE_TEST_ENGINE_DEBUG_ENABLED + default: false + desc: + - A flag to enable more verbose logging. + - name: BUILDKITE_TEST_ENGINE_RETRY_CMD + desc: + - The command to retry the failed tests. The Test Engine Client will replace the `{{testExamples}}` placeholder with the failed tests. If not set, the client will use the same command defined in `BUILDKITE_TEST_ENGINE_TEST_CMD`. + - name: BUILDKITE_TEST_ENGINE_RETRY_COUNT + default: 0 + desc: + - The number of retries. The Test Engine Client runs the test command defined in `BUILDKITE_TEST_ENGINE_TEST_CMD` and retries only the failed tests up to `BUILDKITE_TEST_ENGINE_RETRY_COUNT` times, using the retry command defined in `BUILDKITE_TEST_ENGINE_RETRY_CMD`. + - name: BUILDKITE_TEST_ENGINE_SPLIT_BY_EXAMPLE + default: false + desc: + - A flag to enable split by example. When this option is `true`, the Test Engine Client will split the execution of slow test files over multiple partitions. + - name: BUILDKITE_TEST_ENGINE_TEST_CMD + default: bundle exec rspec --format progress --format json --out {{resultPath}} {{testExamples}} + desc: + - The test command to run your tests. The Test Engine Client will replace the `{{testExamples}}` placeholder with the test plan. + note: + - It is necessary to include `--format json --out {{resultPath}}` in the test command, because the Test Engine Client needs to read the result after each test run. + - Please refer to the `BUILDKITE_TEST_ENGINE_RESULT_PATH` environment variable for more details. + - name: BUILDKITE_TEST_ENGINE_TEST_FILE_EXCLUDE_PATTERN + desc: + - The glob pattern to exclude certain test files or directories. The exclusion will be applied after discovering the test files using a pattern configured with `BUILDKITE_TEST_ENGINE_TEST_FILE_PATTERN`. + - _This option accepts the pattern syntax supported by the [zzglob](https://github.com/DrJosh9000/zzglob?tab=readme-ov-file#pattern-syntax) library._ + - name: BUILDKITE_TEST_ENGINE_TEST_FILE_PATTERN + default: spec/**/*_spec.rb + desc: + - The glob pattern to discover test files. You can exclude certain test files or directories from the discovered test files using a pattern that can be configured with `BUILDKITE_TEST_ENGINE_TEST_FILE_EXCLUDE_PATTERN`. + - _This option accepts the pattern syntax supported by the [zzglob](https://github.com/DrJosh9000/zzglob?tab=readme-ov-file#pattern-syntax) library._ + jest: + - name: BUILDKITE_TEST_ENGINE_DEBUG_ENABLED + default: false + desc: + - A flag to enable more verbose logging. + - name: BUILDKITE_TEST_ENGINE_RETRY_CMD + default: yarn test --testNamePattern '{{testNamePattern}}' --json --testLocationInResults --outputFile {{resultPath}} + desc: + - The command to retry the failed tests. The Test Engine Client will replace the `{{testNamePattern}}` placeholder with the failed tests. + note: + - It is necessary to include `--json --testLocationInResults --outputFile {{resultPath}}` in the command, because the Test Engine Client needs to read the result after each test run. + - Please refer to the `BUILDKITE_TEST_ENGINE_RESULT_PATH` environment variable for more details. + - name: BUILDKITE_TEST_ENGINE_RETRY_COUNT + default: 0 + desc: + - The number of retries. The Test Engine Client runs the test command defined in `BUILDKITE_TEST_ENGINE_TEST_CMD` and retries only the failed tests up to `BUILDKITE_TEST_ENGINE_RETRY_COUNT` times, using the retry command defined in `BUILDKITE_TEST_ENGINE_RETRY_CMD`. + - name: BUILDKITE_TEST_ENGINE_TEST_CMD + default: yarn test {{testExamples}} --json --testLocationInResults --outputFile {{resultPath}} + desc: + - The test command to run your tests. The Test Engine Client will replace and populate the `{{testExamples}}` placeholder with the test plan. + note: + - It is necessary to include `--json --testLocationInResults --outputFile {{resultPath}}` in the command, because the Test Engine Client needs to read the result after each test run. + - Please refer to the `BUILDKITE_TEST_ENGINE_RESULT_PATH` environment variable for more details. + - name: BUILDKITE_TEST_ENGINE_TEST_FILE_EXCLUDE_PATTERN + default: "node_modules" + desc: + - The glob pattern to exclude certain test files or directories. The exclusion will be applied after discovering the test files using a pattern configured with `BUILDKITE_TEST_ENGINE_TEST_FILE_PATTERN`. + - _This option accepts the pattern syntax supported by the [zzglob](https://github.com/DrJosh9000/zzglob?tab=readme-ov-file#pattern-syntax) library._ + - name: BUILDKITE_TEST_ENGINE_TEST_FILE_PATTERN + default: "**/{__tests__/**/*,*.spec,*.test}.{ts,js,tsx,jsx}" + desc: + - The glob pattern to discover test files. You can exclude certain test files or directories from the discovered test files using a pattern that can be configured with `BUILDKITE_TEST_ENGINE_TEST_FILE_EXCLUDE_PATTERN`. + - _This option accepts the pattern syntax supported by the [zzglob](https://github.com/DrJosh9000/zzglob?tab=readme-ov-file#pattern-syntax) library._ diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index e336b87acc..8249628571 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -64,6 +64,14 @@ The following mandatory environment variables must be set. <% var['desc'].each do |d| %> <%= render_markdown(text: d) %> <% end %> + + <% if var['note'].present? %> +
+ <% var['note'].each do |d| %> + <%= render_markdown(text: d) %> + <% end %> +
+ <% end %> <% end %> @@ -76,21 +84,62 @@ The following mandatory environment variables must be set. The following optional environment variables can also be used to configure the Test Engine Client's behavior. +**RSpec** + +
+ + <% TEST_SPLITTING_ENV['optional']['rspec'].each do |var| %> + + + + + <% end %> + +
+ <%= var['name'] %> # +

+ Default:
+ <%= var['default'] || "-" %> +

+
+ <% var['desc'].each do |d| %> + <%= render_markdown(text: d) %> + <% end %> + + <% if var['note'].present? %> +
+ <% var['note'].each do |d| %> + <%= render_markdown(text: d) %> + <% end %> +
+ <% end %> +
+ +**Jest** + - <% TEST_SPLITTING_ENV['optional'].each do |var| %> + <% TEST_SPLITTING_ENV['optional']['jest'].each do |var| %> <% end %> From eb348bb37c7ad2153db2232b339ab73dc34c10fb Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Mon, 23 Sep 2024 12:38:24 +1200 Subject: [PATCH 050/102] Fix spelling --- pages/test_engine/test_splitting/client_installation.md | 4 ++-- pages/test_engine/test_splitting/configuring.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/test_engine/test_splitting/client_installation.md b/pages/test_engine/test_splitting/client_installation.md index eed6f50d84..1277eb73bb 100644 --- a/pages/test_engine/test_splitting/client_installation.md +++ b/pages/test_engine/test_splitting/client_installation.md @@ -27,7 +27,7 @@ apt update && apt install bktec ``` -## RedHat +## Red Hat 1. Configure the registry: @@ -51,7 +51,7 @@ brew tap buildkite/buildkite && brew install buildkite/buildkite/bktec ## Docker -You can run the Test Engine Client inside a Docker container using the official image in [Dockerhub](https://hub.docker.com/r/buildkite/test-engine-client/tags). +You can run the Test Engine Client inside a Docker container using the official image in [Docker hub](https://hub.docker.com/r/buildkite/test-engine-client/tags). To run the client using Docker: diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 8249628571..bbe919d66c 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -10,7 +10,7 @@ The Test Engine Client relies on execution timing data captured by the test coll The Test Engine Client is supported on both Linux and macOS with 64-bit ARM and AMD architectures. You can install the client using the following installers: - [Debian](client-installation#debian) -- [Red Hat](client-installation#redhat) +- [Red Hat](client-installation#red-hat) - [macOS](client-installation#macos) - [Docker](client-installation#docker) From dfb8814f7ff2e1198499ba202e2774f186836fb8 Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Mon, 23 Sep 2024 13:15:40 +1200 Subject: [PATCH 051/102] Add section about API Rate Limits --- pages/test_engine/test_splitting/configuring.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index bbe919d66c..434e366c9a 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -163,3 +163,6 @@ steps: BUILDKITE_TEST_ENGINE_RUNNER: rspec ``` {: codeblock-file="pipeline.yml"} + +## API Rate Limits +There is a limit on the number of API requests that the Test Engine Client can make to the server. The limit is 10,000 requests per minute for each organization. When the rate limit is reached, the Test Engine Client will pause and wait until the rate limit is reset before retrying the request, ensuring that your build doesn't fail due to excessive API calls. This rate limit is separate from your REST API rate limit, meaning it specifically applies to the Test Engine Client's interactions with the server. From 6e0a4182970d010db3ca5e75d4a0bf445dd19d97 Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Mon, 23 Sep 2024 13:17:02 +1200 Subject: [PATCH 052/102] Fix link to JS collector --- pages/test_engine/test_splitting/configuring.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 434e366c9a..86377a4f2f 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -4,7 +4,7 @@ Buildkite maintains its open source Test Engine Client ([bktec](https://github.c ## Dependencies -The Test Engine Client relies on execution timing data captured by the test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite if you are running RSpec, and [JavaScript test collector](/docs/test-engine/javascript-sollectors) if you are running Jest. +The Test Engine Client relies on execution timing data captured by the test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite if you are running RSpec, and [JavaScript test collector](/docs/test-engine/javascript-collectors) if you are running Jest. ## Installation The Test Engine Client is supported on both Linux and macOS with 64-bit ARM and AMD architectures. You can install the client using the following installers: From 43edad49f66a4f31d0a48b119c2842d1f25b5958 Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Mon, 23 Sep 2024 13:22:26 +1200 Subject: [PATCH 053/102] Fix the sub header character casing --- pages/test_engine/test_splitting/configuring.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 86377a4f2f..7feb629980 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -164,5 +164,5 @@ steps: ``` {: codeblock-file="pipeline.yml"} -## API Rate Limits +## API rate limits There is a limit on the number of API requests that the Test Engine Client can make to the server. The limit is 10,000 requests per minute for each organization. When the rate limit is reached, the Test Engine Client will pause and wait until the rate limit is reset before retrying the request, ensuring that your build doesn't fail due to excessive API calls. This rate limit is separate from your REST API rate limit, meaning it specifically applies to the Test Engine Client's interactions with the server. From 373160ab7d2f2a76a913fd1fb50ffd5e817381c1 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 11:41:18 +1000 Subject: [PATCH 054/102] Wording tweaks around parallelized build section in Test Engine docs. --- pages/test_engine/test_splitting/configuring.md | 1 + pages/test_engine/test_suites.md | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 86377a4f2f..c0e7a6f02b 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -7,6 +7,7 @@ Buildkite maintains its open source Test Engine Client ([bktec](https://github.c The Test Engine Client relies on execution timing data captured by the test collectors from previous builds to partition your tests evenly across your agents. Therefore, you will need to configure the [Ruby test collector](/docs/test-engine/ruby-collectors) for your test suite if you are running RSpec, and [JavaScript test collector](/docs/test-engine/javascript-collectors) if you are running Jest. ## Installation + The Test Engine Client is supported on both Linux and macOS with 64-bit ARM and AMD architectures. You can install the client using the following installers: - [Debian](client-installation#debian) diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index 582b08d5d3..c626698502 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -10,13 +10,13 @@ To delete a suite, or regenerate its API token, go to suite settings. ## Parallelized builds -When your [pipeline's builds are run in parallel across multiple agents](/docs/tutorials/parallel-builds), a test suite can also be run as parallel jobs across these agents, although Test Engine will report the entire build execution as part of the same test run. +Since a [pipeline's builds can be run as parallel jobs across multiple agents](/docs/tutorials/parallel-builds), the pipeline's test suites are also run as parallel jobs across these agents, although Test Engine will report the entire build execution as part of the same test run. -When a test run has been split across multiple agents, each test is de-duplicated by both the Test Engine API token and unique build identifier. +When test runs are split across multiple agents, each test is de-duplicated by both the Test Engine API token and unique build identifier. The information that serves as a unique build identifier differs between CI environments. For details, see `run_env[key]` environment variables on our [CI environments page](/docs/test-engine/ci-environments). -You can speed up the duration of parallelized test suite runs (across multiple agents) by implementing [test splitting](/docs/test-engine/test-splitting). +You can speed up the duration of parallelized test suite runs by implementing [test splitting](/docs/test-engine/test-splitting). ## Compare across branches From 65dbe3b0835059ba2d06bd365d66556a4f8d1080 Mon Sep 17 00:00:00 2001 From: Naufan Rizal Date: Mon, 23 Sep 2024 14:41:02 +1200 Subject: [PATCH 055/102] Tweak API rate limit section --- pages/test_engine/test_splitting/client_installation.md | 1 - pages/test_engine/test_splitting/configuring.md | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/test_engine/test_splitting/client_installation.md b/pages/test_engine/test_splitting/client_installation.md index 1277eb73bb..b897f2d6d0 100644 --- a/pages/test_engine/test_splitting/client_installation.md +++ b/pages/test_engine/test_splitting/client_installation.md @@ -1,6 +1,5 @@ # Installing the Test Engine Client - ## Debian 1. Ensure you have curl and gpg installed first: diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 7feb629980..c9138e2b2b 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -165,4 +165,5 @@ steps: {: codeblock-file="pipeline.yml"} ## API rate limits -There is a limit on the number of API requests that the Test Engine Client can make to the server. The limit is 10,000 requests per minute for each organization. When the rate limit is reached, the Test Engine Client will pause and wait until the rate limit is reset before retrying the request, ensuring that your build doesn't fail due to excessive API calls. This rate limit is separate from your REST API rate limit, meaning it specifically applies to the Test Engine Client's interactions with the server. + +There is a limit on the number of API requests that the Test Engine Client can make to the server. This limit is 10,000 requests per minute per Buildkite organization. When this limit is reached, the Test Engine Client will pause and wait until the next minute is reached before retrying the request. This rate limit is independent of your [REST API rate limit](/apis/rest-api/limits), and only applies to the Test Engine Client's interactions with the Test Splitting API. From 364f4ae4575f699a2c57a078e295f4c09bc4b66e Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 13:35:59 +1000 Subject: [PATCH 056/102] Switch out main landing page new product card images with png versions of original svgs. --- app/frontend/css/pages/homepage/_products.scss | 2 +- app/views/homepage/_products.html.erb | 6 +++--- images/docs/home/package_registries.png | Bin 0 -> 36993 bytes images/docs/home/pipelines.png | Bin 0 -> 29872 bytes images/docs/home/test_engine.png | Bin 0 -> 30021 bytes 5 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 images/docs/home/package_registries.png create mode 100644 images/docs/home/pipelines.png create mode 100644 images/docs/home/test_engine.png diff --git a/app/frontend/css/pages/homepage/_products.scss b/app/frontend/css/pages/homepage/_products.scss index cc509aed9f..7aac6b6aae 100644 --- a/app/frontend/css/pages/homepage/_products.scss +++ b/app/frontend/css/pages/homepage/_products.scss @@ -55,6 +55,6 @@ .ProductCard__img { @media (min-width: $screen-xs) { - width: 148px; + height: 50px; } } diff --git a/app/views/homepage/_products.html.erb b/app/views/homepage/_products.html.erb index 294faee9cc..b3f07c893a 100644 --- a/app/views/homepage/_products.html.erb +++ b/app/views/homepage/_products.html.erb @@ -4,14 +4,14 @@
- Pipelines graphic + Pipelines graphic

Powerful CI/CD built to scale on your infrastructure

- Test Engine graphic + Test Engine graphic

Real-time, scalable tracking and monitoring for your tests

@@ -19,7 +19,7 @@
- Packages graphic + Packages graphic

Scale out asset management across any ecosystem

diff --git a/images/docs/home/package_registries.png b/images/docs/home/package_registries.png new file mode 100644 index 0000000000000000000000000000000000000000..29a708ab84a70ab2cbec5ba78531b96eb077278a GIT binary patch literal 36993 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 literal 0 HcmV?d00001 diff --git a/images/docs/home/pipelines.png b/images/docs/home/pipelines.png new file mode 100644 index 0000000000000000000000000000000000000000..186a5dbbed8b87e07f5ee39cd4a67ce3a1d7cf29 GIT binary patch literal 29872 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 literal 0 HcmV?d00001 diff --git a/images/docs/home/test_engine.png b/images/docs/home/test_engine.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d00169a99c8551bb8a7d1a6dc79b2edb378a6c GIT binary patch literal 30021 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 M8a}Rk^yK~j1Al6?p8x;= literal 0 HcmV?d00001 From 41c409ca787ccc8a178977d4988c71290836d223 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 14:24:48 +1000 Subject: [PATCH 057/102] Add brief lines above former product names. --- pages/packages.md | 2 ++ pages/test_engine.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/pages/packages.md b/pages/packages.md index a46539e8ce..36e8d33f6e 100644 --- a/pages/packages.md +++ b/pages/packages.md @@ -17,6 +17,8 @@ As well as storing a collection of packages, a registry also surfaces metadata o > 📘 > You can enable [Buildkite Package Registries](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/packages/permissions#enabling-buildkite-packages). +_Buildkite Packages Registries_ was previously called _Buildkite Packages_. + ## Get started Run through the [Getting started](/docs/packages/getting-started) tutorial for a step-by-step guide on how to use Buildkite Package Registries. diff --git a/pages/test_engine.md b/pages/test_engine.md index fd34867c34..51d7972fca 100644 --- a/pages/test_engine.md +++ b/pages/test_engine.md @@ -15,6 +15,8 @@ Where [Buildkite Pipelines](/docs/pipelines) helps you automate your CI/CD pipel <%= image "overview.png", width: 975, height: 205, alt: "Screenshot of test suite trend showing five metrics over 28 days" %> +_Buildkite Test Engine_ was previously called _Buildkite Test Analytics_. + ## Get started Run through the 'Getting started' section of these Test Engine docs, beginning with [Configuring test suites](/docs/test-engine/test-suites) for an overview of Test Engine's concepts and functionality, followed by the appropriate test collector for project's language: From 83663aac2ce5292b3e9eaf5b87debd6deb257fcc Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 14:36:28 +1000 Subject: [PATCH 058/102] Last few tweaks (link corrections and improve wording on landing page to 'test splitting' feature. --- data/tiles.yml | 4 ++-- .../test_splitting/client_installation.md | 2 +- pages/test_engine/test_splitting/configuring.md | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/data/tiles.yml b/data/tiles.yml index e590682434..20c15e4f05 100644 --- a/data/tiles.yml +++ b/data/tiles.yml @@ -6,9 +6,9 @@ test_engine_features: - title: "Find and fix flaky tests" url: "/docs/test-engine/test-suites#detecting-flaky-tests" desc: "Quickly identify which tests are the most disruptive for your team, and get a head-start on fixing them." - - title: "Split tests evenly across agents" + - title: "Reduce build times with test splitting" url: "/docs/test-engine/test-splitting" - desc: "Reduce your overall pipeline build times, especially for pipelines with highly complex and computationally intensive test suites." + desc: "Split tests evenly across agents to reduce overall pipeline build times, especially for highly complex test suites." test_engine_guides: - title: "Languages" links: diff --git a/pages/test_engine/test_splitting/client_installation.md b/pages/test_engine/test_splitting/client_installation.md index b897f2d6d0..ab6f0701f3 100644 --- a/pages/test_engine/test_splitting/client_installation.md +++ b/pages/test_engine/test_splitting/client_installation.md @@ -50,7 +50,7 @@ brew tap buildkite/buildkite && brew install buildkite/buildkite/bktec ## Docker -You can run the Test Engine Client inside a Docker container using the official image in [Docker hub](https://hub.docker.com/r/buildkite/test-engine-client/tags). +You can run the Test Engine Client inside a Docker container using the official image in [Docker Hub](https://hub.docker.com/r/buildkite/test-engine-client/tags). To run the client using Docker: diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 606d309f86..f9d5c13be9 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -10,16 +10,16 @@ The Test Engine Client relies on execution timing data captured by the test coll The Test Engine Client is supported on both Linux and macOS with 64-bit ARM and AMD architectures. You can install the client using the following installers: -- [Debian](client-installation#debian) -- [Red Hat](client-installation#red-hat) -- [macOS](client-installation#macos) -- [Docker](client-installation#docker) +- [Debian](/docs/test-engine/test-splitting/client-installation#debian) +- [Red Hat](/docs/test-engine/test-splitting/client-installation#red-hat) +- [macOS](/docs/test-engine/test-splitting/client-installation#macos) +- [Docker](/docs/test-engine/test-splitting/client-installation#docker) If you need to install the client on a system not listed above you'll need to perform a manual installation using one of the binaries from [Test Engine Client's releases page](https://github.com/buildkite/test-engine-client/releases/latest). Once you have the binary, make it executable in your pipeline. ## Using the Test Engine Client -Once you have downloaded the Test Engine Client (bktec) binary and it is executable in your pipeline, you'll need to configure some additional environment variables for the Test Engine Client to function. You can then update your pipeline step to call `bktec` instead of calling RSpec to run your tests. +Once you have downloaded the Test Engine Client (bktec) binary and it is executable in your pipeline, you'll need to configure some additional environment variables for the Test Engine Client to function. You can then update your pipeline step to call `bktec` instead of calling RSpec to run your tests. Learn more about how to do this in [Update the pipeline step](#using-the-test-engine-client-update-the-pipeline-step). ### Configure environment variables @@ -167,4 +167,4 @@ steps: ## API rate limits -There is a limit on the number of API requests that the Test Engine Client can make to the server. This limit is 10,000 requests per minute per Buildkite organization. When this limit is reached, the Test Engine Client will pause and wait until the next minute is reached before retrying the request. This rate limit is independent of your [REST API rate limit](/apis/rest-api/limits), and only applies to the Test Engine Client's interactions with the Test Splitting API. +There is a limit on the number of API requests that the Test Engine Client can make to the server. This limit is 10,000 requests per minute per Buildkite organization. When this limit is reached, the Test Engine Client will pause and wait until the next minute is reached before retrying the request. This rate limit is independent of the [REST API rate limits](/docs/apis/rest-api/limits), and only applies to the Test Engine Client's interactions with the Test Splitting API. From e9cde5d12444d3ac7cc5dcf315850f26ef1fb7f4 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 15:08:25 +1000 Subject: [PATCH 059/102] Remove 'beta' flag from the test ownership feature docs. --- app/models/beta_pages.rb | 1 - data/nav.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/app/models/beta_pages.rb b/app/models/beta_pages.rb index 67eb97cc0a..690876ebc0 100644 --- a/app/models/beta_pages.rb +++ b/app/models/beta_pages.rb @@ -2,7 +2,6 @@ class BetaPages def self.all [ 'pipelines/cluster-queue-metrics', - 'test-analytics/test-ownership', 'apis/rest-api/team-pipelines', 'apis/rest-api/organizations/members', 'apis/rest-api/teams', diff --git a/data/nav.yml b/data/nav.yml index 0b54b39193..01bbdf7dd8 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -432,7 +432,6 @@ - name: "Public test suites" path: "test-engine/public-test-suites" - name: "Test ownership" - pill: "beta" path: "test-engine/test-ownership" - name: "Flaky test assignment" path: "test-engine/flaky-test-assignment" From aaace5b6a0984640afa0ae7bd58e8381c1e6f261 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 15:16:47 +1000 Subject: [PATCH 060/102] Remove beta notices from Teams and Org member pages/areas of the REST API docs. --- app/models/beta_pages.rb | 8 +------- data/nav.yml | 2 -- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/app/models/beta_pages.rb b/app/models/beta_pages.rb index 67eb97cc0a..b02723232b 100644 --- a/app/models/beta_pages.rb +++ b/app/models/beta_pages.rb @@ -2,13 +2,7 @@ class BetaPages def self.all [ 'pipelines/cluster-queue-metrics', - 'test-analytics/test-ownership', - 'apis/rest-api/team-pipelines', - 'apis/rest-api/organizations/members', - 'apis/rest-api/teams', - 'apis/rest-api/teams/members', - 'apis/rest-api/teams/pipelines', - 'apis/rest-api/teams/suites' + 'test-analytics/test-ownership' ] end end diff --git a/data/nav.yml b/data/nav.yml index 6a6252ed44..40298feb36 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -605,7 +605,6 @@ path: "apis/rest-api/organizations" - name: "Members" path: "apis/rest-api/organizations/members" - pill: "beta" - name: "Package Registries " # Keep space at end to prevent "Packages" in global nav bar being # highlighted when any child page of "API > REST > Packages" is selected. @@ -647,7 +646,6 @@ - name: "User" path: "apis/rest-api/user" - name: "Teams" - pill: "beta" children: - name: "Overview" path: "apis/rest-api/teams" From 9456de68db3e2df65a86449891d2daa166493c97 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 15:40:27 +1000 Subject: [PATCH 061/102] Remove empty line from 'nav.yml'. --- data/nav.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/data/nav.yml b/data/nav.yml index 629d9b5596..2c89717579 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -444,7 +444,6 @@ path: "test-engine/test-splitting/configuring" - name: "Test Engine Client installation" path: "test-engine/test-splitting/client-installation" - - name: "Languages" children: - name: "Ruby" From 1f18cde2f0d109db1e217ee1f20edf521f682f82 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 15:42:40 +1000 Subject: [PATCH 062/102] Remove 'beta' notices from 'Cluster queue metrics' docs. --- app/models/beta_pages.rb | 1 - data/nav.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/app/models/beta_pages.rb b/app/models/beta_pages.rb index b02723232b..db0db01564 100644 --- a/app/models/beta_pages.rb +++ b/app/models/beta_pages.rb @@ -1,7 +1,6 @@ class BetaPages def self.all [ - 'pipelines/cluster-queue-metrics', 'test-analytics/test-ownership' ] end diff --git a/data/nav.yml b/data/nav.yml index 40298feb36..eae3a1afdb 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -380,7 +380,6 @@ path: "pipelines/waterfall" - name: "Cluster queue metrics" path: "pipelines/cluster-queue-metrics" - pill: "beta" - name: "Integrations" children: - name: "Overview" From b31be9fb674cdc5d4756ba667312c1b6f7173f75 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 15:54:33 +1000 Subject: [PATCH 063/102] Italicise product names at first mention on their docs landing pages. --- app/views/landing_page_pipelines/_hero.html.erb | 2 +- pages/packages.md | 2 +- pages/test_engine.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/landing_page_pipelines/_hero.html.erb b/app/views/landing_page_pipelines/_hero.html.erb index 426b3c983c..11d88f753d 100644 --- a/app/views/landing_page_pipelines/_hero.html.erb +++ b/app/views/landing_page_pipelines/_hero.html.erb @@ -2,7 +2,7 @@

Buildkite Pipelines

-

Create fast, secure, and reliable CI/CD with Buildkite Pipelines so you can quickly and confidently ship quality code. Scale out automated workflows with massive concurrency and flexible compute types on Buildkite Pipelines. Fine-tune each workflow to match your business needs. Buildkite provides the building blocks, docs, and extension points you'll need to build your dream CI/CD workflows. Let's get building! 🚀

+

Create fast, secure, and reliable CI/CD with Buildkite Pipelines so you can quickly and confidently ship quality code. Scale out automated workflows with massive concurrency and flexible compute types on Buildkite Pipelines. Fine-tune each workflow to match your business needs. Buildkite provides the building blocks, docs, and extension points you'll need to build your dream CI/CD workflows. Let's get building! 🚀

diff --git a/pages/packages.md b/pages/packages.md index 36e8d33f6e..8e6072477c 100644 --- a/pages/packages.md +++ b/pages/packages.md @@ -4,7 +4,7 @@ template: "landing_page" # Buildkite Package Registries -Scale out asset management across any ecosystem with Buildkite Package Registries. Avoid the bottleneck of poorly managed and insecure dependencies. +Scale out asset management across any ecosystem with _Buildkite Package Registries_. Avoid the bottleneck of poorly managed and insecure dependencies. Buildkite Package Registries allows you to: diff --git a/pages/test_engine.md b/pages/test_engine.md index 51d7972fca..0720cfa11a 100644 --- a/pages/test_engine.md +++ b/pages/test_engine.md @@ -4,7 +4,7 @@ template: "landing_page" # Buildkite Test Engine -Scale out your testing across any framework with Buildkite Test Engine. Get more out of fewer tests with performance insights to speed up builds and isolate unreliable tests +Scale out your testing across any framework with _Buildkite Test Engine_. Get more out of fewer tests with performance insights to speed up builds and isolate unreliable tests. Where [Buildkite Pipelines](/docs/pipelines) helps you automate your CI/CD pipelines, Test Engine helps you track and analyze the steps in these pipelines, by: From 87a78c1456e574205fdd1292f3980f3826a2dae3 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 16:10:12 +1000 Subject: [PATCH 064/102] Tweak description of 'parallelized build' text for Test Engine further. --- pages/test_engine/test_suites.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index c626698502..453e5fc39e 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -10,13 +10,14 @@ To delete a suite, or regenerate its API token, go to suite settings. ## Parallelized builds -Since a [pipeline's builds can be run as parallel jobs across multiple agents](/docs/tutorials/parallel-builds), the pipeline's test suites are also run as parallel jobs across these agents, although Test Engine will report the entire build execution as part of the same test run. +When a [pipeline's jobs are configured to run in parallel across multiple agents](/docs/tutorials/parallel-builds) (to speed up build times), the jobs of a pipeline's test suite are also run in parallel, although Test Engine will report the entire build execution as part of the same test run. When test runs are split across multiple agents, each test is de-duplicated by both the Test Engine API token and unique build identifier. The information that serves as a unique build identifier differs between CI environments. For details, see `run_env[key]` environment variables on our [CI environments page](/docs/test-engine/ci-environments). -You can speed up the duration of parallelized test suite runs by implementing [test splitting](/docs/test-engine/test-splitting). +> 📘 +> You can further speed up the duration of parallelized test suite runs by implementing [test splitting](/docs/test-engine/test-splitting). ## Compare across branches From 33b92736b5250a505cf72f94d55596d31a00f79b Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 16:25:01 +1000 Subject: [PATCH 065/102] Make optional RSpec and Jest environment variables more discoverable in the docs. --- pages/test_engine/test_splitting/configuring.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index f9d5c13be9..577450fc85 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -23,7 +23,7 @@ Once you have downloaded the Test Engine Client (bktec) binary and it is executa ### Configure environment variables -The Test Engine Client tool uses a number of [predefined](#predefined-environment-variables), [mandatory](#mandatory-environment-variables), and [optional](#optional-environment-variables) environment variables. +The Test Engine Client tool uses a number of [predefined](#predefined-environment-variables) and [mandatory](#mandatory-environment-variables) environment variables, as well as several optional ones for either [RSpec](#optional-rspec-environment-variables) or [Jest](#optional-jest-environment-variables). @@ -79,13 +79,11 @@ The following mandatory environment variables must be set.
<%= var['name'] %> #

- Default: - <%= var['default'] %> + Default:
+ <%= var['default'] || "-" %>

<% var['desc'].each do |d| %> <%= render_markdown(text: d) %> <% end %> + + <% if var['note'].present? %> +
+ <% var['note'].each do |d| %> + <%= render_markdown(text: d) %> + <% end %> +
+ <% end %>
- + -#### Optional environment variables +#### Optional RSpec environment variables -The following optional environment variables can also be used to configure the Test Engine Client's behavior. - -**RSpec** +The following optional RSpec environment variables can also be used to configure the Test Engine Client's behavior. @@ -116,7 +114,11 @@ The following optional environment variables can also be used to configure the T
-**Jest** + + +#### Optional Jest environment variables + +The following optional Jest environment variables can also be used to configure the Test Engine Client's behavior. From 9761be12fbd94d6114b502f365e968491038cfc3 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Mon, 23 Sep 2024 16:26:19 +1000 Subject: [PATCH 066/102] Add 'Jest' spelling exception to heading linter file. --- vale/styles/Buildkite/h1-h6_sentence_case.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/vale/styles/Buildkite/h1-h6_sentence_case.yml b/vale/styles/Buildkite/h1-h6_sentence_case.yml index 8b217c80cb..8a7931b2fa 100644 --- a/vale/styles/Buildkite/h1-h6_sentence_case.yml +++ b/vale/styles/Buildkite/h1-h6_sentence_case.yml @@ -110,6 +110,7 @@ exceptions: - Installation - JavaScript - Jenkins + - Jest - JSON - JUnit - KMS From 06e2040b339351776069bc0b710d5e6f9e922a45 Mon Sep 17 00:00:00 2001 From: James Hill <395+jameshill@users.noreply.github.com.> Date: Mon, 23 Sep 2024 23:26:25 +1000 Subject: [PATCH 067/102] Update the Test Executions page to reflect changes To the Test Engine billing framework. --- data/nav.yml | 4 ++-- pages/test_engine/test_executions.md | 14 ----------- pages/test_engine/usage_and_billing.md | 33 ++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 16 deletions(-) delete mode 100644 pages/test_engine/test_executions.md create mode 100644 pages/test_engine/usage_and_billing.md diff --git a/data/nav.yml b/data/nav.yml index eae3a1afdb..eae15c82b3 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -428,8 +428,6 @@ path: "test-engine/permissions" - name: "CI environment variables" path: "test-engine/ci-environments" - - name: "Test executions" - path: "test-engine/test-executions" - name: "Public test suites" path: "test-engine/public-test-suites" - name: "Test ownership" @@ -437,6 +435,8 @@ path: "test-engine/test-ownership" - name: "Flaky test assignment" path: "test-engine/flaky-test-assignment" + - name: "Usage & Billing" + path: "test-engine/usage-and-billing" - name: "Languages" start_expanded: true children: diff --git a/pages/test_engine/test_executions.md b/pages/test_engine/test_executions.md deleted file mode 100644 index 9823eac0b1..0000000000 --- a/pages/test_engine/test_executions.md +++ /dev/null @@ -1,14 +0,0 @@ -# Test executions - -Each [Buildkite plan](https://buildkite.com/pricing) has test execution inclusions, which vary depending on the plan type and the number of users in your organization. - -You can find the test execution details for a run at the bottom of the run page, and your organization's [total usage](#usage-page) in Settings. -<%= image "test_executions.png", alt: "Test executions run page" %> - -## Usage page - -The [Usage page](https://buildkite.com/organizations/~/usage) is available on every Buildkite plan and shows a breakdown of job minutes and test executions for your organization. - -The [test executions usage page](https://buildkite.com/organizations/~/usage/test_executions) graphs the total executions over the organization's billing periods. It includes a breakdown of usage by suite and a CSV download of usage over the period. - -Your organization's usage is also accessible in the [GraphQL API](/docs/apis/graphql/cookbooks/organizations#query-the-usage-api). diff --git a/pages/test_engine/usage_and_billing.md b/pages/test_engine/usage_and_billing.md new file mode 100644 index 0000000000..87c00a6895 --- /dev/null +++ b/pages/test_engine/usage_and_billing.md @@ -0,0 +1,33 @@ +# Usage & Billing + +Test Engine is designed to optimise your test suite through the management of your tests. + +## Managed Tests + +A **managed test** is a uniquely identifiable test by scope and name. + +Test Engine will track the history of each test, calculate flakiness, automatically +quarnatine & attribute ownership based on this uniquely identified managed test. + +Buildkite calculates your usage by determining the number of managed tests each day +and then bill based on the 90th percentile of usage for the month. This method ensures +occasional spikes in usage, such as those caused by refactoring, don't result in excessive charges. + +## Test Executions (legacy) + +Some legacy Buildkite plans meter on the number of times a test was executed (run). + +You can find the test execution details for a run at the bottom of the run page, and your organization's [total usage](#usage-page) in Settings. + +<%= image "test_executions.png", alt: "Test executions run page" %> + +## Usage page + +The [Usage page](https://buildkite.com/organizations/~/usage) is available on every Buildkite plan and shows a breakdown of all billable usage for your organization including managed tests and test executions. + +The [managed tests usage page](https://buildkite.com/organizations/~/usage/test_engine_managed_tests) graphs the maximum number of unique +tests per day over the organization's billing periods. It includes a breakdown of usage by suite and a CSV download of usage over the period. + +The [test executions usage page](https://buildkite.com/organizations/~/usage/test_executions) graphs the total executions over the organization's billing periods. It includes a breakdown of usage by suite and a CSV download of usage over the period. + +Your organization's usage is also accessible in the [GraphQL API](/docs/apis/graphql/cookbooks/organizations#query-the-usage-api). From f42d0a6e552750955c30955192dec694dcd279c3 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Tue, 24 Sep 2024 11:22:58 +1000 Subject: [PATCH 068/102] Suppress in-page ToC on Test splitting overview page since it has no headings, and this also allows the image to expand, revealing clearer details. --- pages/test_engine/test_splitting.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pages/test_engine/test_splitting.md b/pages/test_engine/test_splitting.md index eb631ca148..c3076d50ad 100644 --- a/pages/test_engine/test_splitting.md +++ b/pages/test_engine/test_splitting.md @@ -1,3 +1,7 @@ +--- +toc: false +--- + # Test splitting Test splitting is a feature that: From c8f95897b30c596e9eccc6594b00e83bd65fddfe Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Tue, 24 Sep 2024 14:10:34 +1000 Subject: [PATCH 069/102] Fix linting errors, broken screenshot and remove ampersands. --- data/nav.yml | 2 +- .../test_executions.png | Bin pages/test_engine/usage_and_billing.md | 12 ++++++------ 3 files changed, 7 insertions(+), 7 deletions(-) rename images/docs/test_engine/{test_executions => usage_and_billing}/test_executions.png (100%) diff --git a/data/nav.yml b/data/nav.yml index eae15c82b3..210f6c6906 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -435,7 +435,7 @@ path: "test-engine/test-ownership" - name: "Flaky test assignment" path: "test-engine/flaky-test-assignment" - - name: "Usage & Billing" + - name: "Usage and billing" path: "test-engine/usage-and-billing" - name: "Languages" start_expanded: true diff --git a/images/docs/test_engine/test_executions/test_executions.png b/images/docs/test_engine/usage_and_billing/test_executions.png similarity index 100% rename from images/docs/test_engine/test_executions/test_executions.png rename to images/docs/test_engine/usage_and_billing/test_executions.png diff --git a/pages/test_engine/usage_and_billing.md b/pages/test_engine/usage_and_billing.md index 87c00a6895..f78ac1bc46 100644 --- a/pages/test_engine/usage_and_billing.md +++ b/pages/test_engine/usage_and_billing.md @@ -1,19 +1,19 @@ -# Usage & Billing +# Usage and billing -Test Engine is designed to optimise your test suite through the management of your tests. +Test Engine is designed to optimize your test suite through the management of your tests. -## Managed Tests +## Managed tests -A **managed test** is a uniquely identifiable test by scope and name. +A _managed test_ is a uniquely identifiable test by scope and name. Test Engine will track the history of each test, calculate flakiness, automatically -quarnatine & attribute ownership based on this uniquely identified managed test. +quarantine and attribute ownership based on this uniquely identified managed test. Buildkite calculates your usage by determining the number of managed tests each day and then bill based on the 90th percentile of usage for the month. This method ensures occasional spikes in usage, such as those caused by refactoring, don't result in excessive charges. -## Test Executions (legacy) +## Test executions (legacy) Some legacy Buildkite plans meter on the number of times a test was executed (run). From 295facce98aaeaf9082fa06ea0e73fef2e795a58 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 25 Sep 2024 10:42:15 +1000 Subject: [PATCH 070/102] Fix intro for 'managed tests', as well as implement minor clarifications and link fixes on the remainder of the 'usage and billing' page. --- pages/test_engine/usage_and_billing.md | 31 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/pages/test_engine/usage_and_billing.md b/pages/test_engine/usage_and_billing.md index f78ac1bc46..704ccad0ab 100644 --- a/pages/test_engine/usage_and_billing.md +++ b/pages/test_engine/usage_and_billing.md @@ -1,21 +1,29 @@ # Usage and billing -Test Engine is designed to optimize your test suite through the management of your tests. +Test Engine is designed to optimize your test suites through the management of your tests. ## Managed tests -A _managed test_ is a uniquely identifiable test by scope and name. +Each and every test that can be uniquely identified by its combination of test suite, scope, and name, is a _managed test_, which in turn is used for billing purposes in Test Engine. -Test Engine will track the history of each test, calculate flakiness, automatically -quarantine and attribute ownership based on this uniquely identified managed test. +For example, each of the following three tests are unique managed tests: -Buildkite calculates your usage by determining the number of managed tests each day -and then bill based on the 90th percentile of usage for the month. This method ensures -occasional spikes in usage, such as those caused by refactoring, don't result in excessive charges. +- Test Suite 1 - here.is.scope.one - Login Test name +- Test Suite 1 - here.is.another.scope - Login Test name +- Test Suite 2 - here.is.scope.one - Login Test name + +Test Engine does the following on each managed test: + +- Tracks its history +- Calculates its flakiness +- Automatically quarantines +- Attributes ownership + +For billing purposes, Buildkite measures usage by calculating the number of managed tests each day, and then bills based on the 90th percentile of usage for the month. This billing method ensures that occasional spikes in usage, such as those caused by refactoring, don't result in excessive charges. ## Test executions (legacy) -Some legacy Buildkite plans meter on the number of times a test was executed (run). +Some legacy Buildkite plans measure usage on the number of times a test was executed (run). You can find the test execution details for a run at the bottom of the run page, and your organization's [total usage](#usage-page) in Settings. @@ -23,11 +31,10 @@ You can find the test execution details for a run at the bottom of the run page, ## Usage page -The [Usage page](https://buildkite.com/organizations/~/usage) is available on every Buildkite plan and shows a breakdown of all billable usage for your organization including managed tests and test executions. +The [Usage page](https://buildkite.com/organizations/~/usage?product=test_engine) is available on every Buildkite plan, and shows a breakdown of all billable usage for your organization including managed tests and test executions. -The [managed tests usage page](https://buildkite.com/organizations/~/usage/test_engine_managed_tests) graphs the maximum number of unique -tests per day over the organization's billing periods. It includes a breakdown of usage by suite and a CSV download of usage over the period. +The [managed tests usage page](https://buildkite.com/organizations/~/usage/test_engine_managed_tests) graphs the maximum number of unique tests per day over the organization's billing periods. This page includes a breakdown of usage by suite and a CSV download of usage over the period. -The [test executions usage page](https://buildkite.com/organizations/~/usage/test_executions) graphs the total executions over the organization's billing periods. It includes a breakdown of usage by suite and a CSV download of usage over the period. +The [test executions usage page](https://buildkite.com/organizations/~/usage/test_executions) graphs the total executions over the organization's billing periods. This page includes a breakdown of usage by suite and a CSV download of usage over the period. Your organization's usage is also accessible in the [GraphQL API](/docs/apis/graphql/cookbooks/organizations#query-the-usage-api). From d8f7cb4787f5e670c862251110fb55a666f019e6 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 25 Sep 2024 14:08:45 +1000 Subject: [PATCH 071/102] Amend URL paths for Package Registries. --- app/views/homepage/_references.html.erb | 2 +- data/nav.yml | 48 ++++++++--------- pages/agent/v3/cli_oidc.md | 2 +- .../packages.md | 0 .../registries.md | 2 +- .../registry_tokens.md | 0 pages/package_registries.md | 52 +++++++++++++++++++ .../_access_java_package_details_page.md | 0 .../_alpine_registry_slug.md | 0 .../_container_registry_slug.md | 0 .../_debian_registry_slug.md | 0 .../_file_details_page_sections.md | 0 .../_helm_registry_slug.md | 0 .../_java_package_domain_name_version.md | 0 .../_java_registry_id.md | 0 .../_java_registry_slug.md | 0 .../_javascript_registry_slug.md | 0 .../_javascript_registry_write_token.md | 0 .../_org_slug.md | 0 .../_package_details_page_sections.md | 0 .../_path_to_file.md | 0 .../_python_registry_slug.md | 0 .../_red_hat_registry_slug.md | 0 .../_registry_slug.md | 0 .../_ruby_registry_slug.md | 0 .../_ruby_registry_write_token.md | 0 .../_terraform_registry_slug.md | 0 .../alpine.md | 16 +++--- .../background.md | 8 +-- .../container.md | 16 +++--- .../debian.md | 16 +++--- .../{packages => package_registries}/files.md | 10 ++-- .../getting_started.md | 14 ++--- .../gradle.md | 18 +++---- .../{packages => package_registries}/helm.md | 18 +++---- .../helm_oci.md | 16 +++--- .../javascript.md | 20 +++---- .../manage_registries.md | 34 ++++++------ .../{packages => package_registries}/maven.md | 22 ++++---- .../private_storage.md | 8 +-- .../python.md | 16 +++--- .../red_hat.md | 16 +++--- .../{packages => package_registries}/ruby.md | 18 +++---- .../security.md | 4 +- .../security/oidc.md | 2 +- .../security/permissions.md | 4 +- .../terraform.md | 8 +-- pages/packages.md | 52 ------------------- pages/pipelines/security/oidc.md | 2 +- pages/pipelines/security/permissions.md | 4 +- pages/team_management/permissions.md | 10 ++-- pages/test_engine/permissions.md | 4 +- 52 files changed, 231 insertions(+), 231 deletions(-) rename pages/apis/rest_api/{packages => package_registries}/packages.md (100%) rename pages/apis/rest_api/{packages => package_registries}/registries.md (98%) rename pages/apis/rest_api/{packages => package_registries}/registry_tokens.md (100%) create mode 100644 pages/package_registries.md rename pages/{packages => package_registries}/_access_java_package_details_page.md (100%) rename pages/{packages => package_registries}/_alpine_registry_slug.md (100%) rename pages/{packages => package_registries}/_container_registry_slug.md (100%) rename pages/{packages => package_registries}/_debian_registry_slug.md (100%) rename pages/{packages => package_registries}/_file_details_page_sections.md (100%) rename pages/{packages => package_registries}/_helm_registry_slug.md (100%) rename pages/{packages => package_registries}/_java_package_domain_name_version.md (100%) rename pages/{packages => package_registries}/_java_registry_id.md (100%) rename pages/{packages => package_registries}/_java_registry_slug.md (100%) rename pages/{packages => package_registries}/_javascript_registry_slug.md (100%) rename pages/{packages => package_registries}/_javascript_registry_write_token.md (100%) rename pages/{packages => package_registries}/_org_slug.md (100%) rename pages/{packages => package_registries}/_package_details_page_sections.md (100%) rename pages/{packages => package_registries}/_path_to_file.md (100%) rename pages/{packages => package_registries}/_python_registry_slug.md (100%) rename pages/{packages => package_registries}/_red_hat_registry_slug.md (100%) rename pages/{packages => package_registries}/_registry_slug.md (100%) rename pages/{packages => package_registries}/_ruby_registry_slug.md (100%) rename pages/{packages => package_registries}/_ruby_registry_write_token.md (100%) rename pages/{packages => package_registries}/_terraform_registry_slug.md (100%) rename pages/{packages => package_registries}/alpine.md (84%) rename pages/{packages => package_registries}/background.md (91%) rename pages/{packages => package_registries}/container.md (85%) rename pages/{packages => package_registries}/debian.md (80%) rename pages/{packages => package_registries}/files.md (83%) rename pages/{packages => package_registries}/getting_started.md (87%) rename pages/{packages => package_registries}/gradle.md (77%) rename pages/{packages => package_registries}/helm.md (79%) rename pages/{packages => package_registries}/helm_oci.md (82%) rename pages/{packages => package_registries}/javascript.md (77%) rename pages/{packages => package_registries}/manage_registries.md (80%) rename pages/{packages => package_registries}/maven.md (78%) rename pages/{packages => package_registries}/private_storage.md (92%) rename pages/{packages => package_registries}/python.md (78%) rename pages/{packages => package_registries}/red_hat.md (77%) rename pages/{packages => package_registries}/ruby.md (78%) rename pages/{packages => package_registries}/security.md (57%) rename pages/{packages => package_registries}/security/oidc.md (99%) rename pages/{packages => package_registries}/security/permissions.md (97%) rename pages/{packages => package_registries}/terraform.md (88%) delete mode 100644 pages/packages.md diff --git a/app/views/homepage/_references.html.erb b/app/views/homepage/_references.html.erb index b1b867764a..ee32b1464f 100644 --- a/app/views/homepage/_references.html.erb +++ b/app/views/homepage/_references.html.erb @@ -40,7 +40,7 @@ links: [ { title: "Package ecosystems", - link: "/docs/packages/alpine" + link: "/docs/package-registries/alpine" } ] }, diff --git a/data/nav.yml b/data/nav.yml index eae3a1afdb..c55c21e904 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -472,7 +472,7 @@ - name: "Writing your own collectors" path: "test-engine/your-own-collectors" - name: "Package Registries" - path: "packages" + path: "package-registries" children: - name: "Overview" path: "packages" @@ -480,57 +480,57 @@ start_expanded: true children: - name: "Background" - path: "packages/background" + path: "package-registries/background" - name: "Getting started" - path: "packages/getting-started" + path: "package-registries/getting-started" - name: "Registries" children: - name: "Manage registries" - path: "packages/manage-registries" + path: "package-registries/manage-registries" - name: "Private storage" - path: "packages/private-storage" + path: "package-registries/private-storage" - name: "Security" children: - name: "Overview" - path: "packages/security" + path: "package-registries/security" - name: "OIDC" - path: "packages/security/oidc" + path: "package-registries/security/oidc" - name: "Permissions" - path: "packages/security/permissions" + path: "package-registries/security/permissions" - name: "Package ecosystems" children: - name: "Alpine" - path: "packages/alpine" + path: "package-registries/alpine" - name: "Container" - path: "packages/container" + path: "package-registries/container" - name: "Debian" - path: "packages/debian" + path: "package-registries/debian" - name: "Files" - path: "packages/files" + path: "package-registries/files" - name: "Helm" start_expanded: true children: - name: "OCI-based" - path: "packages/helm-oci" + path: "package-registries/helm-oci" - name: "Standard" - path: "packages/helm" + path: "package-registries/helm" - name: "Java" start_expanded: true children: - name: "Maven" - path: "packages/maven" + path: "package-registries/maven" - name: "Gradle" - path: "packages/gradle" + path: "package-registries/gradle" - name: "JavaScipt" - path: "packages/javascript" + path: "package-registries/javascript" - name: "Python" - path: "packages/python" + path: "package-registries/python" - name: "Red Hat" - path: "packages/red-hat" + path: "package-registries/red-hat" - name: "Ruby" - path: "packages/ruby" + path: "package-registries/ruby" - name: "Terraform" - path: "packages/terraform" + path: "package-registries/terraform" - name: "Platform" path: "platform" children: @@ -609,11 +609,11 @@ # highlighted when any child page of "API > REST > Packages" is selected. children: - name: "Registries" - path: "apis/rest-api/packages/registries" + path: "apis/rest-api/package-registries/registries" - name: "Registry tokens" - path: "apis/rest-api/packages/registry-tokens" + path: "apis/rest-api/package-registries/registry-tokens" - name: "Packages" - path: "apis/rest-api/packages/packages" + path: "apis/rest-api/package-registries/packages" - name: "Pipelines " # Keep space at end to prevent "Pipelines" in global nav bar being # highlighted when any child page of "API > REST > Pipelines" is selected. diff --git a/pages/agent/v3/cli_oidc.md b/pages/agent/v3/cli_oidc.md index fce3ba319e..fca17f30d7 100644 --- a/pages/agent/v3/cli_oidc.md +++ b/pages/agent/v3/cli_oidc.md @@ -7,7 +7,7 @@ Refer to the following documentation for more information: - The [What is OpenID Connect](https://openid.net/developers/how-connect-works/) overview on the OpenID web site for more details about how OIDC works. - The [OpenID Connect Core documentation](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) for more information about how OIDC tokens are constructed and how to extract and use claims. -Learn more about how to restrict your Buildkite Agents' access to deployment environments like AWS, from the OIDC in [Buildkite Pipelines](/docs/pipelines/security/oidc) and with [AWS](/docs/pipelines/security/oidc/aws) documentation pages, as well as the [Buildkite Package Registries](/docs/packages/security/oidc) documentation page. +Learn more about how to restrict your Buildkite Agents' access to deployment environments like AWS, from the OIDC in [Buildkite Pipelines](/docs/pipelines/security/oidc) and with [AWS](/docs/pipelines/security/oidc/aws) documentation pages, as well as the [Buildkite Package Registries](/docs/package-registries/security/oidc) documentation page. ## Request OIDC token diff --git a/pages/apis/rest_api/packages/packages.md b/pages/apis/rest_api/package_registries/packages.md similarity index 100% rename from pages/apis/rest_api/packages/packages.md rename to pages/apis/rest_api/package_registries/packages.md diff --git a/pages/apis/rest_api/packages/registries.md b/pages/apis/rest_api/package_registries/registries.md similarity index 98% rename from pages/apis/rest_api/packages/registries.md rename to pages/apis/rest_api/package_registries/registries.md index 2a604a7a0e..3b0500822a 100644 --- a/pages/apis/rest_api/packages/registries.md +++ b/pages/apis/rest_api/package_registries/registries.md @@ -1,6 +1,6 @@ # Registries API -The registries API endpoint lets you [create and manage registries](/docs/packages/manage-registries) in your organization. +The registries API endpoint lets you [create and manage registries](/docs/package-registries/manage-registries) in your organization. ## Create a registry diff --git a/pages/apis/rest_api/packages/registry_tokens.md b/pages/apis/rest_api/package_registries/registry_tokens.md similarity index 100% rename from pages/apis/rest_api/packages/registry_tokens.md rename to pages/apis/rest_api/package_registries/registry_tokens.md diff --git a/pages/package_registries.md b/pages/package_registries.md new file mode 100644 index 0000000000..5ebf3f0978 --- /dev/null +++ b/pages/package_registries.md @@ -0,0 +1,52 @@ +--- +template: "landing_page" +--- + +# Buildkite Package Registries + +Scale out asset management across any ecosystem with _Buildkite Package Registries_. Avoid the bottleneck of poorly managed and insecure dependencies. + +Buildkite Package Registries allows you to: + +- Manage artifacts and packages from [Buildkite Pipelines](/docs/pipelines), as well as other CI/CD applications that require artifact management. + +- Provide registries to store your [packages and other package-like file formats](/docs/package-registries/background) such as container images and Terraform modules. + +As well as storing a collection of packages, a registry also surfaces metadata or attributes associated with a package, such as the package's description, version, contents (files and directories), checksum details, distribution type, dependencies, and so on. + +> 📘 +> You can enable [Buildkite Package Registries](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/package-registries/permissions#enabling-buildkite-packages). + +_Buildkite Packages Registries_ was previously called _Buildkite Packages_. + +## Get started + +Run through the [Getting started](/docs/package-registries/getting-started) tutorial for a step-by-step guide on how to use Buildkite Package Registries. + +If you're familiar with the basics, explore how to use registries for each of Buildkite Package Registries' supported package ecosystems: + + + +
+ <%= button ":alpine: Alpine (apk)", "/docs/package-registries/alpine" %> + <%= button ":docker: Container (Docker)", "/docs/package-registries/container" %> + <%= button ":debian: Debian/Ubuntu (deb)", "/docs/package-registries/debian" %> + <%= button ":package: Files (generic)", "/docs/package-registries/files" %> + <%= button ":helm: Helm (OCI)", "/docs/package-registries/helm-oci" %> + <%= button ":helm: Helm", "/docs/package-registries/helm" %> + <%= button ":maven: Java (Maven)", "/docs/package-registries/maven" %> + <%= button ":gradle: Java (Gradle)", "/docs/package-registries/gradle" %> + <%= button ":node: JavaScript (npm)", "/docs/package-registries/javascript" %> + <%= button ":python: Python (PyPI)", "/docs/package-registries/python" %> + <%= button ":redhat: Red Hat (RPM)", "/docs/package-registries/red-hat" %> + <%= button ":ruby: Ruby (RubyGems)", "/docs/package-registries/ruby" %> + <%= button ":terraform: Terraform (modules)", "/docs/package-registries/terraform" %> +
+ + + +Learn more about how to: + +- Work with registries in [Manage registries](/docs/package-registries/manage-registries). +- Manage access to your registries in [User, team, and registry permissions](/docs/package-registries/permissions). +- Configure your own private storage for Buildkite Package Registries in [Private storage](/docs/package-registries/private-storage). diff --git a/pages/packages/_access_java_package_details_page.md b/pages/package_registries/_access_java_package_details_page.md similarity index 100% rename from pages/packages/_access_java_package_details_page.md rename to pages/package_registries/_access_java_package_details_page.md diff --git a/pages/packages/_alpine_registry_slug.md b/pages/package_registries/_alpine_registry_slug.md similarity index 100% rename from pages/packages/_alpine_registry_slug.md rename to pages/package_registries/_alpine_registry_slug.md diff --git a/pages/packages/_container_registry_slug.md b/pages/package_registries/_container_registry_slug.md similarity index 100% rename from pages/packages/_container_registry_slug.md rename to pages/package_registries/_container_registry_slug.md diff --git a/pages/packages/_debian_registry_slug.md b/pages/package_registries/_debian_registry_slug.md similarity index 100% rename from pages/packages/_debian_registry_slug.md rename to pages/package_registries/_debian_registry_slug.md diff --git a/pages/packages/_file_details_page_sections.md b/pages/package_registries/_file_details_page_sections.md similarity index 100% rename from pages/packages/_file_details_page_sections.md rename to pages/package_registries/_file_details_page_sections.md diff --git a/pages/packages/_helm_registry_slug.md b/pages/package_registries/_helm_registry_slug.md similarity index 100% rename from pages/packages/_helm_registry_slug.md rename to pages/package_registries/_helm_registry_slug.md diff --git a/pages/packages/_java_package_domain_name_version.md b/pages/package_registries/_java_package_domain_name_version.md similarity index 100% rename from pages/packages/_java_package_domain_name_version.md rename to pages/package_registries/_java_package_domain_name_version.md diff --git a/pages/packages/_java_registry_id.md b/pages/package_registries/_java_registry_id.md similarity index 100% rename from pages/packages/_java_registry_id.md rename to pages/package_registries/_java_registry_id.md diff --git a/pages/packages/_java_registry_slug.md b/pages/package_registries/_java_registry_slug.md similarity index 100% rename from pages/packages/_java_registry_slug.md rename to pages/package_registries/_java_registry_slug.md diff --git a/pages/packages/_javascript_registry_slug.md b/pages/package_registries/_javascript_registry_slug.md similarity index 100% rename from pages/packages/_javascript_registry_slug.md rename to pages/package_registries/_javascript_registry_slug.md diff --git a/pages/packages/_javascript_registry_write_token.md b/pages/package_registries/_javascript_registry_write_token.md similarity index 100% rename from pages/packages/_javascript_registry_write_token.md rename to pages/package_registries/_javascript_registry_write_token.md diff --git a/pages/packages/_org_slug.md b/pages/package_registries/_org_slug.md similarity index 100% rename from pages/packages/_org_slug.md rename to pages/package_registries/_org_slug.md diff --git a/pages/packages/_package_details_page_sections.md b/pages/package_registries/_package_details_page_sections.md similarity index 100% rename from pages/packages/_package_details_page_sections.md rename to pages/package_registries/_package_details_page_sections.md diff --git a/pages/packages/_path_to_file.md b/pages/package_registries/_path_to_file.md similarity index 100% rename from pages/packages/_path_to_file.md rename to pages/package_registries/_path_to_file.md diff --git a/pages/packages/_python_registry_slug.md b/pages/package_registries/_python_registry_slug.md similarity index 100% rename from pages/packages/_python_registry_slug.md rename to pages/package_registries/_python_registry_slug.md diff --git a/pages/packages/_red_hat_registry_slug.md b/pages/package_registries/_red_hat_registry_slug.md similarity index 100% rename from pages/packages/_red_hat_registry_slug.md rename to pages/package_registries/_red_hat_registry_slug.md diff --git a/pages/packages/_registry_slug.md b/pages/package_registries/_registry_slug.md similarity index 100% rename from pages/packages/_registry_slug.md rename to pages/package_registries/_registry_slug.md diff --git a/pages/packages/_ruby_registry_slug.md b/pages/package_registries/_ruby_registry_slug.md similarity index 100% rename from pages/packages/_ruby_registry_slug.md rename to pages/package_registries/_ruby_registry_slug.md diff --git a/pages/packages/_ruby_registry_write_token.md b/pages/package_registries/_ruby_registry_write_token.md similarity index 100% rename from pages/packages/_ruby_registry_write_token.md rename to pages/package_registries/_ruby_registry_write_token.md diff --git a/pages/packages/_terraform_registry_slug.md b/pages/package_registries/_terraform_registry_slug.md similarity index 100% rename from pages/packages/_terraform_registry_slug.md rename to pages/package_registries/_terraform_registry_slug.md diff --git a/pages/packages/alpine.md b/pages/package_registries/alpine.md similarity index 84% rename from pages/packages/alpine.md rename to pages/package_registries/alpine.md index 5cc2763efa..498391239c 100644 --- a/pages/packages/alpine.md +++ b/pages/package_registries/alpine.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides registry support for Alpine-based (apk) packages for Alpine Linux operating systems. -Once your Alpine registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the relevant `curl` command presented on your Alpine registry's details page. +Once your Alpine registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the relevant `curl` command presented on your Alpine registry's details page. To view and copy this `curl` command: @@ -28,13 +28,13 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/alpine_registry_slug' %> +<%= render_markdown partial: 'package-registries/alpine_registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Alpine registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'packages/path_to_file' %> +<%= render_markdown partial: 'package-registries/path_to_file' %> For example, to upload the file `my-alpine-package_0.1.1_r0.apk` from the current directory to the **My Alpine packages** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -54,7 +54,7 @@ To access your apk package's details page: 1. Select your Alpine registry on this page. 1. On your Alpine registry page, select the package to display its details page. -<%= render_markdown partial: 'packages/package_details_page_sections' %> +<%= render_markdown partial: 'package-registries/package_details_page_sections' %> ### Downloading a package @@ -83,11 +83,11 @@ echo "https://buildkite:{registry.read.token}@packages.buildkite.com/{org.slug}/ where: -- `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Alpine registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. +- `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Alpine registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/debian_registry_slug' %> +<%= render_markdown partial: 'package-registries/debian_registry_slug' %> **Step 2**: Install the registry signing key: diff --git a/pages/packages/background.md b/pages/package_registries/background.md similarity index 91% rename from pages/packages/background.md rename to pages/package_registries/background.md index 23def6b566..bed5f81839 100644 --- a/pages/packages/background.md +++ b/pages/package_registries/background.md @@ -36,7 +36,7 @@ Some advanced package creation tools include: Learn more about how: -- Buildkite Package Registries works through this step-by-step [Getting started](/docs/packages/getting-started) tutorial. -- To work with registries in [Manage registries](/docs/packages/manage-registries). -- To manage access to your registries in [Access controls](/docs/packages/permissions). -- To configure your own private storage for Buildkite Package Registries in [Private storage](/docs/packages/private-storage). +- Buildkite Package Registries works through this step-by-step [Getting started](/docs/package-registries/getting-started) tutorial. +- To work with registries in [Manage registries](/docs/package-registries/manage-registries). +- To manage access to your registries in [Access controls](/docs/package-registries/permissions). +- To configure your own private storage for Buildkite Package Registries in [Private storage](/docs/package-registries/private-storage). diff --git a/pages/packages/container.md b/pages/package_registries/container.md similarity index 85% rename from pages/packages/container.md rename to pages/package_registries/container.md index 8ed16a994d..c8714351a0 100644 --- a/pages/packages/container.md +++ b/pages/package_registries/container.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides registry support for container-based (Docker) images. -Once your container registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload images (generated from your application's build) to this registry via relevant `docker` commands presented on your container registry's details page. +Once your container registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload images (generated from your application's build) to this registry via relevant `docker` commands presented on your container registry's details page. To view and copy these `docker` commands: @@ -29,8 +29,8 @@ The following steps describe the process above: where: * `registry-write-token` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your container registry. Ensure this access token has the **Read Packages** and **Write Packages** REST API scopes, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. - <%= render_markdown partial: 'packages/org_slug' %> - <%= render_markdown partial: 'packages/container_registry_slug' %> + <%= render_markdown partial: 'package-registries/org_slug' %> + <%= render_markdown partial: 'package-registries/container_registry_slug' %> 1. Copy the following `docker tag` command, paste it into your terminal, and modify as required before running to tag your container image: @@ -108,11 +108,11 @@ docker login packages.buildkite.com/{org.slug}/{registry.slug} -u buildkite -p r where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/container_registry_slug' %> +<%= render_markdown partial: 'package-registries/container_registry_slug' %> -- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your container registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. +- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your container registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. > 📘 > This step is not required for public container registries. @@ -127,9 +127,9 @@ docker pull packages.buildkite.com/{org.slug}/{registry.slug}/image-name:tag where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/container_registry_slug' %> +<%= render_markdown partial: 'package-registries/container_registry_slug' %> - `image-name` is the name of your image. diff --git a/pages/packages/debian.md b/pages/package_registries/debian.md similarity index 80% rename from pages/packages/debian.md rename to pages/package_registries/debian.md index 1d6b2eee95..79497a500e 100644 --- a/pages/packages/debian.md +++ b/pages/package_registries/debian.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides registry support for Debian-based (deb) packages for Debian and Ubuntu operating system variants. -Once your Debian registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the `curl` command presented on your Debian registry's details page. +Once your Debian registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the `curl` command presented on your Debian registry's details page. To view and copy this `curl` command: @@ -28,13 +28,13 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/debian_registry_slug' %> +<%= render_markdown partial: 'package-registries/debian_registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Debian registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'packages/path_to_file' %> +<%= render_markdown partial: 'package-registries/path_to_file' %> For example, to upload the file `my-deb-package_1.0-2_amd64.deb` from the current directory to the **My Debian packages** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -54,7 +54,7 @@ To access your deb package's details page: 1. Select your Debian registry on this page. 1. On your Debian registry page, select the package to display its details page. -<%= render_markdown partial: 'packages/package_details_page_sections' %> +<%= render_markdown partial: 'package-registries/package_details_page_sections' %> ### Downloading a package @@ -89,11 +89,11 @@ curl -fsSL "https://buildkite:{registry.read.token}@packages.buildkite.com/{org. where: -- `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Debian registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. +- `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Debian registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/debian_registry_slug' %> +<%= render_markdown partial: 'package-registries/debian_registry_slug' %> If your registry is _private_ (that is, the default registry configuration), stash the private registry credentials into `apt`'s `auth.conf.d` directory: diff --git a/pages/packages/files.md b/pages/package_registries/files.md similarity index 83% rename from pages/packages/files.md rename to pages/package_registries/files.md index 5c495cf2d1..7faca2f5f1 100644 --- a/pages/packages/files.md +++ b/pages/package_registries/files.md @@ -3,7 +3,7 @@ Buildkite Package Registries provides registry support for generic files to cover some cases where native package management isn't required. -Once your Files registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload files (of any type and extension) to this registry via the relevant `curl` command presented on your registry details page. +Once your Files registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload files (of any type and extension) to this registry via the relevant `curl` command presented on your registry details page. To view and copy this `curl` command: @@ -29,13 +29,13 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/registry_slug' %> +<%= render_markdown partial: 'package-registries/registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload files to your registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish files to any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'packages/path_to_file' %> +<%= render_markdown partial: 'package-registries/path_to_file' %> For example, to upload the file `my-custom-app.ipa` from the current directory to the **My files** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -55,7 +55,7 @@ To access your file details page: 1. Select your registry on this page. 1. On your registry page, select the file to display its details page. -<%= render_markdown partial: 'packages/file_details_page_sections' %> +<%= render_markdown partial: 'package-registries/file_details_page_sections' %> ### Downloading a file diff --git a/pages/packages/getting_started.md b/pages/package_registries/getting_started.md similarity index 87% rename from pages/packages/getting_started.md rename to pages/package_registries/getting_started.md index d7ca461da7..45f27d12ef 100644 --- a/pages/packages/getting_started.md +++ b/pages/package_registries/getting_started.md @@ -1,8 +1,8 @@ # Getting started -👋 Welcome to Buildkite Package Registries! You can use Package Registries to house your [packages](/docs/packages/background#package-creation-tools) built through [Buildkite Pipelines](/docs/pipelines) or another CI/CD application, and manage them through dedicated registries. This tutorial takes you through creating a JavaScript registry, cloning and running a simple Node.js package locally, and uploading this package to your new JavaScript registry. +👋 Welcome to Buildkite Package Registries! You can use Package Registries to house your [packages](/docs/package-registries/background#package-creation-tools) built through [Buildkite Pipelines](/docs/pipelines) or another CI/CD application, and manage them through dedicated registries. This tutorial takes you through creating a JavaScript registry, cloning and running a simple Node.js package locally, and uploading this package to your new JavaScript registry. -While this tutorial uses a Node.js package example, Buildkite Package Registries supports [other package ecosystems](/docs/packages/manage-registries#create-a-registry-manage-packages-in-a-registry) too. +While this tutorial uses a Node.js package example, Buildkite Package Registries supports [other package ecosystems](/docs/package-registries/manage-registries#create-a-registry-manage-packages-in-a-registry) too. ## Before you start @@ -23,7 +23,7 @@ First, create a new JavaScript registry: 1. On the **New Registry** page, enter the mandatory **Name** for your registry. For example, `My JavaScript registry`. 1. Enter an optional **Description** for the registry, which will appear under the name of the registry item on the **Registries** page. For example, `This is an example of a JavaScript registry`. 1. Select the required registry **Ecosystem** of **JavaScript (npm)**. -1. If your Buildkite organization has the [teams feature](/docs/packages/permissions) enabled, select the relevant **Teams** to be granted access to the new JavaScript registry. +1. If your Buildkite organization has the [teams feature](/docs/package-registries/permissions) enabled, select the relevant **Teams** to be granted access to the new JavaScript registry. 1. Select **Create Registry**. The new JavaScript registry's details page is displayed. Selecting **Packages** in the global navigation opens the **Registries** page, where your new registry will be listed. @@ -60,9 +60,9 @@ Next, configure your Node.js environment to publish Node.js packages to [the Jav ``` where: - <%= render_markdown partial: 'packages/org_slug' %> - <%= render_markdown partial: 'packages/javascript_registry_slug' %> - <%= render_markdown partial: 'packages/javascript_registry_write_token' %> + <%= render_markdown partial: 'package-registries/org_slug' %> + <%= render_markdown partial: 'package-registries/javascript_registry_slug' %> + <%= render_markdown partial: 'package-registries/javascript_registry_write_token' %> **Note:** * If your `.npmrc` file doesn't exist, this command will automatically create it for you. @@ -131,4 +131,4 @@ Your JavaScript registry's details page should show your new package with the in That's it! You've created a new Buildkite registry, configured your Node.js environment and project to publish to your new JavaScript registry, and published a Node.js package to this registry. 🎉 -Learn more about how to work with Buildkite Package Registries in [Manage registries](/docs/packages/manage-registries). +Learn more about how to work with Buildkite Package Registries in [Manage registries](/docs/package-registries/manage-registries). diff --git a/pages/packages/gradle.md b/pages/package_registries/gradle.md similarity index 77% rename from pages/packages/gradle.md rename to pages/package_registries/gradle.md index e62cc25fdc..a8a5219546 100644 --- a/pages/packages/gradle.md +++ b/pages/package_registries/gradle.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides registry support for Gradle-based Java packages (using the [Maven Publish Plugin](https://docs.gradle.org/current/userguide/publishing_maven.html)). -Once your Java registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry by configuring your `build.gradle` file with the Gradle snippet presented on your Java registry's details page. +Once your Java registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry by configuring your `build.gradle` file with the Gradle snippet presented on your Java registry's details page. To view and copy the required `build.gradle` configurations: @@ -69,11 +69,11 @@ The following steps describe the process above: where: * `registry-write-token` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Java registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. - <%= render_markdown partial: 'packages/java_package_domain_name_version' %> + <%= render_markdown partial: 'package-registries/java_package_domain_name_version' %> - <%= render_markdown partial: 'packages/org_slug' %> + <%= render_markdown partial: 'package-registries/org_slug' %> - <%= render_markdown partial: 'packages/java_registry_slug' %> + <%= render_markdown partial: 'package-registries/java_registry_slug' %> 1. Publish your package: @@ -83,9 +83,9 @@ The following steps describe the process above: ## Access a package's details -<%= render_markdown partial: 'packages/access_java_package_details_page' %> +<%= render_markdown partial: 'package-registries/access_java_package_details_page' %> -<%= render_markdown partial: 'packages/package_details_page_sections' %> +<%= render_markdown partial: 'package-registries/package_details_page_sections' %> ### Downloading a package @@ -127,10 +127,10 @@ where: - `{org.slug}` is the org slug. -<%= render_markdown partial: 'packages/java_registry_slug' %> +<%= render_markdown partial: 'package-registries/java_registry_slug' %> -- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Java registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. +- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Java registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. **Note:** Both the `authentication` and `credentials` sections are not required for registries that are publicly accessible. -<%= render_markdown partial: 'packages/java_package_domain_name_version' %> +<%= render_markdown partial: 'package-registries/java_package_domain_name_version' %> diff --git a/pages/packages/helm.md b/pages/package_registries/helm.md similarity index 79% rename from pages/packages/helm.md rename to pages/package_registries/helm.md index 29310fc820..250d255da6 100644 --- a/pages/packages/helm.md +++ b/pages/package_registries/helm.md @@ -2,9 +2,9 @@ Buildkite Package Registries provides Helm registry support for distributing Helm charts. -This page is for standard Helm publishing instructions, alternatively you can also publish to an [OCI-based registry](/docs/packages/helm-oci). +This page is for standard Helm publishing instructions, alternatively you can also publish to an [OCI-based registry](/docs/package-registries/helm-oci). -Once your Helm registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload charts (generated from `helm package` to create the package) to this registry via the relevant `curl` command presented on your Helm registry's details page. +Once your Helm registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload charts (generated from `helm package` to create the package) to this registry via the relevant `curl` command presented on your Helm registry's details page. To view and copy this `curl` command: @@ -30,11 +30,11 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/helm_registry_slug' %> +<%= render_markdown partial: 'package-registries/helm_registry_slug' %> -<%= render_markdown partial: 'packages/path_to_file' %> +<%= render_markdown partial: 'package-registries/path_to_file' %> For example, to upload the file `my-helm-chart-0.1.2.tgz` from the current directory to the **My Helm Charts** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -87,11 +87,11 @@ helm repo add {registry.slug} https://packages.buildkite.com/{org.slug}/{registr where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/helm_registry_slug' %> +<%= render_markdown partial: 'package-registries/helm_registry_slug' %> -- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download charts from your Helm registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. +- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download charts from your Helm registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. > 📘 > This step is not required for public Helm registries. @@ -107,7 +107,7 @@ helm install "chart-release" "{registry.slug}/{chart-name}" --version {version} where: -<%= render_markdown partial: 'packages/helm_registry_slug' %> +<%= render_markdown partial: 'package-registries/helm_registry_slug' %> - `chart-release` is the unique release name for the Helm chart - must have no `.` in name and be in lowercase. [General conventions](https://helm.sh/docs/chart_best_practices/conventions/#chart-names). diff --git a/pages/packages/helm_oci.md b/pages/package_registries/helm_oci.md similarity index 82% rename from pages/packages/helm_oci.md rename to pages/package_registries/helm_oci.md index b9578df446..8833601779 100644 --- a/pages/packages/helm_oci.md +++ b/pages/package_registries/helm_oci.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides Helm OCI based registry support for distributing Helm charts. Note, this requires [Helm version 3.8.0](https://helm.sh/docs/topics/registries/) or newer. -Once your Helm OCI registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload charts (generated from your application's build) to this registry via relevant `helm` commands presented on your registry's details page. +Once your Helm OCI registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload charts (generated from your application's build) to this registry via relevant `helm` commands presented on your registry's details page. To view and copy these `helm` commands: @@ -28,8 +28,8 @@ The following steps describe the process above: where: * `registry-write-token` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload charts to your Helm registry. Ensure this access token has the **Read Packages** and **Write Packages** REST API scopes, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. - <%= render_markdown partial: 'packages/org_slug' %> - <%= render_markdown partial: 'packages/helm_registry_slug' %> + <%= render_markdown partial: 'package-registries/org_slug' %> + <%= render_markdown partial: 'package-registries/helm_registry_slug' %> 1. Copy the following `helm push` command, paste it into your terminal, and modify as required before running to push your Helm chart: @@ -90,11 +90,11 @@ helm registry login packages.buildkite.com/{org.slug}/{registry.slug} -u buildki where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/helm_registry_slug' %> +<%= render_markdown partial: 'package-registries/helm_registry_slug' %> -- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download charts from your Helm registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. +- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download charts from your Helm registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. > 📘 > This step is not required for public Helm registries. @@ -109,9 +109,9 @@ helm pull oci://packages.buildkite.com/{org.slug}/{registry.slug}/chart-name --v where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/helm_registry_slug' %> +<%= render_markdown partial: 'package-registries/helm_registry_slug' %> - `chart-name` is the name of your chart. diff --git a/pages/packages/javascript.md b/pages/package_registries/javascript.md similarity index 77% rename from pages/packages/javascript.md rename to pages/package_registries/javascript.md index 60d2812123..a308c60223 100644 --- a/pages/packages/javascript.md +++ b/pages/package_registries/javascript.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides registry support for JavaScript-based (Node.js npm) packages. -Once your JavaScript registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry by configuring your `~/.npmrc` and application's relevant `package.json` files with the command/code snippets presented on your JavaScript registry's details page. +Once your JavaScript registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry by configuring your `~/.npmrc` and application's relevant `package.json` files with the command/code snippets presented on your JavaScript registry's details page. To view and copy the required command/code snippet for your `~/.npmrc` and `package.json` configurations: @@ -26,9 +26,9 @@ The following steps describe the process above: ``` where: - <%= render_markdown partial: 'packages/org_slug' %> - <%= render_markdown partial: 'packages/javascript_registry_slug' %> - <%= render_markdown partial: 'packages/javascript_registry_write_token' %> + <%= render_markdown partial: 'package-registries/org_slug' %> + <%= render_markdown partial: 'package-registries/javascript_registry_slug' %> + <%= render_markdown partial: 'package-registries/javascript_registry_write_token' %> **Note:** * If your `.npmrc` file doesn't exist, this command automatically creates it for you. @@ -62,7 +62,7 @@ To access your JavaScript package's details page: 1. Select your JavaScript registry on this page. 1. On your JavaScript registry page, select the package to display its details page. -<%= render_markdown partial: 'packages/package_details_page_sections' %> +<%= render_markdown partial: 'package-registries/package_details_page_sections' %> ### Downloading a package @@ -90,11 +90,11 @@ npm set //packages.buildkite.com/{org.slug}/{registry.slug}/npm/:_authToken regi where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/javascript_registry_slug' %> +<%= render_markdown partial: 'package-registries/javascript_registry_slug' %> -- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download packages to your JavaScript registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. +- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages to your JavaScript registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. > 📘 > If your `.npmrc` file doesn't exist, this command automatically creates it for you. @@ -115,6 +115,6 @@ where: - `version.number` is the version of your Node.js package (that is, the `version` field value from its `package.json` file). -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/javascript_registry_slug' %> +<%= render_markdown partial: 'package-registries/javascript_registry_slug' %> diff --git a/pages/packages/manage_registries.md b/pages/package_registries/manage_registries.md similarity index 80% rename from pages/packages/manage_registries.md rename to pages/package_registries/manage_registries.md index 8830846711..d8aee15907 100644 --- a/pages/packages/manage_registries.md +++ b/pages/package_registries/manage_registries.md @@ -16,7 +16,7 @@ To create a new registry: 1. On the **New Registry** page, enter the mandatory **Name** for your registry. 1. Enter an optional **Description** for the registry. This description appears under the name of the registry item on the **Registries** page. 1. Select the required registry **Ecosystem** based on the [package ecosystem](/docs/packages#get-started) for this new registry. -1. If your Buildkite organization has the [teams feature](/docs/packages/permissions) enabled, select the relevant **Teams** to be granted access to the new registry. +1. If your Buildkite organization has the [teams feature](/docs/package-registries/permissions) enabled, select the relevant **Teams** to be granted access to the new registry. 1. Select **Create Registry**. The new registry's details page is displayed. Selecting **Packages** in the global navigation opens the **Registries** page, where your new registry will be listed. @@ -25,17 +25,17 @@ To create a new registry: Once a [registry is created](#create-a-registry), packages can then be uploaded to it. Learn more about how to manage packages for your registry's relevant language and package ecosystem: -- [Alpine (apk)](/docs/packages/alpine) -- [Container (Docker)](/docs/packages/container) images -- [Debian/Ubuntu (deb)](/docs/packages/debian) -- [Files (generic)](/docs/packages/files) -- Helm ([OCI](/docs/packages/helm-oci) or [Standard](/docs/packages/helm)) -- Java ([Maven](/docs/packages/maven) or [Gradle leveraging the Maven Publish Plugin](/docs/packages/gradle)) -- [JavaScript (npm)](/docs/packages/javascript) -- [Python (PyPI)](/docs/packages/python) -- [Red Hat (RPM)](/docs/packages/red-hat) -- [Ruby (RubyGems)](/docs/packages/ruby) -- [Terraform](/docs/packages/terraform) modules +- [Alpine (apk)](/docs/package-registries/alpine) +- [Container (Docker)](/docs/package-registries/container) images +- [Debian/Ubuntu (deb)](/docs/package-registries/debian) +- [Files (generic)](/docs/package-registries/files) +- Helm ([OCI](/docs/package-registries/helm-oci) or [Standard](/docs/package-registries/helm)) +- Java ([Maven](/docs/package-registries/maven) or [Gradle leveraging the Maven Publish Plugin](/docs/package-registries/gradle)) +- [JavaScript (npm)](/docs/package-registries/javascript) +- [Python (PyPI)](/docs/package-registries/python) +- [Red Hat (RPM)](/docs/package-registries/red-hat) +- [Ruby (RubyGems)](/docs/package-registries/ruby) +- [Terraform](/docs/package-registries/terraform) modules ## Update a registry @@ -48,9 +48,9 @@ The following aspects of a registry can be updated: - **Emoji**: to change the emoji of the registry from the default provided when the registry was [created](#create-a-registry). The emoji appears next to the registry's name. - **Color**: the background color for the emoji - **Registry Management**: the privacy settings for the registry—private (the initial default state for all newly created registries) or public. -- **OIDC Policy**: one or more [policies defining which OpenID Connect (OIDC) tokens](/docs/packages/security/oidc), from the [Buildkite Agent](/docs/agent/v3/cli-oidc) or another third-party system, can be used to publish/upload packages to the registry. +- **OIDC Policy**: one or more [policies defining which OpenID Connect (OIDC) tokens](/docs/package-registries/security/oidc), from the [Buildkite Agent](/docs/agent/v3/cli-oidc) or another third-party system, can be used to publish/upload packages to the registry. - **Tokens** (private registries only): one or more [registry tokens](#update-a-registry-configure-registry-tokens), which are an alternative to API access tokens. -- **Storage**: choose your [registry storage](#update-a-registry-configure-registry-storage), selecting from **Buildkite-hosted storage** (the initially default storage system) or [your own private AWS S3 bucket](/docs/packages/private-storage) to store packages for this registry. +- **Storage**: choose your [registry storage](#update-a-registry-configure-registry-storage), selecting from **Buildkite-hosted storage** (the initially default storage system) or [your own private AWS S3 bucket](/docs/package-registries/private-storage) to store packages for this registry. The registry's ecosystem type cannot be changed once the registry is created. @@ -70,11 +70,11 @@ To update a registry: The registry's updates will appear on the **Registries** page, as well as the registry's details page. -1. If the registry's _OIDC policy_ needs to be configured, learn more about this in [OIDC in Buildkite Package Registries](/docs/packages/security/oidc). +1. If the registry's _OIDC policy_ needs to be configured, learn more about this in [OIDC in Buildkite Package Registries](/docs/package-registries/security/oidc). 1. If the registry is _private_ and _registry tokens_ (an alternative to API access tokens) need to be configured, learn more about this in [Configure registry tokens](#update-a-registry-configure-registry-tokens). -1. If [_private storage_](/docs/packages/private-storage) has been configured and linked to your Buildkite organization, the storage location for the registry can be changed. Learn more about this in [Configure registry storage](#update-a-registry-configure-registry-storage). +1. If [_private storage_](/docs/package-registries/private-storage) has been configured and linked to your Buildkite organization, the storage location for the registry can be changed. Learn more about this in [Configure registry storage](#update-a-registry-configure-registry-storage). ### Configure registry tokens @@ -97,7 +97,7 @@ Unlike other tokens generated elsewhere in Buildkite, registry tokens can contin ### Configure registry storage -When a new registry is [created](#create-a-registry), it automatically uses the [default Buildkite Package Registries storage](/docs/packages/private-storage#set-the-default-buildkite-package-registries-storage) location. However, your new registry's default storage location can be overridden to use another configured storage location. Learn more about configuring private storage in [Private storage links](/docs/packages/private-storage). +When a new registry is [created](#create-a-registry), it automatically uses the [default Buildkite Package Registries storage](/docs/package-registries/private-storage#set-the-default-buildkite-package-registries-storage) location. However, your new registry's default storage location can be overridden to use another configured storage location. Learn more about configuring private storage in [Private storage links](/docs/package-registries/private-storage). To configure/change your registry's current storage: diff --git a/pages/packages/maven.md b/pages/package_registries/maven.md similarity index 78% rename from pages/packages/maven.md rename to pages/package_registries/maven.md index 06372334d0..000ea7fb7c 100644 --- a/pages/packages/maven.md +++ b/pages/package_registries/maven.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides registry support for Maven-based Java packages. -Once your Java registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry by configuring your `~/.m2/settings.xml` and application's relevant `pom.xml` files with the Maven XML snippets presented on your Java registry's details page. +Once your Java registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry by configuring your `~/.m2/settings.xml` and application's relevant `pom.xml` files with the Maven XML snippets presented on your Java registry's details page. To view and copy the required `~/.m2/settings.xml` and `pom.xml` configurations: @@ -45,7 +45,7 @@ The following steps describe the process above: where: * `registry-write-token` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Java registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. - <%= render_markdown partial: 'packages/java_registry_id' %> + <%= render_markdown partial: 'package-registries/java_registry_id' %> **Note:** This step only needs to be performed once for the life of your Java registry, and API access token. @@ -67,9 +67,9 @@ The following steps describe the process above: where: * `org-slug-registry-slug` is the ID of your Java registry (above). - <%= render_markdown partial: 'packages/org_slug' %> + <%= render_markdown partial: 'package-registries/org_slug' %> - <%= render_markdown partial: 'packages/java_registry_slug' %> + <%= render_markdown partial: 'package-registries/java_registry_slug' %> 1. Publish your package: @@ -79,9 +79,9 @@ The following steps describe the process above: ## Access a package's details -<%= render_markdown partial: 'packages/access_java_package_details_page' %> +<%= render_markdown partial: 'package-registries/access_java_package_details_page' %> -<%= render_markdown partial: 'packages/package_details_page_sections' %> +<%= render_markdown partial: 'package-registries/package_details_page_sections' %> ### Downloading a package @@ -127,9 +127,9 @@ The `~/.m2/settings.xml` code snippet is based on this format: where: -- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Java registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. +- `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Java registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'packages/java_registry_id' %> +<%= render_markdown partial: 'package-registries/java_registry_id' %> The `pom.xml` code snippet is based on this format: @@ -158,10 +158,10 @@ The `pom.xml` code snippet is based on this format: where: -<%= render_markdown partial: 'packages/java_registry_id' %> +<%= render_markdown partial: 'package-registries/java_registry_id' %> - `{org.slug}` is the org slug. -<%= render_markdown partial: 'packages/java_registry_slug' %> +<%= render_markdown partial: 'package-registries/java_registry_slug' %> -<%= render_markdown partial: 'packages/java_package_domain_name_version' %> +<%= render_markdown partial: 'package-registries/java_package_domain_name_version' %> diff --git a/pages/packages/private_storage.md b/pages/package_registries/private_storage.md similarity index 92% rename from pages/packages/private_storage.md rename to pages/package_registries/private_storage.md index e55e459e5f..8ce9284bee 100644 --- a/pages/packages/private_storage.md +++ b/pages/package_registries/private_storage.md @@ -1,6 +1,6 @@ # Private storage link -This page provides details on how to link and configure your private Amazon Web Services (AWS) Simple Storage Service (S3) storage to Buildkite Package Registries within your Buildkite organization. These processes can only be performed by [Buildkite organization administrators](/docs/packages/permissions#manage-teams-and-permissions-organization-level-permissions). +This page provides details on how to link and configure your private Amazon Web Services (AWS) Simple Storage Service (S3) storage to Buildkite Package Registries within your Buildkite organization. These processes can only be performed by [Buildkite organization administrators](/docs/package-registries/permissions#manage-teams-and-permissions-organization-level-permissions). By default, Buildkite Package Registries provides its own storage to house any packages, container images and modules stored in registries. You can also link your own private AWS S3 bucket to Buildkite Package Registries, which allows you to: @@ -59,13 +59,13 @@ You are returned to the **Private Storage Link** page, where you can: - [Set the default Buildkite Package Registries storage for your Buildkite organization](#set-the-default-buildkite-package-registries-storage). -- [Set the storage independently for each of your Buildkite registries](/docs/packages/manage-registries#update-a-registry-configure-registry-storage). +- [Set the storage independently for each of your Buildkite registries](/docs/package-registries/manage-registries#update-a-registry-configure-registry-storage). ## Set the default Buildkite Package Registries storage By default, your Buildkite organization uses storage provided by Buildkite (known as **Buildkite-hosted storage**). -The _default storage_ is the storage used when a [new registry is created](/docs/packages/manage-registries#create-a-registry). +The _default storage_ is the storage used when a [new registry is created](/docs/package-registries/manage-registries#create-a-registry). Once you have [configured at least one other private storage link](#link-your-private-storage-to-buildkite-package-registries), you can change the default storage to one of these configured private storage configurations. To do this: @@ -75,4 +75,4 @@ Once you have [configured at least one other private storage link](#link-your-pr 1. Select **Change** to switch from using **Buildkite-hosted storage** (or a previously configured private storage beginning with **s3://...**) to your new private storage link. If this setting is currently configured to use a previously configured private storage link, the default storage can also be reverted back to using **Buildkite-hosted storage**. -All [newly created registries](/docs/packages/manage-registries#create-a-registry) will automatically use the default private storage location to house packages. +All [newly created registries](/docs/package-registries/manage-registries#create-a-registry) will automatically use the default private storage location to house packages. diff --git a/pages/packages/python.md b/pages/package_registries/python.md similarity index 78% rename from pages/packages/python.md rename to pages/package_registries/python.md index 5583985272..8f336c1179 100644 --- a/pages/packages/python.md +++ b/pages/package_registries/python.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides registry support for Python-based (PyPI) packages. -Once your Python registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the `curl` command presented on your Python registry's details page. +Once your Python registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the `curl` command presented on your Python registry's details page. To view and copy this `curl` command: @@ -28,13 +28,13 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/python_registry_slug' %> +<%= render_markdown partial: 'package-registries/python_registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Python registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'packages/path_to_file' %> +<%= render_markdown partial: 'package-registries/path_to_file' %> For example, to upload the file `my-python-package-0.9.7b1.tar.gz` from the current directory to the **My Python packages** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -54,7 +54,7 @@ To access your Python package's details page: 1. Select your Python registry on this page. 1. On your Python registry page, select the package to display its details. -<%= render_markdown partial: 'packages/package_details_page_sections' %> +<%= render_markdown partial: 'package-registries/package_details_page_sections' %> ### Downloading a package @@ -84,11 +84,11 @@ extra-index-url="https://buildkite:{registry.read.token}@packages.buildkite.com/ where: -- `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Python registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. +- `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Python registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/python_registry_slug' %> +<%= render_markdown partial: 'package-registries/python_registry_slug' %> The alternative `requirements.txt` (for virtualenv) code snippet is based on this format: diff --git a/pages/packages/red_hat.md b/pages/package_registries/red_hat.md similarity index 77% rename from pages/packages/red_hat.md rename to pages/package_registries/red_hat.md index e95f9c69de..0bedb24d20 100644 --- a/pages/packages/red_hat.md +++ b/pages/package_registries/red_hat.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides registry support for Red Hat-based (RPM) packages for Red Hat Linux operating systems. -Once your Red Hat registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the relevant `curl` command presented on your Red Hat registry's details page. +Once your Red Hat registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via the relevant `curl` command presented on your Red Hat registry's details page. To view and copy this `curl` command: @@ -28,13 +28,13 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/red_hat_registry_slug' %> +<%= render_markdown partial: 'package-registries/red_hat_registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Red Hat registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'packages/path_to_file' %> +<%= render_markdown partial: 'package-registries/path_to_file' %> For example, to upload the file `my-red-hat-package_1.0-2.x86_64.rpm` from the current directory to the **My Red Hat packages** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -54,7 +54,7 @@ To access your RPM package's details page: 1. Select your Red Hat registry on this page. 1. On your Red Hat registry page, select the package to display its details page. -<%= render_markdown partial: 'packages/package_details_page_sections' %> +<%= render_markdown partial: 'package-registries/package_details_page_sections' %> ### Downloading a package @@ -83,13 +83,13 @@ sudo sh -c 'echo -e "[{registry.slug}]\nname={registry.name}\nbaseurl=https://bu where: -<%= render_markdown partial: 'packages/red_hat_registry_slug' %> +<%= render_markdown partial: 'package-registries/red_hat_registry_slug' %> - `{registry.name}` is the name of your Red Hat registry. -- `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Red Hat registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. +- `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Red Hat registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> #### Package installation diff --git a/pages/packages/ruby.md b/pages/package_registries/ruby.md similarity index 78% rename from pages/packages/ruby.md rename to pages/package_registries/ruby.md index 7ccd935f1e..bddc680f13 100644 --- a/pages/packages/ruby.md +++ b/pages/package_registries/ruby.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides registry support for Ruby-based (RubyGems) packages. -Once your Ruby registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via a single command, or by configuring your `~/.gem/credentials` and `gemspec` files with the code snippets presented on your Ruby registry's details page. +Once your Ruby registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload packages (generated from your application's build) to this registry via a single command, or by configuring your `~/.gem/credentials` and `gemspec` files with the code snippets presented on your Ruby registry's details page. To view and copy the required command or `~/.gem/credentials` and `gemspec` configurations: @@ -33,9 +33,9 @@ GEM_HOST_API_KEY="temporary-write-token-that-expires-after-5-minutes" \ where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/ruby_registry_slug' %> +<%= render_markdown partial: 'package-registries/ruby_registry_slug' %> Since the `temporary-write-token-that-expires-after-5-minutes` expires quickly, it is recommended that you just copy this command directly from the **Publish a Ruby Package** dialog. @@ -54,9 +54,9 @@ The remaining code boxes on the **Publish a Ruby Package** dialog provide config ``` where: - <%= render_markdown partial: 'packages/org_slug' %> - <%= render_markdown partial: 'packages/ruby_registry_slug' %> - <%= render_markdown partial: 'packages/ruby_registry_write_token' %> + <%= render_markdown partial: 'package-registries/org_slug' %> + <%= render_markdown partial: 'package-registries/ruby_registry_slug' %> + <%= render_markdown partial: 'package-registries/ruby_registry_write_token' %> **Note:** This step only needs to be conducted once for the life of your Ruby registry. @@ -91,7 +91,7 @@ To access your Ruby package's details page: 1. Select your Ruby registry on this page. 1. On your Ruby registry page, select the package within the **Packages** section. The package's details page is displayed. -<%= render_markdown partial: 'packages/package_details_page_sections' %> +<%= render_markdown partial: 'package-registries/package_details_page_sections' %> A Ruby registry's package also has a **Dependencies** tab, which lists other RubyGems gem packages that your currently viewed Ruby gem package has dependencies on. @@ -127,8 +127,8 @@ where: - `version.number` is the version of your RubyGems gem package -- `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download packages to your Ruby registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. +- `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages to your Ruby registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> - `{registry.slug}` is the name of your Ruby registry. diff --git a/pages/packages/security.md b/pages/package_registries/security.md similarity index 57% rename from pages/packages/security.md rename to pages/package_registries/security.md index e25596e270..d417be15e7 100644 --- a/pages/packages/security.md +++ b/pages/package_registries/security.md @@ -8,5 +8,5 @@ Customer security is paramount to Buildkite. Buildkite Package Registries provid This section contains the following topics: -- [OIDC with Buildkite Package Registries](/docs/packages/security/oidc) and how to restrict access to registries through OIDC policies. -- [User, team, and registry permissions](/docs/packages/security/permissions) and how to manage team and user access to registries. +- [OIDC with Buildkite Package Registries](/docs/package-registries/security/oidc) and how to restrict access to registries through OIDC policies. +- [User, team, and registry permissions](/docs/package-registries/security/permissions) and how to manage team and user access to registries. diff --git a/pages/packages/security/oidc.md b/pages/package_registries/security/oidc.md similarity index 99% rename from pages/packages/security/oidc.md rename to pages/package_registries/security/oidc.md index f88fb33b7d..fdf718fb8c 100644 --- a/pages/packages/security/oidc.md +++ b/pages/package_registries/security/oidc.md @@ -82,7 +82,7 @@ where: - `--audience` is the target system that consumes this OIDC token. For Buildkite Package Registries, this value must be based on the URL `https://packages.buildkite.com/{org.slug}/{registry.slug}`. -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> - `{registry.slug}` is the slug of your registry, which is the [kebab-case](https://en.wikipedia.org/wiki/Letter_case#Kebab_case) version of your registry name, and can be obtained after accessing **Packages** in the global navigation > your registry from the **Registries** page. diff --git a/pages/packages/security/permissions.md b/pages/package_registries/security/permissions.md similarity index 97% rename from pages/packages/security/permissions.md rename to pages/package_registries/security/permissions.md index de22291c69..c005012e9a 100644 --- a/pages/packages/security/permissions.md +++ b/pages/package_registries/security/permissions.md @@ -26,7 +26,7 @@ As an organization administrator, you can access the [**Organization Settings** - [Enable Buildkite Package Registries](#enabling-buildkite-packages) for your Buildkite organization. -- Configure [private storage](/docs/packages/private-storage) for your registries in Buildkite Package Registries. +- Configure [private storage](/docs/package-registries/private-storage) for your registries in Buildkite Package Registries.

Enabling Buildkite Package Registries

@@ -99,5 +99,5 @@ From this page, you can configure the following permissions for all users across To configure the rules by which a Buildkite Agent can access a registry, you'll need to configure the OpenID Connect (OIDC) policy within the registry to allow the Buildkite Agent to request an OIDC token (using the [`buildkite-agent oidc request-token`](/docs/agent/v3/cli-oidc#request-oidc-token) command). diff --git a/pages/packages/terraform.md b/pages/package_registries/terraform.md similarity index 88% rename from pages/packages/terraform.md rename to pages/package_registries/terraform.md index 63103458ce..bff3a36dd8 100644 --- a/pages/packages/terraform.md +++ b/pages/package_registries/terraform.md @@ -2,7 +2,7 @@ Buildkite Package Registries provides registry support for Terraform modules. -Once your Terraform registry has been [created](/docs/packages/manage-registries#create-a-registry), you can publish/upload modules (generated from your application's build) to this registry via the `curl` command presented on your Terraform registry's details page. +Once your Terraform registry has been [created](/docs/package-registries/manage-registries#create-a-registry), you can publish/upload modules (generated from your application's build) to this registry via the `curl` command presented on your Terraform registry's details page. To view and copy this `curl` command: @@ -28,9 +28,9 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'packages/org_slug' %> +<%= render_markdown partial: 'package-registries/org_slug' %> -<%= render_markdown partial: 'packages/terraform_registry_slug' %> +<%= render_markdown partial: 'package-registries/terraform_registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload modules to your Terraform registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish modules and packages to any registry your user account has access to within your Buildkite organization. @@ -100,7 +100,7 @@ To install a module: } ``` - where `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/packages/manage-registries#update-a-registry-configure-registry-tokens) used to download modules from your Terraform registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download modules and packages from any registry your user account has access to within your Buildkite organization. + where `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download modules from your Terraform registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download modules and packages from any registry your user account has access to within your Buildkite organization. **Note:** This step only needs to be performed once for the life of your Terraform registry. diff --git a/pages/packages.md b/pages/packages.md deleted file mode 100644 index 8e6072477c..0000000000 --- a/pages/packages.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -template: "landing_page" ---- - -# Buildkite Package Registries - -Scale out asset management across any ecosystem with _Buildkite Package Registries_. Avoid the bottleneck of poorly managed and insecure dependencies. - -Buildkite Package Registries allows you to: - -- Manage artifacts and packages from [Buildkite Pipelines](/docs/pipelines), as well as other CI/CD applications that require artifact management. - -- Provide registries to store your [packages and other package-like file formats](/docs/packages/background) such as container images and Terraform modules. - -As well as storing a collection of packages, a registry also surfaces metadata or attributes associated with a package, such as the package's description, version, contents (files and directories), checksum details, distribution type, dependencies, and so on. - -> 📘 -> You can enable [Buildkite Package Registries](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/packages/permissions#enabling-buildkite-packages). - -_Buildkite Packages Registries_ was previously called _Buildkite Packages_. - -## Get started - -Run through the [Getting started](/docs/packages/getting-started) tutorial for a step-by-step guide on how to use Buildkite Package Registries. - -If you're familiar with the basics, explore how to use registries for each of Buildkite Package Registries' supported package ecosystems: - - - -
- <%= button ":alpine: Alpine (apk)", "/docs/packages/alpine" %> - <%= button ":docker: Container (Docker)", "/docs/packages/container" %> - <%= button ":debian: Debian/Ubuntu (deb)", "/docs/packages/debian" %> - <%= button ":package: Files (generic)", "/docs/packages/files" %> - <%= button ":helm: Helm (OCI)", "/docs/packages/helm-oci" %> - <%= button ":helm: Helm", "/docs/packages/helm" %> - <%= button ":maven: Java (Maven)", "/docs/packages/maven" %> - <%= button ":gradle: Java (Gradle)", "/docs/packages/gradle" %> - <%= button ":node: JavaScript (npm)", "/docs/packages/javascript" %> - <%= button ":python: Python (PyPI)", "/docs/packages/python" %> - <%= button ":redhat: Red Hat (RPM)", "/docs/packages/red-hat" %> - <%= button ":ruby: Ruby (RubyGems)", "/docs/packages/ruby" %> - <%= button ":terraform: Terraform (modules)", "/docs/packages/terraform" %> -
- - - -Learn more about how to: - -- Work with registries in [Manage registries](/docs/packages/manage-registries). -- Manage access to your registries in [User, team, and registry permissions](/docs/packages/permissions). -- Configure your own private storage for Buildkite Package Registries in [Private storage](/docs/packages/private-storage). diff --git a/pages/pipelines/security/oidc.md b/pages/pipelines/security/oidc.md index e6b08751b0..7c4d9576e6 100644 --- a/pages/pipelines/security/oidc.md +++ b/pages/pipelines/security/oidc.md @@ -6,7 +6,7 @@ keywords: oidc, authentication, IAM, roles <%= render_markdown partial: 'platform/oidc_introduction' %> -You can configure third-party products and services, such as [AWS](https://aws.amazon.com/), [GCP](https://cloud.google.com/), [Azure](https://azure.microsoft.com/) and many others, as well as Buildkite products, such as [Package Registries](/docs/packages/security/oidc), with OIDC policies that only permit Buildkite Agent interactions from specific Buildkite organizations, pipelines, jobs, and agents, associated with a pipeline's job. +You can configure third-party products and services, such as [AWS](https://aws.amazon.com/), [GCP](https://cloud.google.com/), [Azure](https://azure.microsoft.com/) and many others, as well as Buildkite products, such as [Package Registries](/docs/package-registries/security/oidc), with OIDC policies that only permit Buildkite Agent interactions from specific Buildkite organizations, pipelines, jobs, and agents, associated with a pipeline's job. A Buildkite OIDC token is a signed [JSON Web Token (JWT)](https://jwt.io/) provided by a Buildkite Agent, containing metadata claims about a pipeline and its job, including the pipeline and organization slugs, as well as job-specific data, such as the branch, the commit SHA, the job ID, and the agent ID. Such a token is associated with a Buildkite Agent interaction to perform one or more actions within the third-party service. If the token's claims do not match or comply with the service's OIDC policy, the OIDC token and subsequent pipeline jobs' interactions are rejected. diff --git a/pages/pipelines/security/permissions.md b/pages/pipelines/security/permissions.md index 2023942a0f..007215c28b 100644 --- a/pages/pipelines/security/permissions.md +++ b/pages/pipelines/security/permissions.md @@ -22,9 +22,9 @@ As an organization administrator, you can access the [**Organization Settings** - Add new teams or edit existing ones in the [**Team** section](https://buildkite.com/organizations/~/teams). -- After selecting a team, you can view and administer the member-, [pipeline-](#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. +- After selecting a team, you can view and administer the member-, [pipeline-](#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/package-registries/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. -**Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/packages/permissions#enabling-buildkite-packages). +**Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/package-registries/permissions#enabling-buildkite-packages). ### Team-level permissions diff --git a/pages/team_management/permissions.md b/pages/team_management/permissions.md index 84834e7b2a..5570bf1461 100644 --- a/pages/team_management/permissions.md +++ b/pages/team_management/permissions.md @@ -31,9 +31,9 @@ A user who is a _Buildkite organization administrator_ can access the [**Organiz - From the **Teams** page: * Create a new team, using the **New Team** button. - * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. + * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/package-registries/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. - **Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/packages/permissions#enabling-buildkite-packages). + **Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/package-registries/permissions#enabling-buildkite-packages). * Delete an existing team, by selecting the team > **Settings** tab > **Delete Team** button. * [Enable](#manage-teams-and-permissions) and disable the teams feature for their organization. This feature can only be disabled once all teams have been deleted from the organization (including the automatically-created **Everyone** team) using the **Disable Teams** button on the **Teams** page. Once the teams feature has been disabled, it can be [re-enabled](#manage-teams-and-permissions) at any time. @@ -59,11 +59,11 @@ A user who is a _team maintainer_ on an existing team can: * Change the permission for all users in this team on any: - [pipeline](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions) in the team to **Full Access**, **Build & Read** or **Read Only**. - [test suite](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) in the team to **Full Access** or **Read Only**. - - [registry](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team to **Full Access**, **Read & Write** or **Read Only**. + - [registry](/docs/package-registries/permissions#manage-teams-and-permissions-registry-level-permissions) in the team to **Full Access**, **Read & Write** or **Read Only**. To do this, select the appropriate tab (**Pipelines**, **Test Suites** or **Package Registries**) and then select the required permission for the item, although be aware of the [caveat below](#changing-full-access-permissions-on-pipelines-test-suites-and-registries). - **Note:** Managing team permissions for registries is only available once [Buildkite Package Registries has been enabled](/docs/packages/permissions#enabling-buildkite-packages). + **Note:** Managing team permissions for registries is only available once [Buildkite Package Registries has been enabled](/docs/package-registries/permissions#enabling-buildkite-packages). * Edit the team's details and other settings using the **Settings** tab, which includes the ability to: @@ -84,7 +84,7 @@ A user who is a _team maintainer_ on an existing team can: As indicated in the Buildkite interface, a user who is in a team is known as a **Team Member**, and such users have fewer permissions within the team (that is, no team management capabilities) than a **Team Maintainer**. -All team members in a team have the same level of access to the [pipelines](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suites](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), and [registries](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) in the team. If you need to have more fine grained control over the pipelines, test suites or registries in a team, you can create more teams with different permissions. +All team members in a team have the same level of access to the [pipelines](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suites](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), and [registries](/docs/package-registries/permissions#manage-teams-and-permissions-registry-level-permissions) in the team. If you need to have more fine grained control over the pipelines, test suites or registries in a team, you can create more teams with different permissions. > 🚧 Changing **Full Access** permissions on pipelines, test suites and registries > As a team maintainer, once you change the permission on any of these items away from **Full Access**, you could lose the ability to change the permissions on that item again. This can happen if you are no longer a member of a team that provides **Full Access** to this item. diff --git a/pages/test_engine/permissions.md b/pages/test_engine/permissions.md index 248cf5bcf6..f6646f890a 100644 --- a/pages/test_engine/permissions.md +++ b/pages/test_engine/permissions.md @@ -26,11 +26,11 @@ As an organization administrator, you can access the [**Organization Settings** <%= image "team-section-list.png", alt: "Screenshot of the Team section, showing a list of Teams" %> -- After selecting a team, you can view and administer the member-, [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/packages/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. +- After selecting a team, you can view and administer the member-, [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/package-registries/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. <%= image "team-section-test-suites-list.png", alt: "Screenshot of the Team section, showing a list of Test Suites the team has access to" %> - **Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/packages/permissions#enabling-buildkite-packages). + **Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/package-registries/permissions#enabling-buildkite-packages). ### Team-level permissions From 939529df78481bb8d45c14a3eccaa1df939d27c8 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 25 Sep 2024 14:31:33 +1000 Subject: [PATCH 072/102] Fix remaining packages > package-registries updates. --- app/views/homepage/_products.html.erb | 2 +- config/routes.rb | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/views/homepage/_products.html.erb b/app/views/homepage/_products.html.erb index b3f07c893a..8ad104fb04 100644 --- a/app/views/homepage/_products.html.erb +++ b/app/views/homepage/_products.html.erb @@ -16,7 +16,7 @@ - +
Packages graphic diff --git a/config/routes.rb b/config/routes.rb index b35b10d336..d5e9d117af 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -63,9 +63,10 @@ get "/docs/integrations/sso/g-suite", to: redirect("/docs/integrations/sso/google-workspace") get "/docs/integrations/sso/cloud-identity", to: redirect("/docs/integrations/sso/g-cloud-identity") get "/docs/integrations/sso/g-cloud-identity", to: redirect("/docs/integrations/sso/google-workspace-saml") - get "/docs/packages/manage-repositories", to: redirect("/docs/packages/manage-registries") - get "/docs/packages/nodejs", to: redirect("/docs/packages/javascript") - get "/docs/packages/permissions", to: redirect("/docs/packages/security/permissions") + get "/docs/packages/*page", to: redirect("/docs/package-registries/%{page}") + get "/docs/packages/manage-repositories", to: redirect("/docs/package-registries/manage-registries") + get "/docs/packages/nodejs", to: redirect("/docs/package-registries/javascript") + get "/docs/packages/permissions", to: redirect("/docs/package-registries/security/permissions") get "/docs/pipelines/emoji", to: redirect("/docs/pipelines/emojis") get "/docs/pipelines/images-in-log-output", to: redirect("/docs/pipelines/links-and-images-in-log-output") get "/docs/pipelines/pipelines", to: redirect("/docs/pipelines") From d06134f3ca78dedef0d134748101a1be1e23eee0 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 25 Sep 2024 15:16:06 +1000 Subject: [PATCH 073/102] Fixed broken nav link along with partials and some links for Package Registries. --- data/nav.yml | 2 +- pages/package_registries.md | 4 ++-- pages/package_registries/alpine.md | 12 ++++++------ pages/package_registries/container.md | 12 ++++++------ pages/package_registries/debian.md | 12 ++++++------ pages/package_registries/files.md | 8 ++++---- pages/package_registries/getting_started.md | 6 +++--- pages/package_registries/gradle.md | 14 +++++++------- pages/package_registries/helm.md | 12 ++++++------ pages/package_registries/helm_oci.md | 12 ++++++------ pages/package_registries/javascript.md | 16 ++++++++-------- pages/package_registries/maven.md | 18 +++++++++--------- pages/package_registries/python.md | 12 ++++++------ pages/package_registries/red_hat.md | 12 ++++++------ pages/package_registries/ruby.md | 14 +++++++------- pages/package_registries/security/oidc.md | 2 +- pages/package_registries/terraform.md | 4 ++-- 17 files changed, 86 insertions(+), 86 deletions(-) diff --git a/data/nav.yml b/data/nav.yml index c55c21e904..9bec3cd613 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -475,7 +475,7 @@ path: "package-registries" children: - name: "Overview" - path: "packages" + path: "package-registries" - name: "Introduction" start_expanded: true children: diff --git a/pages/package_registries.md b/pages/package_registries.md index 5ebf3f0978..06468188d2 100644 --- a/pages/package_registries.md +++ b/pages/package_registries.md @@ -15,7 +15,7 @@ Buildkite Package Registries allows you to: As well as storing a collection of packages, a registry also surfaces metadata or attributes associated with a package, such as the package's description, version, contents (files and directories), checksum details, distribution type, dependencies, and so on. > 📘 -> You can enable [Buildkite Package Registries](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/package-registries/permissions#enabling-buildkite-packages). +> You can enable [Buildkite Package Registries](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/package-registries/security/permissions#enabling-buildkite-packages). _Buildkite Packages Registries_ was previously called _Buildkite Packages_. @@ -48,5 +48,5 @@ If you're familiar with the basics, explore how to use registries for each of Bu Learn more about how to: - Work with registries in [Manage registries](/docs/package-registries/manage-registries). -- Manage access to your registries in [User, team, and registry permissions](/docs/package-registries/permissions). +- Manage access to your registries in [User, team, and registry permissions](/docs/package-registries/security/permissions). - Configure your own private storage for Buildkite Package Registries in [Private storage](/docs/package-registries/private-storage). diff --git a/pages/package_registries/alpine.md b/pages/package_registries/alpine.md index 498391239c..45d7cb9b21 100644 --- a/pages/package_registries/alpine.md +++ b/pages/package_registries/alpine.md @@ -28,13 +28,13 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/alpine_registry_slug' %> +<%= render_markdown partial: 'package_registries/alpine_registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Alpine registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'package-registries/path_to_file' %> +<%= render_markdown partial: 'package_registries/path_to_file' %> For example, to upload the file `my-alpine-package_0.1.1_r0.apk` from the current directory to the **My Alpine packages** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -54,7 +54,7 @@ To access your apk package's details page: 1. Select your Alpine registry on this page. 1. On your Alpine registry page, select the package to display its details page. -<%= render_markdown partial: 'package-registries/package_details_page_sections' %> +<%= render_markdown partial: 'package_registries/package_details_page_sections' %> ### Downloading a package @@ -85,9 +85,9 @@ where: - `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Alpine registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/debian_registry_slug' %> +<%= render_markdown partial: 'package_registries/debian_registry_slug' %> **Step 2**: Install the registry signing key: diff --git a/pages/package_registries/container.md b/pages/package_registries/container.md index c8714351a0..2e87df749e 100644 --- a/pages/package_registries/container.md +++ b/pages/package_registries/container.md @@ -29,8 +29,8 @@ The following steps describe the process above: where: * `registry-write-token` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your container registry. Ensure this access token has the **Read Packages** and **Write Packages** REST API scopes, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. - <%= render_markdown partial: 'package-registries/org_slug' %> - <%= render_markdown partial: 'package-registries/container_registry_slug' %> + <%= render_markdown partial: 'package_registries/org_slug' %> + <%= render_markdown partial: 'package_registries/container_registry_slug' %> 1. Copy the following `docker tag` command, paste it into your terminal, and modify as required before running to tag your container image: @@ -108,9 +108,9 @@ docker login packages.buildkite.com/{org.slug}/{registry.slug} -u buildkite -p r where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/container_registry_slug' %> +<%= render_markdown partial: 'package_registries/container_registry_slug' %> - `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your container registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. @@ -127,9 +127,9 @@ docker pull packages.buildkite.com/{org.slug}/{registry.slug}/image-name:tag where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/container_registry_slug' %> +<%= render_markdown partial: 'package_registries/container_registry_slug' %> - `image-name` is the name of your image. diff --git a/pages/package_registries/debian.md b/pages/package_registries/debian.md index 79497a500e..f847165bf3 100644 --- a/pages/package_registries/debian.md +++ b/pages/package_registries/debian.md @@ -28,13 +28,13 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/debian_registry_slug' %> +<%= render_markdown partial: 'package_registries/debian_registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Debian registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'package-registries/path_to_file' %> +<%= render_markdown partial: 'package_registries/path_to_file' %> For example, to upload the file `my-deb-package_1.0-2_amd64.deb` from the current directory to the **My Debian packages** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -54,7 +54,7 @@ To access your deb package's details page: 1. Select your Debian registry on this page. 1. On your Debian registry page, select the package to display its details page. -<%= render_markdown partial: 'package-registries/package_details_page_sections' %> +<%= render_markdown partial: 'package_registries/package_details_page_sections' %> ### Downloading a package @@ -91,9 +91,9 @@ where: - `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Debian registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/debian_registry_slug' %> +<%= render_markdown partial: 'package_registries/debian_registry_slug' %> If your registry is _private_ (that is, the default registry configuration), stash the private registry credentials into `apt`'s `auth.conf.d` directory: diff --git a/pages/package_registries/files.md b/pages/package_registries/files.md index 7faca2f5f1..3769a83f47 100644 --- a/pages/package_registries/files.md +++ b/pages/package_registries/files.md @@ -29,13 +29,13 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/registry_slug' %> +<%= render_markdown partial: 'package_registries/registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload files to your registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish files to any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'package-registries/path_to_file' %> +<%= render_markdown partial: 'package_registries/path_to_file' %> For example, to upload the file `my-custom-app.ipa` from the current directory to the **My files** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -55,7 +55,7 @@ To access your file details page: 1. Select your registry on this page. 1. On your registry page, select the file to display its details page. -<%= render_markdown partial: 'package-registries/file_details_page_sections' %> +<%= render_markdown partial: 'package_registries/file_details_page_sections' %> ### Downloading a file diff --git a/pages/package_registries/getting_started.md b/pages/package_registries/getting_started.md index 45f27d12ef..89683cac4f 100644 --- a/pages/package_registries/getting_started.md +++ b/pages/package_registries/getting_started.md @@ -60,9 +60,9 @@ Next, configure your Node.js environment to publish Node.js packages to [the Jav ``` where: - <%= render_markdown partial: 'package-registries/org_slug' %> - <%= render_markdown partial: 'package-registries/javascript_registry_slug' %> - <%= render_markdown partial: 'package-registries/javascript_registry_write_token' %> + <%= render_markdown partial: 'package_registries/org_slug' %> + <%= render_markdown partial: 'package_registries/javascript_registry_slug' %> + <%= render_markdown partial: 'package_registries/javascript_registry_write_token' %> **Note:** * If your `.npmrc` file doesn't exist, this command will automatically create it for you. diff --git a/pages/package_registries/gradle.md b/pages/package_registries/gradle.md index a8a5219546..cba05186c1 100644 --- a/pages/package_registries/gradle.md +++ b/pages/package_registries/gradle.md @@ -69,11 +69,11 @@ The following steps describe the process above: where: * `registry-write-token` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Java registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. - <%= render_markdown partial: 'package-registries/java_package_domain_name_version' %> + <%= render_markdown partial: 'package_registries/java_package_domain_name_version' %> - <%= render_markdown partial: 'package-registries/org_slug' %> + <%= render_markdown partial: 'package_registries/org_slug' %> - <%= render_markdown partial: 'package-registries/java_registry_slug' %> + <%= render_markdown partial: 'package_registries/java_registry_slug' %> 1. Publish your package: @@ -83,9 +83,9 @@ The following steps describe the process above: ## Access a package's details -<%= render_markdown partial: 'package-registries/access_java_package_details_page' %> +<%= render_markdown partial: 'package_registries/access_java_package_details_page' %> -<%= render_markdown partial: 'package-registries/package_details_page_sections' %> +<%= render_markdown partial: 'package_registries/package_details_page_sections' %> ### Downloading a package @@ -127,10 +127,10 @@ where: - `{org.slug}` is the org slug. -<%= render_markdown partial: 'package-registries/java_registry_slug' %> +<%= render_markdown partial: 'package_registries/java_registry_slug' %> - `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Java registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. **Note:** Both the `authentication` and `credentials` sections are not required for registries that are publicly accessible. -<%= render_markdown partial: 'package-registries/java_package_domain_name_version' %> +<%= render_markdown partial: 'package_registries/java_package_domain_name_version' %> diff --git a/pages/package_registries/helm.md b/pages/package_registries/helm.md index 250d255da6..fc4533f124 100644 --- a/pages/package_registries/helm.md +++ b/pages/package_registries/helm.md @@ -30,11 +30,11 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/helm_registry_slug' %> +<%= render_markdown partial: 'package_registries/helm_registry_slug' %> -<%= render_markdown partial: 'package-registries/path_to_file' %> +<%= render_markdown partial: 'package_registries/path_to_file' %> For example, to upload the file `my-helm-chart-0.1.2.tgz` from the current directory to the **My Helm Charts** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -87,9 +87,9 @@ helm repo add {registry.slug} https://packages.buildkite.com/{org.slug}/{registr where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/helm_registry_slug' %> +<%= render_markdown partial: 'package_registries/helm_registry_slug' %> - `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download charts from your Helm registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. @@ -107,7 +107,7 @@ helm install "chart-release" "{registry.slug}/{chart-name}" --version {version} where: -<%= render_markdown partial: 'package-registries/helm_registry_slug' %> +<%= render_markdown partial: 'package_registries/helm_registry_slug' %> - `chart-release` is the unique release name for the Helm chart - must have no `.` in name and be in lowercase. [General conventions](https://helm.sh/docs/chart_best_practices/conventions/#chart-names). diff --git a/pages/package_registries/helm_oci.md b/pages/package_registries/helm_oci.md index 8833601779..a44c6d6a4a 100644 --- a/pages/package_registries/helm_oci.md +++ b/pages/package_registries/helm_oci.md @@ -28,8 +28,8 @@ The following steps describe the process above: where: * `registry-write-token` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload charts to your Helm registry. Ensure this access token has the **Read Packages** and **Write Packages** REST API scopes, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. - <%= render_markdown partial: 'package-registries/org_slug' %> - <%= render_markdown partial: 'package-registries/helm_registry_slug' %> + <%= render_markdown partial: 'package_registries/org_slug' %> + <%= render_markdown partial: 'package_registries/helm_registry_slug' %> 1. Copy the following `helm push` command, paste it into your terminal, and modify as required before running to push your Helm chart: @@ -90,9 +90,9 @@ helm registry login packages.buildkite.com/{org.slug}/{registry.slug} -u buildki where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/helm_registry_slug' %> +<%= render_markdown partial: 'package_registries/helm_registry_slug' %> - `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download charts from your Helm registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. @@ -109,9 +109,9 @@ helm pull oci://packages.buildkite.com/{org.slug}/{registry.slug}/chart-name --v where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/helm_registry_slug' %> +<%= render_markdown partial: 'package_registries/helm_registry_slug' %> - `chart-name` is the name of your chart. diff --git a/pages/package_registries/javascript.md b/pages/package_registries/javascript.md index a308c60223..38652aa3f1 100644 --- a/pages/package_registries/javascript.md +++ b/pages/package_registries/javascript.md @@ -26,9 +26,9 @@ The following steps describe the process above: ``` where: - <%= render_markdown partial: 'package-registries/org_slug' %> - <%= render_markdown partial: 'package-registries/javascript_registry_slug' %> - <%= render_markdown partial: 'package-registries/javascript_registry_write_token' %> + <%= render_markdown partial: 'package_registries/org_slug' %> + <%= render_markdown partial: 'package_registries/javascript_registry_slug' %> + <%= render_markdown partial: 'package_registries/javascript_registry_write_token' %> **Note:** * If your `.npmrc` file doesn't exist, this command automatically creates it for you. @@ -62,7 +62,7 @@ To access your JavaScript package's details page: 1. Select your JavaScript registry on this page. 1. On your JavaScript registry page, select the package to display its details page. -<%= render_markdown partial: 'package-registries/package_details_page_sections' %> +<%= render_markdown partial: 'package_registries/package_details_page_sections' %> ### Downloading a package @@ -90,9 +90,9 @@ npm set //packages.buildkite.com/{org.slug}/{registry.slug}/npm/:_authToken regi where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/javascript_registry_slug' %> +<%= render_markdown partial: 'package_registries/javascript_registry_slug' %> - `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages to your JavaScript registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. @@ -115,6 +115,6 @@ where: - `version.number` is the version of your Node.js package (that is, the `version` field value from its `package.json` file). -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/javascript_registry_slug' %> +<%= render_markdown partial: 'package_registries/javascript_registry_slug' %> diff --git a/pages/package_registries/maven.md b/pages/package_registries/maven.md index 000ea7fb7c..a0ecefb7ad 100644 --- a/pages/package_registries/maven.md +++ b/pages/package_registries/maven.md @@ -45,7 +45,7 @@ The following steps describe the process above: where: * `registry-write-token` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Java registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. - <%= render_markdown partial: 'package-registries/java_registry_id' %> + <%= render_markdown partial: 'package_registries/java_registry_id' %> **Note:** This step only needs to be performed once for the life of your Java registry, and API access token. @@ -67,9 +67,9 @@ The following steps describe the process above: where: * `org-slug-registry-slug` is the ID of your Java registry (above). - <%= render_markdown partial: 'package-registries/org_slug' %> + <%= render_markdown partial: 'package_registries/org_slug' %> - <%= render_markdown partial: 'package-registries/java_registry_slug' %> + <%= render_markdown partial: 'package_registries/java_registry_slug' %> 1. Publish your package: @@ -79,9 +79,9 @@ The following steps describe the process above: ## Access a package's details -<%= render_markdown partial: 'package-registries/access_java_package_details_page' %> +<%= render_markdown partial: 'package_registries/access_java_package_details_page' %> -<%= render_markdown partial: 'package-registries/package_details_page_sections' %> +<%= render_markdown partial: 'package_registries/package_details_page_sections' %> ### Downloading a package @@ -129,7 +129,7 @@ where: - `registry-read-token` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Java registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'package-registries/java_registry_id' %> +<%= render_markdown partial: 'package_registries/java_registry_id' %> The `pom.xml` code snippet is based on this format: @@ -158,10 +158,10 @@ The `pom.xml` code snippet is based on this format: where: -<%= render_markdown partial: 'package-registries/java_registry_id' %> +<%= render_markdown partial: 'package_registries/java_registry_id' %> - `{org.slug}` is the org slug. -<%= render_markdown partial: 'package-registries/java_registry_slug' %> +<%= render_markdown partial: 'package_registries/java_registry_slug' %> -<%= render_markdown partial: 'package-registries/java_package_domain_name_version' %> +<%= render_markdown partial: 'package_registries/java_package_domain_name_version' %> diff --git a/pages/package_registries/python.md b/pages/package_registries/python.md index 8f336c1179..9af9355b80 100644 --- a/pages/package_registries/python.md +++ b/pages/package_registries/python.md @@ -28,13 +28,13 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/python_registry_slug' %> +<%= render_markdown partial: 'package_registries/python_registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Python registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'package-registries/path_to_file' %> +<%= render_markdown partial: 'package_registries/path_to_file' %> For example, to upload the file `my-python-package-0.9.7b1.tar.gz` from the current directory to the **My Python packages** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -54,7 +54,7 @@ To access your Python package's details page: 1. Select your Python registry on this page. 1. On your Python registry page, select the package to display its details. -<%= render_markdown partial: 'package-registries/package_details_page_sections' %> +<%= render_markdown partial: 'package_registries/package_details_page_sections' %> ### Downloading a package @@ -86,9 +86,9 @@ where: - `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Python registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/python_registry_slug' %> +<%= render_markdown partial: 'package_registries/python_registry_slug' %> The alternative `requirements.txt` (for virtualenv) code snippet is based on this format: diff --git a/pages/package_registries/red_hat.md b/pages/package_registries/red_hat.md index 0bedb24d20..61c3a4724b 100644 --- a/pages/package_registries/red_hat.md +++ b/pages/package_registries/red_hat.md @@ -28,13 +28,13 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/red_hat_registry_slug' %> +<%= render_markdown partial: 'package_registries/red_hat_registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload packages to your Red Hat registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish packages to any registry your user account has access to within your Buildkite organization. -<%= render_markdown partial: 'package-registries/path_to_file' %> +<%= render_markdown partial: 'package_registries/path_to_file' %> For example, to upload the file `my-red-hat-package_1.0-2.x86_64.rpm` from the current directory to the **My Red Hat packages** registry in the **My organization** Buildkite organization, run the `curl` command: @@ -54,7 +54,7 @@ To access your RPM package's details page: 1. Select your Red Hat registry on this page. 1. On your Red Hat registry page, select the package to display its details page. -<%= render_markdown partial: 'package-registries/package_details_page_sections' %> +<%= render_markdown partial: 'package_registries/package_details_page_sections' %> ### Downloading a package @@ -83,13 +83,13 @@ sudo sh -c 'echo -e "[{registry.slug}]\nname={registry.name}\nbaseurl=https://bu where: -<%= render_markdown partial: 'package-registries/red_hat_registry_slug' %> +<%= render_markdown partial: 'package_registries/red_hat_registry_slug' %> - `{registry.name}` is the name of your Red Hat registry. - `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages from your Red Hat registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> #### Package installation diff --git a/pages/package_registries/ruby.md b/pages/package_registries/ruby.md index bddc680f13..08b0478f88 100644 --- a/pages/package_registries/ruby.md +++ b/pages/package_registries/ruby.md @@ -33,9 +33,9 @@ GEM_HOST_API_KEY="temporary-write-token-that-expires-after-5-minutes" \ where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/ruby_registry_slug' %> +<%= render_markdown partial: 'package_registries/ruby_registry_slug' %> Since the `temporary-write-token-that-expires-after-5-minutes` expires quickly, it is recommended that you just copy this command directly from the **Publish a Ruby Package** dialog. @@ -54,9 +54,9 @@ The remaining code boxes on the **Publish a Ruby Package** dialog provide config ``` where: - <%= render_markdown partial: 'package-registries/org_slug' %> - <%= render_markdown partial: 'package-registries/ruby_registry_slug' %> - <%= render_markdown partial: 'package-registries/ruby_registry_write_token' %> + <%= render_markdown partial: 'package_registries/org_slug' %> + <%= render_markdown partial: 'package_registries/ruby_registry_slug' %> + <%= render_markdown partial: 'package_registries/ruby_registry_write_token' %> **Note:** This step only needs to be conducted once for the life of your Ruby registry. @@ -91,7 +91,7 @@ To access your Ruby package's details page: 1. Select your Ruby registry on this page. 1. On your Ruby registry page, select the package within the **Packages** section. The package's details page is displayed. -<%= render_markdown partial: 'package-registries/package_details_page_sections' %> +<%= render_markdown partial: 'package_registries/package_details_page_sections' %> A Ruby registry's package also has a **Dependencies** tab, which lists other RubyGems gem packages that your currently viewed Ruby gem package has dependencies on. @@ -129,6 +129,6 @@ where: - `{registry.read.token}` is your [API access token](https://buildkite.com/user/api-access-tokens) or [registry token](/docs/package-registries/manage-registries#update-a-registry-configure-registry-tokens) used to download packages to your Ruby registry. Ensure this access token has the **Read Packages** REST API scope, which allows this token to download packages from any registry your user account has access to within your Buildkite organization. This URL component, along with its surrounding `buildkite:` and `@` components are not required for registries that are publicly accessible. -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> - `{registry.slug}` is the name of your Ruby registry. diff --git a/pages/package_registries/security/oidc.md b/pages/package_registries/security/oidc.md index fdf718fb8c..bef699c6f5 100644 --- a/pages/package_registries/security/oidc.md +++ b/pages/package_registries/security/oidc.md @@ -82,7 +82,7 @@ where: - `--audience` is the target system that consumes this OIDC token. For Buildkite Package Registries, this value must be based on the URL `https://packages.buildkite.com/{org.slug}/{registry.slug}`. -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> - `{registry.slug}` is the slug of your registry, which is the [kebab-case](https://en.wikipedia.org/wiki/Letter_case#Kebab_case) version of your registry name, and can be obtained after accessing **Packages** in the global navigation > your registry from the **Registries** page. diff --git a/pages/package_registries/terraform.md b/pages/package_registries/terraform.md index bff3a36dd8..b744385dfc 100644 --- a/pages/package_registries/terraform.md +++ b/pages/package_registries/terraform.md @@ -28,9 +28,9 @@ curl -X POST https://api.buildkite.com/v2/packages/organizations/{org.slug}/regi where: -<%= render_markdown partial: 'package-registries/org_slug' %> +<%= render_markdown partial: 'package_registries/org_slug' %> -<%= render_markdown partial: 'package-registries/terraform_registry_slug' %> +<%= render_markdown partial: 'package_registries/terraform_registry_slug' %> - `$REGISTRY_WRITE_TOKEN` is your [API access token](https://buildkite.com/user/api-access-tokens) used to publish/upload modules to your Terraform registry. Ensure this access token has the **Write Packages** REST API scope, which allows this token to publish modules and packages to any registry your user account has access to within your Buildkite organization. From 33021b98e72d74e09650145b2ec5c2127b528588 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 25 Sep 2024 17:20:38 +1000 Subject: [PATCH 074/102] Fix remaining links to 'permissions' page. --- pages/package_registries/background.md | 2 +- pages/package_registries/getting_started.md | 2 +- pages/package_registries/manage_registries.md | 2 +- pages/package_registries/private_storage.md | 2 +- pages/pipelines/security/permissions.md | 4 ++-- pages/team_management/permissions.md | 10 +++++----- pages/test_engine/permissions.md | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pages/package_registries/background.md b/pages/package_registries/background.md index bed5f81839..b3f6646001 100644 --- a/pages/package_registries/background.md +++ b/pages/package_registries/background.md @@ -38,5 +38,5 @@ Learn more about how: - Buildkite Package Registries works through this step-by-step [Getting started](/docs/package-registries/getting-started) tutorial. - To work with registries in [Manage registries](/docs/package-registries/manage-registries). -- To manage access to your registries in [Access controls](/docs/package-registries/permissions). +- To manage access to your registries in [Access controls](/docs/package-registries/security/permissions). - To configure your own private storage for Buildkite Package Registries in [Private storage](/docs/package-registries/private-storage). diff --git a/pages/package_registries/getting_started.md b/pages/package_registries/getting_started.md index 89683cac4f..783d7e0416 100644 --- a/pages/package_registries/getting_started.md +++ b/pages/package_registries/getting_started.md @@ -23,7 +23,7 @@ First, create a new JavaScript registry: 1. On the **New Registry** page, enter the mandatory **Name** for your registry. For example, `My JavaScript registry`. 1. Enter an optional **Description** for the registry, which will appear under the name of the registry item on the **Registries** page. For example, `This is an example of a JavaScript registry`. 1. Select the required registry **Ecosystem** of **JavaScript (npm)**. -1. If your Buildkite organization has the [teams feature](/docs/package-registries/permissions) enabled, select the relevant **Teams** to be granted access to the new JavaScript registry. +1. If your Buildkite organization has the [teams feature](/docs/package-registries/security/permissions) enabled, select the relevant **Teams** to be granted access to the new JavaScript registry. 1. Select **Create Registry**. The new JavaScript registry's details page is displayed. Selecting **Packages** in the global navigation opens the **Registries** page, where your new registry will be listed. diff --git a/pages/package_registries/manage_registries.md b/pages/package_registries/manage_registries.md index d8aee15907..e326e01bbd 100644 --- a/pages/package_registries/manage_registries.md +++ b/pages/package_registries/manage_registries.md @@ -16,7 +16,7 @@ To create a new registry: 1. On the **New Registry** page, enter the mandatory **Name** for your registry. 1. Enter an optional **Description** for the registry. This description appears under the name of the registry item on the **Registries** page. 1. Select the required registry **Ecosystem** based on the [package ecosystem](/docs/packages#get-started) for this new registry. -1. If your Buildkite organization has the [teams feature](/docs/package-registries/permissions) enabled, select the relevant **Teams** to be granted access to the new registry. +1. If your Buildkite organization has the [teams feature](/docs/package-registries/security/permissions) enabled, select the relevant **Teams** to be granted access to the new registry. 1. Select **Create Registry**. The new registry's details page is displayed. Selecting **Packages** in the global navigation opens the **Registries** page, where your new registry will be listed. diff --git a/pages/package_registries/private_storage.md b/pages/package_registries/private_storage.md index 8ce9284bee..219d3b277f 100644 --- a/pages/package_registries/private_storage.md +++ b/pages/package_registries/private_storage.md @@ -1,6 +1,6 @@ # Private storage link -This page provides details on how to link and configure your private Amazon Web Services (AWS) Simple Storage Service (S3) storage to Buildkite Package Registries within your Buildkite organization. These processes can only be performed by [Buildkite organization administrators](/docs/package-registries/permissions#manage-teams-and-permissions-organization-level-permissions). +This page provides details on how to link and configure your private Amazon Web Services (AWS) Simple Storage Service (S3) storage to Buildkite Package Registries within your Buildkite organization. These processes can only be performed by [Buildkite organization administrators](/docs/package-registries/security/permissions#manage-teams-and-permissions-organization-level-permissions). By default, Buildkite Package Registries provides its own storage to house any packages, container images and modules stored in registries. You can also link your own private AWS S3 bucket to Buildkite Package Registries, which allows you to: diff --git a/pages/pipelines/security/permissions.md b/pages/pipelines/security/permissions.md index 007215c28b..edd517025a 100644 --- a/pages/pipelines/security/permissions.md +++ b/pages/pipelines/security/permissions.md @@ -22,9 +22,9 @@ As an organization administrator, you can access the [**Organization Settings** - Add new teams or edit existing ones in the [**Team** section](https://buildkite.com/organizations/~/teams). -- After selecting a team, you can view and administer the member-, [pipeline-](#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/package-registries/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. +- After selecting a team, you can view and administer the member-, [pipeline-](#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-analytics/permissions#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/package-registries/security/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. -**Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/package-registries/permissions#enabling-buildkite-packages). +**Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/package-registries/security/permissions#enabling-buildkite-packages). ### Team-level permissions diff --git a/pages/team_management/permissions.md b/pages/team_management/permissions.md index 5570bf1461..8f002aa16b 100644 --- a/pages/team_management/permissions.md +++ b/pages/team_management/permissions.md @@ -31,9 +31,9 @@ A user who is a _Buildkite organization administrator_ can access the [**Organiz - From the **Teams** page: * Create a new team, using the **New Team** button. - * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/package-registries/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. + * Administer (with full control) the [team-](#manage-teams-and-permissions-team-level-permissions), [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) and [registry-](/docs/package-registries/security/permissions#manage-teams-and-permissions-registry-level-permissions)level settings throughout their Buildkite organization. - **Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/package-registries/permissions#enabling-buildkite-packages). + **Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/package-registries/security/permissions#enabling-buildkite-packages). * Delete an existing team, by selecting the team > **Settings** tab > **Delete Team** button. * [Enable](#manage-teams-and-permissions) and disable the teams feature for their organization. This feature can only be disabled once all teams have been deleted from the organization (including the automatically-created **Everyone** team) using the **Disable Teams** button on the **Teams** page. Once the teams feature has been disabled, it can be [re-enabled](#manage-teams-and-permissions) at any time. @@ -59,11 +59,11 @@ A user who is a _team maintainer_ on an existing team can: * Change the permission for all users in this team on any: - [pipeline](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions) in the team to **Full Access**, **Build & Read** or **Read Only**. - [test suite](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions) in the team to **Full Access** or **Read Only**. - - [registry](/docs/package-registries/permissions#manage-teams-and-permissions-registry-level-permissions) in the team to **Full Access**, **Read & Write** or **Read Only**. + - [registry](/docs/package-registries/security/permissions#manage-teams-and-permissions-registry-level-permissions) in the team to **Full Access**, **Read & Write** or **Read Only**. To do this, select the appropriate tab (**Pipelines**, **Test Suites** or **Package Registries**) and then select the required permission for the item, although be aware of the [caveat below](#changing-full-access-permissions-on-pipelines-test-suites-and-registries). - **Note:** Managing team permissions for registries is only available once [Buildkite Package Registries has been enabled](/docs/package-registries/permissions#enabling-buildkite-packages). + **Note:** Managing team permissions for registries is only available once [Buildkite Package Registries has been enabled](/docs/package-registries/security/permissions#enabling-buildkite-packages). * Edit the team's details and other settings using the **Settings** tab, which includes the ability to: @@ -84,7 +84,7 @@ A user who is a _team maintainer_ on an existing team can: As indicated in the Buildkite interface, a user who is in a team is known as a **Team Member**, and such users have fewer permissions within the team (that is, no team management capabilities) than a **Team Maintainer**. -All team members in a team have the same level of access to the [pipelines](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suites](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), and [registries](/docs/package-registries/permissions#manage-teams-and-permissions-registry-level-permissions) in the team. If you need to have more fine grained control over the pipelines, test suites or registries in a team, you can create more teams with different permissions. +All team members in a team have the same level of access to the [pipelines](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suites](/docs/test-engine/permissions#manage-teams-and-permissions-test-suite-level-permissions), and [registries](/docs/package-registries/security/permissions#manage-teams-and-permissions-registry-level-permissions) in the team. If you need to have more fine grained control over the pipelines, test suites or registries in a team, you can create more teams with different permissions. > 🚧 Changing **Full Access** permissions on pipelines, test suites and registries > As a team maintainer, once you change the permission on any of these items away from **Full Access**, you could lose the ability to change the permissions on that item again. This can happen if you are no longer a member of a team that provides **Full Access** to this item. diff --git a/pages/test_engine/permissions.md b/pages/test_engine/permissions.md index f6646f890a..9e46a9c4e0 100644 --- a/pages/test_engine/permissions.md +++ b/pages/test_engine/permissions.md @@ -26,11 +26,11 @@ As an organization administrator, you can access the [**Organization Settings** <%= image "team-section-list.png", alt: "Screenshot of the Team section, showing a list of Teams" %> -- After selecting a team, you can view and administer the member-, [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/package-registries/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. +- After selecting a team, you can view and administer the member-, [pipeline-](/docs/pipelines/security/permissions#manage-teams-and-permissions-pipeline-level-permissions), [test suite-](#manage-teams-and-permissions-test-suite-level-permissions), [registry-](/docs/package-registries/security/permissions#manage-teams-and-permissions-registry-level-permissions) and [team-](/docs/team-management/permissions#manage-teams-and-permissions-team-level-permissions)level settings for that team. <%= image "team-section-test-suites-list.png", alt: "Screenshot of the Team section, showing a list of Test Suites the team has access to" %> - **Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/package-registries/permissions#enabling-buildkite-packages). + **Note:** Registry-level settings are only available once [Buildkite Package Registries has been enabled](/docs/package-registries/security/permissions#enabling-buildkite-packages). ### Team-level permissions From a4d19d034f8e9cb23c511e54615adf71f5c5f355 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 25 Sep 2024 17:31:38 +1000 Subject: [PATCH 075/102] Fix more links resulting from Packages to Package Registries product name change. --- pages/apis/rest_api/package_registries/registries.md | 2 +- pages/package_registries/manage_registries.md | 2 +- pages/platform.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/apis/rest_api/package_registries/registries.md b/pages/apis/rest_api/package_registries/registries.md index 3b0500822a..ed444f42d4 100644 --- a/pages/apis/rest_api/package_registries/registries.md +++ b/pages/apis/rest_api/package_registries/registries.md @@ -37,7 +37,7 @@ Required [request body properties](/docs/api#request-body-properties):
- +
nameName of the new registry.
Example: "my registry".
ecosystemRegistry ecosystem based on the package ecosystem for the new registry.
Example: "ruby".
ecosystemRegistry ecosystem based on the package ecosystem for the new registry.
Example: "ruby".
diff --git a/pages/package_registries/manage_registries.md b/pages/package_registries/manage_registries.md index e326e01bbd..9b43444718 100644 --- a/pages/package_registries/manage_registries.md +++ b/pages/package_registries/manage_registries.md @@ -15,7 +15,7 @@ To create a new registry: 1. Select **New registry**. 1. On the **New Registry** page, enter the mandatory **Name** for your registry. 1. Enter an optional **Description** for the registry. This description appears under the name of the registry item on the **Registries** page. -1. Select the required registry **Ecosystem** based on the [package ecosystem](/docs/packages#get-started) for this new registry. +1. Select the required registry **Ecosystem** based on the [package ecosystem](/docs/package-registries#get-started) for this new registry. 1. If your Buildkite organization has the [teams feature](/docs/package-registries/security/permissions) enabled, select the relevant **Teams** to be granted access to the new registry. 1. Select **Create Registry**. diff --git a/pages/platform.md b/pages/platform.md index 14454e6d18..66564c34db 100644 --- a/pages/platform.md +++ b/pages/platform.md @@ -6,7 +6,7 @@ template: "landing_page" The Buildkite Scale-Out Delivery Platform is an adaptable, composable, and scalable platform with everything platform teams need to build software delivery systems for their businesses—and rapidly deliver value to users. -The Buildkite platform documentation contains docs for _platform_-level features of Buildkite available across Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-engine), as well as [Package Registries](/docs/packages). This area of the docs covers the following topics: +The Buildkite platform documentation contains docs for _platform_-level features of Buildkite available across Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-engine), as well as [Package Registries](/docs/package-registries). This area of the docs covers the following topics: - [Team management](/docs/team-management), with guidelines on how to manage your users and teams across the Buildkite platform for Pipelines, Test Engine and Package Registries. From 92d0b066c2a680d163609fbaf0d5153824324915 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 26 Sep 2024 14:27:50 +1000 Subject: [PATCH 076/102] Rebrand 'beta flag' examples in 'Contributing' guide to match new product names. --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4732ae574c..a4ebab359e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -122,8 +122,8 @@ For example: ``` [ 'pipelines/some-new-beta-feature', - 'test-analytics/some-new-beta-feature', - 'packages/some-new-beta-feature' + 'test-engine/some-new-beta-feature', + 'package-registries/some-new-beta-feature' ] ``` From e229c96b4aef9907a734ca1f6ad1319020a4e89f Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 26 Sep 2024 16:02:45 +1000 Subject: [PATCH 077/102] Implement review discussion and feedback on Test Engine Usage and billing and related pages. --- pages/test_engine/test_ownership.md | 2 +- pages/test_engine/usage_and_billing.md | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/pages/test_engine/test_ownership.md b/pages/test_engine/test_ownership.md index f8a676790c..08070dc9e5 100644 --- a/pages/test_engine/test_ownership.md +++ b/pages/test_engine/test_ownership.md @@ -1,6 +1,6 @@ # Test ownership -Test ownership is critical in adopting a healthy testing culture at your organization. Defining one or more teams as test owners allows these teams to become accountable for maintaining a fast and reliable test suite, ensuring confidence when you deploy your code. +Test ownership is critical in adopting a healthy testing culture at your organization. Defining one or more teams as test owners allows these teams to become accountable for maintaining tests within your test suite, ensuring it is fast and reliable, and providing confidence when you deploy your code. Customers on the [Pro and Enterprise plans](https://buildkite.com/pricing) can assign test ownership to [teams](/docs/test-engine/permissions#manage-teams-and-permissions). diff --git a/pages/test_engine/usage_and_billing.md b/pages/test_engine/usage_and_billing.md index 704ccad0ab..c814a12229 100644 --- a/pages/test_engine/usage_and_billing.md +++ b/pages/test_engine/usage_and_billing.md @@ -12,18 +12,21 @@ For example, each of the following three tests are unique managed tests: - Test Suite 1 - here.is.another.scope - Login Test name - Test Suite 2 - here.is.scope.one - Login Test name -Test Engine does the following on each managed test: +Test Engine conducts the following on each managed test: - Tracks its history -- Calculates its flakiness -- Automatically quarantines -- Attributes ownership +- Calculates its [flakiness](/docs/test-engine/test-suites#detecting-flaky-tests) +- Maintains its state (for example, [Enterprise plan](https://buildkite.com/pricing) customers can quarantine tests by disabling them under certain conditions) +- Attributes [ownership by team](/docs/test-engine/test-ownership) -For billing purposes, Buildkite measures usage by calculating the number of managed tests each day, and then bills based on the 90th percentile of usage for the month. This billing method ensures that occasional spikes in usage, such as those caused by refactoring, don't result in excessive charges. +For billing purposes, Buildkite measures usage by calculating the number of managed tests that have executed (run) at least once each day, and then bills based on the 90th percentile of this usage for the month. This billing method ensures that occasional spikes in usage, such as those caused by refactoring, don't result in excessive charges. -## Test executions (legacy) +> 📘 +> Be aware that if a specific managed test has run multiple times on a specific day, then this only counts once towards the usage measurement for that day. -Some legacy Buildkite plans measure usage on the number of times a test was executed (run). +## Test executions + +Some legacy Buildkite plans measure usage based on the _total number of times_ a test was executed (run). You can find the test execution details for a run at the bottom of the run page, and your organization's [total usage](#usage-page) in Settings. From 46ce0003564f7eac0fdd44cee7602b52c67ae576 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Tue, 1 Oct 2024 15:39:09 +1000 Subject: [PATCH 078/102] Fix nav link and main landing page. --- app/views/homepage/_references.html.erb | 2 +- data/nav.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/homepage/_references.html.erb b/app/views/homepage/_references.html.erb index ee32b1464f..87715513c8 100644 --- a/app/views/homepage/_references.html.erb +++ b/app/views/homepage/_references.html.erb @@ -40,7 +40,7 @@ links: [ { title: "Package ecosystems", - link: "/docs/package-registries/alpine" + link: "/docs/package-registries/ecosystems" } ] }, diff --git a/data/nav.yml b/data/nav.yml index d7b6df048d..8468908c8a 100644 --- a/data/nav.yml +++ b/data/nav.yml @@ -500,7 +500,7 @@ - name: "Package ecosystems" children: - name: "Overview" - path: "packages/ecosystems" + path: "package-registries/ecosystems" - name: "Alpine" path: "package-registries/alpine" - name: "Container" From 1594f8d47784298a7d8d13b3e811d9bc27a9c453 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Tue, 1 Oct 2024 15:47:19 +1000 Subject: [PATCH 079/102] Fix partial references. --- pages/package_registries/ecosystems.md | 6 +++++- pages/package_registries/manage_registries.md | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pages/package_registries/ecosystems.md b/pages/package_registries/ecosystems.md index a2197c1ffd..0b33acc167 100644 --- a/pages/package_registries/ecosystems.md +++ b/pages/package_registries/ecosystems.md @@ -1,5 +1,9 @@ +--- +toc: false +--- + # Package ecosystems overview Buildkite Packages supports the following language and package ecosystems: -<%= render_markdown partial: 'packages/supported_package_ecosystems' %> +<%= render_markdown partial: 'package_registries/supported_package_ecosystems' %> diff --git a/pages/package_registries/manage_registries.md b/pages/package_registries/manage_registries.md index f13a64b9fe..bbe6b8e8c0 100644 --- a/pages/package_registries/manage_registries.md +++ b/pages/package_registries/manage_registries.md @@ -25,7 +25,7 @@ To create a new registry: Once a [registry is created](#create-a-registry), packages can then be uploaded to it. Learn more about how to manage packages for your registry's relevant language and package ecosystem: -<%= render_markdown partial: 'packages/supported_package_ecosystems' %> +<%= render_markdown partial: 'package_registries/supported_package_ecosystems' %> ## Update a registry From 29ae420e5cff7e677bd7d01eb11a4cdfb7140099 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Tue, 1 Oct 2024 15:58:00 +1000 Subject: [PATCH 080/102] Add new 'platform' page messaging to top of 'platform' landing page. --- pages/platform.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/platform.md b/pages/platform.md index 66564c34db..d1ac20ef2f 100644 --- a/pages/platform.md +++ b/pages/platform.md @@ -4,6 +4,8 @@ template: "landing_page" # The Buildkite platform +The Scale-Out Delivery Platform—A software delivery platform that's designed for a software-driven world. + The Buildkite Scale-Out Delivery Platform is an adaptable, composable, and scalable platform with everything platform teams need to build software delivery systems for their businesses—and rapidly deliver value to users. The Buildkite platform documentation contains docs for _platform_-level features of Buildkite available across Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-engine), as well as [Package Registries](/docs/package-registries). This area of the docs covers the following topics: From 408e7210f9cacd136e71a97b7403d17a85aea0e4 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Tue, 1 Oct 2024 16:33:51 +1000 Subject: [PATCH 081/102] Amend Pipelines landing page with revised messaging. --- app/views/landing_page_pipelines/_hero.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/landing_page_pipelines/_hero.html.erb b/app/views/landing_page_pipelines/_hero.html.erb index 11d88f753d..4bca92f731 100644 --- a/app/views/landing_page_pipelines/_hero.html.erb +++ b/app/views/landing_page_pipelines/_hero.html.erb @@ -2,7 +2,7 @@

Buildkite Pipelines

-

Create fast, secure, and reliable CI/CD with Buildkite Pipelines so you can quickly and confidently ship quality code. Scale out automated workflows with massive concurrency and flexible compute types on Buildkite Pipelines. Fine-tune each workflow to match your business needs. Buildkite provides the building blocks, docs, and extension points you'll need to build your dream CI/CD workflows. Let's get building! 🚀

+

Create fast, secure, and reliable CI/CD with Buildkite Pipelines so you can quickly and confidently ship quality code. Buildkite Pipelines scales your builds with massive concurrency and flexible compute types. Fine-tune each workflow to match your business needs. Buildkite provides the building blocks, docs, and extension points you'll need to build your dream CI/CD workflows. Let's get building! 🚀

From 19a0178e04b88e02f0508d8b376577d2a3e4e4a8 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Tue, 1 Oct 2024 16:45:17 +1000 Subject: [PATCH 082/102] Amend Test Engine landing page with revised messaging. --- pages/test_engine.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/test_engine.md b/pages/test_engine.md index 0720cfa11a..ea83a66954 100644 --- a/pages/test_engine.md +++ b/pages/test_engine.md @@ -4,7 +4,7 @@ template: "landing_page" # Buildkite Test Engine -Scale out your testing across any framework with _Buildkite Test Engine_. Get more out of fewer tests with performance insights to speed up builds and isolate unreliable tests. +_Buildkite Test Engine_ speeds up builds with real-time flaky test management and intelligent test splitting. Drive accountability and get more out of your existing CI compute with performance insights and analytics. Where [Buildkite Pipelines](/docs/pipelines) helps you automate your CI/CD pipelines, Test Engine helps you track and analyze the steps in these pipelines, by: From 81c7ee700d3cce6afa24b3f7d39aaff09be9c86b Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Tue, 1 Oct 2024 16:51:56 +1000 Subject: [PATCH 083/102] Amend Package Registries landing page with revised messaging. --- pages/package_registries.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/package_registries.md b/pages/package_registries.md index 06468188d2..10d5fe440e 100644 --- a/pages/package_registries.md +++ b/pages/package_registries.md @@ -4,9 +4,9 @@ template: "landing_page" # Buildkite Package Registries -Scale out asset management across any ecosystem with _Buildkite Package Registries_. Avoid the bottleneck of poorly managed and insecure dependencies. +_Buildkite Package Registries_ secures your supply chain and eliminates bottlenecks with co-located packages for faster builds and deployments across any ecosystem. -Buildkite Package Registries allows you to: +Package Registries allows you to: - Manage artifacts and packages from [Buildkite Pipelines](/docs/pipelines), as well as other CI/CD applications that require artifact management. @@ -15,7 +15,7 @@ Buildkite Package Registries allows you to: As well as storing a collection of packages, a registry also surfaces metadata or attributes associated with a package, such as the package's description, version, contents (files and directories), checksum details, distribution type, dependencies, and so on. > 📘 -> You can enable [Buildkite Package Registries](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/package-registries/security/permissions#enabling-buildkite-packages). +> You can enable [Package Registries](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/package-registries/security/permissions#enabling-buildkite-packages). _Buildkite Packages Registries_ was previously called _Buildkite Packages_. From f8846109a01654158d540eea4588a8a5d554a4d7 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 2 Oct 2024 15:01:11 +1000 Subject: [PATCH 084/102] Implement feedback on parallelized builds for Test Engine and improve the 'Get started' section of the main Test Engine landing page. --- pages/test_engine.md | 4 +++- pages/test_engine/test_suites.md | 9 ++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/pages/test_engine.md b/pages/test_engine.md index 0720cfa11a..e8c37ee6e9 100644 --- a/pages/test_engine.md +++ b/pages/test_engine.md @@ -19,7 +19,7 @@ _Buildkite Test Engine_ was previously called _Buildkite Test Analytics_. ## Get started -Run through the 'Getting started' section of these Test Engine docs, beginning with [Configuring test suites](/docs/test-engine/test-suites) for an overview of Test Engine's concepts and functionality, followed by the appropriate test collector for project's language: +To get started with Test Engine, and to begin setting up your _test suites_, configure the relevant supported _test collectors_ for your development project. @@ -45,6 +45,8 @@ Run through the 'Getting started' section of these Test Engine docs, beginning w You can also upload test results by importing [JSON](/docs/test-engine/importing-json) or [JUnit XML](/docs/test-engine/importing-junit-xml). +Once your test collectors have been set up, you can begin configuring your test suites by running through the relevant 'Getting started' sections, beginning with [Configuring test suites](/docs/test-engine/test-suites) for an overview of Test Engine's concepts and functionality. +
<%= tiles "test_engine_features" %> diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index 453e5fc39e..7cf25d4ca2 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -10,14 +10,13 @@ To delete a suite, or regenerate its API token, go to suite settings. ## Parallelized builds -When a [pipeline's jobs are configured to run in parallel across multiple agents](/docs/tutorials/parallel-builds) (to speed up build times), the jobs of a pipeline's test suite are also run in parallel, although Test Engine will report the entire build execution as part of the same test run. +In CI/CD, tests can be made to run in parallel (known as _parallelized builds_) using features of your own CI/CD pipeline or workflow tool. Parallelized pipeline/workflow builds typical run and complete faster than builds which are not parallelized. -When test runs are split across multiple agents, each test is de-duplicated by both the Test Engine API token and unique build identifier. - -The information that serves as a unique build identifier differs between CI environments. For details, see `run_env[key]` environment variables on our [CI environments page](/docs/test-engine/ci-environments). +In Buildkite Pipelines, tests can be made to run in parallel when they are run as [parallel jobs](https://buildkite.com/docs/tutorials/parallel-builds#parallel-jobs). > 📘 -> You can further speed up the duration of parallelized test suite runs by implementing [test splitting](/docs/test-engine/test-splitting). +> When tests are run in parallel across multiple agents, they can be grouped into the same run by defining the same `run_env[key]` environment variable. Learn more about this environment variable and others in [CI environments](/docs/test-engine/ci-environments). +> You can further speed up the duration of parallelized builds by implementing [test splitting](/docs/test-engine/test-splitting). ## Compare across branches From 7733d6cacee5c8875101b2a406fd03a014eef615 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 2 Oct 2024 15:16:32 +1000 Subject: [PATCH 085/102] Further wording tweaks for parallelized builds. --- pages/test_engine/test_suites.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index 7cf25d4ca2..52effed886 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -10,13 +10,13 @@ To delete a suite, or regenerate its API token, go to suite settings. ## Parallelized builds -In CI/CD, tests can be made to run in parallel (known as _parallelized builds_) using features of your own CI/CD pipeline or workflow tool. Parallelized pipeline/workflow builds typical run and complete faster than builds which are not parallelized. +In CI/CD, a build's tests can be made to run in parallel using features of your own CI/CD pipeline or workflow tool. Parallelized pipeline/workflow builds typical run and complete faster than builds which are not parallelized. -In Buildkite Pipelines, tests can be made to run in parallel when they are run as [parallel jobs](https://buildkite.com/docs/tutorials/parallel-builds#parallel-jobs). +In Buildkite Pipelines, you can run tests in parallel when they are configured as [parallel jobs](https://buildkite.com/docs/tutorials/parallel-builds#parallel-jobs). > 📘 > When tests are run in parallel across multiple agents, they can be grouped into the same run by defining the same `run_env[key]` environment variable. Learn more about this environment variable and others in [CI environments](/docs/test-engine/ci-environments). -> You can further speed up the duration of parallelized builds by implementing [test splitting](/docs/test-engine/test-splitting). +> You can further speed up the duration of parallelized builds across multiple agents by implementing [test splitting](/docs/test-engine/test-splitting). ## Compare across branches From 0883260e49097c28998c1e057a2606d80d771e71 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 2 Oct 2024 16:28:30 +1000 Subject: [PATCH 086/102] Rejig initial intros to Buildkite Package Registries and the Platform pages. --- pages/package_registries.md | 2 +- pages/platform.md | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/pages/package_registries.md b/pages/package_registries.md index 10d5fe440e..c3776471eb 100644 --- a/pages/package_registries.md +++ b/pages/package_registries.md @@ -4,7 +4,7 @@ template: "landing_page" # Buildkite Package Registries -_Buildkite Package Registries_ secures your supply chain and eliminates bottlenecks with co-located packages for faster builds and deployments across any ecosystem. +Scale out asset management for faster builds and deployments across any ecosystem with _Buildkite Package Registries_. Secure your supply chain and avoid the bottlenecks of poorly managed and insecure dependencies with co-located packages. Package Registries allows you to: diff --git a/pages/platform.md b/pages/platform.md index d1ac20ef2f..66564c34db 100644 --- a/pages/platform.md +++ b/pages/platform.md @@ -4,8 +4,6 @@ template: "landing_page" # The Buildkite platform -The Scale-Out Delivery Platform—A software delivery platform that's designed for a software-driven world. - The Buildkite Scale-Out Delivery Platform is an adaptable, composable, and scalable platform with everything platform teams need to build software delivery systems for their businesses—and rapidly deliver value to users. The Buildkite platform documentation contains docs for _platform_-level features of Buildkite available across Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-engine), as well as [Package Registries](/docs/package-registries). This area of the docs covers the following topics: From fa60caab96a1886a3423a57affdd9dd0238b0786 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 2 Oct 2024 21:51:53 +1000 Subject: [PATCH 087/102] Rejig initial intros to Buildkite Pipelines and Test Engine. --- app/views/landing_page_pipelines/_hero.html.erb | 2 +- pages/test_engine.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/landing_page_pipelines/_hero.html.erb b/app/views/landing_page_pipelines/_hero.html.erb index 4bca92f731..f9f889c5c8 100644 --- a/app/views/landing_page_pipelines/_hero.html.erb +++ b/app/views/landing_page_pipelines/_hero.html.erb @@ -2,7 +2,7 @@

Buildkite Pipelines

-

Create fast, secure, and reliable CI/CD with Buildkite Pipelines so you can quickly and confidently ship quality code. Buildkite Pipelines scales your builds with massive concurrency and flexible compute types. Fine-tune each workflow to match your business needs. Buildkite provides the building blocks, docs, and extension points you'll need to build your dream CI/CD workflows. Let's get building! 🚀

+

Create fast, secure, and reliable CI/CD with Buildkite Pipelines so you can quickly and confidently ship quality code. Scale out your builds and automated workflows with massive concurrency and flexible compute types. Fine-tune each workflow to match your business needs. Buildkite provides the building blocks, docs, and extension points you'll need to build your dream CI/CD workflows. Let's get building! 🚀

diff --git a/pages/test_engine.md b/pages/test_engine.md index ea83a66954..11701c5a6b 100644 --- a/pages/test_engine.md +++ b/pages/test_engine.md @@ -4,7 +4,7 @@ template: "landing_page" # Buildkite Test Engine -_Buildkite Test Engine_ speeds up builds with real-time flaky test management and intelligent test splitting. Drive accountability and get more out of your existing CI compute with performance insights and analytics. +Scale out your testing across any framework with _Buildkite Test Engine_. Speed up builds with real-time flaky test management and intelligent test splitting. Drive accountability and get more out of your existing CI compute with performance insights and analytics. Where [Buildkite Pipelines](/docs/pipelines) helps you automate your CI/CD pipelines, Test Engine helps you track and analyze the steps in these pipelines, by: From 54269515de683129433e86d5faa5933d25805a4f Mon Sep 17 00:00:00 2001 From: Giles Gas Date: Thu, 3 Oct 2024 11:13:04 +1000 Subject: [PATCH 088/102] Update app/views/landing_page_pipelines/_hero.html.erb Co-authored-by: Michelle Hertzfeld --- app/views/landing_page_pipelines/_hero.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/landing_page_pipelines/_hero.html.erb b/app/views/landing_page_pipelines/_hero.html.erb index f9f889c5c8..e3958afc66 100644 --- a/app/views/landing_page_pipelines/_hero.html.erb +++ b/app/views/landing_page_pipelines/_hero.html.erb @@ -2,7 +2,7 @@

Buildkite Pipelines

-

Create fast, secure, and reliable CI/CD with Buildkite Pipelines so you can quickly and confidently ship quality code. Scale out your builds and automated workflows with massive concurrency and flexible compute types. Fine-tune each workflow to match your business needs. Buildkite provides the building blocks, docs, and extension points you'll need to build your dream CI/CD workflows. Let's get building! 🚀

+

Create fast, secure, and reliable CI/CD with Buildkite Pipelines so you can quickly and confidently ship quality code. Scale your builds with massive concurrency and flexible compute types, while fine-tuning each workflow to match your business needs. Let's get building! 🚀

From db00d7d5c615e78c73eb6f09c843b2e6049a36a5 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 3 Oct 2024 11:13:22 +1000 Subject: [PATCH 089/102] Add review suggestions for Platform landing page. --- pages/platform.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pages/platform.md b/pages/platform.md index 66564c34db..ec2fbb34a6 100644 --- a/pages/platform.md +++ b/pages/platform.md @@ -8,8 +8,8 @@ The Buildkite Scale-Out Delivery Platform is an adaptable, composable, and scala The Buildkite platform documentation contains docs for _platform_-level features of Buildkite available across Buildkite [Pipelines](/docs/pipelines), [Test Engine](/docs/test-engine), as well as [Package Registries](/docs/package-registries). This area of the docs covers the following topics: -- [Team management](/docs/team-management), with guidelines on how to manage your users and teams across the Buildkite platform for Pipelines, Test Engine and Package Registries. +- [Team management](/docs/team-management), with guidelines on how to manage your users and teams across the Buildkite platform for Pipelines, Test Engine, and Package Registries. -- [Buildkite CLI](/docs/cli), provides command line/terminal access to work with features across the Buildkite platform. +- [Buildkite CLI](/docs/cli), which provides command line/terminal access to work with features across the Buildkite platform. -- [Single sign-on (SSO)](/docs/integrations/sso) provides guidelines on how to protect access to your Buildkite organization using a supported third-party SSO provider. +- [Single sign-on (SSO)](/docs/integrations/sso), with guidelines on how to protect access to your Buildkite organization using a supported third-party SSO provider. From 8d228093c89320a32c6346f63a5646eca5a14a75 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 3 Oct 2024 11:44:47 +1000 Subject: [PATCH 090/102] Amend Package Registries intro. --- pages/package_registries.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/package_registries.md b/pages/package_registries.md index c3776471eb..1a4c5b3fcf 100644 --- a/pages/package_registries.md +++ b/pages/package_registries.md @@ -4,7 +4,7 @@ template: "landing_page" # Buildkite Package Registries -Scale out asset management for faster builds and deployments across any ecosystem with _Buildkite Package Registries_. Secure your supply chain and avoid the bottlenecks of poorly managed and insecure dependencies with co-located packages. +Scale out asset management for faster builds and deployments across any ecosystem with _Buildkite Package Registries_. Secure your supply chain with co-located packages and avoid the bottlenecks of poorly managed and insecure dependencies. Package Registries allows you to: From 423c780da1a73e5c1a0159d643a079c44fc3a1d6 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 3 Oct 2024 11:50:47 +1000 Subject: [PATCH 091/102] Amend wording for the Pipelines tile on the main Buildkite Docs landing page. --- app/views/homepage/_products.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/homepage/_products.html.erb b/app/views/homepage/_products.html.erb index 8ad104fb04..dc7d22dc0f 100644 --- a/app/views/homepage/_products.html.erb +++ b/app/views/homepage/_products.html.erb @@ -5,7 +5,7 @@
Pipelines graphic -

Powerful CI/CD built to scale on your infrastructure

+

Powerful CI/CD built to scale on your choice of infrastructure

From 7d1ab08b25199b23d3aa075141b1448feed67291 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Thu, 3 Oct 2024 12:23:26 +1000 Subject: [PATCH 092/102] Add link from 'configuring test suites' page intro to 'Get started' section for configuring 'test collectors' as a prereq for configuring test suites. --- pages/test_engine/test_suites.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index 52effed886..47691a96b9 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -6,6 +6,8 @@ Many organizations set up one suite per test framework, for example one suite fo Each suite inside Test Engine has a unique API token that you can use to route test information to the correct suite. Pipelines and test suites do not need to have a one-to-one relationship. +To start configuring your test suite, you first need to have configured the appropriate _test collectors_ for your development project. Learn more about how to do this from the [Get started](/docs/test-engine#get-started) section of these docs. + To delete a suite, or regenerate its API token, go to suite settings. ## Parallelized builds From 1dcb63c8514b666a2ae2c3cc0827ed87a159656b Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Fri, 4 Oct 2024 15:28:27 +1000 Subject: [PATCH 093/102] Update branding for Buildkite Package Registries in relevant REST API docs. --- .../rest_api/package_registries/packages.md | 32 +++++++++---------- pages/package_registries.md | 2 +- pages/package_registries/ecosystems.md | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/pages/apis/rest_api/package_registries/packages.md b/pages/apis/rest_api/package_registries/packages.md index 95d0666c2b..ad31ac936e 100644 --- a/pages/apis/rest_api/package_registries/packages.md +++ b/pages/apis/rest_api/package_registries/packages.md @@ -4,7 +4,7 @@ The packages API endpoint lets you create and manage packages in a registry. ## Publish a package -The following type of `curl` syntax for publishing to registries will work across [all package ecosystems supported by Buildkite Packages](/docs/packages/ecosystems), with the `file` form-field modified accordingly. +The following type of `curl` syntax for publishing to registries will work across [all package ecosystems supported by Buildkite Package Registries](/docs/package-registries/ecosystems), with the `file` form-field modified accordingly. ```bash curl -H "Authorization: Bearer $TOKEN" \ @@ -14,21 +14,21 @@ curl -H "Authorization: Bearer $TOKEN" \ However, this type of REST API call is just recommended for: -- [Alpine (apk)](/docs/packages/alpine#publish-a-package) packages -- [Debian/Ubuntu (deb)](/docs/packages/debian#publish-a-package) packages -- [Files (generic)](/docs/packages/files#publish-a-file) -- [Helm (Standard)](/docs/packages/helm#publish-a-chart) charts -- [Python (PyPI)](/docs/packages/python#publish-a-package) packages -- [Red Hat (RPM)](/docs/packages/red-hat#publish-a-package) packages -- [Terraform](/docs/packages/terraform#publish-a-module) modules - -For other supported package ecosystems, it is recommended that you use their native tools to publish to registries in your Buildkite Packages organization. These ecosystems' native tools are for: - -- [Container (Docker)](/docs/packages/container#publish-an-image) images -- [Helm (OCI)](/docs/packages/helm-oci#publish-a-chart) charts -- Java ([Maven](/docs/packages/maven#publish-a-package) or [Gradle leveraging the Maven Publish Plugin](/docs/packages/gradle#publish-a-package)) packages -- [JavaScript (npm)](/docs/packages/javascript#publish-a-package) packages -- [Ruby (RubyGems)](/docs/packages/ruby#publish-a-package) packages +- [Alpine (apk)](/docs/package-registries/alpine#publish-a-package) packages +- [Debian/Ubuntu (deb)](/docs/package-registries/debian#publish-a-package) packages +- [Files (generic)](/docs/package-registries/files#publish-a-file) +- [Helm (Standard)](/docs/package-registries/helm#publish-a-chart) charts +- [Python (PyPI)](/docs/package-registries/python#publish-a-package) packages +- [Red Hat (RPM)](/docs/package-registries/red-hat#publish-a-package) packages +- [Terraform](/docs/package-registries/terraform#publish-a-module) modules + +For other supported package ecosystems, it is recommended that you use their native tools to publish to registries in your Buildkite Package Registries organization. These ecosystems' native tools are for: + +- [Container (Docker)](/docs/package-registries/container#publish-an-image) images +- [Helm (OCI)](/docs/package-registries/helm-oci#publish-a-chart) charts +- Java ([Maven](/docs/package-registries/maven#publish-a-package) or [Gradle leveraging the Maven Publish Plugin](/docs/package-registries/gradle#publish-a-package)) packages +- [JavaScript (npm)](/docs/package-registries/javascript#publish-a-package) packages +- [Ruby (RubyGems)](/docs/package-registries/ruby#publish-a-package) packages The following type of response is returned by Buildkite upon a successful `curl` publishing event. diff --git a/pages/package_registries.md b/pages/package_registries.md index 06468188d2..86260ee89f 100644 --- a/pages/package_registries.md +++ b/pages/package_registries.md @@ -17,7 +17,7 @@ As well as storing a collection of packages, a registry also surfaces metadata o > 📘 > You can enable [Buildkite Package Registries](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/package-registries/security/permissions#enabling-buildkite-packages). -_Buildkite Packages Registries_ was previously called _Buildkite Packages_. +_Buildkite Package Registries_ was previously called _Buildkite Packages_. ## Get started diff --git a/pages/package_registries/ecosystems.md b/pages/package_registries/ecosystems.md index 0b33acc167..32d2df0f4d 100644 --- a/pages/package_registries/ecosystems.md +++ b/pages/package_registries/ecosystems.md @@ -4,6 +4,6 @@ toc: false # Package ecosystems overview -Buildkite Packages supports the following language and package ecosystems: +Buildkite Package Registries supports the following language and package ecosystems: <%= render_markdown partial: 'package_registries/supported_package_ecosystems' %> From 0f22084ffd1c6b4e1bad27fa49ef13f16f0081b3 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Fri, 4 Oct 2024 15:35:14 +1000 Subject: [PATCH 094/102] Fix typo. --- pages/package_registries/security/oidc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/package_registries/security/oidc.md b/pages/package_registries/security/oidc.md index acfdfc2fcd..1e429384d6 100644 --- a/pages/package_registries/security/oidc.md +++ b/pages/package_registries/security/oidc.md @@ -6,7 +6,7 @@ You can configure Buildkite registries with OIDC policies that allow access usin A Buildkite Agent's OIDC tokens assert claims about the slugs of the pipeline it is building and organization that contains this pipeline, the ID of the job that created the token, as well as other claims, such as the name of the branch used in the build, the SHA of the commit that triggered the build, and the agent ID. If the token's claims do not comply with the registry's OIDC policy, the OIDC token is rejected, and any actions attempted with that token will fail. If the claims do comply, however, the OIDC token will have read and write access to packages in the registry. -The [Buildkite Agent's `oidc` command](/docs/agent/v3/cli-oidc) allows you to request an OIDC token from Buildkite containing claims about the pipeline's current job. These tokens can then be used by a Buildkite registry gto determine (through its OIDC policy) if the organization, pipeline and any other metadata associated with the pipeline and its job are permitted to publish/upload packages to this registry. +The [Buildkite Agent's `oidc` command](/docs/agent/v3/cli-oidc) allows you to request an OIDC token from Buildkite containing claims about the pipeline's current job. These tokens can then be used by a Buildkite registry to determine (through its OIDC policy) if the organization, pipeline and any other metadata associated with the pipeline and its job are permitted to publish/upload packages to this registry. ## OIDC token requirements From 6c975cc53d1912d21bc0cc3ec3ad7c34427d98a4 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Tue, 8 Oct 2024 16:24:04 +1100 Subject: [PATCH 095/102] Add a couple more redirect handlers for old landing page refs to Test Analytics and Packages. --- config/routes.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/routes.rb b/config/routes.rb index d5e9d117af..1d38ec41cd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -63,6 +63,7 @@ get "/docs/integrations/sso/g-suite", to: redirect("/docs/integrations/sso/google-workspace") get "/docs/integrations/sso/cloud-identity", to: redirect("/docs/integrations/sso/g-cloud-identity") get "/docs/integrations/sso/g-cloud-identity", to: redirect("/docs/integrations/sso/google-workspace-saml") + get "/docs/packages", to: redirect("/docs/package-registries") get "/docs/packages/*page", to: redirect("/docs/package-registries/%{page}") get "/docs/packages/manage-repositories", to: redirect("/docs/package-registries/manage-registries") get "/docs/packages/nodejs", to: redirect("/docs/package-registries/javascript") @@ -84,6 +85,7 @@ get "/docs/quickstart/*page", to: redirect("/docs/tutorials/%{page}") get "/docs/rest-api", to: redirect("/docs/apis/rest-api") get "/docs/rest-api/*page", to: redirect("/docs/apis/rest-api/%{page}") + get "/docs/test-analytics", to: redirect("/docs/test-engine") get "/docs/test-analytics/*page", to: redirect("/docs/test-engine/%{page}") get "/docs/test-analytics/js-collectors", to: redirect("/docs/test-engine/javascript-collectors") get "/docs/tutorials/gitlab", to: redirect("/docs/integrations/gitlab") From a2aee7665978e81af05c617492015c5c53cfa333 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 9 Oct 2024 10:34:34 +1100 Subject: [PATCH 096/102] Last few review tweaks implemented. --- pages/package_registries.md | 4 ++-- pages/package_registries/security/permissions.md | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pages/package_registries.md b/pages/package_registries.md index 1a4c5b3fcf..b569a6eee2 100644 --- a/pages/package_registries.md +++ b/pages/package_registries.md @@ -4,7 +4,7 @@ template: "landing_page" # Buildkite Package Registries -Scale out asset management for faster builds and deployments across any ecosystem with _Buildkite Package Registries_. Secure your supply chain with co-located packages and avoid the bottlenecks of poorly managed and insecure dependencies. +Scale out asset management for faster builds and deployments across any ecosystem with _Buildkite Package Registries_. Secure your supply chain and avoid the bottlenecks of poorly managed and insecure dependencies. Package Registries allows you to: @@ -15,7 +15,7 @@ Package Registries allows you to: As well as storing a collection of packages, a registry also surfaces metadata or attributes associated with a package, such as the package's description, version, contents (files and directories), checksum details, distribution type, dependencies, and so on. > 📘 -> You can enable [Package Registries](https://buildkite.com/packages) through the [**Organization Settings** page](/docs/package-registries/security/permissions#enabling-buildkite-packages). +> For customers on legacy Buildkite plans, you can enable [Package Registries](https://buildkite.com/platform/package-registries) through the [**Organization Settings** page](/docs/package-registries/security/permissions#enabling-buildkite-packages). _Buildkite Packages Registries_ was previously called _Buildkite Packages_. diff --git a/pages/package_registries/security/permissions.md b/pages/package_registries/security/permissions.md index c005012e9a..f202f828e5 100644 --- a/pages/package_registries/security/permissions.md +++ b/pages/package_registries/security/permissions.md @@ -30,6 +30,8 @@ As an organization administrator, you can access the [**Organization Settings**

Enabling Buildkite Package Registries

+Customers on legacy Buildkite plans may need to enable Package Registries to enable this product. + To do this: 1. As a [Buildkite organization administrator](#manage-teams-and-permissions-organization-level-permissions), access the [**Organization Settings** page](https://buildkite.com/organizations/~/settings) by selecting **Settings** in the global navigation. From 7e6c9108c8d68a114dc1f7f335a53c7a1347ecb0 Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 9 Oct 2024 10:39:38 +1100 Subject: [PATCH 097/102] Additional wording tweak. --- pages/package_registries.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/package_registries.md b/pages/package_registries.md index b569a6eee2..15ea18007a 100644 --- a/pages/package_registries.md +++ b/pages/package_registries.md @@ -15,7 +15,7 @@ Package Registries allows you to: As well as storing a collection of packages, a registry also surfaces metadata or attributes associated with a package, such as the package's description, version, contents (files and directories), checksum details, distribution type, dependencies, and so on. > 📘 -> For customers on legacy Buildkite plans, you can enable [Package Registries](https://buildkite.com/platform/package-registries) through the [**Organization Settings** page](/docs/package-registries/security/permissions#enabling-buildkite-packages). +> Customers on legacy Buildkite plans can enable [Package Registries](https://buildkite.com/platform/package-registries) through the [**Organization Settings** page](/docs/package-registries/security/permissions#enabling-buildkite-packages). _Buildkite Packages Registries_ was previously called _Buildkite Packages_. From 2bff34f6c2f595fb05e06a1f5c09b6db7382c62d Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 9 Oct 2024 11:20:42 +1100 Subject: [PATCH 098/102] Fix typo. --- pages/test_engine/test_suites.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index 47691a96b9..c8dd096a1a 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -12,7 +12,7 @@ To delete a suite, or regenerate its API token, go to suite settings. ## Parallelized builds -In CI/CD, a build's tests can be made to run in parallel using features of your own CI/CD pipeline or workflow tool. Parallelized pipeline/workflow builds typical run and complete faster than builds which are not parallelized. +In CI/CD, a build's tests can be made to run in parallel using features of your own CI/CD pipeline or workflow tool. Parallelized pipeline/workflow builds typically run and complete faster than builds which are not parallelized. In Buildkite Pipelines, you can run tests in parallel when they are configured as [parallel jobs](https://buildkite.com/docs/tutorials/parallel-builds#parallel-jobs). From 637aa8bc19068ad93d3a0dfeb502575f55b3168e Mon Sep 17 00:00:00 2001 From: Giles Gas Date: Wed, 9 Oct 2024 12:01:35 +1100 Subject: [PATCH 099/102] Update data/content/test_splitting_env.yaml Co-authored-by: niceking --- data/content/test_splitting_env.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/content/test_splitting_env.yaml b/data/content/test_splitting_env.yaml index f1600561b2..8ef430a40b 100644 --- a/data/content/test_splitting_env.yaml +++ b/data/content/test_splitting_env.yaml @@ -30,7 +30,7 @@ mandatory: - For RSpec, the result is generated using the `--format json` and `--out` CLI options, while for Jest, it is generated using the `--json` and `--outputFile` options. We have included these options in the default test command for RSpec and Jest. If you need to customize your test command, make sure to append the CLI options to save the result to a file. - Please refer to the `BUILDKITE_TEST_ENGINE_TEST_CMD` environment variable for more details. note: - - The Test Engine Client will not delete the file after running the test, however it will be deleted by Buildkite Agent as part of build lifecycle. + - The Test Engine Client will not delete the file after running the test, however it will be deleted by Buildkite Agent as part of the build lifecycle. - name: BUILDKITE_TEST_ENGINE_RUNNER desc: - The test runner to use for running tests. Currently `rspec` and `jest` are supported. From 599036f52e417feb7863dbc295d6cbb985b976c8 Mon Sep 17 00:00:00 2001 From: Giles Gas Date: Wed, 9 Oct 2024 12:03:48 +1100 Subject: [PATCH 100/102] Update pages/test_engine/test_splitting.md Co-authored-by: niceking --- pages/test_engine/test_splitting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/test_engine/test_splitting.md b/pages/test_engine/test_splitting.md index c3076d50ad..7a978243fe 100644 --- a/pages/test_engine/test_splitting.md +++ b/pages/test_engine/test_splitting.md @@ -9,7 +9,7 @@ Test splitting is a feature that: - Allows you to substantially reduce the duration of your overall build times, especially for pipelines with highly complex and computationally intensive test suites. - Intelligently partitions your test suites to run in parallel across multiple agents, with the intent to even out test execution times across your agents, such that each agent will complete its partitioned test executions at approximately similar times. -The following image from Test Engine's test splitting setup page illustrates how this feature works. In this example, _without_ test splitting, the test suite build time would take as long as it takes for the slowest combination of tests and agent (known as a partition) to run, which is 10 minutes. Since the sum of all test executions across all agents is 16 minutes, _with_ test splitting implemented, all four partitions would take approximately 4 minutes to run, such that the overall test suite build time would be approximately 4 minutes, or a 6-minute reduction. +The following image from Test Engine's test splitting setup page illustrates how this feature works. In this example, _without_ test splitting, the test suite build time would take as long as it takes for the slowest combination of tests to run on a single partition (Buildkite job), which is 10 minutes. Since the sum of all test executions across all agents is 16 minutes, _with_ test splitting implemented, all four partitions would take approximately 4 minutes to run, such that the overall test suite build time would be approximately 4 minutes, or a 6-minute reduction. <%= image "setup-page-summary.png", alt: "The test splitting setup page in Test Engine" %> From 671738471eefb9262a496673417c55a40e7090d3 Mon Sep 17 00:00:00 2001 From: Giles Gas Date: Wed, 9 Oct 2024 16:16:13 +1100 Subject: [PATCH 101/102] Update pages/test_engine/test_splitting/configuring.md Co-authored-by: niceking --- pages/test_engine/test_splitting/configuring.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 577450fc85..dcd7b924e8 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -1,6 +1,6 @@ # Configuring test splitting -Buildkite maintains its open source Test Engine Client ([bktec](https://github.com/buildkite/test-engine-client)) tool. This tool uses your Test Engine test suite data to intelligently partition tests throughout your test suite into multiple sets, such that each set of tests runs in parallel across your agents. This process is known as _orchestration_ and results in a _test plan_, where a test plan defines which tests are run on which agents. Currently, the Test Engine Client tool only supports RSpec and Jest. +Buildkite maintains its open source Test Engine Client ([bktec](https://github.com/buildkite/test-engine-client)) tool. This tool uses your Test Engine test suite data to intelligently partition tests throughout your test suite into multiple sets, such that each set of tests runs in parallel across your agents. This results in a _test plan_, where a test plan defines which tests are run on which agents. Currently, the Test Engine Client tool only supports RSpec and Jest. ## Dependencies From be3dfb2b4077c6f0badc1e232a789237752e4bcb Mon Sep 17 00:00:00 2001 From: Giles Gaskell Date: Wed, 9 Oct 2024 16:46:30 +1100 Subject: [PATCH 102/102] Pre-launch review feedback implemented for Test Engine updates. --- data/content/test_splitting_env.yaml | 2 +- pages/test_engine/test_splitting/client_installation.md | 4 ++++ pages/test_engine/test_splitting/configuring.md | 2 +- pages/test_engine/test_suites.md | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/data/content/test_splitting_env.yaml b/data/content/test_splitting_env.yaml index 8ef430a40b..368c3acecf 100644 --- a/data/content/test_splitting_env.yaml +++ b/data/content/test_splitting_env.yaml @@ -23,7 +23,7 @@ predefined: mandatory: - name: BUILDKITE_TEST_ENGINE_API_ACCESS_TOKEN desc: - - Buildkite API access token with `read_suites`, `read_test_plan`, and `write_test_plan` scopes. You can create an [API access token](https://buildkite.com/user/api-access-tokens) from **Personal Settings** > **API Access Tokens** in the Buildkite interface. + - Buildkite API access token with `read_suites`, `read_test_plan`, and `write_test_plan` scopes. You can create an [API access token](https://buildkite.com/user/api-access-tokens) from **Personal Settings** > **API Access Tokens** in the Buildkite interface. To avoid this token being tied to any one employee or person, ideally, this token should be created for a bot user account within your Buildkite organization. - name: BUILDKITE_TEST_ENGINE_RESULT_PATH desc: - The path to store the test result. The Test Engine Client uses this environment variable to tell the runner where to store the test result. The Test Engine Client reads the test result after each test run for retries and verification. diff --git a/pages/test_engine/test_splitting/client_installation.md b/pages/test_engine/test_splitting/client_installation.md index ab6f0701f3..f929ce64d7 100644 --- a/pages/test_engine/test_splitting/client_installation.md +++ b/pages/test_engine/test_splitting/client_installation.md @@ -1,5 +1,9 @@ # Installing the Test Engine Client +This page provides instructions on how to install the Test Engine Client via installers provided by Buildkite. + +If you need to install this tool on a system without an installer listed below, you'll need to perform a manual installation using one of the binaries from [Test Engine Client's releases page](https://github.com/buildkite/test-engine-client/releases/latest). Once you have the binary, make it executable in your pipeline. + ## Debian 1. Ensure you have curl and gpg installed first: diff --git a/pages/test_engine/test_splitting/configuring.md b/pages/test_engine/test_splitting/configuring.md index 577450fc85..861d98e1b6 100644 --- a/pages/test_engine/test_splitting/configuring.md +++ b/pages/test_engine/test_splitting/configuring.md @@ -15,7 +15,7 @@ The Test Engine Client is supported on both Linux and macOS with 64-bit ARM and - [macOS](/docs/test-engine/test-splitting/client-installation#macos) - [Docker](/docs/test-engine/test-splitting/client-installation#docker) -If you need to install the client on a system not listed above you'll need to perform a manual installation using one of the binaries from [Test Engine Client's releases page](https://github.com/buildkite/test-engine-client/releases/latest). Once you have the binary, make it executable in your pipeline. +If you need to install this tool on a system without an installer listed above, you'll need to perform a manual installation using one of the binaries from [Test Engine Client's releases page](https://github.com/buildkite/test-engine-client/releases/latest). Once you have the binary, make it executable in your pipeline. ## Using the Test Engine Client diff --git a/pages/test_engine/test_suites.md b/pages/test_engine/test_suites.md index c8dd096a1a..aef1e61a2d 100644 --- a/pages/test_engine/test_suites.md +++ b/pages/test_engine/test_suites.md @@ -1,6 +1,6 @@ # Configuring test suites -In Test Engine, a _test suite_ (or _suite_) is a collection of tests. A suite has a _run_, which is the execution of tests in a suite. A suite's run is analogous to a pipeline's build. +In Test Engine, a _test suite_ (or _suite_) is a collection of tests. A suite has a _run_, which is the execution of tests in a suite. A pipeline's build may create one or more of these runs. Many organizations set up one suite per test framework, for example one suite for RSpec, and another suite for Jest. Others use a common standard, such as JUnit XML, to combine tests from multiple frameworks to set up custom backend and frontend suites.