diff --git a/.icons/github.svg b/.icons/github.svg
new file mode 100644
index 0000000..d5e6491
--- /dev/null
+++ b/.icons/github.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/github-upload-public-key/README.md b/github-upload-public-key/README.md
new file mode 100644
index 0000000..9e4a7b1
--- /dev/null
+++ b/github-upload-public-key/README.md
@@ -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
+
+
+
+```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
+}
+```
+
+
+
+## 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 `.` 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
+}
+```
diff --git a/github-upload-public-key/main.tf b/github-upload-public-key/main.tf
index f06b055..7728f45 100644
--- a/github-upload-public-key/main.tf
+++ b/github-upload-public-key/main.tf
@@ -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
}
\ No newline at end of file
diff --git a/github-upload-public-key/run.sh b/github-upload-public-key/run.sh
index 8ea4a74..e973824 100755
--- a/github-upload-public-key/run.sh
+++ b/github-upload-public-key/run.sh
@@ -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!"
\ No newline at end of file