Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add azure-cli-persistence copied from was-cli-persistence #59

Merged
merged 2 commits into from
May 10, 2024
Merged
Show file tree
Hide file tree
Changes from all 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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ This repo contains my custom devcontainer features.
| [github-cli-persistence](./src/github-cli-persistence) | Avoid extra logins from the Github CLI by preserving the `~/.config/gh` folder across container instances. |
| [terraform-cli-persistence](./src/terraform-cli-persistence) | Avoid extra logins from the Terraform CLI by preserving the `~/.terraform.d` folder across container instances. |
| [aws-cli-persistence](./src/aws-cli-persistence) | Avoid extra logins from the AWS CLI by preserving the `~/.aws` folder across container instances. |
| [azure-cli-persistence](./src/azure-cli-persistence) | Avoid extra logins from the Azure CLI by preserving the `~/.azure` folder across container instances. |
| [gcloud-cli-persistence](./src/gcloud-cli-persistence) | Avoid extra logins from the Google Cloud CLI by preserving the `~/.config/gcloud` folder across container instances. |
| [lamdera](./src/lamdera) | Installs [Lamdera](https://dashboard.lamdera.app/), a type-safe full-stack web-app platform for Elm (v1.1.0 and later). |
| [mount-pnpm-store](./src/mount-pnpm-store) | Mounts the pnpm store to a volume to share between multiple devcontainers. |
Expand Down
17 changes: 17 additions & 0 deletions src/azure-cli-persistence/NOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## OS and Architecture Support

Architectures: `amd` and `arm`

OS: `ubuntu`, `debian`

Shells: `bash`, `zsh`, `fish`

## Changelog

| Version | Notes |
| ------- | ----------------------------------------------- |
| 0.0.1 | Initial Version |

## References

- [stuartleeks/azure-cli-persistence](https://github.com/stuartleeks/dev-container-features/tree/main/src/azure-cli-persistence)
41 changes: 41 additions & 0 deletions src/azure-cli-persistence/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@

# Azure CLI Persistence (azure-cli-persistence)

Avoid extra logins from the Azure CLI by preserving the `~/.azure` folder across container instances.

## Example Usage

```json
"features": {
"ghcr.io/joshuanianji/devcontainer-features/azure-cli-persistence:1": {}
}
```

## Options

| Options Id | Description | Type | Default Value |
|-----|-----|-----|-----|


## OS and Architecture Support

Architectures: `amd` and `arm`

OS: `ubuntu`, `debian`

Shells: `bash`, `zsh`, `fish`

## Changelog

| Version | Notes |
| ------- | ----------------------------------------------- |
| 0.0.1 | Initial Version |

## References

- [stuartleeks/azure-cli-persistence](https://github.com/stuartleeks/dev-container-features/tree/main/src/azure-cli-persistence)


---

_Note: This file was auto-generated from the [devcontainer-feature.json](https://github.com/joshuanianji/devcontainer-features/blob/main/src/azure-cli-persistence/devcontainer-feature.json). Add additional notes to a `NOTES.md`._
23 changes: 23 additions & 0 deletions src/azure-cli-persistence/devcontainer-feature.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "Azure CLI Persistence",
"id": "azure-cli-persistence",
Copy link
Owner

Choose a reason for hiding this comment

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

I think devcontainer feature IDs need to be unique - maybe change this to azure-cli-persistence-new or something similar? I think the name can stay the same.

We can also update the description field to something similar to "(fork of stuartleeks): "

"version": "0.0.1",
"documentationURL": "https://github.com/joshuanianji/devcontainer-features/tree/main/src/azure-cli-persistence",
"description": "Avoid extra logins from the Azure CLI by preserving the `~/.azure` folder across container instances.",
"options": {},
"mounts": [
{
"source": "${devcontainerId}-azure-cli",
"target": "/dc/azure-cli",
"type": "volume"
}
],
"installsAfter": [
"ghcr.io/devcontainers/features/azure-cli",
"ghcr.io/devcontainers/features/common-utils",
"ghcr.io/meaningful-ooo/devcontainer-features/fish"
],
"onCreateCommand": {
"azure-cli-persistence-setup": "/usr/local/share/azure-cli-persistence/scripts/oncreate.sh"
}
}
52 changes: 52 additions & 0 deletions src/azure-cli-persistence/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/bin/sh

USERNAME=${USERNAME:-${_REMOTE_USER}}
FEATURE_ID="azure-cli-persistence"
LIFECYCLE_SCRIPTS_DIR="/usr/local/share/${FEATURE_ID}/scripts"

set -e

create_cache_dir() {
if [ -d "$1" ]; then
echo "Cache directory $1 already exists. Skip creation..."
else
echo "Create cache directory $1..."
mkdir -p "$1"
fi

if [ -z "$2" ]; then
echo "No username provided. Skip chown..."
else
echo "Change owner of $1 to $2..."
chown -R "$2:$2" "$1"
fi
}

create_symlink_dir() {
local local_dir=$1
local cache_dir=$2
local username=$3

runuser -u "$username" -- mkdir -p "$(dirname "$local_dir")"
runuser -u "$username" -- mkdir -p "$cache_dir"

# if the folder we want to symlink already exists, the ln -s command will create a folder inside the existing folder
if [ -e "$local_dir" ]; then
echo "Moving existing $local_dir folder to $local_dir-old"
mv "$local_dir" "$local_dir-old"
fi

echo "Symlink $local_dir to $cache_dir for $username..."
runuser -u "$username" -- ln -s "$cache_dir" "$local_dir"
}

create_cache_dir "/dc/azure-cli" "${USERNAME}"
create_symlink_dir "$_REMOTE_USER_HOME/.azure" "/dc/azure-cli" "${USERNAME}"

# Set Lifecycle scripts
if [ -f oncreate.sh ]; then
mkdir -p "${LIFECYCLE_SCRIPTS_DIR}"
cp oncreate.sh "${LIFECYCLE_SCRIPTS_DIR}/oncreate.sh"
fi

echo "Finished installing $FEATURE_ID"
9 changes: 9 additions & 0 deletions src/azure-cli-persistence/oncreate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/sh

set -e

# if the user is not root, chown /dc/azure-cli to the user
if [ "$(id -u)" != "0" ]; then
echo "Running oncreate.sh for user $USER"
sudo chown -R "$USER:$USER" /dc/azure-cli
fi
26 changes: 26 additions & 0 deletions test/azure-cli-persistence/_default.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash

set -e

# This script is the "default" test script for the azure-cli-persistence feature.
# It is not run as a scenario, but is run by other test scripts.

# Optional: Import test library
source dev-container-features-test-lib

# check that `azure --help` works
check "help" bash -c "azure help | grep 'usage'"
Copy link
Owner

Choose a reason for hiding this comment

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

Think tests are failing because this should be `az help, but other than that the tests seem good


# check that `.azure` and `/dc/azure-cli` exist under the user (should be node)
check "~/.azure existence" bash -c "ls -la ~ | grep '.azure'"
check "/dc/azure-cli existence" bash -c "ls -la /dc | grep 'azure-cli'"

# check that the folders are owned by the user
# https://askubuntu.com/a/175060
echo "Checking ownership of ~/.azure and /dc/azure-cli (ensure it is owned by $USER)"

check "~/.azure owned by user" bash -c "test \"$(stat -c "%U" ~/.azure)\" = $USER"
check "/dc/azure-cli owned by user" bash -c "test \"$(stat -c "%U" /dc/azure-cli)\" = $USER"

# Report result
reportResults
7 changes: 7 additions & 0 deletions test/azure-cli-persistence/fish_shell.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash

set -e

# Run default test script (in same folder)
# See: https://github.com/devcontainers/features/blob/562305d37b97d47331d96306ffc2a0a3cce55e64/test/azure-cli/install_extensions_bookworm.sh
./_default.sh
9 changes: 9 additions & 0 deletions test/azure-cli-persistence/root_user.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash

set -e

source dev-container-features-test-lib

# Run default test script (in same folder)
# See: https://github.com/devcontainers/features/blob/562305d37b97d47331d96306ffc2a0a3cce55e64/test/azure-cli/install_extensions_bookworm.sh
./_default.sh
35 changes: 35 additions & 0 deletions test/azure-cli-persistence/scenarios.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"with_node": {
"image": "mcr.microsoft.com/devcontainers/javascript-node:1-18",
"features": {
"ghcr.io/devcontainers/features/azure-cli": {},
"azure-cli-persistence": {}
}
},
"zsh_shell": {
"image": "mcr.microsoft.com/devcontainers/base:debian",
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"configureZshAsDefaultShell": true
},
"ghcr.io/devcontainers/features/azure-cli": {},
"azure-cli-persistence": {}
}
},
"fish_shell": {
"image": "mcr.microsoft.com/devcontainers/base:debian",
"features": {
"ghcr.io/meaningful-ooo/devcontainer-features/fish:1": {},
"ghcr.io/devcontainers/features/azure-cli": {},
"azure-cli-persistence": {}
}
},
"root_user": {
"image": "mcr.microsoft.com/devcontainers/base:debian",
"features": {
"ghcr.io/devcontainers/features/azure-cli": {},
"azure-cli-persistence": {}
},
"remoteUser": "root"
}
}
21 changes: 21 additions & 0 deletions test/azure-cli-persistence/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash

set -e

# Optional: Import test library
source dev-container-features-test-lib

# NOTE: azure is not installed inside the `test.sh` run
# see: test/github-cli-persistence/test.sh


# check that `~/.azure` and `/dc/azure-cli` exist`
check "~/.azure existence" bash -c "ls -la ~ | grep '.azure'"
check "/dc/azure-cli existence" bash -c "ls -la /dc | grep 'azure-cli'"

# check that `~/.azure` is a symlink
# https://unix.stackexchange.com/a/96910
check "~/.azure is a symlink" bash -c "test -L ~/.azure && test -d ~/.azure"

# Report result
reportResults
7 changes: 7 additions & 0 deletions test/azure-cli-persistence/with_node.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash

set -e

# Run default test script (in same folder)
# See: https://github.com/devcontainers/features/blob/562305d37b97d47331d96306ffc2a0a3cce55e64/test/azure-cli/install_extensions_bookworm.sh
./_default.sh
7 changes: 7 additions & 0 deletions test/azure-cli-persistence/zsh_shell.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash

set -e

# Run default test script (in same folder)
# See: https://github.com/devcontainers/features/blob/562305d37b97d47331d96306ffc2a0a3cce55e64/test/azure-cli/install_extensions_bookworm.sh
./_default.sh
Loading