mirror of
https://github.com/Maks1mS/devcontainers-features.git
synced 2024-12-23 15:52:59 +03:00
wip
This commit is contained in:
parent
58c753dff1
commit
5958d4a233
22
.github/workflows/test.yaml
vendored
22
.github/workflows/test.yaml
vendored
@ -13,12 +13,9 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
features:
|
features:
|
||||||
- color
|
- wine
|
||||||
- hello
|
|
||||||
baseImage:
|
baseImage:
|
||||||
- debian:latest
|
- mcr.microsoft.com/devcontainers/base:debian
|
||||||
- ubuntu:latest
|
|
||||||
- mcr.microsoft.com/devcontainers/base:ubuntu
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
@ -34,8 +31,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
features:
|
features:
|
||||||
- color
|
- wine
|
||||||
- hello
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
@ -44,15 +40,3 @@ jobs:
|
|||||||
|
|
||||||
- name: "Generating tests for '${{ matrix.features }}' scenarios"
|
- name: "Generating tests for '${{ matrix.features }}' scenarios"
|
||||||
run: devcontainer features test -f ${{ matrix.features }} --skip-autogenerated --skip-duplicated .
|
run: devcontainer features test -f ${{ matrix.features }} --skip-autogenerated --skip-duplicated .
|
||||||
|
|
||||||
test-global:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
continue-on-error: true
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: "Install latest devcontainer CLI"
|
|
||||||
run: npm install -g @devcontainers/cli
|
|
||||||
|
|
||||||
- name: "Testing global scenarios"
|
|
||||||
run: devcontainer features test --global-scenarios-only .
|
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
|
|
||||||
# My Favorite Color (color)
|
|
||||||
|
|
||||||
A feature to remind you of your favorite color
|
|
||||||
|
|
||||||
## Example Usage
|
|
||||||
|
|
||||||
```json
|
|
||||||
"features": {
|
|
||||||
"ghcr.io/Maks1mS/devcontainers-features/color:1": {}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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/Maks1mS/devcontainers-features/blob/main/src/color/devcontainer-feature.json). Add additional notes to a `NOTES.md`._
|
|
@ -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"
|
|
||||||
]
|
|
||||||
}
|
|
@ -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
|
|
@ -1,24 +0,0 @@
|
|||||||
|
|
||||||
# Hello, World! (hello)
|
|
||||||
|
|
||||||
A hello world feature
|
|
||||||
|
|
||||||
## Example Usage
|
|
||||||
|
|
||||||
```json
|
|
||||||
"features": {
|
|
||||||
"ghcr.io/Maks1mS/devcontainers-features/hello:1": {}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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/Maks1mS/devcontainers-features/blob/main/src/hello/devcontainer-feature.json). Add additional notes to a `NOTES.md`._
|
|
@ -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"
|
|
||||||
]
|
|
||||||
}
|
|
@ -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
|
|
@ -7,11 +7,11 @@ WINEPREFIX="$WINEHOME/.wine32"
|
|||||||
WINEARCH="win32"
|
WINEARCH="win32"
|
||||||
WINEDEBUG=-all
|
WINEDEBUG=-all
|
||||||
|
|
||||||
ensure_nanolayer nanolayer_location "v0.5.0"
|
install_debian() {
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
$nanolayer_location \
|
dpkg --add-architecture i386
|
||||||
install \
|
apt-get update
|
||||||
apt-get \
|
apt-get install -y --no-install-recommends \
|
||||||
apt-transport-https \
|
apt-transport-https \
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
telnet \
|
telnet \
|
||||||
@ -19,14 +19,29 @@ $nanolayer_location \
|
|||||||
gnupg2 \
|
gnupg2 \
|
||||||
wget
|
wget
|
||||||
|
|
||||||
wget https://dl.winehq.org/wine-builds/winehq.key -O - | apt-key add -
|
wget https://dl.winehq.org/wine-builds/winehq.key -O - | apt-key add -
|
||||||
echo "deb https://dl.winehq.org/wine-builds/debian bookworm main" > /etc/apt/sources.list.d/winehq.list
|
echo "deb https://dl.winehq.org/wine-builds/debian $VERSION_CODENAME main" >/etc/apt/sources.list.d/winehq.list
|
||||||
{ \
|
{
|
||||||
echo "Package: *wine* *wine*:i386"; \
|
echo "Package: *wine* *wine*:i386"
|
||||||
echo "Pin: version $WINEVERSION~bookworm"; \
|
echo "Pin: version $WINEVERSION~$VERSION_CODENAME"
|
||||||
echo "Pin-Priority: 1001"; \
|
echo "Pin-Priority: 1001"
|
||||||
} > /etc/apt/preferences.d/winehq.pref
|
} >/etc/apt/preferences.d/winehq.pref
|
||||||
|
|
||||||
$nanolayer_location install apt-get winehq-stable
|
apt-get update
|
||||||
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks -O /usr/bin/winetricks
|
apt-get install -y --no-install-recommends winehq-stable
|
||||||
chmod +rx /usr/bin/winetricks
|
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks -O /usr/bin/winetricks
|
||||||
|
chmod +rx /usr/bin/winetricks
|
||||||
|
|
||||||
|
apt purge --auto-remove -y
|
||||||
|
apt autoremove --purge -y
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
}
|
||||||
|
|
||||||
|
. /etc/os-release
|
||||||
|
|
||||||
|
if [ "${ID}" = "debian" ]; then
|
||||||
|
install_debian
|
||||||
|
else
|
||||||
|
echo "Linux distro ${ID} not supported."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
@ -1,172 +0,0 @@
|
|||||||
// https://github.com/devcontainers-contrib/features/blob/696aa94479697cf701c559ef17d4f0bbb86bd00c/src/bikeshed/library_scripts.sh
|
|
||||||
|
|
||||||
clean_download() {
|
|
||||||
# The purpose of this function is to download a file with minimal impact on container layer size
|
|
||||||
# this means if no valid downloader is found (curl or wget) then we install a downloader (currently wget) in a
|
|
||||||
# temporary manner, and making sure to
|
|
||||||
# 1. uninstall the downloader at the return of the function
|
|
||||||
# 2. revert back any changes to the package installer database/cache (for example apt-get lists)
|
|
||||||
# The above steps will minimize the leftovers being created while installing the downloader
|
|
||||||
# Supported distros:
|
|
||||||
# debian/ubuntu/alpine
|
|
||||||
|
|
||||||
url=$1
|
|
||||||
output_location=$2
|
|
||||||
tempdir=$(mktemp -d)
|
|
||||||
downloader_installed=""
|
|
||||||
|
|
||||||
_apt_get_install() {
|
|
||||||
tempdir=$1
|
|
||||||
|
|
||||||
# copy current state of apt list - in order to revert back later (minimize contianer layer size)
|
|
||||||
cp -p -R /var/lib/apt/lists $tempdir
|
|
||||||
apt-get update -y
|
|
||||||
apt-get -y install --no-install-recommends wget ca-certificates
|
|
||||||
}
|
|
||||||
|
|
||||||
_apt_get_cleanup() {
|
|
||||||
tempdir=$1
|
|
||||||
|
|
||||||
echo "removing wget"
|
|
||||||
apt-get -y purge wget --auto-remove
|
|
||||||
|
|
||||||
echo "revert back apt lists"
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
rm -r /var/lib/apt/lists && mv $tempdir/lists /var/lib/apt/lists
|
|
||||||
}
|
|
||||||
|
|
||||||
_apk_install() {
|
|
||||||
tempdir=$1
|
|
||||||
# copy current state of apk cache - in order to revert back later (minimize contianer layer size)
|
|
||||||
cp -p -R /var/cache/apk $tempdir
|
|
||||||
|
|
||||||
apk add --no-cache wget
|
|
||||||
}
|
|
||||||
|
|
||||||
_apk_cleanup() {
|
|
||||||
tempdir=$1
|
|
||||||
|
|
||||||
echo "removing wget"
|
|
||||||
apk del wget
|
|
||||||
}
|
|
||||||
# try to use either wget or curl if one of them already installer
|
|
||||||
if type curl >/dev/null 2>&1; then
|
|
||||||
downloader=curl
|
|
||||||
elif type wget >/dev/null 2>&1; then
|
|
||||||
downloader=wget
|
|
||||||
else
|
|
||||||
downloader=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
# in case none of them is installed, install wget temporarly
|
|
||||||
if [ -z $downloader ] ; then
|
|
||||||
if [ -x "/usr/bin/apt-get" ] ; then
|
|
||||||
_apt_get_install $tempdir
|
|
||||||
elif [ -x "/sbin/apk" ] ; then
|
|
||||||
_apk_install $tempdir
|
|
||||||
else
|
|
||||||
echo "distro not supported"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
downloader="wget"
|
|
||||||
downloader_installed="true"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $downloader = "wget" ] ; then
|
|
||||||
wget -q $url -O $output_location
|
|
||||||
else
|
|
||||||
curl -sfL $url -o $output_location
|
|
||||||
fi
|
|
||||||
|
|
||||||
# NOTE: the cleanup procedure was not implemented using `trap X RETURN` only because
|
|
||||||
# alpine lack bash, and RETURN is not a valid signal under sh shell
|
|
||||||
if ! [ -z $downloader_installed ] ; then
|
|
||||||
if [ -x "/usr/bin/apt-get" ] ; then
|
|
||||||
_apt_get_cleanup $tempdir
|
|
||||||
elif [ -x "/sbin/apk" ] ; then
|
|
||||||
_apk_cleanup $tempdir
|
|
||||||
else
|
|
||||||
echo "distro not supported"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ensure_nanolayer() {
|
|
||||||
# Ensure existance of the nanolayer cli program
|
|
||||||
local variable_name=$1
|
|
||||||
|
|
||||||
local required_version=$2
|
|
||||||
|
|
||||||
local __nanolayer_location=""
|
|
||||||
|
|
||||||
# If possible - try to use an already installed nanolayer
|
|
||||||
if [ -z "${NANOLAYER_FORCE_CLI_INSTALLATION}" ]; then
|
|
||||||
if [ -z "${NANOLAYER_CLI_LOCATION}" ]; then
|
|
||||||
if type nanolayer >/dev/null 2>&1; then
|
|
||||||
echo "Found a pre-existing nanolayer in PATH"
|
|
||||||
__nanolayer_location=nanolayer
|
|
||||||
fi
|
|
||||||
elif [ -f "${NANOLAYER_CLI_LOCATION}" ] && [ -x "${NANOLAYER_CLI_LOCATION}" ] ; then
|
|
||||||
__nanolayer_location=${NANOLAYER_CLI_LOCATION}
|
|
||||||
echo "Found a pre-existing nanolayer which were given in env variable: $__nanolayer_location"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# make sure its of the required version
|
|
||||||
if ! [ -z "${__nanolayer_location}" ]; then
|
|
||||||
local current_version
|
|
||||||
current_version=$($__nanolayer_location --version)
|
|
||||||
|
|
||||||
|
|
||||||
if ! [ $current_version == $required_version ]; then
|
|
||||||
echo "skipping usage of pre-existing nanolayer. (required version $required_version does not match existing version $current_version)"
|
|
||||||
__nanolayer_location=""
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If not previuse installation found, download it temporarly and delete at the end of the script
|
|
||||||
if [ -z "${__nanolayer_location}" ]; then
|
|
||||||
|
|
||||||
if [ "$(uname -sm)" = 'Linux x86_64' ] || [ "$(uname -sm)" = "Linux aarch64" ]; then
|
|
||||||
tmp_dir=$(mktemp -d -t nanolayer-XXXXXXXXXX)
|
|
||||||
|
|
||||||
clean_up () {
|
|
||||||
ARG=$?
|
|
||||||
rm -rf $tmp_dir
|
|
||||||
exit $ARG
|
|
||||||
}
|
|
||||||
trap clean_up EXIT
|
|
||||||
|
|
||||||
|
|
||||||
if [ -x "/sbin/apk" ] ; then
|
|
||||||
clib_type=musl
|
|
||||||
else
|
|
||||||
clib_type=gnu
|
|
||||||
fi
|
|
||||||
|
|
||||||
tar_filename=nanolayer-"$(uname -m)"-unknown-linux-$clib_type.tgz
|
|
||||||
|
|
||||||
# clean download will minimize leftover in case a downloaderlike wget or curl need to be installed
|
|
||||||
clean_download https://github.com/devcontainers-contrib/cli/releases/download/$required_version/$tar_filename $tmp_dir/$tar_filename
|
|
||||||
|
|
||||||
tar xfzv $tmp_dir/$tar_filename -C "$tmp_dir"
|
|
||||||
chmod a+x $tmp_dir/nanolayer
|
|
||||||
__nanolayer_location=$tmp_dir/nanolayer
|
|
||||||
|
|
||||||
|
|
||||||
else
|
|
||||||
echo "No binaries compiled for non-x86-linux architectures yet: $(uname -m)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Expose outside the resolved location
|
|
||||||
export ${variable_name}=$__nanolayer_location
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
# 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 .
|
|
||||||
|
|
||||||
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)'"
|
|
||||||
|
|
||||||
|
|
||||||
# Report result
|
|
||||||
# If any of the checks above exited with a non-zero exit code, the test will fail.
|
|
||||||
reportResults
|
|
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"color_and_hello": {
|
|
||||||
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
|
|
||||||
"features": {
|
|
||||||
"color": {
|
|
||||||
"favorite": "purple"
|
|
||||||
},
|
|
||||||
"hello": {
|
|
||||||
"greeting": "Greetings"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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 <LABEL> <cmd> [args...]
|
|
||||||
check "validate favorite color" color | grep 'my favorite color is red'
|
|
||||||
|
|
||||||
# Report result
|
|
||||||
# If any of the checks above exited with a non-zero exit code, the test will fail.
|
|
||||||
reportResults
|
|
@ -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 "greeting": "hello" 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 "hello | grep 'hello, $(whoami)!'"
|
|
||||||
|
|
||||||
# Report results
|
|
||||||
# If any of the checks above exited with a non-zero exit code, the test will fail.
|
|
||||||
reportResults
|
|
@ -1,10 +0,0 @@
|
|||||||
{
|
|
||||||
"hello": {
|
|
||||||
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
|
|
||||||
"features": {
|
|
||||||
"hello": {
|
|
||||||
"greeting": "hello"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# This test file will be executed against an auto-generated devcontainer.json that
|
|
||||||
# includes the 'hello' 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": {
|
|
||||||
# "hello": {}
|
|
||||||
# },
|
|
||||||
# "remoteUser": "root"
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# Thus, the value of all options will fall back to the default value in
|
|
||||||
# the Feature's 'devcontainer-feature.json'.
|
|
||||||
# For the 'hello' feature, that means the default favorite greeting is 'hey'.
|
|
||||||
#
|
|
||||||
# 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 hello \
|
|
||||||
# --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 <LABEL> <cmd> [args...]
|
|
||||||
check "execute command" bash -c "hello | grep 'hey, $(whoami)!'"
|
|
||||||
|
|
||||||
# Report results
|
|
||||||
# If any of the checks above exited with a non-zero exit code, the test will fail.
|
|
||||||
reportResults
|
|
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"hello": {
|
"wine_specified_version": {
|
||||||
"image": "mcr.microsoft.com/devcontainers/base:debian",
|
"image": "mcr.microsoft.com/devcontainers/base:debian",
|
||||||
"features": {
|
"features": {
|
||||||
"wine": {
|
"wine": {
|
||||||
"version": "8.15"
|
"version": "8.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,47 +1,9 @@
|
|||||||
#!/bin/bash
|
a#!/bin/bash
|
||||||
|
|
||||||
# This test file will be executed against an auto-generated devcontainer.json that
|
|
||||||
# includes the 'hello' 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": {
|
|
||||||
# "hello": {}
|
|
||||||
# },
|
|
||||||
# "remoteUser": "root"
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# Thus, the value of all options will fall back to the default value in
|
|
||||||
# the Feature's 'devcontainer-feature.json'.
|
|
||||||
# For the 'hello' feature, that means the default favorite greeting is 'hey'.
|
|
||||||
#
|
|
||||||
# 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 hello \
|
|
||||||
# --remote-user root \
|
|
||||||
# --skip-scenarios \
|
|
||||||
# --base-image mcr.microsoft.com/devcontainers/base:ubuntu \
|
|
||||||
# /path/to/this/repo
|
|
||||||
|
|
||||||
set -e
|
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
|
source dev-container-features-test-lib
|
||||||
|
|
||||||
# Feature-specific tests
|
check "wine exists" wine --version
|
||||||
# The 'check' command comes from the dev-container-features-test-lib. Syntax is...
|
check
|
||||||
# check <LABEL> <cmd> [args...]
|
|
||||||
check "execute command" bash -c "hello | grep 'hey, $(whoami)!'"
|
|
||||||
|
|
||||||
# Report results
|
|
||||||
# If any of the checks above exited with a non-zero exit code, the test will fail.
|
|
||||||
reportResults
|
reportResults
|
9
test/wine/wine_specified_version.sh
Normal file
9
test/wine/wine_specified_version.sh
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
source dev-container-features-test-lib
|
||||||
|
|
||||||
|
check "wine version is same" [[ "$(wine --version | tr -d -c 0-9.)" == *"8.5"* ]]
|
||||||
|
check
|
||||||
|
|
||||||
|
reportResults
|
Loading…
Reference in New Issue
Block a user