Skip to content
This repository was archived by the owner on Nov 30, 2023. It is now read-only.

AWS CLI feature #1326

Merged
merged 8 commits into from
Mar 8, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions script-library/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Some scripts have special installation instructions (like `desktop-lite-debian.s

| Document | Script | Maintainers |
|----------|--------|------------|
| [AWS CLI Install Script](docs/awscli.md) | `awscli-debian.sh` | VS Code and GitHub Codespaces teams |
| [Azure CLI Install Script](docs/azcli.md) | `azcli-debian.sh` | VS Code and GitHub Codespaces teams |
| [Common Script](docs/common.md) | `common-debian.sh`<br />`common-alpine.sh`<br />`common-redhat.sh` (Community) | VS Code and GitHub Codespaces teams |
| [Desktop (Lightweight) Install Script](docs/desktop-lite.md) | `desktop-lite-debian.sh` | VS Code and GitHub Codespaces teams|
Expand Down Expand Up @@ -97,7 +98,7 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get clean -y && rm -rf /var/lib/apt/lists/*
```

As before, the last line is technically optional, but minimizes the size of the layer by removing temporary contents.
As before, the last line is technically optional, but minimizes the size of the layer by removing temporary contents.

You can also use `wget`:

Expand Down Expand Up @@ -153,4 +154,3 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md) for details on contributing definition
Copyright (c) Microsoft Corporation. All rights reserved.

Licensed under the MIT License. See [LICENSE](https://github.com/microsoft/vscode-dev-containers/blob/main/LICENSE)

99 changes: 99 additions & 0 deletions script-library/awscli-debian.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
#!/usr/bin/env bash
#-------------------------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
#-------------------------------------------------------------------------------------------------------------
#
# Docs: https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/awscli.md
# Maintainer: The VS Code and Codespaces Teams
#
# Syntax: ./awscli-debian.sh [AWS CLI version]

set -e

AWSCLI_VERSION=${1:-"latest"}

if [ "$(id -u)" -ne 0 ]; then
echo -e 'Script must be run as root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.'
exit 1
fi

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To get this model to work, you'd still include the key as the default along with the get_common_setting script. Add the following:

Suggested change
AWSCLI_GPG_KEY=FB5DB77FD5C118B80511ADA8A6310ACC4672475C
AWSCLI_GPG_KEY_MATERIAL="-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBF2Cr7UBEADJZHcgusOJl7ENSyumXh85z0TRV0xJorM2B/JL0kHOyigQluUG
ZMLhENaG0bYatdrKP+3H91lvK050pXwnO/R7fB/FSTouki4ciIx5OuLlnJZIxSzx
PqGl0mkxImLNbGWoi6Lto0LYxqHN2iQtzlwTVmq9733zd3XfcXrZ3+LblHAgEt5G
TfNxEKJ8soPLyWmwDH6HWCnjZ/aIQRBTIQ05uVeEoYxSh6wOai7ss/KveoSNBbYz
gbdzoqI2Y8cgH2nbfgp3DSasaLZEdCSsIsK1u05CinE7k2qZ7KgKAUIcT/cR/grk
C6VwsnDU0OUCideXcQ8WeHutqvgZH1JgKDbznoIzeQHJD238GEu+eKhRHcz8/jeG
94zkcgJOz3KbZGYMiTh277Fvj9zzvZsbMBCedV1BTg3TqgvdX4bdkhf5cH+7NtWO
lrFj6UwAsGukBTAOxC0l/dnSmZhJ7Z1KmEWilro/gOrjtOxqRQutlIqG22TaqoPG
fYVN+en3Zwbt97kcgZDwqbuykNt64oZWc4XKCa3mprEGC3IbJTBFqglXmZ7l9ywG
EEUJYOlb2XrSuPWml39beWdKM8kzr1OjnlOm6+lpTRCBfo0wa9F8YZRhHPAkwKkX
XDeOGpWRj4ohOx0d2GWkyV5xyN14p2tQOCdOODmz80yUTgRpPVQUtOEhXQARAQAB
tCFBV1MgQ0xJIFRlYW0gPGF3cy1jbGlAYW1hem9uLmNvbT6JAlQEEwEIAD4WIQT7
Xbd/1cEYuAURraimMQrMRnJHXAUCXYKvtQIbAwUJB4TOAAULCQgHAgYVCgkICwIE
FgIDAQIeAQIXgAAKCRCmMQrMRnJHXJIXEAChLUIkg80uPUkGjE3jejvQSA1aWuAM
yzy6fdpdlRUz6M6nmsUhOExjVIvibEJpzK5mhuSZ4lb0vJ2ZUPgCv4zs2nBd7BGJ
MxKiWgBReGvTdqZ0SzyYH4PYCJSE732x/Fw9hfnh1dMTXNcrQXzwOmmFNNegG0Ox
au+VnpcR5Kz3smiTrIwZbRudo1ijhCYPQ7t5CMp9kjC6bObvy1hSIg2xNbMAN/Do
ikebAl36uA6Y/Uczjj3GxZW4ZWeFirMidKbtqvUz2y0UFszobjiBSqZZHCreC34B
hw9bFNpuWC/0SrXgohdsc6vK50pDGdV5kM2qo9tMQ/izsAwTh/d/GzZv8H4lV9eO
tEis+EpR497PaxKKh9tJf0N6Q1YLRHof5xePZtOIlS3gfvsH5hXA3HJ9yIxb8T0H
QYmVr3aIUes20i6meI3fuV36VFupwfrTKaL7VXnsrK2fq5cRvyJLNzXucg0WAjPF
RrAGLzY7nP1xeg1a0aeP+pdsqjqlPJom8OCWc1+6DWbg0jsC74WoesAqgBItODMB
rsal1y/q+bPzpsnWjzHV8+1/EtZmSc8ZUGSJOPkfC7hObnfkl18h+1QtKTjZme4d
H17gsBJr+opwJw/Zio2LMjQBOqlm3K1A4zFTh7wBC7He6KPQea1p2XAMgtvATtNe
YLZATHZKTJyiqA==
=vYOk
-----END PGP PUBLIC KEY BLOCK-----"
get_common_setting() {
if [ "${common_settings_file_loaded}" != "true" ]; then
curl -sfL "https://aka.ms/vscode-dev-containers/script-library/settings.env" 2>/dev/null -o /tmp/vsdc-settings.env || echo "Could not download settings file. Skipping."
common_settings_file_loaded=true
fi
if [ -f "/tmp/vsdc-settings.env" ]; then
local multi_line=""
if [ "$2" = "true" ]; then multi_line="-z"; fi
local result="$(grep ${multi_line} -oP "$1=\"?\K[^\"]+" /tmp/vsdc-settings.env | tr -d '\0')"
if [ ! -z "${result}" ]; then declare -g $1="${result}"; fi
fi
echo "$1=${!1}"
}

