aqua を install する Development Container Feature を作ってみる
きっかけはこれ
Development Containers の spec はこれ
Custom の Development Container Feature の作り方は
template repository
GitHub Actions
1 つのリポジトリで複数の feature を管理でき、 feature ごとに semver でバージョン管理できる。
特に複数の feature を作る予定はないのだが、 template とかツールが複数構成を前提にしている気がするので、それに従ったほうが良い気がする。
src/
aqua/
devcontainer-feature.json
install.sh
- devcontainer-feature.json
- install.sh
この 2 つのファイルを用意すれば良い。
hello を見るとかなりシンプルである。
リリースは GHCR (GitHub Container Registry) に publish する。
public にする。
GitHub Action とサンプルの Workflow が提供されている。
workflow_dispatch を引数無しで実行すればいいのかな。
とりあえず Fork
PATH の追加もできると良い
$ export PATH="${AQUA_ROOT_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/aquaproj-aqua}/bin:$PATH"
Requires the container be recreated / rebuilt to change. If you want to reference an existing container variable while setting this one (like updating the PATH), use remoteEnv instead.
あと AQUA_ROOT_DIR は host に mount できると便利
まずは devevelopment containers でコンテナを起動したい。
とりあえず最低限これでも動いた。
.devcontainer/
devcontainer.json
{
"name": "Example Development Containers",
"image": "alpine:3.16.2"
}
$ devcontainer up --workspace-folder .
$ devcontainer exec --workspace-folder . whoami
root
{"outcome":"success"}
{
"name": "Example Development Containers",
"build": {
"dockerfile": "Dockerfile"
},
"postStartCommand": "aqua i -l",
"remoteEnv": {
"PATH": "/root/.local/share/aquaproj-aqua/bin:${containerEnv:PATH}"
}
}
FROM alpine:3.16.2
RUN apk add curl \
&& curl -sSfL \
https://raw.githubusercontent.com/aquaproj/aqua-installer/v1.1.2/aqua-installer | sh
---
# aqua - Declarative CLI Version Manager
# https://aquaproj.github.io/
checksum:
# https://aquaproj.github.io/docs/reference/checksum/
enabled: true
require_checksum: true
registries:
- type: standard
ref: v3.72.0 # renovate: depName=aquaproj/aqua-registry
packages:
- name: hashicorp/terraform@v1.3.2
$ devcontainer exec --workspace-folder . terraform version
dependencies の扱い
aqua-installer を実行するには curl か wget が必要
- feature でインストールする
- feature の dependency として curl をインストールする feature を指定する
- インストールしない。任せる
feature の test
devcontainer features test でテストができるが、テスト実行時に curl をインストールする必要がある。
シナリオテストが実行できるが、流れとして
- feature の実行
- test スクリプトの実行
になっているので、 feature を実行する前に setup を行いたい。
Dockerfile を指定できそうなので、 Dockerfile で curl をインストールすればいいのでは
AQUA_ROOT_DIR の永続化
devcontainer でコンテナを作り直すたびに package をインストールするのは体験が悪いので永続化したい
mounts option がある
type は
- bind
- volume
- tmpfs
volume が良さそう
"mounts": [{ "target": "/root/.local/share/aquaproj-aqua", "type": "volume" }]