feat: add git clone module (#46)

* feat: add `git-clone` module

* Fix script expansion for personalize

* Update README
This commit is contained in:
Kyle Carberry
2023-09-25 19:27:53 -05:00
committed by GitHub
parent 842a2caaed
commit 84bad159a3
4 changed files with 116 additions and 0 deletions

38
git-clone/README.md Normal file
View File

@@ -0,0 +1,38 @@
---
display_name: Git Clone
description: Clone a Git repository by URL and skip if it exists.
icon: ../.icons/git.svg
maintainer_github: coder
verified: true
tags: [git, helper]
---
# Git Clone
This module allows you to automatically clone a repository by URL and skip if it exists in the path provided.
```hcl
module "git-clone" {
source = "https://registry.coder.com/modules/git-clone"
url = "https://github.com/coder/coder"
}
```
To use with [Git Authentication](https://coder.com/docs/v2/latest/admin/git-providers), add the provider by ID to your template:
```hcl
data "coder_git_auth" "github" {
id = "github"
}
```
## Examples
### Custom Path
```hcl
module "git-clone" {
source = "https://registry.coder.com/modules/git-clone"
url = "https://github.com/coder/coder"
path = "~/projects/coder/coder"
}
```

37
git-clone/main.tf Normal file
View File

@@ -0,0 +1,37 @@
terraform {
required_version = ">= 1.0"
required_providers {
coder = {
source = "coder/coder"
version = ">= 0.11"
}
}
}
variable "url" {
description = "The URL of the Git repository."
type = string
}
variable "path" {
default = ""
description = "The path to clone the repository. Defaults to \"$HOME/<basename of url>\"."
type = string
}
variable "agent_id" {
description = "The ID of a Coder agent."
type = string
}
resource "coder_script" "git_clone" {
agent_id = var.agent_id
display_name = "Git Clone"
icon = "/icons/git.svg"
script = templatefile("${path.module}/run.sh", {
CLONE_PATH: var.path != "" ? var.path : join("/", ["~", basename(var.url)]),
REPO_URL: var.url,
})
run_on_start = true
}

38
git-clone/run.sh Executable file
View File

@@ -0,0 +1,38 @@
#!/usr/bin/env sh
REPO_URL="${REPO_URL}"
CLONE_PATH="${CLONE_PATH}"
# Expand home if it's specified!
CLONE_PATH="$${CLONE_PATH/#\~/$${HOME}}"
# Check if the variable is empty...
if [ -z "$REPO_URL" ]; then
echo "No repository specified!"
exit 1
fi
# Check if the variable is empty...
if [ -z "$CLONE_PATH" ]; then
echo "No clone path specified!"
exit 1
fi
# Check if `git` is installed...
if ! command -v git >/dev/null; then
echo "Git is not installed!"
exit 1
fi
# Check if the directory exists...
if [ ! -d "$CLONE_PATH" ]; then
echo "Creating directory $CLONE_PATH..."
mkdir -p "$CLONE_PATH"
else
echo "$CLONE_PATH already exists, skipping clone!"
exit 0
fi
# Clone the repository...
echo "Cloning $REPO_URL to $CLONE_PATH..."
git clone "$REPO_URL" "$CLONE_PATH"