This will update the setting if one is found and otherwise use what is embedded in the script. This is particularly critical for testing.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I think I follow... I don't love having this giant base64 blob in two places, but I get that the script needs a default. Why would I add the get_common_setting function though, if it's already in shared/utils.sh? I see that this function exists in the related azcli-debian.sh script, but I don't get why its necessary there either. The body is identical to the shared function.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do not download and source that file in separately right now. Users do tend to go to these files directly and curl the script in without the utility as well, so we try to keep them self-contained. So, there's a legacy here we're dealing with TBH.

As the features functionality stabilizes, we'll shuffle things around, but there's a bit of a dual use here today.

So, this is point-in-time.

Copy link
Member

@Chuxel Chuxel Mar 8, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh and on the blob, yes - the idea with the central file is for out of band updates. There are pros-and-cons with having a default value here. Technically we could separate updating the settings.env part of the PR out, merge that first, then merge the script itself. That would be the alternative which would work too.

What having a value here does is that it creates a fallback value if for some reason the script is unable to pull common settings.env file for some reason (network blips, etc). The get_common_setting script intentionally prints just a warning (Could not download settings file. Skipping.) and continues on using whatever the value was before that point.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair enough, I can accept "because legacy" lol. Added get_common_setting in 72b8a9a.

verify_aws_cli_gpg_signature() {
local filePath=$1
local sigFilePath=$2

local awsCliKeyFingerprint=FB5DB77FD5C118B80511ADA8A6310ACC4672475C
local awsCliPublicKeyFile=aws-cli-public-key.pem
(
cat <<EOF
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBF2Cr7UBEADJZHcgusOJl7ENSyumXh85z0TRV0xJorM2B/JL0kHOyigQluUG
ZMLhENaG0bYatdrKP+3H91lvK050pXwnO/R7fB/FSTouki4ciIx5OuLlnJZIxSzx
PqGl0mkxImLNbGWoi6Lto0LYxqHN2iQtzlwTVmq9733zd3XfcXrZ3+LblHAgEt5G
TfNxEKJ8soPLyWmwDH6HWCnjZ/aIQRBTIQ05uVeEoYxSh6wOai7ss/KveoSNBbYz
gbdzoqI2Y8cgH2nbfgp3DSasaLZEdCSsIsK1u05CinE7k2qZ7KgKAUIcT/cR/grk
C6VwsnDU0OUCideXcQ8WeHutqvgZH1JgKDbznoIzeQHJD238GEu+eKhRHcz8/jeG
94zkcgJOz3KbZGYMiTh277Fvj9zzvZsbMBCedV1BTg3TqgvdX4bdkhf5cH+7NtWO
lrFj6UwAsGukBTAOxC0l/dnSmZhJ7Z1KmEWilro/gOrjtOxqRQutlIqG22TaqoPG
fYVN+en3Zwbt97kcgZDwqbuykNt64oZWc4XKCa3mprEGC3IbJTBFqglXmZ7l9ywG
EEUJYOlb2XrSuPWml39beWdKM8kzr1OjnlOm6+lpTRCBfo0wa9F8YZRhHPAkwKkX
XDeOGpWRj4ohOx0d2GWkyV5xyN14p2tQOCdOODmz80yUTgRpPVQUtOEhXQARAQAB
tCFBV1MgQ0xJIFRlYW0gPGF3cy1jbGlAYW1hem9uLmNvbT6JAlQEEwEIAD4WIQT7
Xbd/1cEYuAURraimMQrMRnJHXAUCXYKvtQIbAwUJB4TOAAULCQgHAgYVCgkICwIE
FgIDAQIeAQIXgAAKCRCmMQrMRnJHXJIXEAChLUIkg80uPUkGjE3jejvQSA1aWuAM
yzy6fdpdlRUz6M6nmsUhOExjVIvibEJpzK5mhuSZ4lb0vJ2ZUPgCv4zs2nBd7BGJ
MxKiWgBReGvTdqZ0SzyYH4PYCJSE732x/Fw9hfnh1dMTXNcrQXzwOmmFNNegG0Ox
au+VnpcR5Kz3smiTrIwZbRudo1ijhCYPQ7t5CMp9kjC6bObvy1hSIg2xNbMAN/Do
ikebAl36uA6Y/Uczjj3GxZW4ZWeFirMidKbtqvUz2y0UFszobjiBSqZZHCreC34B
hw9bFNpuWC/0SrXgohdsc6vK50pDGdV5kM2qo9tMQ/izsAwTh/d/GzZv8H4lV9eO
tEis+EpR497PaxKKh9tJf0N6Q1YLRHof5xePZtOIlS3gfvsH5hXA3HJ9yIxb8T0H
QYmVr3aIUes20i6meI3fuV36VFupwfrTKaL7VXnsrK2fq5cRvyJLNzXucg0WAjPF
RrAGLzY7nP1xeg1a0aeP+pdsqjqlPJom8OCWc1+6DWbg0jsC74WoesAqgBItODMB
rsal1y/q+bPzpsnWjzHV8+1/EtZmSc8ZUGSJOPkfC7hObnfkl18h+1QtKTjZme4d
H17gsBJr+opwJw/Zio2LMjQBOqlm3K1A4zFTh7wBC7He6KPQea1p2XAMgtvATtNe
YLZATHZKTJyiqA==
=vYOk
-----END PGP PUBLIC KEY BLOCK-----
EOF
) > "${awsCliPublicKeyFile}"
gpg --quiet --import "${awsCliPublicKeyFile}"

gpg --batch --quiet --verify "${sigFilePath}" "${filePath}"
local status=$?

gpg --batch --quiet --delete-keys "${awsCliKeyFingerprint}"
rm "${awsCliPublicKeyFile}"

return ${status}
}

