From 5f45ce254bab8cfd5f93fa1978e588e1e126c06b Mon Sep 17 00:00:00 2001 From: Cody Taylor Date: Sat, 1 Mar 2025 20:43:22 -0500 Subject: [PATCH 1/2] Add feature: deno-cache. --- src/deno-cache/NOTES.md | 6 +++++ src/deno-cache/devcontainer-feature.json | 25 +++++++++++++++++++ src/deno-cache/install.sh | 24 ++++++++++++++++++ .../denoland_deno__debian__custom_user.sh | 14 +++++++++++ test/deno-cache/scenarios.json | 12 +++++++++ test/deno-cache/test.sh | 12 +++++++++ 6 files changed, 93 insertions(+) create mode 100644 src/deno-cache/NOTES.md create mode 100644 src/deno-cache/devcontainer-feature.json create mode 100644 src/deno-cache/install.sh create mode 100644 test/deno-cache/denoland_deno__debian__custom_user.sh create mode 100644 test/deno-cache/scenarios.json create mode 100644 test/deno-cache/test.sh diff --git a/src/deno-cache/NOTES.md b/src/deno-cache/NOTES.md new file mode 100644 index 0000000..754bb96 --- /dev/null +++ b/src/deno-cache/NOTES.md @@ -0,0 +1,6 @@ +# Deno Cache + +Setup the [deno cache](https://jsr.io/@deno/cache-dir) as a volume. + +Intended for usage with the `denoland/deno:debian` docker image. Otherwise, +will create a `deno` group with read-write permissions on the cache directory. diff --git a/src/deno-cache/devcontainer-feature.json b/src/deno-cache/devcontainer-feature.json new file mode 100644 index 0000000..69273fb --- /dev/null +++ b/src/deno-cache/devcontainer-feature.json @@ -0,0 +1,25 @@ +{ + "id": "deno-cache", + "name": "Deno cache setup", + "version": "0.1.0", + "containerEnv": { + "DENO_DIR": "/deno-dir" + }, + "options": { + "username": { + "description": "Add the 'deno' group to the given non-root user. Defaults to the value of `remoteUser`.", + "default": "automatic", + "type": "string" + } + }, + "mounts": [ + { + "source": "deno-cache-${devcontainerId}", + "target": "/deno-dir", + "type": "volume" + } + ], + "installsAfter": [ + "ghcr.io/devcontainers/features/common-utils" + ] +} diff --git a/src/deno-cache/install.sh b/src/deno-cache/install.sh new file mode 100644 index 0000000..0925567 --- /dev/null +++ b/src/deno-cache/install.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -e + +GROUP=deno + +echo "Creating cache directory: $DENO_DIR" +mkdir --parents "$DENO_DIR" + +echo "Creating user group: $GROUP" +groupadd --force --key GID_MIN=1993 "$GROUP" + +echo "Assigning group to cache directory..." +chgrp --changes --recursive "$GROUP" "$DENO_DIR" + +echo "Assigning permissions with sticky group..." +chmod --changes --recursive 2775 "$DENO_DIR" + +echo "Appending group ${GROUP@Q} to user..." +if [[ "$USERNAME" == "automatic" ]]; then + usermod --append --groups "$GROUP" "$_REMOTE_USER" +elif [[ -n "$USERNAME" && "$USERNAME" != "root" ]]; then + usermod --append --groups "$GROUP" "$USERNAME" +fi diff --git a/test/deno-cache/denoland_deno__debian__custom_user.sh b/test/deno-cache/denoland_deno__debian__custom_user.sh new file mode 100644 index 0000000..8775191 --- /dev/null +++ b/test/deno-cache/denoland_deno__debian__custom_user.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "Group exists" getent group deno +check "Directory /deno-dir exists" test -d "$DENO_DIR" +check "Group is set" test "$(stat --printf="%G" "$DENO_DIR")" == "deno" +check "Permissions are set" test "$(stat --printf="%a" "$DENO_DIR")" -eq 2775 +check "Remote user is in the deno group" bash -c "getent group deno | grep jsr" +check "Run deno info" deno info "jsr:@deno/cache-dir" + +reportResults diff --git a/test/deno-cache/scenarios.json b/test/deno-cache/scenarios.json new file mode 100644 index 0000000..4bdff8d --- /dev/null +++ b/test/deno-cache/scenarios.json @@ -0,0 +1,12 @@ +{ + "denoland_deno__debian__custom_user": { + "image": "denoland/deno:debian", + "remoteUser": "jsr", + "features": { + "deno-cache": {}, + "ghcr.io/devcontainers/features/common-utils:2": { + "username": "jsr" + } + } + } +} diff --git a/test/deno-cache/test.sh b/test/deno-cache/test.sh new file mode 100644 index 0000000..6939650 --- /dev/null +++ b/test/deno-cache/test.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set -e + +source dev-container-features-test-lib + +check "Group exists" getent group deno +check "Directory /deno-dir exists" test -d "$DENO_DIR" +check "Group is set" test "$(stat --printf="%G" "$DENO_DIR")" == "deno" +check "Permissions are set" test "$(stat --printf="%a" "$DENO_DIR")" -eq 2775 + +reportResults From 667af14374dea1888a23b0f948d1963ffc73c86a Mon Sep 17 00:00:00 2001 From: Cody Taylor Date: Sat, 1 Mar 2025 20:56:45 -0500 Subject: [PATCH 2/2] ci: Test deno-cache --- .github/workflows/test.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 32db3a4..17f7bf6 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -14,6 +14,7 @@ jobs: matrix: features: - circleci-cli + - deno-cache - exercism-cli baseImage: - debian:latest