From bcd89a0d2ea985e50200478acd46c28a1ecb32ea Mon Sep 17 00:00:00 2001 From: Evan Read Date: Fri, 26 Oct 2018 15:01:42 +1000 Subject: [PATCH] Implement review feedback Also: - Replace DevOps image with one with all stages. - Further restructure page. - Edit and tabulate lower part of page. --- doc/README.md | 322 ++++++++++++++++++----------------- doc/img/devops-stages.png | Bin 0 -> 35549 bytes doc/img/devops_lifecycle.png | Bin 18611 -> 0 bytes 3 files changed, 168 insertions(+), 154 deletions(-) create mode 100644 doc/img/devops-stages.png delete mode 100644 doc/img/devops_lifecycle.png diff --git a/doc/README.md b/doc/README.md index 7854f6feef6..ba23c18272c 100644 --- a/doc/README.md +++ b/doc/README.md @@ -18,36 +18,36 @@ No matter how you use GitLab, we have documentation for you. - User documentation + User documentation
Discover features and concepts for GitLab users. - Administrator documentation + Administrator documentation
Everything GitLab administrators need to know. - Contributing to GitLab + Contributing to GitLab
At GitLab, everyone can contribute! - New to Git and GitLab? + New to Git and GitLab?
We have resources to get you started. - Building an integration with GitLab? + Building an integration with GitLab?
Consult our our automation and integration documentation. - Coming to GitLab from another platform? + Coming to GitLab from another platform?
Consult our handy guides. @@ -55,9 +55,6 @@ No matter how you use GitLab, we have documentation for you. -TIP: **Tip:** -You can also find documentation topics arranged by [DevOps Lifecycle stage](#complete-devops-with-gitlab). - ## Popular Documentation Have a look at some of our most popular documentation resources: @@ -80,7 +77,7 @@ making the software lifecycle faster and radically improving the speed of busine GitLab provides solutions for [all the stages of the DevOps lifecycle](https://about.gitlab.com/stages-devops-lifecycle/): -DevOps Lifecycle +DevOps Stages The following sections provide links to documentation for each DevOps stage: @@ -139,7 +136,7 @@ The following documentation relates to the DevOps **Plan** stage: | [Milestones](user/project/milestones/index.md) | Set milestones for delivery of issues and merge requests, with optional due date. | | [Project Issue Board](user/project/issue_board.md) | Display issues on a Scrum or Kanban board. | | [Time Tracking](workflow/time_tracking.md) | Track time spent on issues and merge requests. | -| [Todos](workflow/todos.md) | Keep track of work requiring attention with a chronological list displayed on a simple dashboard. | +| [Todos](workflow/todos.md) | Keep track of work requiring attention with a chronological list displayed on a simple dashboard. |
@@ -149,7 +146,7 @@ The following documentation relates to the DevOps **Plan** stage: ### Create -Consolidate source code into a single [DVCS](https://en.wikipedia.org/wiki/Distributed_version_control) +Consolidate source code into a single [distributed version control system](https://en.wikipedia.org/wiki/Distributed_version_control) that’s easily managed and controlled without disrupting your workflow. GitLab’s Git repositories come complete with branching tools and access @@ -158,20 +155,18 @@ on projects and code. The following documentation relates to the DevOps **Create** stage: -| Projects and Groups Topics | Description | -|:---------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------| -| [Create a project](gitlab-basics/create-project.md) | Create a project. | -| [Fork a project](gitlab-basics/fork-project.md) | Duplicate a project. | -| [GitLab Pages](user/project/pages/index.md) | Build, test, and deploy your static website with GitLab Pages. | -| [Groups](user/group/index.md) and [Subgroups](user/group/subgroups/index.md) | Organize your projects in groups. | -| [Importing and exporting projects between instances](user/project/settings/import_export.md) | Move projects. | -| [Project access](public_access/public_access.md) | Set up your project's visibility to public, internal, or private. | -| [Project settings](user/project/settings/index.md) | Project configuration. | -| [Projects](user/project/index.md) | Host source code and bring many parts of GitLab together. | -| [Search through GitLab](user/search/index.md) | Search for issues, merge requests, projects, groups, todos, and issues in Issue Boards. | -| [Snippets](user/snippets.md) | Snippets allow you to create little bits of code. | -| [Web IDE](user/project/web_ide/index.md) | Edit files within GitLab's user interface. | -| [Wikis](user/project/wiki/index.md) | Enhance your repository documentation with built-in wikis. | +#### Projects and Groups + +| Create Topics - Projects and Groups | Description | +|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------| +| [Create](gitlab-basics/create-project.md) and [fork](gitlab-basics/fork-project.md) projects, and [import and export projects between instances](user/project/settings/import_export.md) | Create, duplicate, and move projects. | +| [GitLab Pages](user/project/pages/index.md) | Build, test, and deploy your static website with GitLab Pages. | +| [Groups](user/group/index.md) and [Subgroups](user/group/subgroups/index.md) | Organize your projects in groups. | +| [Projects](user/project/index.md), including [project access](public_access/public_access.md) and [settings](user/project/settings/index.md) | Host source code, and control your project's visibility and set configuration. | +| [Search through GitLab](user/search/index.md) | Search for issues, merge requests, projects, groups, and todos. | +| [Snippets](user/snippets.md) | Snippets allow you to create little bits of code. | +| [Web IDE](user/project/web_ide/index.md) | Edit files within GitLab's user interface. | +| [Wikis](user/project/wiki/index.md) | Enhance your repository documentation with built-in wikis. |
@@ -181,19 +176,20 @@ The following documentation relates to the DevOps **Create** stage: --- -| Repositories Topics | Description | -|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------| -| [Branches](user/project/repository/branches/index.md) and the [default branch](user/project/repository/branches/index.md#default-branch) | How to use branches in GitLab. | -| [Commits](user/project/repository/index.md#commits) and [signing commits](user/project/repository/gpg_signed_commits/index.md) | Work with commits, and use GPG to sign your commits. | -| [Create a branch](user/project/repository/web_editor.md#create-a-new-branch) | Create branches within GitLab's user interface. | -| [Create a file](user/project/repository/web_editor.md#create-a-file), [upload a file](user/project/repository/web_editor.md#upload-a-file), and [create a directory](user/project/repository/web_editor.md#create-a-directory) | Create and upload files, and create directories within GitLab. | -| [Delete merged branches](user/project/repository/branches/index.md#delete-merged-branches) | Bulk delete branches after their changes are merged. | -| [File templates](user/project/repository/web_editor.md#template-dropdowns) | File templates for common files. | -| [Files](user/project/repository/index.md#files) | Files management. | -| [Jupyter Notebook files](user/project/repository/index.md#jupyter-notebook-files) | GitLab's support for `.ipynb` files. | -| [Protected branches](user/project/protected_branches.md) | Use protected branches. | -| [Repositories](user/project/repository/index.md) | Manage source code repositories in GitLab's user interface. | -| [Start a merge request](user/project/repository/web_editor.md#tips) | Start merge request when commiting via GitLab's user interface. | +#### Repositories + +| Create Topics - Repositories | Description | +|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------| +| [Branches](user/project/repository/branches/index.md) and the [default branch](user/project/repository/branches/index.md#default-branch) | How to use branches in GitLab. | +| [Commits](user/project/repository/index.md#commits) and [signing commits](user/project/repository/gpg_signed_commits/index.md) | Work with commits, and use GPG to sign your commits. | +| [Create branches](user/project/repository/web_editor.md#create-a-new-branch), [create](user/project/repository/web_editor.md#create-a-file) and [upload](user/project/repository/web_editor.md#upload-a-file) files, and [create directories](user/project/repository/web_editor.md#create-a-directory) | Create branches, create and upload files, and create directories within GitLab. | +| [Delete merged branches](user/project/repository/branches/index.md#delete-merged-branches) | Bulk delete branches after their changes are merged. | +| [File templates](user/project/repository/web_editor.md#template-dropdowns) | File templates for common files. | +| [Files](user/project/repository/index.md#files) | Files management. | +| [Jupyter Notebook files](user/project/repository/index.md#jupyter-notebook-files) | GitLab's support for `.ipynb` files. | +| [Protected branches](user/project/protected_branches.md) | Use protected branches. | +| [Repositories](user/project/repository/index.md) | Manage source code repositories in GitLab's user interface. | +| [Start a merge request](user/project/repository/web_editor.md#tips) | Start merge request when committing via GitLab's user interface. |
@@ -203,13 +199,15 @@ The following documentation relates to the DevOps **Create** stage: --- -| Merge Requests Topics | Description | -|:------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------| -| [Checking out merge requests locally](user/project/merge_requests/index.md#checkout-merge-requests-locally) | Tips for working with merge requests locally. | -| [Cherry-picking](user/project/merge_requests/cherry_pick_changes.md) | Use GitLab for cherry-picking changes. | -| [Merge request discussion resolution](user/discussions/index.md#moving-a-single-discussion-to-a-new-issue) | Resolve discussions, move discussions in a merge request to an issue, only allow merge requests to be merged if all discussions are resolved. | -| [Merge requests](user/project/merge_requests/index.md) | Merge request management. | -| [Work In Progress "WIP" merge requests](user/project/merge_requests/work_in_progress_merge_requests.md) | Prevent merges of work-in-progress merge requests. | +#### Merge Requests + +| Create Topics - Merge Requests | Description | +|:------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------| +| [Checking out merge requests locally](user/project/merge_requests/index.md#checkout-merge-requests-locally) | Tips for working with merge requests locally. | +| [Cherry-picking](user/project/merge_requests/cherry_pick_changes.md) | Use GitLab for cherry-picking changes. | +| [Merge request discussion resolution](user/discussions/index.md#moving-a-single-discussion-to-a-new-issue) | Resolve discussions, move discussions in a merge request to an issue, and only allow merge requests to be merged if all discussions are resolved. | +| [Merge requests](user/project/merge_requests/index.md) | Merge request management. | +| [Work In Progress "WIP" merge requests](user/project/merge_requests/work_in_progress_merge_requests.md) | Prevent merges of work-in-progress merge requests. |
@@ -219,9 +217,13 @@ The following documentation relates to the DevOps **Create** stage: --- -| Integrations Topics | Description | +#### Integration and Automation + +| Create Topics - Integration and Automation | Description | |:------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------| +| [GitLan API](api/README.md) | Integrate GitLab via a simple and powerful API. | | [GitLab Integration](integration/README.md) | Integrate with multiple third-party services with GitLab to allow external issue trackers and external authentication. | +| [GitLab Webhooks](user/project/integrations/webhooks.md) | Let GitLab notify you when new code has been pushed to your project. | | [Project Services](user/project/integrations/project_services.md) | Integrate a project with external services, such as CI and chat. | | [Trello Power-Up](integration/trello_power_up.md) | Integrate with GitLab's Trello Power-Up. | @@ -231,23 +233,10 @@ The following documentation relates to the DevOps **Create** stage:
---- - -| Automation Topics | Description | -|:---------------------------------------------------------|:---------------------------------------------------------------------| -| [API](api/README.md) | Automate GitLab via a simple and powerful API. | -| [GitLab Webhooks](user/project/integrations/webhooks.md) | Let GitLab notify you when new code has been pushed to your project. | - -
- - Back to Overview - -
- ### Verify Spot errors sooner, improve security and shorten feedback cycles with built-in -static code analysis, code testing, code quality, dependency checking and Review +static code analysis, code testing, code quality, dependency checking, and Review Apps. Customize your approval workflow controls, automatically test the quality of your code, and spin up a staging environment for every code change. @@ -256,12 +245,12 @@ scales to run your tests faster. The following documentation relates to the DevOps **Verify** stage: -| Verify Topics | Description | -|:---------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------| -| [GitLab CI/CD](ci/README.md) | Explore the features and capabilities of Continuous Integration, Continuous Delivery, and Continuous Deployment with GitLab. | -| [JUnit test reports](ci/junit_test_reports.md) | Display JUnit test reports on merge requests. | -| [Pipeline Graphs](ci/pipelines.md#pipeline-graphs) | Visualize builds. | -| [Review Apps](ci/review_apps/index.md) | Preview changes to your app right from a merge request. | +| Verify Topics | Description | +|:---------------------------------------------------|:-----------------------------------------------------------------------------| +| [GitLab CI/CD](ci/README.md) | Explore the features and capabilities of Continuous Integration with GitLab. | +| [JUnit test reports](ci/junit_test_reports.md) | Display JUnit test reports on merge requests. | +| [Pipeline Graphs](ci/pipelines.md#pipeline-graphs) | Visualize builds. | +| [Review Apps](ci/review_apps/index.md) | Preview changes to your application right from a merge request. |
@@ -297,8 +286,9 @@ The following documentation relates to the DevOps **Release** stage: | Release Topics | Description | |:------------------------------------------------------------|:---------------------------------------------------------------------------------------------| -| [Auto Deploy](topics/autodevops/index.md#auto-deploy) | Configure GitLab CI for the deployment of your application. | +| [Auto Deploy](topics/autodevops/index.md#auto-deploy) | Configure GitLab for the deployment of your application. | | [Environments and deployments](ci/environments.md) | With environments, you can control the continuous deployment of your software within GitLab. | +| [GitLab CI/CD](ci/README.md) | Explore the features and capabilities of Continuous Deployment and Delivery with GitLab. | | [GitLab Pages](user/project/pages/index.md) | Build, test, and deploy a static site directly from GitLab. | | [Protected Runners](ci/runners/README.md#protected-runners) | Select Runners to only pick jobs for protected branches and tags. | | [Scheduled Pipelines](user/project/pipelines/schedules.md) | Execute pipelines on a schedule. | @@ -323,9 +313,9 @@ The following documentation relates to the DevOps **Configure** stage: | [Easy creation of Kubernetes clusters on GKE](user/project/clusters/index.md#adding-and-creating-a-new-gke-cluster-via-gitlab) | Use Google Kubernetes Engine and GitLab. | | [Executable Runbooks](user/project/clusters/runbooks/index.md) | Documented procedures that explain how to carry out particular processes. | | [Installing Applications](user/project/clusters/index.md#installing-applications) | Deploy Helm, Ingress, and Prometheus on Kubernetes. | -| [Mattermost slash commands](user/project/integrations/mattermost_slash_commands.md) | | +| [Mattermost slash commands](user/project/integrations/mattermost_slash_commands.md) | Enable and use slash commands from within Mattermost. | | [Protected variables](ci/variables/README.md#protected-variables) | Restrict variables to protected branches and tags. | -| [Slack slash commands](user/project/integrations/slack_slash_commands.md) | | +| [Slack slash commands](user/project/integrations/slack_slash_commands.md) | Enable and use slash commands from within Slack. |
@@ -335,10 +325,9 @@ The following documentation relates to the DevOps **Configure** stage: ### Monitor -Measure how long it takes to go from planning to monitoring and ensure your -applications are always responsive and available. +Ensure your applications are always responsive and available. -GitLab collects and displays performance metrics for deployed apps using Prometheus so you can know in an +GitLab collects and displays performance metrics for deployed applications so you can know in an instant how code changes impact your production environment. The following documentation relates to the DevOps **Monitor** stage: @@ -359,24 +348,97 @@ The following documentation relates to the DevOps **Monitor** stage: ### Secure +GitLab can help you secure your applications from within your development lifecycle. + The following documentation relates to the DevOps **Secure** stage: | Monitor Topics | Description | |:--------------------------------------------------------|:-----------------------------------------------------------| | [Container Scanning](ci/examples/container_scanning.md) | Use Clair to scan docker images for known vulnerabilities. | +## Subscribe to GitLab + +There are two ways to use GitLab: + +- [GitLab self-managed](#gitlab-self-managed): Install, administer, and maintain your own GitLab instance. +- [GitLab.com](#gitlab-com): GitLab's SaaS offering. You don't need to install anything to use GitLab.com, + you only need to [sign up](https://gitlab.com/users/sign_in) and start using GitLab straight away. + +The following sections outline tiers and features within GitLab self-managed and GitLab.com. + + + +### GitLab self-managed + +With GitLab self-managed, you deploy your own GitLab instance on-premises or on a private cloud of your choice. +GitLab self-managed is available for [free and with paid subscriptions](https://about.gitlab.com/pricing/#self-managed) in the following tiers: + +| Tier | Includes | +|:---------|:-----------------------------------------------| +| Core | Core features. | +| Starter | Core and Starter features. | +| Premium | Core, Starter, and Premium features. | +| Ultimate | Core, Starter, Premium, and Ultimate features. | + +To learn more about GitLab: + +- Features at each tier, see our [Feature Comparison](https://about.gitlab.com/pricing/self-managed/feature-comparison/) for self-managed. +- Subscriptions and licensing, please refer to the [GitLab Product Marketing Handbook](https://about.gitlab.com/handbook/marketing/product-marketing/#tiers). + + + +### GitLab.com + +GitLab.com is hosted, managed, and administered by GitLab, Inc., with +[free and paid subscriptions](https://about.gitlab.com/pricing/) for individuals +and teams in the following tiers: + +| Tier | Includes same features available in | +|:-------|:----------------------------------------------------| +| Free | [Core](#gitlab-self-managed) self-managed tier. | +| Bronze | [Starter](#gitlab-self-managed) self-managed tier. | +| Silver | [Premium](#gitlab-self-managed) self-managed tier. | +| Gold | [Ultimate](#gitlab-self-managed) self-managed tier. | + +GitLab.com subscriptions grant access +to the same features available in GitLab self-managed, **except +[administration](administration/index.md) tools and settings**: + +TIP: **Tip:** +To support the open source community and encourage the development of open source projects, GitLab grants access to **Gold** features for all GitLab.com **public** projects, regardless of the subscription. + +To learn more about GitLab: + +- Features at each tier, see our [Feature Comparison](https://about.gitlab.com/pricing/gitlab-com/feature-comparison/) for GitLab.com. +- Subscriptions and licensing, please refer to the [GitLab Product Marketing Handbook](https://about.gitlab.com/handbook/marketing/product-marketing/#tiers). + + + ## New to Git and GitLab? Working with new systems can be daunting. We have the following documentation to rapidly uplift your GitLab knowledge: -- [GitLab Basics](gitlab-basics/README.md): Start working on your command line and on GitLab. -- [GitLab Workflow](workflow/README.md): Enhance your workflow with the best of GitLab Workflow. - - See also [GitLab Workflow - an overview](https://about.gitlab.com/2016/10/25/gitlab-workflow-an-overview/). -- [GitLab CI/CD quick start guide](ci/quick_start/README.md). -- [Auto DevOps](topics/autodevops/index.md). -- [GitLab Markdown](user/markdown.md): GitLab's advanced formatting system (GitLab Flavored Markdown). +| Topic | Description | +|:-----------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------| +| [GitLab Basics](gitlab-basics/README.md) | Start working on the command line and with GitLab. | +| [GitLab Workflow](workflow/README.md) and [overview](https://about.gitlab.com/2016/10/25/gitlab-workflow-an-overview/) | Enhance your workflow with the best of GitLab Workflow. | +| [Get started with GitLab CI/CD](ci/quick_start/README.md) | Quickly implement GitLab CI/CD. | +| [Auto DevOps](topics/autodevops/index.md) | Learn more about GitLab's Auto DevOps. | +| [GitLab Markdown](user/markdown.md) | GitLab's advanced formatting system (GitLab Flavored Markdown) |
@@ -388,11 +450,12 @@ We have the following documentation to rapidly uplift your GitLab knowledge: Learn more about GitLab account management: -- [User account](user/profile/index.md): Manage your account - - [Authentication](topics/authentication/index.md): Account security with two-factor authentication, set up your ssh keys and deploy - keys for secure access to your projects. - - [Profile settings](user/profile/index.md#profile-settings): Manage your profile settings, two factor authentication and more. -- [User permissions](user/permissions.md): Learn what each role in a project (external/guest/reporter/developer/maintainer/owner) can do. +| Topic | Description | +|:-----------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------| +| [User account](user/profile/index.md) | Manage your account. | +| [Authentication](topics/authentication/index.md) | Account security with two-factor authentication, set up your ssh keys, and deploy keys for secure access to your projects. | +| [Profile settings](user/profile/index.md#profile-settings) | Manage your profile settings, two factor authentication, and more. | +| [User permissions](user/permissions.md) | Learn what each role in a project can do. |
@@ -404,66 +467,11 @@ Learn more about GitLab account management: Learn more about using Git, and using Git with GitLab: -- [Git](topics/git/index.md): Getting started with Git, branching strategies, Git LFS, advanced use. -- [Git cheatsheet](https://about.gitlab.com/images/press/git-cheat-sheet.pdf): Download a PDF describing the most used Git operations. -- [GitLab Flow](workflow/gitlab_flow.md): explore the best of Git with the GitLab Flow strategy. - - - -### GitLab subscriptions - -You have two options to use GitLab: - -- [GitLab self-managed](#gitlab-self-managed): Install, administer, and maintain your own GitLab instance. -- [GitLab.com](#gitlab-com): GitLab's SaaS offering. You don't need to install anything to use GitLab.com, - you only need to [sign up](https://gitlab.com/users/sign_in) and start using GitLab straight away. - - - -### GitLab self-managed - -With GitLab self-managed, you deploy your own GitLab instance on-premises or on a private cloud of your choice. -GitLab self-managed is available for [free and with paid subscriptions](https://about.gitlab.com/pricing/): Core, Starter, Premium, and Ultimate. - -Every feature available in Core is also available in Starter, Premium, and Ultimate. -Starter features are also available in Premium and Ultimate, and Premium features are also -available in Ultimate. - - - -### GitLab.com - -GitLab.com is hosted, managed, and administered by GitLab, Inc., with -[free and paid subscriptions](https://about.gitlab.com/gitlab-com/) for individuals -and teams: Free, Bronze, Silver, and Gold. - -GitLab.com subscriptions grants access -to the same features available in GitLab self-managed, **except -[administration](administration/index.md) tools and settings**: - -- GitLab.com Free includes the same features available in Core. -- GitLab.com Bronze includes the same features available in GitLab Starter. -- GitLab.com Silver includes the same features available in GitLab Premium. -- GitLab.com Gold includes the same features available in GitLab Ultimate. - -For supporting the open source community and encouraging the development of -open source projects, GitLab grants access to **Gold** features -for all GitLab.com **public** projects, regardless of the subscription. - -To know more about GitLab subscriptions and licensing, please refer to the -[GitLab Product Marketing Handbook](https://about.gitlab.com/handbook/marketing/product-marketing/#tiers). +| Topic | Description | +|:----------------------------------------------------------------------------|:---------------------------------------------------------------------------| +| [Git](topics/git/index.md) | Getting started with Git, branching strategies, Git LFS, and advanced use. | +| [Git cheatsheet](https://about.gitlab.com/images/press/git-cheat-sheet.pdf) | Download a PDF describing the most used Git operations. | +| [GitLab Flow](workflow/gitlab_flow.md) | Explore the best of Git with the GitLab Flow strategy. |
@@ -475,9 +483,10 @@ To know more about GitLab subscriptions and licensing, please refer to the If you are coming to GitLab from another platform, you'll find the following information useful: -- [Importing to GitLab](user/project/import/index.md): Import your projects from GitHub, - Bitbucket, GitLab.com, FogBugz and SVN into GitLab. -- [Migrating from SVN](workflow/importing/migrating_from_svn.md): Convert a SVN repository to Git and GitLab. +| Topic | Description | +|:---------------------------------------------------------------|:---------------------------------------------------------------------------------------| +| [Importing to GitLab](user/project/import/index.md) | Import your projects from GitHub, Bitbucket, GitLab.com, FogBugz, and SVN into GitLab. | +| [Migrating from SVN](workflow/importing/migrating_from_svn.md) | Convert a SVN repository to Git and GitLab. |
@@ -487,10 +496,12 @@ If you are coming to GitLab from another platform, you'll find the following inf ## Building an integration with GitLab -There are many ways to integration with GitLab, including: +There are many ways to integrate with GitLab, including: -- Our [API](api/README.md). -- Other [integrations](#integrations) and [automation](#automation). +| Topic | Description | +|:-----------------------------------------------------------|:------------------------------------------------| +| [GitLab API](api/README.md) | Integrate GitLab via a simple and powerful API. | +| [Integrations and automation](#integration-and-automation) | All GitLab integration and automation options. |
@@ -502,11 +513,14 @@ There are many ways to integration with GitLab, including: GitLab Community Edition is [open source](https://gitlab.com/gitlab-org/gitlab-ce/) and GitLab Enterprise Edition is [open-core](https://gitlab.com/gitlab-org/gitlab-ee/). -Learn how to contribute to GitLab: -- [Development](development/README.md): All styleguides and explanations how to contribute. -- [Legal](legal/README.md): Contributor license agreements. -- [Writing documentation](development/documentation/index.md): Contributing to GitLab Docs. +Learn how to contribute to GitLab with the following resources: + +| Topic | Description | +|:------------------------------------------------------------|:-----------------------------------------| +| [Development](development/README.md) | How to contribute to GitLab development. | +| [Legal](legal/README.md) | Contributor license agreements. | +| [Writing documentation](development/documentation/index.md) | How to contribute to GitLab Docs. |
diff --git a/doc/img/devops-stages.png b/doc/img/devops-stages.png new file mode 100644 index 0000000000000000000000000000000000000000..a971e81a419864c5895bc29fa79df05eb1c1b7cd GIT binary patch literal 35549 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�tmjgyF;UOy^;}u=H_Zj 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 UhjsvOFJxfwboFyt=akR{0D+>)Gynhq literal 0 HcmV?d00001 diff --git a/doc/img/devops_lifecycle.png b/doc/img/devops_lifecycle.png deleted file mode 100644 index 0b15e9619a5bde25bacc357b87ad4b7b0f62d381..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18611 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