install() {
local scriptZipFile=awscli.zip
local scriptSigFile=awscli.sig

# See Linux install docs at https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
if [ "${AWSCLI_VERSION}" != "latest" ]; then
local versionStr=-${AWSCLI_VERSION}
fi
local scriptUrl=https://awscli.amazonaws.com/awscli-exe-linux-x86_64${versionStr}.zip
Copy link
Contributor

@sktan sktan Feb 28, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Rabadash8820 it might be useful to determine the architecture running the devcontainer so that it will work for both x64 and ARM architectures when installing awscli:

# Install x86 or ARM version of awscliv2 based on current machine architecture
if [ "$(uname -m)" == "x86_64" ]; then
  local scriptUrl=https://awscli.amazonaws.com/awscli-exe-linux-x86_64${versionStr}.zip
else
  local scriptUrl=https://awscli.amazonaws.com/awscli-exe-linux-aarch64${versionStr}.zip
fi

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great suggestion! Just updated. Also included an error message for machines that are not x84-64 or ARM64.

curl "${scriptUrl}" -o "${scriptZipFile}"
curl "${scriptUrl}.sig" -o "${scriptSigFile}"

verify_aws_cli_gpg_signature "$scriptZipFile" "$scriptSigFile"
if (( $? > 0 )); then
echo "Could not verify GPG signature of AWS CLI install script. Make sure you provided a valid version."
exit 1
fi

unzip "${scriptZipFile}"
./aws/install

rm -rf ./aws
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noticed that this script fails with the standard debian and ubuntu images due to the fact that curl and gpg are not in them. You can add the following to make sure these are installed if they're missing:

Suggested change
# Function to run apt-get if needed
apt_get_update_if_needed()
{
if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then
echo "Running apt-get update..."
apt-get update
else
echo "Skipping apt-get update."
fi
}
# Checks if packages are installed and installs them if not
check_packages() {
if ! dpkg -s "$@" > /dev/null 2>&1; then
apt_get_update_if_needed
apt-get -y install --no-install-recommends "$@"
fi
}
export DEBIAN_FRONTEND=noninteractive
check_packages curl ca-certificates gnupg2 dirmngr

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in eb14d69

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So I actually just noticed that these apt_get_update_if_needed and check_packages functions are already defined in the shared/utils.sh script. Why do they need to be defined again here (and in the Azure CLI install script)?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do not download and source that file in separately right now. Users do tend to go to these files directly and curl the script in without the utility as well, so we try to keep them self-contained. So, there's a legacy here we're dealing with TBH.

As the features functionality stabilizes, we'll shuffle things around, but there's a bit of a dual use here today.

echo "(*) Installing AWS CLI..."

install

echo "Done!"
30 changes: 20 additions & 10 deletions script-library/container-features/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ This folder includes some explorations around dynamic container feature injectio

**Registering a feature**

Create the install script in the [script-library](../../script-library/) directory with the naming convention `<lowercase-feature-name>-<target-os>.sh`. EG `python-debian.sh` or `common-alpine.sh`
Create the install script in the [script-library](../../script-library/) directory with the naming convention `<lowercase-feature-name>-<target-os>.sh`. E.g., `python-debian.sh` or `common-alpine.sh`

Add a new object to the [devcontainer-features.json](../../script-library/container-features/src/devcontainer-features.json) file:

```json
{
"id": "<lowercase-feature-name>", // Must match the <lowercase-feature-name> used to name the install script.
"name": "Display Name of Feature",
"documentationURL": "https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/<lowercase-feature-name>.md",
"documentationURL": "https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/<lowercase-feature-name>.md",
"options": {
"scriptArgument$1": {
"type": "string", // Either "string" or "boolean"
Expand All @@ -31,7 +31,7 @@ Add a new object to the [devcontainer-features.json](../../script-library/contai
}
},
"buildArg": "_VSC_INSTALL_<CAPITALIZED_ID>", // Must match the ENV VAR defined in the feature-scripts.env file.
"extensions": [], // Array of VS Code extensions to install with this feature.
"extensions": [], // Array of VS Code extensions to install with this feature.
"include": [] // Array of base containers this script can be used on.
}
```
Expand All @@ -43,7 +43,7 @@ _VSC_INSTALL_<FEATURE>="<feature>-debian.sh ${_BUILD_ARG_<FEATURE>_<OPTION1>:-<o
```

- Options declared in `devcontainer-features.json` are mapped using the naming convention `_BUILD_ARG_<FEATURE>_<OPTIONNAME>` and their default should match the declared default for that option.
- EG `_VSC_INSTALL_AZURE_CLI="azcli-debian.sh ${_BUILD_ARG_AZURE_CLI_VERSION:-latest}"`
- E.g., `_VSC_INSTALL_AZURE_CLI="azcli-debian.sh ${_BUILD_ARG_AZURE_CLI_VERSION:-latest}"`

**Feature testing**

Expand All @@ -59,21 +59,25 @@ _VSC_INSTALL_<FEATURE>="<feature>-debian.sh ${_BUILD_ARG_<FEATURE>_<OPTION1>:-<o
Repeat as needed to iterate from a clean workspace.

*Unit tests*

- Add your feature to the [run-scripts.sh](../../script-library/test/regression/run-scripts.sh) file to ensure it is included in CI tests.

- Your addition should take the form `runScript <feature> <non-default-args>`.

EG
E.g.:

```sh
runScript dotnet "3.1 true ${USERNAME} false /opt/dotnet dotnet"
```

- If your script takes the installation user as an argument, be sure to specify it as ${USERNAME} in the tests for programatic testing.

*Regression tests*

- Add your feature to the [test-features.env](../../script-library/container-features/test-features.env) file to include it in regression tests of the container-feature functionality. By setting the `_VSC_INSTALL_<FEATURE>` ENV VAR to true and adding the expected _BUILD_ARG options for your feature.

EG
E.g.:

```
_VSC_INSTALL_DOTNET=true
_BUILD_ARG_DOTNET_VERSION=latest
Expand All @@ -82,11 +86,12 @@ EG

**Feature documentation**

Add your new feature to the list of scripts in the [script-library README.md](https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/README.md#scripts).
Add your new feature to the list of scripts in the [script-library README.md](../../script-library/README.md#scripts).

Add documentation for your new feature script to the [script-library/docs](../../script-library/docs) directory.

Add documentation for your new feature script to the [script-library/docs](https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs) directory.
Documentation should include:

Documentation should include:
- the status of the script, supported operating systems, and maintainer.
- the syntax expected to run as a feature or script
- a description of the script arguments
Expand All @@ -97,6 +102,7 @@ Feel free to use other scripts in that directory as inspiration.
### Best practices for writing feature install scripts

- Decouple sections of the shellscript that handle user setup, helper functions, and feature installation. Doing so will apply a logical and natural flow to the script for future developers and maintainers to follow. One way to denote this distinction is to use in-line comments throughout the script.

```md
# Logical flow recommended:
1. File header and description.
Expand All @@ -109,6 +115,7 @@ Feel free to use other scripts in that directory as inspiration.
```

- One way to make troubleshooting the script easier when writing a bash shell script is to echo error messages to `STDERR`. A possible way we implemented this in bash scripts is to create an `err()` function like so:

```sh
# Setup STDERR.
err() {
Expand All @@ -119,12 +126,14 @@ Feel free to use other scripts in that directory as inspiration.
```

- If writing a bash shellscript, we recommend using double quotes and braces when referencing named variables:

```sh
variable="My example var"
echo "${variable}"
```

- One method to to ensure the global space in a script is not too crowded with unnecessary variables is to assign return values from functions to a new variable, and use the keyword `local` for vars inside of functions. For example:

```sh
test_function() {
local test = "hello world!"
Expand All @@ -134,6 +143,7 @@ Feel free to use other scripts in that directory as inspiration.
```

- If using temporary files within the script, we recommend removing all those files once they are no longer needed. One method for doing this is running a cleanup function with a `trap` method when the script exits:

```sh
# Cleanup temporary directory and associated files when exiting the script.
cleanup() {
Expand All @@ -150,7 +160,7 @@ Feel free to use other scripts in that directory as inspiration.

- Consider using [shellcheck](https://github.com/koalaman/shellcheck) or the [vscode-shellcheck extension](https://github.com/vscode-shellcheck/vscode-shellcheck) to apply linting and static code analysis to the bash script to ensure it is formatted correctly.

- Consider using common helper functions from [shared/utils.sh](../../script-library/shared/utils.sh) when managing common tasks (like updating PATH variables, or managing gpg keys) by copying them directly into your script.
- Consider using common helper functions from [shared/utils.sh](../../script-library/shared/utils.sh) when managing common tasks (like updating PATH variables, or managing gpg keys) by copying them directly into your script.
- NOTE: This is done to minimize the impact that any change can have on existing working scripts.
- Similarly, if you add a helper function to your script that could benefit others in the future, consider adding it to the `shared/utils.sh` file as well.

Expand Down
61 changes: 55 additions & 6 deletions script-library/container-features/src/devcontainer-features.json
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@
"HashiCorp.terraform",
"ms-azuretools.vscode-azureterraform"
],
"settings": {
"settings": {
"terraform.languageServer": {
"enabled": true,
"args": []
Expand Down Expand Up @@ -363,6 +363,53 @@
"python-3-postgres"
]
},
{
"id": "aws-cli",
"name": "AWS CLI",
"documentationURL": "https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/awscli.md",
"options": {
"version": {
"type": "string",
"proposals": [
"latest"
],
"default": "latest",
"description": "Select or enter an AWS CLI version. (Available versions here: https://github.com/aws/aws-cli/blob/v2/CHANGELOG.rst)"
}
},
"buildArg": "_VSC_INSTALL_AWS_CLI",
"extensions": [
"AmazonWebServices.aws-toolkit-vscode"
],
"include": [
"cpp",
"dotnet",
"dotnet-fsharp",
"dotnet-mssql",
"kubernetes-helm",
"kubernetes-helm-minikube",
"docker-from-docker",
"docker-in-docker",
"powershell",
"java",
"go",
"php",
"ruby",
"rust",
"typescript-node",
"javascript-node",
"python-3",
"python-3-anaconda",
"python-3-miniconda",
"ubuntu",
"debian",
"javascript-node-mongo",
"javascript-node-postgres",
"php-mariadb",
"ruby-rails-postgres",
"python-3-postgres"
]
},
{
"id": "azure-cli",
"name": "Azure CLI",
Expand Down Expand Up @@ -585,7 +632,8 @@
"NVM_DIR":"/usr/local/share/nvm",
"NVM_SYMLINK_CURRENT": "true",
"PATH": "${NVM_DIR}/current/bin:${PATH}"
}, "include": [
},
"include": [
"cpp",
"kubernetes-helm",
"kubernetes-helm-minikube",
Expand Down Expand Up @@ -630,7 +678,7 @@
"PIPX_BIN_DIR": "/usr/local/py-utils/bin",
"PATH":"${PYTHON_PATH}/bin:${PATH}:${PIPX_BIN_DIR}"
},
"settings": {
"settings": {
"python.defaultInterpreterPath": "/usr/local/bin/python",
"python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8",
"python.formatting.blackPath": "/usr/local/py-utils/bin/black",
Expand Down Expand Up @@ -832,7 +880,8 @@
"containerEnv": {
"SDKMAN_DIR": "/usr/local/sdkman",
"PATH": "${SDKMAN_DIR}/bin:${SDKMAN_DIR}/candidates/gradle/current/bin:${PATH}"
}, "include": [
},
"include": [
"cpp",
"kubernetes-helm",
"kubernetes-helm-minikube",
Expand Down Expand Up @@ -934,7 +983,7 @@
"mutantdino.resourcemonitor",
"matklad.rust-analyzer",
"tamasfe.even-better-toml",
"serayuzgur.crates"
"serayuzgur.crates"
],
"containerEnv": {
"CARGO_HOME": "/usr/local/cargo",
Expand Down Expand Up @@ -1123,4 +1172,4 @@
]
}
]
}
}
1 change: 1 addition & 0 deletions script-library/container-features/src/feature-scripts.env
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ _VSC_INSTALL_DOCKER_FROM_DOCKER="docker-debian.sh true /var/run/docker-host.sock
_VSC_INSTALL_KUBECTL_HELM_MINIKUBE="kubectl-helm-debian.sh ${_BUILD_ARG_KUBECTL_HELM_MINIKUBE_VERSION:-latest} ${_BUILD_ARG_KUBECTL_HELM_MINIKUBE_HELM:-latest} ${_BUILD_ARG_KUBECTL_HELM_MINIKUBE_MINIKUBE:-latest}"
_VSC_INSTALL_TERRAFORM="terraform-debian.sh ${_BUILD_ARG_TERRAFORM_VERSION:-latest} ${_BUILD_ARG_TERRAFORM_TFLINT:-latest} ${_BUILD_ARG_TERRAFORM_TERRAGRUNT:-latest}"
_VSC_INSTALL_GITHUB_CLI="github-debian.sh ${_BUILD_ARG_GITHUB_CLI_VERSION:-latest}"
_VSC_INSTALL_AWS_CLI="awscli-debian.sh ${_BUILD_ARG_AWS_CLI_VERSION:-latest}"
_VSC_INSTALL_AZURE_CLI="azcli-debian.sh ${_BUILD_ARG_AZURE_CLI_VERSION:-latest}"
_VSC_INSTALL_SSH=sshd-debian.sh
_VSC_INSTALL_NODE="node-debian.sh /usr/local/share/nvm ${_BUILD_ARG_NODE_VERSION:-lts/*} automatic true ${_BUILD_ARG_NODE_NODEGYPDEPENDENCIES:-true}"
Expand Down
Loading