Skip to content

Commit

Permalink
Merge pull request #62 from joshuanianji/robinmordasiewicz/main
Browse files Browse the repository at this point in the history
 Add azure-cli-persistence copied from aws-cli-persistence #59
  • Loading branch information
joshuanianji authored May 10, 2024
2 parents 4b1f9f8 + 761ecba commit 97c3cf3
Show file tree
Hide file tree
Showing 13 changed files with 255 additions and 0 deletions.
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 (forked)",
"id": "azure-cli-persistence-forked",
"version": "0.0.1",
"documentationURL": "https://github.com/joshuanianji/devcontainer-features/tree/main/src/azure-cli-persistence",
"description": "(fork of stuartleeks): 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 "az help | grep 'usage'"

# 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

0 comments on commit 97c3cf3

Please sign in to comment.