feat: add --depth to git-clone module to support shallow clones (#197)
## Description <!-- Briefly describe what this PR does and why --> Adds support for a `depth` variable to the git-clone module. If a repo is large, a shallow clone makes the `git clone` a lot faster ## Type of Change - [ ] New module - [ ] Bug fix - [x] Feature/enhancement - [ ] Documentation - [ ] Other ## Module Information <!-- Delete this section if not applicable --> **Path:** `registry/coder/modules/git-clone` **New version:** `v1.0.19` ? **Breaking change:** - [ ] Yes - [x] No ## Testing & Validation - [ ] Tests pass (`bun test`) - [ ] Code formatted (`bun run fmt`) - [ ] Changes tested locally - `bun test` - I don't know if this is expected ```shell ✗ git-clone > fails without git [298.14ms] ✗ git-clone > runs with git [289.14ms] ✗ git-clone > runs with github clone with switch to feat/branch [277.19ms] ✗ git-clone > runs with gitlab clone with switch to feat/branch [293.49ms] ✗ git-clone > runs with github clone with branch_name set to feat/branch [288.07ms] ``` ## Related Issues <!-- Link related issues or write "None" if not applicable --> None --------- Co-authored-by: EdwardAngert <17991901+EdwardAngert@users.noreply.github.com> Co-authored-by: DevelopmentCats <christofer@coder.com>
This commit is contained in:
parent
05b24daccb
commit
0a3c9b01b8
@ -15,7 +15,7 @@ This module allows you to automatically clone a repository by URL and skip if it
|
|||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/git-clone/coder"
|
source = "registry.coder.com/coder/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
url = "https://github.com/coder/coder"
|
url = "https://github.com/coder/coder"
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ module "git-clone" {
|
|||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/git-clone/coder"
|
source = "registry.coder.com/coder/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
url = "https://github.com/coder/coder"
|
url = "https://github.com/coder/coder"
|
||||||
base_dir = "~/projects/coder"
|
base_dir = "~/projects/coder"
|
||||||
@ -44,7 +44,7 @@ To use with [Git Authentication](https://coder.com/docs/v2/latest/admin/git-prov
|
|||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/git-clone/coder"
|
source = "registry.coder.com/coder/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
url = "https://github.com/coder/coder"
|
url = "https://github.com/coder/coder"
|
||||||
}
|
}
|
||||||
@ -70,7 +70,7 @@ data "coder_parameter" "git_repo" {
|
|||||||
module "git_clone" {
|
module "git_clone" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/git-clone/coder"
|
source = "registry.coder.com/coder/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
url = data.coder_parameter.git_repo.value
|
url = data.coder_parameter.git_repo.value
|
||||||
}
|
}
|
||||||
@ -104,7 +104,7 @@ Configuring `git-clone` for a self-hosted GitHub Enterprise Server running at `g
|
|||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/git-clone/coder"
|
source = "registry.coder.com/coder/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
url = "https://github.example.com/coder/coder/tree/feat/example"
|
url = "https://github.example.com/coder/coder/tree/feat/example"
|
||||||
git_providers = {
|
git_providers = {
|
||||||
@ -123,7 +123,7 @@ To GitLab clone with a specific branch like `feat/example`
|
|||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/git-clone/coder"
|
source = "registry.coder.com/coder/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
url = "https://gitlab.com/coder/coder/-/tree/feat/example"
|
url = "https://gitlab.com/coder/coder/-/tree/feat/example"
|
||||||
}
|
}
|
||||||
@ -135,7 +135,7 @@ Configuring `git-clone` for a self-hosted GitLab running at `gitlab.example.com`
|
|||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/git-clone/coder"
|
source = "registry.coder.com/coder/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
url = "https://gitlab.example.com/coder/coder/-/tree/feat/example"
|
url = "https://gitlab.example.com/coder/coder/-/tree/feat/example"
|
||||||
git_providers = {
|
git_providers = {
|
||||||
@ -156,7 +156,7 @@ For example, to clone the `feat/example` branch:
|
|||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/git-clone/coder"
|
source = "registry.coder.com/coder/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
url = "https://github.com/coder/coder"
|
url = "https://github.com/coder/coder"
|
||||||
branch_name = "feat/example"
|
branch_name = "feat/example"
|
||||||
@ -165,7 +165,8 @@ module "git-clone" {
|
|||||||
|
|
||||||
## Git clone with different destination folder
|
## Git clone with different destination folder
|
||||||
|
|
||||||
By default, the repository will be cloned into a folder matching the repository name. You can use the `folder_name` attribute to change the name of the destination folder to something else.
|
By default, the repository will be cloned into a folder matching the repository name.
|
||||||
|
You can use the `folder_name` attribute to change the name of the destination folder to something else.
|
||||||
|
|
||||||
For example, this will clone into the `~/projects/coder/coder-dev` folder:
|
For example, this will clone into the `~/projects/coder/coder-dev` folder:
|
||||||
|
|
||||||
@ -173,10 +174,28 @@ For example, this will clone into the `~/projects/coder/coder-dev` folder:
|
|||||||
module "git-clone" {
|
module "git-clone" {
|
||||||
count = data.coder_workspace.me.start_count
|
count = data.coder_workspace.me.start_count
|
||||||
source = "registry.coder.com/coder/git-clone/coder"
|
source = "registry.coder.com/coder/git-clone/coder"
|
||||||
version = "1.0.18"
|
version = "1.1.0"
|
||||||
agent_id = coder_agent.example.id
|
agent_id = coder_agent.example.id
|
||||||
url = "https://github.com/coder/coder"
|
url = "https://github.com/coder/coder"
|
||||||
folder_name = "coder-dev"
|
folder_name = "coder-dev"
|
||||||
base_dir = "~/projects/coder"
|
base_dir = "~/projects/coder"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Git shallow clone
|
||||||
|
|
||||||
|
Limit the clone history to speed-up workspace startup by setting `depth`.
|
||||||
|
|
||||||
|
When `depth` is greater than `0` the module runs `git clone --depth <depth>`.
|
||||||
|
If not defined, the default, `0`, performs a full clone.
|
||||||
|
|
||||||
|
```tf
|
||||||
|
module "git-clone" {
|
||||||
|
count = data.coder_workspace.me.start_count
|
||||||
|
source = "registry.coder.com/modules/git-clone/coder"
|
||||||
|
version = "1.1.0"
|
||||||
|
agent_id = coder_agent.example.id
|
||||||
|
url = "https://github.com/coder/coder"
|
||||||
|
depth = 1
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
@ -56,6 +56,12 @@ variable "folder_name" {
|
|||||||
default = ""
|
default = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "depth" {
|
||||||
|
description = "If > 0, perform a shallow clone using this depth."
|
||||||
|
type = number
|
||||||
|
default = 0
|
||||||
|
}
|
||||||
|
|
||||||
locals {
|
locals {
|
||||||
# Remove query parameters and fragments from the URL
|
# Remove query parameters and fragments from the URL
|
||||||
url = replace(replace(var.url, "/\\?.*/", ""), "/#.*/", "")
|
url = replace(replace(var.url, "/\\?.*/", ""), "/#.*/", "")
|
||||||
@ -113,6 +119,7 @@ resource "coder_script" "git_clone" {
|
|||||||
CLONE_PATH = local.clone_path,
|
CLONE_PATH = local.clone_path,
|
||||||
REPO_URL : local.clone_url,
|
REPO_URL : local.clone_url,
|
||||||
BRANCH_NAME : local.branch_name,
|
BRANCH_NAME : local.branch_name,
|
||||||
|
DEPTH = var.depth,
|
||||||
})
|
})
|
||||||
display_name = "Git Clone"
|
display_name = "Git Clone"
|
||||||
icon = "/icon/git.svg"
|
icon = "/icon/git.svg"
|
||||||
|
|||||||
@ -5,6 +5,7 @@ CLONE_PATH="${CLONE_PATH}"
|
|||||||
BRANCH_NAME="${BRANCH_NAME}"
|
BRANCH_NAME="${BRANCH_NAME}"
|
||||||
# Expand home if it's specified!
|
# Expand home if it's specified!
|
||||||
CLONE_PATH="$${CLONE_PATH/#\~/$${HOME}}"
|
CLONE_PATH="$${CLONE_PATH/#\~/$${HOME}}"
|
||||||
|
DEPTH="${DEPTH}"
|
||||||
|
|
||||||
# Check if the variable is empty...
|
# Check if the variable is empty...
|
||||||
if [ -z "$REPO_URL" ]; then
|
if [ -z "$REPO_URL" ]; then
|
||||||
@ -36,11 +37,19 @@ fi
|
|||||||
if [ -z "$(ls -A "$CLONE_PATH")" ]; then
|
if [ -z "$(ls -A "$CLONE_PATH")" ]; then
|
||||||
if [ -z "$BRANCH_NAME" ]; then
|
if [ -z "$BRANCH_NAME" ]; then
|
||||||
echo "Cloning $REPO_URL to $CLONE_PATH..."
|
echo "Cloning $REPO_URL to $CLONE_PATH..."
|
||||||
|
if [ "$DEPTH" -gt 0 ]; then
|
||||||
|
git clone --depth "$DEPTH" "$REPO_URL" "$CLONE_PATH"
|
||||||
|
else
|
||||||
git clone "$REPO_URL" "$CLONE_PATH"
|
git clone "$REPO_URL" "$CLONE_PATH"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "Cloning $REPO_URL to $CLONE_PATH on branch $BRANCH_NAME..."
|
echo "Cloning $REPO_URL to $CLONE_PATH on branch $BRANCH_NAME..."
|
||||||
|
if [ "$DEPTH" -gt 0 ]; then
|
||||||
|
git clone --depth "$DEPTH" -b "$BRANCH_NAME" "$REPO_URL" "$CLONE_PATH"
|
||||||
|
else
|
||||||
git clone "$REPO_URL" -b "$BRANCH_NAME" "$CLONE_PATH"
|
git clone "$REPO_URL" -b "$BRANCH_NAME" "$CLONE_PATH"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo "$CLONE_PATH already exists and isn't empty, skipping clone!"
|
echo "$CLONE_PATH already exists and isn't empty, skipping clone!"
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user