diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 4033ca9..c3e6c49 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -13,8 +13,7 @@ jobs: strategy: matrix: features: - - color - - hello + - apt baseImage: - debian:latest - ubuntu:latest @@ -34,8 +33,7 @@ jobs: strategy: matrix: features: - - color - - hello + - apt steps: - uses: actions/checkout@v4 diff --git a/LICENSE b/LICENSE index 35bef52..aa3d8fe 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,7 @@ MIT License Copyright (c) 2022 Microsoft Corporation +Copyright (c) 2025 Viktor Schmidt Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 1a1cea8..a9f7a55 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,16 @@ -# Dev Container Features: Self Authoring Template +# Dev Container Features -> This repo provides a starting point and example for creating your own custom [dev container Features](https://containers.dev/implementors/features/), hosted for free on GitHub Container Registry. The example in this repository follows the [dev container Feature distribution specification](https://containers.dev/implementors/features-distribution/). -> -> To provide feedback to the specification, please leave a comment [on spec issue #70](https://github.com/devcontainers/spec/issues/70). For more broad feedback regarding dev container Features, please see [spec issue #61](https://github.com/devcontainers/spec/issues/61). - -## Example Contents - -This repository contains a _collection_ of two Features - `hello` and `color`. These Features serve as simple feature implementations. Each sub-section below shows a sample `devcontainer.json` alongside example usage of the Feature. - -### `hello` - -Running `hello` inside the built container will print the greeting provided to it via its `greeting` option. - -```jsonc -{ - "image": "mcr.microsoft.com/devcontainers/base:ubuntu", - "features": { - "ghcr.io/devcontainers/feature-starter/hello:1": { - "greeting": "Hello" - } - } -} -``` - -```bash -$ hello - -Hello, user. -``` - -### `color` +This repository contains a _collection_ of Features. -Running `color` inside the built container will print your favorite color to standard out. - -```jsonc -{ - "image": "mcr.microsoft.com/devcontainers/base:ubuntu", - "features": { - "ghcr.io/devcontainers/feature-starter/color:1": { - "favorite": "green" - } - } -} -``` - -```bash -$ color - -my favorite color is green -``` +- `apt` - Install apt dependencies defined in an `Aptfile.dev` file. ## Repo and Feature Structure -Similar to the [`devcontainers/features`](https://github.com/devcontainers/features) repo, this repository has a `src` folder. Each Feature has its own sub-folder, containing at least a `devcontainer-feature.json` and an entrypoint script `install.sh`. +Similar to the [`devcontainers/features`](https://github.com/devcontainers/features) repo, this repository has a `src` folder. Each Feature has its own sub-folder, containing at least a `devcontainer-feature.json` and an entrypoint script `install.sh`. -``` +```bash ├── src -│ ├── hello -│ │ ├── devcontainer-feature.json -│ │ └── install.sh -│ ├── color -│ │ ├── devcontainer-feature.json -│ │ └── install.sh -| ├── ... +│ ├── apt │ │ ├── devcontainer-feature.json │ │ └── install.sh ... @@ -70,41 +18,6 @@ Similar to the [`devcontainers/features`](https://github.com/devcontainers/featu An [implementing tool](https://containers.dev/supporting#tools) will composite [the documented dev container properties](https://containers.dev/implementors/features/#devcontainer-feature-json-properties) from the feature's `devcontainer-feature.json` file, and execute in the `install.sh` entrypoint script in the container during build time. Implementing tools are also free to process attributes under the `customizations` property as desired. -### Options - -All available options for a Feature should be declared in the `devcontainer-feature.json`. The syntax for the `options` property can be found in the [devcontainer Feature json properties reference](https://containers.dev/implementors/features/#devcontainer-feature-json-properties). - -For example, the `color` feature provides an enum of three possible options (`red`, `gold`, `green`). If no option is provided in a user's `devcontainer.json`, the value is set to "red". - -```jsonc -{ - // ... - "options": { - "favorite": { - "type": "string", - "enum": [ - "red", - "gold", - "green" - ], - "default": "red", - "description": "Choose your favorite color." - } - } -} -``` - -Options are exported as Feature-scoped environment variables. The option name is captialized and sanitized according to [option resolution](https://containers.dev/implementors/features/#option-resolution). - -```bash -#!/bin/bash - -echo "Activating feature 'color'" -echo "The provided favorite color is: ${FAVORITE}" - -... -``` - ## Distributing Features ### Versioning @@ -113,76 +26,30 @@ Features are individually versioned by the `version` attribute in a Feature's `d ### Publishing -> NOTE: The Distribution spec can be [found here](https://containers.dev/implementors/features-distribution/). +> NOTE: The Distribution spec can be [found here](https://containers.dev/implementors/features-distribution/). > > While any registry [implementing the OCI Distribution spec](https://github.com/opencontainers/distribution-spec) can be used, this template will leverage GHCR (GitHub Container Registry) as the backing registry. -Features are meant to be easily sharable units of dev container configuration and installation code. - -This repo contains a **GitHub Action** [workflow](.github/workflows/release.yaml) that will publish each Feature to GHCR. +Features are meant to be easily sharable units of dev container configuration and installation code. -*Allow GitHub Actions to create and approve pull requests* should be enabled in the repository's `Settings > Actions > General > Workflow permissions` for auto generation of `src//README.md` per Feature (which merges any existing `src//NOTES.md`). +This repo contains a **GitHub Action** [workflow](.github/workflows/release.yaml) that will publish each Feature to GHCR. -By default, each Feature will be prefixed with the `` namespace. For example, the two Features in this repository can be referenced in a `devcontainer.json` with: +By default, each Feature will be prefixed with the `` namespace. For example, the Features in this repository can be referenced in a `devcontainer.json` with: +```bash +ghcr.io/viktorianer/devcontainer-features/apt:1 ``` -ghcr.io/devcontainers/feature-starter/color:1 -ghcr.io/devcontainers/feature-starter/hello:1 -``` - -The provided GitHub Action will also publish a third "metadata" package with just the namespace, eg: `ghcr.io/devcontainers/feature-starter`. This contains information useful for tools aiding in Feature discovery. -'`devcontainers/feature-starter`' is known as the feature collection namespace. +The provided GitHub Action will also publish a third "metadata" package with just the namespace, eg: `ghcr.io/viktorianer/devcontainer-features`. This contains information useful for tools aiding in Feature discovery. -### Marking Feature Public - -Note that by default, GHCR packages are marked as `private`. To stay within the free tier, Features need to be marked as `public`. - -This can be done by navigating to the Feature's "package settings" page in GHCR, and setting the visibility to 'public`. The URL may look something like: - -``` -https://github.com/users//packages/container/%2F/settings -``` - -image +'`viktorianer/devcontainer-features`' is known as the feature collection namespace. ### Adding Features to the Index If you'd like your Features to appear in our [public index](https://containers.dev/features) so that other community members can find them, you can do the following: -* Go to [github.com/devcontainers/devcontainers.github.io](https://github.com/devcontainers/devcontainers.github.io) - * This is the GitHub repo backing the [containers.dev](https://containers.dev/) spec site -* Open a PR to modify the [collection-index.yml](https://github.com/devcontainers/devcontainers.github.io/blob/gh-pages/_data/collection-index.yml) file +- Go to [github.com/devcontainers/devcontainers.github.io](https://github.com/devcontainers/devcontainers.github.io) + - This is the GitHub repo backing the [containers.dev](https://containers.dev/) spec site +- Open a PR to modify the [collection-index.yml](https://github.com/devcontainers/devcontainers.github.io/blob/gh-pages/_data/collection-index.yml) file This index is from where [supporting tools](https://containers.dev/supporting) like [VS Code Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) and [GitHub Codespaces](https://github.com/features/codespaces) surface Features for their dev container creation UI. - -#### Using private Features in Codespaces - -For any Features hosted in GHCR that are kept private, the `GITHUB_TOKEN` access token in your environment will need to have `package:read` and `contents:read` for the associated repository. - -Many implementing tools use a broadly scoped access token and will work automatically. GitHub Codespaces uses repo-scoped tokens, and therefore you'll need to add the permissions in `devcontainer.json` - -An example `devcontainer.json` can be found below. - -```jsonc -{ - "image": "mcr.microsoft.com/devcontainers/base:ubuntu", - "features": { - "ghcr.io/my-org/private-features/hello:1": { - "greeting": "Hello" - } - }, - "customizations": { - "codespaces": { - "repositories": { - "my-org/private-features": { - "permissions": { - "packages": "read", - "contents": "read" - } - } - } - } - } -} -``` diff --git a/src/apt/README.md b/src/apt/README.md new file mode 100644 index 0000000..0b6f46b --- /dev/null +++ b/src/apt/README.md @@ -0,0 +1,42 @@ +# Aptfile Dependencies (apt) + +Install apt dependencies defined in an `Aptfile.dev` file. This feature is inspired by the approach found in [heroku-buildpack-apt](https://github.com/heroku/heroku-buildpack-apt) and [Aptfile Buildpack on App Platform](https://docs.digitalocean.com/products/app-platform/reference/buildpacks/aptfile/). It simplifies the process of managing and installing apt packages required for a development environment by specifying them in one file. + +## Example Usage + +```json +"features": { + "ghcr.io/viktorianer/features/apt:1": { + "devFile": "../Aptfile.dev" + } +} +``` + +## Options + +| Options Id | Description | Type | Default Value | +|------------|-------------|--------|---------------| +| devFile | Path to the Aptfile.dev file. This is where the list of apt packages is defined. | string | `../Aptfile.dev` | + +## How It Works + +- The feature reads the list of packages from the `Aptfile.dev` file and installs them during the container setup. +- The default path is `Aptfile.dev`, but this can be customized using the `devFile` option. +- It removes any commented or empty lines before installing the packages with `apt-get install`. + +Example `Aptfile.dev`: + +```bash +# Video thumbnails +ffmpeg +libvips + +# PDF thumbnails +poppler-utils +# mupdf +# mupdf-tools + +# PostgreSQL +libpq-dev +postgresql-client +``` diff --git a/src/apt/devcontainer-feature.json b/src/apt/devcontainer-feature.json new file mode 100644 index 0000000..062a0af --- /dev/null +++ b/src/apt/devcontainer-feature.json @@ -0,0 +1,16 @@ +{ + "id": "apt", + "version": "1.0.0", + "name": "Aptfile Dependencies", + "description": "Installs apt dependencies defined in an Aptfile.dev file.", + "options": { + "devFile": { + "type": "string", + "description": "Optional custom Aptfile.dev path", + "default": "../Aptfile.dev" + } + }, + "installsAfter": [ + "ghcr.io/devcontainers/features/common-utils" + ] +} diff --git a/src/apt/install.sh b/src/apt/install.sh new file mode 100644 index 0000000..2a047a8 --- /dev/null +++ b/src/apt/install.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -e + +# Exit script if any command fails +set -o errexit + +# Debugging (optional, comment out if not needed) +# set -x + +# Use the DEVFILE environment variable to find the Aptfile.dev +if [ -f "$DEVFILE" ]; then + echo "Aptfile.dev detected at $DEVFILE. Installing dependencies..." + + apt-get update -y + grep -Ev "^\s*#" "$DEVFILE" | xargs apt-get install --no-install-recommends -y + rm -rf /var/lib/apt/lists/* + + echo "Dependencies from $DEVFILE have been installed." +else + echo "No Aptfile.dev found at $DEVFILE, skipping apt dependencies installation." +fi diff --git a/src/color/README.md b/src/color/README.md deleted file mode 100644 index a1e7d1b..0000000 --- a/src/color/README.md +++ /dev/null @@ -1,26 +0,0 @@ - -# My Favorite Color (color) - -A feature to remind you of your favorite color - -## Example Usage - -```json -"features": { - "ghcr.io/devcontainers/feature-starter/color:1": { - "version": "latest" - } -} -``` - -## Options - -| Options Id | Description | Type | Default Value | -|-----|-----|-----|-----| -| favorite | Choose your favorite color. | string | red | - - - ---- - -_Note: This file was auto-generated from the [devcontainer-feature.json](https://github.com/devcontainers/feature-starter/blob/main/src/color/devcontainer-feature.json). Add additional notes to a `NOTES.md`._ diff --git a/src/color/devcontainer-feature.json b/src/color/devcontainer-feature.json deleted file mode 100644 index e14e7e7..0000000 --- a/src/color/devcontainer-feature.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "My Favorite Color", - "id": "color", - "version": "1.0.3", - "description": "A feature to remind you of your favorite color", - "options": { - "favorite": { - "type": "string", - "enum": [ - "red", - "gold", - "green" - ], - "default": "red", - "description": "Choose your favorite color." - } - }, - "installsAfter": [ - "ghcr.io/devcontainers/features/common-utils" - ] -} diff --git a/src/color/install.sh b/src/color/install.sh deleted file mode 100644 index 883c25d..0000000 --- a/src/color/install.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -set -e - -echo "Activating feature 'color'" -echo "The provided favorite color is: ${FAVORITE}" - - -# The 'install.sh' entrypoint script is always executed as the root user. -# -# These following environment variables are passed in by the dev container CLI. -# These may be useful in instances where the context of the final -# remoteUser or containerUser is useful. -# For more details, see https://containers.dev/implementors/features#user-env-var -echo "The effective dev container remoteUser is '$_REMOTE_USER'" -echo "The effective dev container remoteUser's home directory is '$_REMOTE_USER_HOME'" - -echo "The effective dev container containerUser is '$_CONTAINER_USER'" -echo "The effective dev container containerUser's home directory is '$_CONTAINER_USER_HOME'" - -cat > /usr/local/bin/color \ -<< EOF -#!/bin/sh -echo "my favorite color is ${FAVORITE}" -EOF - -chmod +x /usr/local/bin/color diff --git a/src/hello/README.md b/src/hello/README.md deleted file mode 100644 index 142e101..0000000 --- a/src/hello/README.md +++ /dev/null @@ -1,26 +0,0 @@ - -# Hello, World! (hello) - -A hello world feature - -## Example Usage - -```json -"features": { - "ghcr.io/devcontainers/feature-starter/hello:1": { - "version": "latest" - } -} -``` - -## Options - -| Options Id | Description | Type | Default Value | -|-----|-----|-----|-----| -| greeting | Select a pre-made greeting, or enter your own | string | hey | - - - ---- - -_Note: This file was auto-generated from the [devcontainer-feature.json](https://github.com/devcontainers/feature-starter/blob/main/src/hello/devcontainer-feature.json). Add additional notes to a `NOTES.md`._ diff --git a/src/hello/devcontainer-feature.json b/src/hello/devcontainer-feature.json deleted file mode 100644 index e2a3178..0000000 --- a/src/hello/devcontainer-feature.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "Hello, World!", - "id": "hello", - "version": "1.0.2", - "description": "A hello world feature", - "options": { - "greeting": { - "type": "string", - "proposals": [ - "hey", - "hello", - "hi", - "howdy" - ], - "default": "hey", - "description": "Select a pre-made greeting, or enter your own" - } - }, - "installsAfter": [ - "ghcr.io/devcontainers/features/common-utils" - ] -} diff --git a/src/hello/install.sh b/src/hello/install.sh deleted file mode 100644 index 480e262..0000000 --- a/src/hello/install.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -set -e - -echo "Activating feature 'hello'" - -GREETING=${GREETING:-undefined} -echo "The provided greeting is: $GREETING" - -# The 'install.sh' entrypoint script is always executed as the root user. -# -# These following environment variables are passed in by the dev container CLI. -# These may be useful in instances where the context of the final -# remoteUser or containerUser is useful. -# For more details, see https://containers.dev/implementors/features#user-env-var -echo "The effective dev container remoteUser is '$_REMOTE_USER'" -echo "The effective dev container remoteUser's home directory is '$_REMOTE_USER_HOME'" - -echo "The effective dev container containerUser is '$_CONTAINER_USER'" -echo "The effective dev container containerUser's home directory is '$_CONTAINER_USER_HOME'" - -cat > /usr/local/bin/hello \ -<< EOF -#!/bin/sh -RED='\033[0;91m' -NC='\033[0m' # No Color -echo "\${RED}${GREETING}, \$(whoami)!\${NC}" -EOF - -chmod +x /usr/local/bin/hello \ No newline at end of file diff --git a/test/_global/Aptfile.dev b/test/_global/Aptfile.dev new file mode 100644 index 0000000..6eb8678 --- /dev/null +++ b/test/_global/Aptfile.dev @@ -0,0 +1 @@ +libpq-dev diff --git a/test/_global/color_and_hello.sh b/test/_global/apt_with_postgresql_client.sh similarity index 67% rename from test/_global/color_and_hello.sh rename to test/_global/apt_with_postgresql_client.sh index 9a08758..a6bf489 100644 --- a/test/_global/color_and_hello.sh +++ b/test/_global/apt_with_postgresql_client.sh @@ -3,11 +3,11 @@ # The 'test/_global' folder is a special test folder that is not tied to a single feature. # # This test file is executed against a running container constructed -# from the value of 'color_and_hello' in the tests/_global/scenarios.json file. +# from the value of 'all_features' in the tests/_global/scenarios.json file. # # The value of a scenarios element is any properties available in the 'devcontainer.json'. # Scenarios are useful for testing specific options in a feature, or to test a combination of features. -# +# # This test can be run with the following command (from the root of this repo) # devcontainer features test --global-scenarios-only . @@ -16,17 +16,13 @@ set -e # Optional: Import test library bundled with the devcontainer CLI source dev-container-features-test-lib -echo -e "The result of the 'color' command will be:\n" -color -echo -e "The result of the 'hello' command will be:\n" -hello -echo -e "\n" - # Feature-specific tests # The 'check' command comes from the dev-container-features-test-lib. -check "check purple is my favorite color" bash -c "color | grep 'my favorite color is purple'" -check "check I am greeting with 'Greetings'" bash -c "hello | grep 'Greetings, $(whoami)'" +# Check if libpq-dev is installed +check "libpq-dev installed" bash -c "dpkg -l | grep libpq-dev" +# Check if PostgreSQL client (version 17) is installed +check "PostgreSQL client version 17 installed" bash -c "psql --version | grep -E 'PostgreSQL.*17(\.[0-9]+)?'" # Report result # If any of the checks above exited with a non-zero exit code, the test will fail. diff --git a/test/_global/scenarios.json b/test/_global/scenarios.json index b046998..f04c4a4 100644 --- a/test/_global/scenarios.json +++ b/test/_global/scenarios.json @@ -1,13 +1,14 @@ { - "color_and_hello": { - "image": "mcr.microsoft.com/devcontainers/base:ubuntu", - "features": { - "color": { - "favorite": "purple" - }, - "hello": { - "greeting": "Greetings" - } - } + "apt_with_postgresql_client": { + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "apt": { + "version": "1", + "devFile": "Aptfile.dev" + }, + "ghcr.io/rails/devcontainer/features/postgres-client": { + "version": "17" + } } -} \ No newline at end of file + } +} diff --git a/test/apt/install_ffmpeg.sh b/test/apt/install_ffmpeg.sh new file mode 100644 index 0000000..dcb46f7 --- /dev/null +++ b/test/apt/install_ffmpeg.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set -e + +# Optional: Import test library +source dev-container-features-test-lib + +# Definition specific tests +check "ffmpeg" ffmpeg -version + +# Report result +reportResults diff --git a/test/apt/install_ffmpeg/Aptfile.dev b/test/apt/install_ffmpeg/Aptfile.dev new file mode 100644 index 0000000..20645e6 --- /dev/null +++ b/test/apt/install_ffmpeg/Aptfile.dev @@ -0,0 +1 @@ +ffmpeg diff --git a/test/apt/install_ffmpeg/Dockerfile b/test/apt/install_ffmpeg/Dockerfile new file mode 100644 index 0000000..db804f8 --- /dev/null +++ b/test/apt/install_ffmpeg/Dockerfile @@ -0,0 +1,5 @@ +# Builds an image with a preconfigured SUDOERS file +# Used to test the install script for JupyterLab which modifies this file +FROM mcr.microsoft.com/devcontainers/base:debian + +COPY --chown=vscode Aptfile.dev /tmp/dev-container-features/apt_0/Aptfile.dev diff --git a/test/apt/scenarios.json b/test/apt/scenarios.json new file mode 100644 index 0000000..f65b024 --- /dev/null +++ b/test/apt/scenarios.json @@ -0,0 +1,14 @@ +{ + "install_ffmpeg": { + "build": { + "dockerfile": "Dockerfile" + }, + "remoteUser": "vscode", + "features": { + "apt": { + "version": "1", + "devFile": "Aptfile.dev" + } + } + } +} diff --git a/test/apt/test.sh b/test/apt/test.sh new file mode 100644 index 0000000..df82332 --- /dev/null +++ b/test/apt/test.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +set -e diff --git a/test/color/gold.sh b/test/color/gold.sh deleted file mode 100644 index 1aaa9aa..0000000 --- a/test/color/gold.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -# This test file will be executed against one of the scenarios devcontainer.json test that -# includes the 'color' feature with "favorite": "gold" option. - -set -e - -# Optional: Import test library bundled with the devcontainer CLI -source dev-container-features-test-lib - -# Feature-specific tests -# The 'check' command comes from the dev-container-features-test-lib. -check "execute command" bash -c "color | grep 'my favorite color is gold'" - -# Report result -# If any of the checks above exited with a non-zero exit code, the test will fail. -reportResults diff --git a/test/color/green.sh b/test/color/green.sh deleted file mode 100644 index 5b55388..0000000 --- a/test/color/green.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -# This test file will be executed against one of the scenarios devcontainer.json test that -# includes the 'color' feature with "favorite": "green" option. - -set -e - -# Optional: Import test library bundled with the devcontainer CLI -source dev-container-features-test-lib - -# Feature-specific tests -# The 'check' command comes from the dev-container-features-test-lib. -check "execute command" bash -c "color | grep 'my favorite color is green'" - -# Report result -# If any of the checks above exited with a non-zero exit code, the test will fail. -reportResults diff --git a/test/color/my_favorite_color_is_green.sh b/test/color/my_favorite_color_is_green.sh deleted file mode 100644 index 94e6295..0000000 --- a/test/color/my_favorite_color_is_green.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash - -# This test file will be executed against after building a container with the -# 'my_favorite_color_is_green' scenario in 'test/test/color/scenarios.json'. -# -# For more information, see: https://github.com/devcontainers/cli/blob/main/docs/features/test.md -# -# This scenario first uses the 'common-utils' Features to add a new user 'octocat'. -# It then installs the 'color' Feature with the FAVORITE option set to 'green' (the default FAVORITE value if none provided is 'red'). -# -# -# This test (as well as any of the other scenarios in 'scenarios.json') can be run with the following command: -# -# devcontainer features test \ -# --features color \ -# --skip-autogenerated \ -# /path/to/this/repo - -set -e - -# Optional: Import test library bundled with the devcontainer CLI -# Provides the 'check' and 'reportResults' commands. -source dev-container-features-test-lib - -# Feature-specific tests -# The 'check' command comes from the dev-container-features-test-lib. -check "validate favorite color" color | grep 'my favorite color is green' - -# Report result -# If any of the checks above exited with a non-zero exit code, the test will fail. -reportResults diff --git a/test/color/scenarios.json b/test/color/scenarios.json deleted file mode 100644 index bfd7952..0000000 --- a/test/color/scenarios.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "my_favorite_color_is_green": { - "image": "mcr.microsoft.com/devcontainers/base:focal", - "features": { - "ghcr.io/devcontainers/features/common-utils:1": { - "installZsh": false, - "installOhMyZsh": false, - "upgradePackages": false, - "username": "octocat" - }, - "color": { - "favorite": "green" - } - }, - "remoteUser": "octocat" - }, - "gold": { - "image": "mcr.microsoft.com/devcontainers/base:ubuntu", - "features": { - "color": { - "favorite": "gold" - } - } - }, - "green": { - "image": "mcr.microsoft.com/devcontainers/base:ubuntu", - "features": { - "color": { - "favorite": "green" - } - } - } -} diff --git a/test/color/test.sh b/test/color/test.sh deleted file mode 100644 index bab0fa3..0000000 --- a/test/color/test.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash - -# This test file will be executed against an auto-generated devcontainer.json that -# includes the 'color' Feature with no options. -# -# For more information, see: https://github.com/devcontainers/cli/blob/main/docs/features/test.md -# -# Eg: -# { -# "image": "<..some-base-image...>", -# "features": { -# "color": {} -# }, -# "remoteUser": "root" -# } -# -# Thus, the value of all options will fall back to the default value in the -# Feature's 'devcontainer-feature.json'. -# For the 'color' feature, that means the default favorite color is 'red'. -# -# These scripts are run as 'root' by default. Although that can be changed -# with the '--remote-user' flag. -# -# This test can be run with the following command: -# -# devcontainer features test \ -# --features color \ -# --remote-user root \ -# --skip-scenarios \ -# --base-image mcr.microsoft.com/devcontainers/base:ubuntu \ -# /path/to/this/repo - -set -e - -# Optional: Import test library bundled with the devcontainer CLI -# See https://github.com/devcontainers/cli/blob/HEAD/docs/features/test.md#dev-container-features-test-lib -# Provides the 'check' and 'reportResults' commands. -source dev-container-features-test-lib - -# Feature-specific tests -# The 'check' command comes from the dev-container-features-test-lib. Syntax is... -# check