feat(devcontainer): build a Devcontainer with useful tools for this project

Also use said devcontainer i GitHub workflows to validate config.

* feat(devcontainer): build devcontainer

Signed-off-by: Vegard Hagen <[email protected]>

* feat(ci): validate tofu files on push

Signed-off-by: Vegard Hagen <[email protected]>

* feat(devcontainer): simplify devcontainer

Signed-off-by: Vegard Hagen <[email protected]>

* fix(devcontainer): don't cache package index

This will reduce the final image size.

Signed-off-by: Vegard Hagen <[email protected]>

* feat(devcontainer): switch to ubuntu and use devcontainer features as much as possible

Signed-off-by: Vegard Hagen <[email protected]>

---------

Signed-off-by: Vegard Hagen <[email protected]>
This commit is contained in:
Vegard Stenhjem Hagen
2025-07-13 23:18:26 +02:00
committed by GitHub
parent f5841b4a3b
commit 1deb5aced1
19 changed files with 271 additions and 219 deletions
+1
View File
@@ -0,0 +1 @@
FROM docker.io/ubuntu:24.04
+29
View File
@@ -0,0 +1,29 @@
# Devcontainer
A container with all the necessary tools and then some used in this homelab.
Check available features at [https://containers.dev/features](https://containers.dev/features),
or edit the `Containerfile`.
**Disclaimer**: this is a fairly untested feature from the main author,
feedback is welcome.
## Getting started
Find the appropriate guide for your IDE, e.g.
* [IDEA](https://www.jetbrains.com/help/idea/start-dev-container-inside-ide.html)
* [VSCode](https://code.visualstudio.com/docs/devcontainers/containers)
Alternatively, you can start the devcontainer manually by running
```shell
docker run -it --rm \
--user $(id -u):$(id -g) \
--name homelab-devcontainer \
--mount target=/tmp,type=tmpfs \
--mount type=bind,src=.,dst=/workspace \
--workdir /workspace \
ghcr.io/vehagn/homelab-devcontainer:latest
```
from the project root.
+46
View File
@@ -0,0 +1,46 @@
{
"name": "Stonegarden Homelab Devcontainer",
"build": {
"dockerfile": "Containerfile",
},
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": true,
"configureZshAsDefaultShell": true,
"installOhMyZsh": true,
"installOhMyZshConfig": true,
"upgradePackages": true,
"username": "homelab"
},
"ghcr.io/devcontainers/features/aws-cli:1": {},
"ghcr.io/devcontainers/features/azure-cli:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/go:1": {},
"ghcr.io/devcontainers/features/java:1": {},
"ghcr.io/devcontainers/features/python:1": {},
"ghcr.io/devcontainers/features/hugo:1": {
"extended": "true"
},
"ghcr.io/devcontainers/features/kubectl-helm-minikube:1": {},
"ghcr.io/devcontainers-extra/features/argo-cd:1": {},
"ghcr.io/devcontainers-extra/features/helmfile:1": {},
"ghcr.io/devcontainers-extra/features/talosctl:1": {},
"ghcr.io/devcontainers-extra/features/yamllint:2": {},
"ghcr.io/dhoeric/features/k9s:1": {},
"ghcr.io/dhoeric/features/google-cloud-cli:1": {
"installGkeGcloudAuthPlugin": true
},
"ghcr.io/eitsupi/devcontainer-features/jq-likes": {
"jqVersion": "latest",
"yqVersion": "latest"
},
"ghcr.io/jungaretti/features/vim:1": {},
"ghcr.io/robbert229/devcontainer-features/postgresql-client:1": {},
"ghcr.io/robbert229/devcontainer-features/opentofu:1": {},
"ghcr.io/schlich/devcontainer-features/powerlevel10k:1": {},
"ghcr.io/skriptfabrik/devcontainer-features/hcloud-cli:1": {},
"ghcr.io/skriptfabrik/devcontainer-features/infisical-cli:1.1.1": {},
},
"remoteUser": "homelab"
}