improve status code handling and add readme
This commit is contained in:
70
github-upload-public-key/README.md
Normal file
70
github-upload-public-key/README.md
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
display_name: Github Upload Public Key
|
||||
description: Automates uploading Coder public key to Github so users don't have to.
|
||||
icon: ../.icons/github.svg
|
||||
maintainer_github: f0ssel
|
||||
verified: false
|
||||
tags: [helper]
|
||||
---
|
||||
|
||||
# github-upload-public-key
|
||||
|
||||
<!-- Describes what this module does -->
|
||||
|
||||
```tf
|
||||
module "github-upload-public-key" {
|
||||
source = "registry.coder.com/modules/github-upload-public-key/coder"
|
||||
version = "1.0.13"
|
||||
agent_id = coder_agent.example.id
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Add a screencast or screenshot here put them in .images directory -->
|
||||
|
||||
## Examples
|
||||
|
||||
### Example 1
|
||||
|
||||
Install the Dracula theme from [OpenVSX](https://open-vsx.org/):
|
||||
|
||||
```tf
|
||||
module "MODULE_NAME" {
|
||||
source = "registry.coder.com/modules/MODULE_NAME/coder"
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.example.id
|
||||
extensions = [
|
||||
"dracula-theme.theme-dracula"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Enter the `<author>.<name>` into the extensions array and code-server will automatically install on start.
|
||||
|
||||
### Example 2
|
||||
|
||||
Configure VS Code's [settings.json](https://code.visualstudio.com/docs/getstarted/settings#_settingsjson) file:
|
||||
|
||||
```tf
|
||||
module "MODULE_NAME" {
|
||||
source = "registry.coder.com/modules/MODULE_NAME/coder"
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.example.id
|
||||
extensions = [ "dracula-theme.theme-dracula" ]
|
||||
settings = {
|
||||
"workbench.colorTheme" = "Dracula"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Example 3
|
||||
|
||||
Run code-server in the background, don't fetch it from GitHub:
|
||||
|
||||
```tf
|
||||
module "MODULE_NAME" {
|
||||
source = "registry.coder.com/modules/MODULE_NAME/coder"
|
||||
version = "1.0.2"
|
||||
agent_id = coder_agent.example.id
|
||||
offline = true
|
||||
}
|
||||
```
|
||||
@@ -18,10 +18,9 @@ resource "coder_script" "github_upload_public_key" {
|
||||
agent_id = var.agent_id
|
||||
script = templatefile("${path.module}/run.sh", {
|
||||
CODER_OWNER_SESSION_TOKEN : data.coder_workspace.me.owner_session_token,
|
||||
CODER_ACCESS_URL : data.coder_workspace.me.access_url
|
||||
CODER_ACCESS_URL : data.coder_workspace.me.access_url,
|
||||
})
|
||||
display_name = "Github Upload Public Key"
|
||||
icon = "/icon/github.svg"
|
||||
run_on_start = true
|
||||
start_blocks_login = true
|
||||
}
|
||||
@@ -17,19 +17,28 @@ fi
|
||||
|
||||
if [ -z "$GITHUB_TOKEN" ]; then
|
||||
echo "No GITHUB_TOKEN in the workspace environment!"
|
||||
echo "The user must be authenticated with Github before this script can be run."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PUBLIC_KEY_NAME="$CODER_ACCESS_URL Workspaces"
|
||||
|
||||
echo "Fetching Coder public SSH key..."
|
||||
PUBLIC_KEY=$(curl "$CODER_ACCESS_URL/api/v2/users/me/gitsshkey" \
|
||||
PUBLIC_KEY_RESPONSE=$(curl -L -s \
|
||||
-w "%{http_code}" \
|
||||
-H 'accept: application/json' \
|
||||
-H "cookie: coder_session_token=$CODER_OWNER_SESSION_TOKEN" \
|
||||
--fail \
|
||||
-s \
|
||||
| jq -r '.public_key'
|
||||
"$CODER_ACCESS_URL/api/v2/users/me/gitsshkey"
|
||||
)
|
||||
PUBLIC_KEY_RESPONSE_STATUS=$(tail -n1 <<< "$PUBLIC_KEY_RESPONSE")
|
||||
PUBLIC_KEY_BODY=$(sed \$d <<< "$PUBLIC_KEY_RESPONSE")
|
||||
|
||||
if [ "$PUBLIC_KEY_RESPONSE_STATUS" -ne 200 ]; then
|
||||
echo "Failed to fetch Coder public SSH key with status code $PUBLIC_KEY_RESPONSE_STATUS!"
|
||||
echo "$PUBLIC_KEY_BODY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PUBLIC_KEY=$(jq -r '.public_key' <<< "$PUBLIC_KEY_BODY")
|
||||
echo "Coder public SSH key found!"
|
||||
|
||||
if [ -z "$PUBLIC_KEY" ]; then
|
||||
echo "No Coder public SSH key found!"
|
||||
@@ -37,28 +46,48 @@ if [ -z "$PUBLIC_KEY" ]; then
|
||||
fi
|
||||
|
||||
echo "Fetching GitHub public SSH keys..."
|
||||
GITHUB_MATCH=$(curl \
|
||||
GITHUB_KEYS_RESPONSE=$(curl -L -s \
|
||||
-w "%{http_code}" \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "Authorization: Bearer $GITHUB_TOKEN" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
--fail \
|
||||
-s \
|
||||
https://api.github.com/user/keys \
|
||||
| jq -r --arg PUBLIC_KEY "$PUBLIC_KEY" '.[] | select(.key == $PUBLIC_KEY) | .key'
|
||||
https://api.github.com/user/keys
|
||||
)
|
||||
GITHUB_KEYS_RESPONSE_STATUS=$(tail -n1 <<< "$GITHUB_KEYS_RESPONSE")
|
||||
GITHUB_KEYS_RESPONSE_BODY=$(sed \$d <<< "$GITHUB_KEYS_RESPONSE")
|
||||
|
||||
if [ "$GITHUB_KEYS_RESPONSE_STATUS" -ne 200 ]; then
|
||||
echo "Failed to fetch Coder public SSH key with status code $GITHUB_KEYS_RESPONSE_STATUS!"
|
||||
echo "$GITHUB_KEYS_RESPONSE_BODY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
GITHUB_MATCH=$(jq -r --arg PUBLIC_KEY "$PUBLIC_KEY" '.[] | select(.key == $PUBLIC_KEY) | .key' <<< "$GITHUB_KEYS_RESPONSE_BODY")
|
||||
|
||||
if [ "$PUBLIC_KEY" = "$GITHUB_MATCH" ]; then
|
||||
echo "Coder public SSH key is already uploaded to GitHub!"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "Coder public SSH key not found in GitHub keys!"
|
||||
echo "Uploading Coder public SSH key to GitHub..."
|
||||
curl -L \
|
||||
CODER_PUBLIC_KEY_NAME="$CODER_ACCESS_URL Workspaces"
|
||||
UPLOAD_RESPONSE=$(curl -L -s \
|
||||
-X POST \
|
||||
-w "%{http_code}" \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "Authorization: Bearer $GITHUB_TOKEN" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
https://api.github.com/user/keys \
|
||||
-d "{\"title\":\"$PUBLIC_KEY_NAME\",\"key\":\"$PUBLIC_KEY\"}"
|
||||
-d "{\"title\":\"$CODER_PUBLIC_KEY_NAME\",\"key\":\"nah\"}"
|
||||
)
|
||||
UPLOAD_RESPONSE_STATUS=$(tail -n1 <<< "$UPLOAD_RESPONSE")
|
||||
UPLOAD_RESPONSE_BODY=$(sed \$d <<< "$UPLOAD_RESPONSE")
|
||||
|
||||
if [ "$UPLOAD_RESPONSE_STATUS" -ne 201 ]; then
|
||||
echo "Failed to upload Coder public SSH key with status code $UPLOAD_RESPONSE_STATUS!"
|
||||
echo "$UPLOAD_RESPONSE_BODY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Coder public SSH key uploaded to GitHub!"
|
||||
Reference in New Issue
Block a user