From 3fb2733af017c40080773d9ee7be563cccd2ec25 Mon Sep 17 00:00:00 2001 From: noah Date: Mon, 31 Jan 2022 21:23:38 +0900 Subject: [PATCH 1/3] Enhance 'how it works' page --- docs/concepts/how-it-work.md | 53 +++++++++++++++++++++++++++-------- static/img/docs/statuses.png | Bin 0 -> 29998 bytes 2 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 static/img/docs/statuses.png diff --git a/docs/concepts/how-it-work.md b/docs/concepts/how-it-work.md index f963edd..9dcddda 100644 --- a/docs/concepts/how-it-work.md +++ b/docs/concepts/how-it-work.md @@ -4,18 +4,51 @@ sidebar_position: 1 # How it works -Gitploy builds the system around GitHub [deployment API](https://docs.github.com/en/rest/reference/deployments#deployments). **It's an event-driven decoupled way to deploy your code.** Internally, Gitploy creates a new Github deployment resource, and Github dispatches a deployment event that external services can listen for and act. It enables developers and organizations to build loosely coupled tooling. +Gitploy builds the system around GitHub [deployment API](https://docs.github.com/en/rest/reference/deployments#deployments). Deployment API is a request to deploy a specific ref (branch, SHA, tag), and GitHub dispatches an event to deployment toolings that are listening. **It's an event-driven decoupled way to deploy your code.** This article looks under the hood about how Gitploy interacts with deployment API. -This approach has several pros: -* Replace deployment tools easily without changing your deployment pipeline. -* Easy to implement details of deploying different types of applications (e.g., web, native). +## GitHub Deployment API + +The deployment API consists of these stages: + +1. A user selects a ref(branch, SHA, tag) to deploy. +2. Gitploy verifies the ref for deployment safety. +3. It requests GitHub to deploy a specific ref. + +Of course, Gitploy follows these stages to deploy a ref and enhances each stage to use it easily and safely. + +### Select a ref(branch, SHA, tag) + +A ref can be any named branch, tag, or SHA, and it is determined by how to deploy an application. If an application uses semantic versioning, the ref should be a tag(e.g., `v0.5.5`). + +Gitploy provides an intuitive UI similar to GitHub, enabling users to select a ref easily even though a user is a newcomer to the system. And it displays the details of a commit such as SHA, message, creator, and creation time. So it enables to let users know which commits are deployed. + +### Verification + +Before deploying a ref, it needs verification for deployment safety. The deployment API provides these verifications: + +* `auto_merge`: Ensure that the requested ref is not behind the repository's default branch. +* `required_contexts`: Ensure that commit statuses are in that success state. + +Gitploy provides the file (i.e., `deploy.yml`) to configure the parameters for each runtime environment, respectively. + +### Event Dispatch + +Gitploy requests to deploy a ref to GitHub, and it dispatches an event to deployment toolings. + +## Deployment Tooling + +### Update status + +After deployment, a deployment tooling must update the deployment status if it has succeeded or not by the [deployment status API](https://docs.github.com/en/rest/reference/deployments#deployment-statuses). It enables Gitploy to sync the deployment status and display the deployment status with a redirection link for the deployment details, such as logs. + +![Deployment statuses](../../static/img/docs/statuses.png) Below is a simple diagram for how these interactions would work: ``` +---------+ +--------+ +---------+ +-------------+ -| Gitploy | | GitHub | | Tools | | Your Server | +| Gitploy | | GitHub | | Tooling | | Your Server | +---------+ +--------+ +---------+ +-------------+ | | | | | Create Deployment | | | @@ -31,18 +64,16 @@ Below is a simple diagram for how these interactions would work: | | | | | | Deployment Status | | | |<----------------------| | - | Deployment Status | | | - |<---------------------| | | + | | | | + | | | | | | | | | | | Deploy Completed | | | |<--------------------| | | Deployment Status | | | |<----------------------| | - | Deployment Status | | | - |<---------------------| | | + | | | | + | | | | | | | | ``` -Gitploy lets you can build the advanced deployment system so your team and organization enable to deploy the application with lower risk and faster. - *Keep in mind that Gitploy is never actually accessing your servers. It's up to your tools to interact with deployment events.* diff --git a/static/img/docs/statuses.png b/static/img/docs/statuses.png new file mode 100644 index 0000000000000000000000000000000000000000..d9a90984ec76065d9af14d9680476895437cd488 GIT binary patch literal 29998 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 Date: Mon, 31 Jan 2022 21:32:06 +0900 Subject: [PATCH 2/3] Fix texts --- docs/concepts/how-it-work.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/concepts/how-it-work.md b/docs/concepts/how-it-work.md index 9dcddda..7e24694 100644 --- a/docs/concepts/how-it-work.md +++ b/docs/concepts/how-it-work.md @@ -4,7 +4,7 @@ sidebar_position: 1 # How it works -Gitploy builds the system around GitHub [deployment API](https://docs.github.com/en/rest/reference/deployments#deployments). Deployment API is a request to deploy a specific ref (branch, SHA, tag), and GitHub dispatches an event to deployment toolings that are listening. **It's an event-driven decoupled way to deploy your code.** This article looks under the hood about how Gitploy interacts with deployment API. +Gitploy builds the system around GitHub [deployment API](https://docs.github.com/en/rest/reference/deployments#deployments). Deployment API is a request to deploy a specific ref (branch, SHA, tag), and GitHub dispatches an event to deployment toolings that can listen for and act on when a request is posted. **It's an event-driven decoupled way to deploy your code.** This article looks under the hood Gitploy interacts with deployment API. ## GitHub Deployment API @@ -34,7 +34,7 @@ Gitploy provides the file (i.e., `deploy.yml`) to configure the parameters for e ### Event Dispatch -Gitploy requests to deploy a ref to GitHub, and it dispatches an event to deployment toolings. +Gitploy posts a request to GitHub, and it dispatches an event to deployment toolings. ## Deployment Tooling From 081724cb16c3f81fb9eba6d4085d0930edd5afe3 Mon Sep 17 00:00:00 2001 From: noah Date: Mon, 31 Jan 2022 21:39:03 +0900 Subject: [PATCH 3/3] Fix the typos for the index of docs --- docs/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.md b/docs/index.md index 85c7617..492de64 100644 --- a/docs/index.md +++ b/docs/index.md @@ -3,7 +3,7 @@ sidebar_position: 1 title: What is Gitploy? --- -Gitploy is a tooling that helps your organization build the deployment system in minutes. It enables your organization **to deploy in the same manner** without worrying about the details of different types of applications and **to deploy differently** for each application, respectively. And as a result, your organization can get a robust system to deploy fast and safely. 🚀 +Gitploy is a tooling that helps your organization build the deployment system in minutes. It enables your organization **to deploy in the same manner** without worrying about the implementation details of delivering different types of applications (e.g., web, native). and **to deploy differently** for each application by a simple configuration file, respectively. And as a result, your organization can get a robust system to deploy fast and safely. 🚀 ## Deploy in the same manner @@ -19,7 +19,7 @@ Gitploy provides an intuitive UI similar to GitHub. Users can select one of the ## Deploy differently -Each application needs a customizable pipeline. If an organization has essential applications to deploy carefully, it should enforce a gateway like a review or deploy freeze window. And an organization chooses continuous delivery or continuous deployment for application. +Each application needs a customizable pipeline. If an organization has essential applications to deploy carefully, it should enforce a gateway like a review or deploy freeze window. And also an organization chooses continuous delivery or continuous deployment for application. Gitploy provides a way **to configure a pipeline with a simple, easy‑to‑read file for each repository (each environment).** The default path is `deploy.yml` at the root directory, but you can replace the file path in the settings tab of Gitploy.