diff --git a/.actrc b/.actrc deleted file mode 100644 index 5d6b203..0000000 --- a/.actrc +++ /dev/null @@ -1,6 +0,0 @@ ---rm ---env-file .env --e hack/act.json ---container-options "--privileged" --s GITHUB_TOKEN=${GITHUB_TOKEN} --s PULUMI_ACCESS_TOKEN=${PULUMI_ACCESS_TOKEN} diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 3e21d7d..0000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM ghcr.io/containercraft/konductor:latest diff --git a/.devcontainer/README.md b/.devcontainer/README.md deleted file mode 100644 index a070683..0000000 --- a/.devcontainer/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# EDITS MAY BE OVERWRITTEN - -This directory is coppied from the .github/konductor/.github/devcontainer source -directory. Manual edits and changes may be overwritten by the `make konductor` -Makefile target. Be careful of it's use. diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 4805b53..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,331 +0,0 @@ -{ - "name": "konductor", - "remoteUser": "vscode", - "dockerFile": "Dockerfile", - "init": true, - "privileged": true, - "overrideCommand": false, - "updateRemoteUserUID": true, - //"workspaceFolder": "/workspaces/konductor", - "shutdownAction": "stopContainer", - "securityOpt": ["seccomp=unconfined"], - "runArgs": ["--network=host"], - "mounts": ["source=dind-var-lib-docker,target=/var/lib/docker,type=volume"], - "features": {"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}}, - "postCreateCommand": "devcontainer-links", - //"workspaceMount": "source=.,target=/home/vscode/konductor,type=bind,consistency=cached", - //"workspaceFolder": "/home/vscode/konductor", - "forwardPorts": [1313, 2222, 6000, 7681, 8080], - "customizations": { - "vscode": { - "settings": { - "telemetry.enableTelemetry": "off", - "initializeCommand": "echo 'Initializing...'", - "postCreateCommand": "echo 'Post create...'", - "postStartCommand": "echo 'Post start...'", - "postAttachCommand": "echo 'Post attach...'", - "window": { - "titleBarStyle": "custom", - "title": "${localWorkspaceFolderBasename}${separator}${containerName}${separator}${profileName}${separator}${activeEditorShort}" - }, - "search": { - "defaultViewMode": "list" - }, - "vim": { - "disableExtension": false, - "useSystemClipboard": true, - "useCtrlKeys": true, - "easymotion": true, - "incsearch": true, - "hlsearch": true, - "cursorStylePerMode": { - "normal": "block", - "insert": "line", - "visual": "underline", - "visualline": "underline", - "visualblock": "underline", - "replace": "block" - }, - "insertModeKeyBindings": [ - { - "before": [ - "j", - "j" - ], - "after": [ - "" - ] - } - ], - "handleKeys": { - "": false, - "": false - } - }, - "extensions.experimental.affinity": { - "vscodevim.vim": 1 - }, - "zenmode": { - "toggle": true, - "hideTabs": true, - "fullScreen": true, - "hideMinimap": true, - "centerLayout": false, - "hideStatusBar": true, - "hideActivityBar": true, - "hideLineNumbers": false, - "silentNotifications": true, - "hideLineDecorations": false, - "hideCursorInOverviewRuler": true - }, - "editor": { - "tabSize": 2, - "fontSize": 14, - "autoSave": "onFocusChange", - "wordWrap": "on", - "showTabs": true, - "showIcons": true, - "tabSizing": "shrink", - "lineHeight": 20, - "autoIndent": true, - "lineNumbers": "relative", - "formatOnSave": true, - "insertSpaces": true, - "tabScrolling": "auto", - //"tabFocusMode": false, - //"tabMovesFocus": false, - "tabCompletion": "on", - "tabDecoration": true, - "fontLigatures": true, - "enablePreview": true, - "startupEditor": "readme", - "tabCloseButton": "right", - "minimap.enabled": false, - "openPositioning": "right", - "restoreViewState": true, - "renderWhitespace": "all", - "suggestSelection": "first", - "closeOnFileDelete": true, - "autoClosingQuotes": "always", - "snippetSuggestions": "top", - "autoClosingBrackets": "always", - "tabHistoryNavigation": true, - "quickSuggestionsDelay": 50, - "autoImportCompletions": true, - "scrollBeyondLastLine": true, - "highlightModifiedTabs": true, - "inlineSuggest.enabled": true, - "parameterHints.enabled": true, - "trimTrailingWhitespace": true, - "lineHighlightBackground": "#30BFBF", - "highlightActiveIndentGuide": true, - "fontFamily": "'FiraMono Nerd Font Mono', monospace", - "gotoLocation": { - "multipleReferences": "goto", - "multipleDefinitions": "goto", - "multipleDeclarations": "goto", - "multipleImplementations": "goto", - "multipleTypeDefinitions": "goto" - }, - "scrollbar": { - "alwaysConsumeMouseWheel": true - }, - "bracketPairColorization": { - "enabled": true - } - }, - "files": { - "encoding": "utf8", - "autoSave": "onFocusChange", - "trimFinalNewlines": true, - "insertFinalNewline": true, - "trimTrailingWhitespace": true - }, - "git": { - "enabled": true, - "autofetch": true, - "autoStash": true, - "autorefresh": true, - "gitProtocol": "https", - "ignoreSubmodules": true, - "enableSmartCommit": true, - "ignoreLegacyWarning": true, - "autoRepositoryDetection": "openEditors", - "defaultCloneParentDirectory": "/home/vscode", - "scanRepositories": [ - "/home/vscode", - "/home/vscode/konductor", - "/home/vscode/konductor/.github/devcontainer", - "/workspaces" - ], - "path": "/usr/local/bin/git" - }, - "go": { - "testTags": "all", - "vetOnSave": "off", - "buildTags": "all", - "lintOnSave": "off", - "testOnSave": "off", - "buildOnSave": "off", - "formatTool": "goimports", - "testEnvVars": { - "GOFLAGS": "-count=1" - }, - "generateTestsFlags": [ - "-count=1" - ] - }, - "terminal": { - "integrated": { - //"cwd": "/home/vscode/Konductor", - "fontSize": 14, - "scrollback": 10000, - "cursorStyle": "outline", - "hideOnStartup": false, - "cursorBlinking": true, - "copyOnSelection": true, - "sendKeybindingsToShell": false, - "cursorStyleInactive": "line", - "fontFamily": "FiraMono Nerd Font Mono", - "commandsToSkipShell": [], - "scrollbar": { - "alwaysConsumeMouseWheel": true - }, - "shell": { - "linux": "/usr/bin/fish" - } - } - }, - "vs-kubernetes": { - "vs-kubernetes.namespace": "*", - "vs-kubernetes.outputFormat": "yaml", - "vs-kubernetes.helm-path": "/usr/local/bin/helm", - "vs-kubernetes.kubeconfig": "/home/vscode/.kube/config", - "vs-kubernetes.kubectl-path": "/usr/local/bin/kubectl", - "vs-kubernetes.knownKubeconfigs": [ - "/workspaces/*/.kube/config", - "/home/vscode/*/.kube/config", - "/home/vscode/.kube/config" - ] - }, - "remote": { - "restoreForwardedPorts": true, - "localPortHost": "127.0.0.1" - }, - "2gua.rainbow-brackets": true, - "indentRainbow": { - "indicatorStyle": "light", - "colorOnWhiteSpaceOnly": true, - "lightIndicatorStyleLineWidth": 12, - "ignoreEmptyLines": true, - "errorColor": "rgba(255, 20, 147, 0.3)", // Bright Pink for errors - "tabmixColor": "rgba(128, 32, 96, 0.3)", // Purple for mixed tabs and spaces - "colors": [ - "rgba(50, 150, 250, 0.1)", // Bright Blue - "rgba(200, 50, 250, 0.1)", // Purple - "rgba(50, 250, 150, 0.1)", // Neon Green - "rgba(250, 50, 150, 0.1)", // Pink - "rgba(50, 200, 250, 0.1)", // Lighter Blue - "rgba(150, 50, 250, 0.1)", // Darker Purple - "rgba(50, 250, 200, 0.1)", // Brighter Green - "rgba(250, 150, 50, 0.1)" // Orange - ], - "ignoreErrorLanguages": [ - "haskell", - "markdown", - "plaintext", - "shellscript", - "dockerfile", - "plaintext" - ] - }, - "workbench": { - "colorTheme": "Cyberpunk", - "startupEditor": "readme", - "action.terminal.focusNext": { - "key": "ctrl+shift+down", - "mac": "cmd+shift+down" - } - }, - "autoOpenPreviewPanel.openPreviewToTheSide": false, - "explorer.openEditors.visible": 1, - "explorer": { - "openEditors": { - "visible": 1 - }, - "autoRevealExclude": { - "**/.git/objects/**": true, - "**/.git/subtree-cache/**": true, - "**/node_modules/**": true - }, - "autoReveal": true, - "sortOrder": "filesFirst" - } - }, - "[makefile]": { - "editor.insertSpaces": false, - "editor.renderWhitespace": "selection" - }, - "[yaml]": { - "editor": { - "trimTrailingWhitespace": true, - "insertFinalNewline": true, - "wordWrap": "off", - "lineNumbers": "relative", - "renderWhitespace": "all", - "autoSave": "onFocusChange", - "formatOnSave": true, - "insertSpaces": true, - "tabSize": 2, - "minimap.enabled": true, - "scrollBeyondLastLine": true, - "scrollbar": { - "alwaysConsumeMouseWheel": true - } - } - }, - "[markdown]": { - "editor": { - "tabSize": 4, - "wordWrap": "on", - "autoSave": "onFocusChange", - "lineNumbers": "relative", - "formatOnSave": true, - "insertSpaces": true, - "minimap.enabled": false, - "renderWhitespace": "all", - "insertFinalNewline": true, - "scrollBeyondLastLine": true, - "trimTrailingWhitespace": false, - "scrollbar": { - "alwaysConsumeMouseWheel": true - } - } - }, - "extensions": [ - "golang.go", - "vscodevim.vim", - "github.copilot", - "max-ss.cyberpunk", - "ms-python.python", - "redhat.vscode-yaml", - "esbenp.prettier-vscode", - "oderwat.indent-rainbow", - "okteto.kubernetes-context", - "ms-vsliveshare.vsliveshare", - "chadonsom.auto-view-readme", - "ms-azuretools.vscode-docker", - "github.vscode-github-actions", - "ms-kubernetes-tools.kind-vscode", - "ms-vscode.vscode-typescript-next", - "github.vscode-pull-request-github", - "matt-rudge.auto-open-preview-panel", - "ms-vscode-remote.remote-containers", - "bierner.markdown-preview-github-styles", - "visualstudioexptteam.vscodeintellicode", - "bierner.markdown-preview-github-styles", - "ms-kubernetes-tools.vscode-kubernetes-tools" - ] - } - } -} diff --git a/.devcontainer/kind/devcontainer.json b/.devcontainer/kind/devcontainer.json deleted file mode 100644 index 709a06b..0000000 --- a/.devcontainer/kind/devcontainer.json +++ /dev/null @@ -1,87 +0,0 @@ -// Reference: -// - https://containers.dev/features -// - https://containers.dev/implementors/features -// - https://code.visualstudio.com/docs/getstarted/settings -{ - "name": "konductor-kind", - "image": "ghcr.io/containercraft/konductor:latest", - "customizations": { - "vscode": { - "settings": { - // https://github.com/VSCodeVim/Vim - //"keyboard.dispatch": "keyCode", - //"vim.leader": "", - "vim.easymotion": true, - "vim.incsearch": true, - "vim.useSystemClipboard": true, - "vim.useCtrlKeys": true, - "vim.hlsearch": true, - "vim.insertModeKeyBindings": [ - { - "before": ["j", "j"], - "after": [""] - } - ], - "vim.handleKeys": { - "": false, - "": false - }, - "extensions.experimental.affinity": { - "vscodevim.vim": 1 - }, - "go.testTags": "all", - "go.buildTags": "all", - "editor.minimap.enabled": false, - "editor.quickSuggestionsDelay": 0, - "editor.suggestSelection": "first", - "editor.snippetSuggestions": "top", - "editor.gotoLocation.multipleReferences": "goto", - "editor.gotoLocation.multipleDefinitions": "goto", - "editor.gotoLocation.multipleDeclarations": "goto", - "editor.gotoLocation.multipleImplementations": "goto", - "editor.gotoLocation.multipleTypeDefinitions": "goto", - "editor.terminal.integrated.shell.linux": "/usr/bin/fish", - "terminal.integrated.sendKeybindingsToShell": true, - "terminal.integrated.fontFamily": "FiraMono Nerd Font Mono", - "workbench.colorTheme": "Dracula Soft", - "explorer.openEditors.visible": 1, - "files.trimTrailingWhitespace": true, - "files.trimFinalNewlines": true - }, - "extensions": [ - "golang.go", - "vscodevim.vim", - "github.copilot", - "ms-python.python", - "redhat.vscode-yaml", - "esbenp.prettier-vscode", - "ms-azuretools.vscode-docker", - "github.vscode-pull-request-github", - "ms-vscode-remote.remote-containers", - "visualstudioexptteam.vscodeintellicode", - "bierner.markdown-preview-github-styles" - ] - } - }, - "features": { - "ghcr.io/devcontainers/features/common-utils:2": { - "username": "vscode", - "userGid": "automatic", - "userUid": "automatic", - "upgradePackages": true, - "nonFreePackages": true - }, - "ghcr.io/devcontainers/features/docker-outside-of-docker:1": { - "moby": false, - "installDockerBuildx": true, - "version": "latest", - "dockerDashComposeVersion": "v2" - }, - - "ghcr.io/devcontainers-contrib/features/kind:1": {} - }, - "postCreateCommand": "git submodule update --init --recursive", - "remoteUser": "vscode", - "forwardPorts": [1313, 2222, 6000, 7681, 8080], - "runArgs": ["--network=host"] -} diff --git a/.devcontainer/localstack/Dockerfile b/.devcontainer/localstack/Dockerfile deleted file mode 100644 index b2a76f2..0000000 --- a/.devcontainer/localstack/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM ghcr.io/containercraft/konductor:latest - -RUN set -ex \ - && sudo pip install localstack localstack[runtime] --no-cache-dir \ - && echo diff --git a/.devcontainer/localstack/devcontainer.json b/.devcontainer/localstack/devcontainer.json deleted file mode 100644 index 7d2369f..0000000 --- a/.devcontainer/localstack/devcontainer.json +++ /dev/null @@ -1,345 +0,0 @@ -{ - "name": "konductor-localstack", - "remoteUser": "vscode", - "dockerFile": "Dockerfile", - "init": true, - "privileged": true, - "overrideCommand": false, - "updateRemoteUserUID": true, - //"workspaceFolder": "/workspaces/konductor", - "shutdownAction": "stopContainer", - "securityOpt": [ - "seccomp=unconfined" - ], - "runArgs": [ - "--network=host" - ], - "mounts": [ - "source=dind-var-lib-docker,target=/var/lib/docker,type=volume" - ], - "features": { - "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {} - }, - "postCreateCommand": "devcontainer-links", - //"workspaceMount": "source=.,target=/home/vscode/konductor,type=bind,consistency=cached", - //"workspaceFolder": "/home/vscode/konductor", - "forwardPorts": [ - 1313, - 2222, - 6000, - 7681, - 8080 - ], - "customizations": { - "vscode": { - "settings": { - "telemetry.enableTelemetry": "off", - "initializeCommand": "echo 'Initializing...'", - "postCreateCommand": "echo 'Post create...'", - "postStartCommand": "echo 'Post start...'", - "postAttachCommand": "echo 'Post attach...'", - "window": { - "titleBarStyle": "custom", - "title": "${localWorkspaceFolderBasename}${separator}${containerName}${separator}${profileName}${separator}${activeEditorShort}" - }, - "search": { - "defaultViewMode": "list" - }, - "vim": { - "disableExtension": false, - "useSystemClipboard": true, - "useCtrlKeys": true, - "easymotion": true, - "incsearch": true, - "hlsearch": true, - "cursorStylePerMode": { - "normal": "block", - "insert": "line", - "visual": "underline", - "visualline": "underline", - "visualblock": "underline", - "replace": "block" - }, - "insertModeKeyBindings": [ - { - "before": [ - "j", - "j" - ], - "after": [ - "" - ] - } - ], - "handleKeys": { - "": false, - "": false - } - }, - "extensions.experimental.affinity": { - "vscodevim.vim": 1 - }, - "zenmode": { - "toggle": true, - "hideTabs": true, - "fullScreen": true, - "hideMinimap": true, - "centerLayout": false, - "hideStatusBar": true, - "hideActivityBar": true, - "hideLineNumbers": false, - "silentNotifications": true, - "hideLineDecorations": false, - "hideCursorInOverviewRuler": true - }, - "editor": { - "tabSize": 2, - "fontSize": 14, - "autoSave": "onFocusChange", - "wordWrap": "on", - "showTabs": true, - "showIcons": true, - "tabSizing": "shrink", - "lineHeight": 20, - "autoIndent": true, - "lineNumbers": "relative", - "formatOnSave": true, - "insertSpaces": true, - "tabScrolling": "auto", - //"tabFocusMode": false, - //"tabMovesFocus": false, - "tabCompletion": "on", - "tabDecoration": true, - "fontLigatures": true, - "enablePreview": true, - "startupEditor": "readme", - "tabCloseButton": "right", - "minimap.enabled": false, - "openPositioning": "right", - "restoreViewState": true, - "renderWhitespace": "all", - "suggestSelection": "first", - "closeOnFileDelete": true, - "autoClosingQuotes": "always", - "snippetSuggestions": "top", - "autoClosingBrackets": "always", - "tabHistoryNavigation": true, - "quickSuggestionsDelay": 50, - "autoImportCompletions": true, - "scrollBeyondLastLine": true, - "highlightModifiedTabs": true, - "inlineSuggest.enabled": true, - "parameterHints.enabled": true, - "trimTrailingWhitespace": true, - "lineHighlightBackground": "#30BFBF", - "highlightActiveIndentGuide": true, - "fontFamily": "'FiraMono Nerd Font Mono', monospace", - "gotoLocation": { - "multipleReferences": "goto", - "multipleDefinitions": "goto", - "multipleDeclarations": "goto", - "multipleImplementations": "goto", - "multipleTypeDefinitions": "goto" - }, - "scrollbar": { - "alwaysConsumeMouseWheel": true - }, - "bracketPairColorization": { - "enabled": true - } - }, - "files": { - "encoding": "utf8", - "autoSave": "onFocusChange", - "trimFinalNewlines": true, - "insertFinalNewline": true, - "trimTrailingWhitespace": true - }, - "git": { - "enabled": true, - "autofetch": true, - "autoStash": true, - "autorefresh": true, - "gitProtocol": "https", - "ignoreSubmodules": true, - "enableSmartCommit": true, - "ignoreLegacyWarning": true, - "autoRepositoryDetection": "openEditors", - "defaultCloneParentDirectory": "/home/vscode", - "scanRepositories": [ - "/home/vscode", - "/home/vscode/konductor", - "/home/vscode/konductor/.github/devcontainer", - "/workspaces" - ], - "path": "/usr/local/bin/git" - }, - "go": { - "testTags": "all", - "vetOnSave": "off", - "buildTags": "all", - "lintOnSave": "off", - "testOnSave": "off", - "buildOnSave": "off", - "formatTool": "goimports", - "testEnvVars": { - "GOFLAGS": "-count=1" - }, - "generateTestsFlags": [ - "-count=1" - ] - }, - "terminal": { - "integrated": { - //"cwd": "/home/vscode/Konductor", - "fontSize": 14, - "scrollback": 10000, - "cursorStyle": "outline", - "hideOnStartup": false, - "cursorBlinking": true, - "copyOnSelection": true, - "sendKeybindingsToShell": false, - "cursorStyleInactive": "line", - "fontFamily": "FiraMono Nerd Font Mono", - "commandsToSkipShell": [], - "scrollbar": { - "alwaysConsumeMouseWheel": true - }, - "shell": { - "linux": "/usr/bin/fish" - } - } - }, - "vs-kubernetes": { - "vs-kubernetes.namespace": "*", - "vs-kubernetes.outputFormat": "yaml", - "vs-kubernetes.helm-path": "/usr/local/bin/helm", - "vs-kubernetes.kubeconfig": "/home/vscode/.kube/config", - "vs-kubernetes.kubectl-path": "/usr/local/bin/kubectl", - "vs-kubernetes.knownKubeconfigs": [ - "/workspaces/*/.kube/config", - "/home/vscode/*/.kube/config", - "/home/vscode/.kube/config" - ] - }, - "remote": { - "restoreForwardedPorts": true, - "localPortHost": "127.0.0.1" - }, - "2gua.rainbow-brackets": true, - "indentRainbow": { - "indicatorStyle": "light", - "colorOnWhiteSpaceOnly": true, - "lightIndicatorStyleLineWidth": 12, - "ignoreEmptyLines": true, - "errorColor": "rgba(255, 20, 147, 0.3)", // Bright Pink for errors - "tabmixColor": "rgba(128, 32, 96, 0.3)", // Purple for mixed tabs and spaces - "colors": [ - "rgba(50, 150, 250, 0.1)", // Bright Blue - "rgba(200, 50, 250, 0.1)", // Purple - "rgba(50, 250, 150, 0.1)", // Neon Green - "rgba(250, 50, 150, 0.1)", // Pink - "rgba(50, 200, 250, 0.1)", // Lighter Blue - "rgba(150, 50, 250, 0.1)", // Darker Purple - "rgba(50, 250, 200, 0.1)", // Brighter Green - "rgba(250, 150, 50, 0.1)" // Orange - ], - "ignoreErrorLanguages": [ - "haskell", - "markdown", - "plaintext", - "shellscript", - "dockerfile", - "plaintext" - ] - }, - "workbench": { - "colorTheme": "Cyberpunk", - "startupEditor": "readme", - "action.terminal.focusNext": { - "key": "ctrl+shift+down", - "mac": "cmd+shift+down" - } - }, - "autoOpenPreviewPanel.openPreviewToTheSide": false, - "explorer.openEditors.visible": 1, - "explorer": { - "openEditors": { - "visible": 1 - }, - "autoRevealExclude": { - "**/.git/objects/**": true, - "**/.git/subtree-cache/**": true, - "**/node_modules/**": true - }, - "autoReveal": true, - "sortOrder": "filesFirst" - } - }, - "[makefile]": { - "editor.insertSpaces": false, - "editor.renderWhitespace": "selection" - }, - "[yaml]": { - "editor": { - "trimTrailingWhitespace": true, - "insertFinalNewline": true, - "wordWrap": "off", - "lineNumbers": "relative", - "renderWhitespace": "all", - "autoSave": "onFocusChange", - "formatOnSave": true, - "insertSpaces": true, - "tabSize": 2, - "minimap.enabled": true, - "scrollBeyondLastLine": true, - "scrollbar": { - "alwaysConsumeMouseWheel": true - } - } - }, - "[markdown]": { - "editor": { - "tabSize": 4, - "wordWrap": "on", - "autoSave": "onFocusChange", - "lineNumbers": "relative", - "formatOnSave": true, - "insertSpaces": true, - "minimap.enabled": false, - "renderWhitespace": "all", - "insertFinalNewline": true, - "scrollBeyondLastLine": true, - "trimTrailingWhitespace": false, - "scrollbar": { - "alwaysConsumeMouseWheel": true - } - } - }, - "extensions": [ - "golang.go", - "vscodevim.vim", - "github.copilot", - "max-ss.cyberpunk", - "ms-python.python", - "redhat.vscode-yaml", - "esbenp.prettier-vscode", - "oderwat.indent-rainbow", - "okteto.kubernetes-context", - "ms-vsliveshare.vsliveshare", - "chadonsom.auto-view-readme", - "ms-azuretools.vscode-docker", - "github.vscode-github-actions", - "ms-kubernetes-tools.kind-vscode", - "ms-vscode.vscode-typescript-next", - "github.vscode-pull-request-github", - "matt-rudge.auto-open-preview-panel", - "ms-vscode-remote.remote-containers", - "bierner.markdown-preview-github-styles", - "visualstudioexptteam.vscodeintellicode", - "bierner.markdown-preview-github-styles", - "ms-kubernetes-tools.vscode-kubernetes-tools" - ] - } - } -} diff --git a/.github/docker/.dockerignore b/.dockerignore similarity index 100% rename from .github/docker/.dockerignore rename to .dockerignore diff --git a/.envrc b/.envrc deleted file mode 100644 index 347a79a..0000000 --- a/.envrc +++ /dev/null @@ -1,19 +0,0 @@ -################################################################################## -# Basic Config Variables -export KUBECONFIG=${PWD}/.kube/config -export TALOSCONFIG=${PWD}/.talos/config - -################################################################################## -# Pulumi Environment Variables -# - https://www.pulumi.com/docs/cli/environment-variables -export PULUMI_HOME=${PWD}/.pulumi -export PULUMI_SKIP_UPDATE_CHECK=true -export PULUMI_SKIP_CONFIRMATIONS=true -export PULUMI_AUTOMATION_API_SKIP_VERSION_CHECK=true - -################################################################################## -# Optional Pulumi Environment Variables -# Useful for CI testing -# Uncomment to use local backend instead of Pulumi Cloud -#export PULUMI_BACKEND_URL=${PULUMI_BACKEND_URL:-file://${PWD}/.pulumi} -#export PULUMI_CONFIG_PASSPHRASE=${PULUMI_CONFIG_PASSPHRASE:-foobarbaz} diff --git a/.github/assets/konductor.png b/.github/assets/konductor.png deleted file mode 100644 index 9764811..0000000 Binary files a/.github/assets/konductor.png and /dev/null differ diff --git a/.github/devcontainer/Dockerfile b/.github/devcontainer/Dockerfile deleted file mode 100644 index 3e21d7d..0000000 --- a/.github/devcontainer/Dockerfile +++ /dev/null @@ -1 +0,0 @@ -FROM ghcr.io/containercraft/konductor:latest diff --git a/.github/devcontainer/devcontainer.json b/.github/devcontainer/devcontainer.json deleted file mode 100644 index 4805b53..0000000 --- a/.github/devcontainer/devcontainer.json +++ /dev/null @@ -1,331 +0,0 @@ -{ - "name": "konductor", - "remoteUser": "vscode", - "dockerFile": "Dockerfile", - "init": true, - "privileged": true, - "overrideCommand": false, - "updateRemoteUserUID": true, - //"workspaceFolder": "/workspaces/konductor", - "shutdownAction": "stopContainer", - "securityOpt": ["seccomp=unconfined"], - "runArgs": ["--network=host"], - "mounts": ["source=dind-var-lib-docker,target=/var/lib/docker,type=volume"], - "features": {"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}}, - "postCreateCommand": "devcontainer-links", - //"workspaceMount": "source=.,target=/home/vscode/konductor,type=bind,consistency=cached", - //"workspaceFolder": "/home/vscode/konductor", - "forwardPorts": [1313, 2222, 6000, 7681, 8080], - "customizations": { - "vscode": { - "settings": { - "telemetry.enableTelemetry": "off", - "initializeCommand": "echo 'Initializing...'", - "postCreateCommand": "echo 'Post create...'", - "postStartCommand": "echo 'Post start...'", - "postAttachCommand": "echo 'Post attach...'", - "window": { - "titleBarStyle": "custom", - "title": "${localWorkspaceFolderBasename}${separator}${containerName}${separator}${profileName}${separator}${activeEditorShort}" - }, - "search": { - "defaultViewMode": "list" - }, - "vim": { - "disableExtension": false, - "useSystemClipboard": true, - "useCtrlKeys": true, - "easymotion": true, - "incsearch": true, - "hlsearch": true, - "cursorStylePerMode": { - "normal": "block", - "insert": "line", - "visual": "underline", - "visualline": "underline", - "visualblock": "underline", - "replace": "block" - }, - "insertModeKeyBindings": [ - { - "before": [ - "j", - "j" - ], - "after": [ - "" - ] - } - ], - "handleKeys": { - "": false, - "": false - } - }, - "extensions.experimental.affinity": { - "vscodevim.vim": 1 - }, - "zenmode": { - "toggle": true, - "hideTabs": true, - "fullScreen": true, - "hideMinimap": true, - "centerLayout": false, - "hideStatusBar": true, - "hideActivityBar": true, - "hideLineNumbers": false, - "silentNotifications": true, - "hideLineDecorations": false, - "hideCursorInOverviewRuler": true - }, - "editor": { - "tabSize": 2, - "fontSize": 14, - "autoSave": "onFocusChange", - "wordWrap": "on", - "showTabs": true, - "showIcons": true, - "tabSizing": "shrink", - "lineHeight": 20, - "autoIndent": true, - "lineNumbers": "relative", - "formatOnSave": true, - "insertSpaces": true, - "tabScrolling": "auto", - //"tabFocusMode": false, - //"tabMovesFocus": false, - "tabCompletion": "on", - "tabDecoration": true, - "fontLigatures": true, - "enablePreview": true, - "startupEditor": "readme", - "tabCloseButton": "right", - "minimap.enabled": false, - "openPositioning": "right", - "restoreViewState": true, - "renderWhitespace": "all", - "suggestSelection": "first", - "closeOnFileDelete": true, - "autoClosingQuotes": "always", - "snippetSuggestions": "top", - "autoClosingBrackets": "always", - "tabHistoryNavigation": true, - "quickSuggestionsDelay": 50, - "autoImportCompletions": true, - "scrollBeyondLastLine": true, - "highlightModifiedTabs": true, - "inlineSuggest.enabled": true, - "parameterHints.enabled": true, - "trimTrailingWhitespace": true, - "lineHighlightBackground": "#30BFBF", - "highlightActiveIndentGuide": true, - "fontFamily": "'FiraMono Nerd Font Mono', monospace", - "gotoLocation": { - "multipleReferences": "goto", - "multipleDefinitions": "goto", - "multipleDeclarations": "goto", - "multipleImplementations": "goto", - "multipleTypeDefinitions": "goto" - }, - "scrollbar": { - "alwaysConsumeMouseWheel": true - }, - "bracketPairColorization": { - "enabled": true - } - }, - "files": { - "encoding": "utf8", - "autoSave": "onFocusChange", - "trimFinalNewlines": true, - "insertFinalNewline": true, - "trimTrailingWhitespace": true - }, - "git": { - "enabled": true, - "autofetch": true, - "autoStash": true, - "autorefresh": true, - "gitProtocol": "https", - "ignoreSubmodules": true, - "enableSmartCommit": true, - "ignoreLegacyWarning": true, - "autoRepositoryDetection": "openEditors", - "defaultCloneParentDirectory": "/home/vscode", - "scanRepositories": [ - "/home/vscode", - "/home/vscode/konductor", - "/home/vscode/konductor/.github/devcontainer", - "/workspaces" - ], - "path": "/usr/local/bin/git" - }, - "go": { - "testTags": "all", - "vetOnSave": "off", - "buildTags": "all", - "lintOnSave": "off", - "testOnSave": "off", - "buildOnSave": "off", - "formatTool": "goimports", - "testEnvVars": { - "GOFLAGS": "-count=1" - }, - "generateTestsFlags": [ - "-count=1" - ] - }, - "terminal": { - "integrated": { - //"cwd": "/home/vscode/Konductor", - "fontSize": 14, - "scrollback": 10000, - "cursorStyle": "outline", - "hideOnStartup": false, - "cursorBlinking": true, - "copyOnSelection": true, - "sendKeybindingsToShell": false, - "cursorStyleInactive": "line", - "fontFamily": "FiraMono Nerd Font Mono", - "commandsToSkipShell": [], - "scrollbar": { - "alwaysConsumeMouseWheel": true - }, - "shell": { - "linux": "/usr/bin/fish" - } - } - }, - "vs-kubernetes": { - "vs-kubernetes.namespace": "*", - "vs-kubernetes.outputFormat": "yaml", - "vs-kubernetes.helm-path": "/usr/local/bin/helm", - "vs-kubernetes.kubeconfig": "/home/vscode/.kube/config", - "vs-kubernetes.kubectl-path": "/usr/local/bin/kubectl", - "vs-kubernetes.knownKubeconfigs": [ - "/workspaces/*/.kube/config", - "/home/vscode/*/.kube/config", - "/home/vscode/.kube/config" - ] - }, - "remote": { - "restoreForwardedPorts": true, - "localPortHost": "127.0.0.1" - }, - "2gua.rainbow-brackets": true, - "indentRainbow": { - "indicatorStyle": "light", - "colorOnWhiteSpaceOnly": true, - "lightIndicatorStyleLineWidth": 12, - "ignoreEmptyLines": true, - "errorColor": "rgba(255, 20, 147, 0.3)", // Bright Pink for errors - "tabmixColor": "rgba(128, 32, 96, 0.3)", // Purple for mixed tabs and spaces - "colors": [ - "rgba(50, 150, 250, 0.1)", // Bright Blue - "rgba(200, 50, 250, 0.1)", // Purple - "rgba(50, 250, 150, 0.1)", // Neon Green - "rgba(250, 50, 150, 0.1)", // Pink - "rgba(50, 200, 250, 0.1)", // Lighter Blue - "rgba(150, 50, 250, 0.1)", // Darker Purple - "rgba(50, 250, 200, 0.1)", // Brighter Green - "rgba(250, 150, 50, 0.1)" // Orange - ], - "ignoreErrorLanguages": [ - "haskell", - "markdown", - "plaintext", - "shellscript", - "dockerfile", - "plaintext" - ] - }, - "workbench": { - "colorTheme": "Cyberpunk", - "startupEditor": "readme", - "action.terminal.focusNext": { - "key": "ctrl+shift+down", - "mac": "cmd+shift+down" - } - }, - "autoOpenPreviewPanel.openPreviewToTheSide": false, - "explorer.openEditors.visible": 1, - "explorer": { - "openEditors": { - "visible": 1 - }, - "autoRevealExclude": { - "**/.git/objects/**": true, - "**/.git/subtree-cache/**": true, - "**/node_modules/**": true - }, - "autoReveal": true, - "sortOrder": "filesFirst" - } - }, - "[makefile]": { - "editor.insertSpaces": false, - "editor.renderWhitespace": "selection" - }, - "[yaml]": { - "editor": { - "trimTrailingWhitespace": true, - "insertFinalNewline": true, - "wordWrap": "off", - "lineNumbers": "relative", - "renderWhitespace": "all", - "autoSave": "onFocusChange", - "formatOnSave": true, - "insertSpaces": true, - "tabSize": 2, - "minimap.enabled": true, - "scrollBeyondLastLine": true, - "scrollbar": { - "alwaysConsumeMouseWheel": true - } - } - }, - "[markdown]": { - "editor": { - "tabSize": 4, - "wordWrap": "on", - "autoSave": "onFocusChange", - "lineNumbers": "relative", - "formatOnSave": true, - "insertSpaces": true, - "minimap.enabled": false, - "renderWhitespace": "all", - "insertFinalNewline": true, - "scrollBeyondLastLine": true, - "trimTrailingWhitespace": false, - "scrollbar": { - "alwaysConsumeMouseWheel": true - } - } - }, - "extensions": [ - "golang.go", - "vscodevim.vim", - "github.copilot", - "max-ss.cyberpunk", - "ms-python.python", - "redhat.vscode-yaml", - "esbenp.prettier-vscode", - "oderwat.indent-rainbow", - "okteto.kubernetes-context", - "ms-vsliveshare.vsliveshare", - "chadonsom.auto-view-readme", - "ms-azuretools.vscode-docker", - "github.vscode-github-actions", - "ms-kubernetes-tools.kind-vscode", - "ms-vscode.vscode-typescript-next", - "github.vscode-pull-request-github", - "matt-rudge.auto-open-preview-panel", - "ms-vscode-remote.remote-containers", - "bierner.markdown-preview-github-styles", - "visualstudioexptteam.vscodeintellicode", - "bierner.markdown-preview-github-styles", - "ms-kubernetes-tools.vscode-kubernetes-tools" - ] - } - } -} diff --git a/.github/devcontainer/kind/devcontainer.json b/.github/devcontainer/kind/devcontainer.json deleted file mode 100644 index 709a06b..0000000 --- a/.github/devcontainer/kind/devcontainer.json +++ /dev/null @@ -1,87 +0,0 @@ -// Reference: -// - https://containers.dev/features -// - https://containers.dev/implementors/features -// - https://code.visualstudio.com/docs/getstarted/settings -{ - "name": "konductor-kind", - "image": "ghcr.io/containercraft/konductor:latest", - "customizations": { - "vscode": { - "settings": { - // https://github.com/VSCodeVim/Vim - //"keyboard.dispatch": "keyCode", - //"vim.leader": "", - "vim.easymotion": true, - "vim.incsearch": true, - "vim.useSystemClipboard": true, - "vim.useCtrlKeys": true, - "vim.hlsearch": true, - "vim.insertModeKeyBindings": [ - { - "before": ["j", "j"], - "after": [""] - } - ], - "vim.handleKeys": { - "": false, - "": false - }, - "extensions.experimental.affinity": { - "vscodevim.vim": 1 - }, - "go.testTags": "all", - "go.buildTags": "all", - "editor.minimap.enabled": false, - "editor.quickSuggestionsDelay": 0, - "editor.suggestSelection": "first", - "editor.snippetSuggestions": "top", - "editor.gotoLocation.multipleReferences": "goto", - "editor.gotoLocation.multipleDefinitions": "goto", - "editor.gotoLocation.multipleDeclarations": "goto", - "editor.gotoLocation.multipleImplementations": "goto", - "editor.gotoLocation.multipleTypeDefinitions": "goto", - "editor.terminal.integrated.shell.linux": "/usr/bin/fish", - "terminal.integrated.sendKeybindingsToShell": true, - "terminal.integrated.fontFamily": "FiraMono Nerd Font Mono", - "workbench.colorTheme": "Dracula Soft", - "explorer.openEditors.visible": 1, - "files.trimTrailingWhitespace": true, - "files.trimFinalNewlines": true - }, - "extensions": [ - "golang.go", - "vscodevim.vim", - "github.copilot", - "ms-python.python", - "redhat.vscode-yaml", - "esbenp.prettier-vscode", - "ms-azuretools.vscode-docker", - "github.vscode-pull-request-github", - "ms-vscode-remote.remote-containers", - "visualstudioexptteam.vscodeintellicode", - "bierner.markdown-preview-github-styles" - ] - } - }, - "features": { - "ghcr.io/devcontainers/features/common-utils:2": { - "username": "vscode", - "userGid": "automatic", - "userUid": "automatic", - "upgradePackages": true, - "nonFreePackages": true - }, - "ghcr.io/devcontainers/features/docker-outside-of-docker:1": { - "moby": false, - "installDockerBuildx": true, - "version": "latest", - "dockerDashComposeVersion": "v2" - }, - - "ghcr.io/devcontainers-contrib/features/kind:1": {} - }, - "postCreateCommand": "git submodule update --init --recursive", - "remoteUser": "vscode", - "forwardPorts": [1313, 2222, 6000, 7681, 8080], - "runArgs": ["--network=host"] -} diff --git a/.github/devcontainer/localstack/devcontainer.json b/.github/devcontainer/localstack/devcontainer.json deleted file mode 100644 index 886575d..0000000 --- a/.github/devcontainer/localstack/devcontainer.json +++ /dev/null @@ -1,86 +0,0 @@ -// Reference: -// - https://containers.dev/features -// - https://containers.dev/implementors/features -// - https://code.visualstudio.com/docs/getstarted/settings -{ - "name": "konductor-localstack", - "image": "ghcr.io/containercraft/konductor:latest", - "customizations": { - "vscode": { - "settings": { - // https://github.com/VSCodeVim/Vim - "vim.easymotion": true, - "vim.incsearch": true, - "vim.useSystemClipboard": true, - "vim.useCtrlKeys": true, - "vim.hlsearch": true, - "keyboard.dispatch": "keyCode", - "vim.insertModeKeyBindings": [ - { - "before": ["j", "j"], - "after": [""] - } - ], - "vim.leader": "", - "vim.handleKeys": { - "": false, - "": false - }, - "extensions.experimental.affinity": { - "vscodevim.vim": 1 - }, - "go.testTags": "all", - "go.buildTags": "all", - "editor.minimap.enabled": false, - "editor.quickSuggestionsDelay": 0, - "editor.suggestSelection": "first", - "editor.snippetSuggestions": "top", - "editor.gotoLocation.multipleReferences": "goto", - "editor.gotoLocation.multipleDefinitions": "goto", - "editor.gotoLocation.multipleDeclarations": "goto", - "editor.gotoLocation.multipleImplementations": "goto", - "editor.gotoLocation.multipleTypeDefinitions": "goto", - "editor.terminal.integrated.shell.linux": "/usr/bin/fish", - "terminal.integrated.sendKeybindingsToShell": true, - "terminal.integrated.fontFamily": "FiraMono Nerd Font Mono", - "workbench.colorTheme": "Dracula Soft", - "explorer.openEditors.visible": 1, - "files.trimTrailingWhitespace": true, - "files.trimFinalNewlines": true - }, - "extensions": [ - "golang.go", - "github.copilot", - "ms-python.python", - "redhat.vscode-yaml", - "esbenp.prettier-vscode", - "mtunique.vim-fcitx-remote", - "ms-azuretools.vscode-docker", - "github.vscode-pull-request-github", - "ms-vscode-remote.remote-containers", - "visualstudioexptteam.vscodeintellicode", - "bierner.markdown-preview-github-styles" - ] - } - }, - "features": { - "ghcr.io/devcontainers/features/common-utils:2": { - "username": "vscode", - "userGid": "automatic", - "userUid": "automatic", - "upgradePackages": true, - "nonFreePackages": true - }, - "ghcr.io/devcontainers/features/docker-outside-of-docker:1": { - "moby": false, - "installDockerBuildx": true, - "version": "latest", - "dockerDashComposeVersion": "v2" - }, - "ghcr.io/devcontainers-contrib/features/localstack:2": {}, - }, - "postCreateCommand": "git submodule update --init --recursive", - "remoteUser": "vscode", - "forwardPorts": [1313, 2222, 6000, 7681, 8080], - "runArgs": ["--network=host"] -} diff --git a/.github/devcontainer/science/devcontainer.json b/.github/devcontainer/science/devcontainer.json deleted file mode 100644 index 884ccf8..0000000 --- a/.github/devcontainer/science/devcontainer.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "konductor-gpt", - "image": "ghcr.io/containercraft/konductor", - "remoteUser": "vscode", - "forwardPorts": [1313, 2222, 6000, 7681, 8080], - "postCreateCommand": "direnv allow 2>/dev/null || true; tmux list-sessions 2>/dev/null || true", - "mounts": ["source=dind-var-lib-docker,target=/var/lib/docker,type=volume"], - "runArgs": ["--init", "--privileged", "--network=host"], - "overrideCommand": false, - "features": { - "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {} - }, - "customizations": { - "vscode": { - "settings": { - "terminal.integrated.fontFamily": "FiraMono Nerd Font Mono", - "terminal.integrated.shell.linux": "/usr/bin/fish", - "terminal.integrated.shellArgs.linux": ["-c", "/usr/bin/connect"], - "workbench.colorTheme": "Dracula Soft", - "editor.minimap.enabled": false, - "editor.lineNumbers": "relative", - "editor.quickSuggestionsDelay": 0, - "editor.suggestSelection": "first", - "editor.snippetSuggestions": "top", - "editor.gotoLocation.multipleReferences": "goto", - "editor.gotoLocation.multipleDefinitions": "goto", - "editor.gotoLocation.multipleDeclarations": "goto", - "editor.gotoLocation.multipleImplementations": "goto", - "editor.gotoLocation.multipleTypeDefinitions": "goto", - "explorer.openEditors.visible": 1, - "files.trimTrailingWhitespace": true, - "files.trimFinalNewlines": true, - "python.analysis.autoSearchPaths": true, - "python.analysis.diagnosticSeverityOverrides": { - "reportMissingImports": "error" - }, - "python.linting.enabled": true, - "python.linting.pylintEnabled": true, - "python.formatting.autopep8Path": "autopep8", - "python.formatting.blackPath": "black", - "python.formatting.yapfPath": "yapf", - "eslint.alwaysShowStatus": true, - "eslint.format.enable": true, - "eslint.lintTask.enable": true, - "git.autofetch": true - }, - "extensions": [ - "golang.go", - "ms-python.python", - "redhat.vscode-yaml", - "esbenp.prettier-vscode", - "ms-azuretools.vscode-docker", - "ms-vscode-remote.remote-containers", - "ms-vscode.vscode-typescript-next", - "bierner.markdown-preview-github-styles", - "ms-vscode.cpptools-extension-pack", - "ms-vscode.cpptools", - "ms-vscode-remote.remote-ssh", - "eamodio.gitlens", - "dbaeumer.vscode-eslint", - "ms-kubernetes-tools.vscode-kubernetes-tools" - ] - } - } -} diff --git a/.github/hack/Dockerfile b/.github/hack/Dockerfile new file mode 100644 index 0000000..1b970c5 --- /dev/null +++ b/.github/hack/Dockerfile @@ -0,0 +1,942 @@ +# This is the Konductor Dockerfile +# FROM the Microsoft Ubuntu 22.04 LTS Devcontainer Base Image +# +# The Konductor Container provides a Devcontainer developer userspace +# for use with VSCode, Github Codespaces, and Github Action Runners. +# +# The Konductor Container Image is a container image purpose built to provide +# a consistent and reliable development environment for DevOps tasks. +# +# The Konductor Container Image is not intended as an application container image +# and does not adhere to the principle of one service per container but rather +# is designed for one purpose per container. +# +############################################################################### +# Use: +# - docker build --tag ghcr.io/containercraft/konductor:latest . +# - docker run --rm --publish 2222:2222 --publish 7681:7681 --publish 8088:8080 -d --name konductor --hostname konductor ghcr.io/containercraft/konductor:latest +# - docker run -d --rm --cap-add=CAP_AUDIT_WRITE --publish 2222:2222 --publish 7681:7681 --publish 8088:8080 --name konductor --hostname konductor --security-opt label=disable --pull=always ghcr.io/containercraft/konductor +# - docker run -it --rm --entrypoint bash --mount type=bind,source=/run/docker.sock,target=/run/docker.sock --privileged --user vscode ghcr.io/containercraft/konductor:latest +############################################################################### +# Base VSCode Image +FROM mcr.microsoft.com/devcontainers/base:ubuntu +SHELL ["/bin/bash", "-c", "-e"] + +# Github Token is used for github api calls to get latest releases +# This is optional but helps during development due to rate limiting) +# Note that this is a docker argument and not an environment variable (ARG vs ENV) +# so it is not persisted in the image layers and is not available +# at runtime (only build time) +ARG GITHUB_TOKEN=$GITHUB_TOKEN + +# Append rootfs directory tree into container to copy +# additional files into the container's directory tree +ADD rootfs / +ADD rootfs/etc/skel/ /root/ +ADD rootfs/etc/skel/ /home/runner/ +ADD rootfs/etc/skel/ /home/vscode/ +RUN cat /etc/skel/.bashrc > /root/.bashrc && rm /root/.vimrc + +################################################################################# +# Environment Variables + +# Disable LC_ALL for Nix compatibility +ENV LC_ALL="" +# Disable timezone prompts +ENV TZ=UTC +# Disable package manager prompts +ENV DEBIAN_FRONTEND=noninteractive +# Add go and nix to path +ENV PATH="/home/vscode/.krew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/nix/var/nix/profiles/default/bin" +# Set necessary nix environment variable +ENV NIX_INSTALLER_EXTRA_CONF='filter-syscalls = false' +# Set default bin directory for new packages +ARG BIN="/usr/local/bin" +# Set default binary install command +ARG INSTALL="install -m 755 -o root -g root" +# Set additional environment variables +ENV SHELL=/usr/bin/bash +ENV REGISTRY_AUTH_FILE='/home/vscode/.docker/config.json' +ENV XDG_CONFIG_HOME=/home/vscode/.config + +# Common Dockerfile Container Build Functions +ENV apt_update="sudo apt-get update" +ENV apt_install="TERM=linux DEBIAN_FRONTEND=noninteractive sudo apt-get install -q --yes --purge --assume-yes --auto-remove --allow-downgrades -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold'" +ENV apt_clean="sudo apt-get clean && sudo apt-get autoremove -y && sudo apt-get purge -y --auto-remove" +ENV curl="/usr/bin/curl --silent --show-error --tlsv1.2 --location" +ENV curl_github="/usr/bin/curl --silent --show-error --tlsv1.2 --request GET --header 'X-GitHub-Api-Version: 2022-11-28' --url --location" +ENV dir_clean="\ + sudo rm -rf \ + /var/lib/{apt,cache,log} \ + /usr/share/{doc,man,locale} \ + /var/cache/apt \ + /home/*/.cache \ + /root/.cache \ + /var/tmp/* \ + /tmp/* \ + " + +################################################################################# +# Base package and user configuration +################################################################################# + +# Apt Packages +ARG APT_PKGS="\ + bc \ + gh \ + git \ + vim \ + tar \ + file \ + wget \ + tree \ + mosh \ + curl \ + tmux \ + btop \ + tmate \ + socat \ + gnupg \ + netcat \ + psmisc \ + procps \ + passwd \ + ripgrep \ + libwrap0 \ + xz-utils \ + fontconfig \ + glibc-tools \ + ca-certificates \ + build-essential \ + libarchive-tools \ + " + +# Apt Packages +RUN echo \ + && export TEST="gh version" \ + && ${apt_update} \ + && bash -c "${apt_install} --no-install-recommends -o Dpkg::Options::='--force-confold' ${APT_PKGS}" \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends -o Dpkg::Options::='--force-confold' openssh-server \ + && mkdir /var/run/sshd \ + && bash -c "${apt_clean}" \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +# devcontainer docker-in-docker dependencies +ARG APT_PKGS="\ + iptables \ + libffi-dev \ + docker-ce-cli \ + docker-buildx-plugin \ + " +RUN echo \ + && ${curl} https://download.docker.com/linux/ubuntu/gpg | sudo gpg --batch --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \ + && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list \ + && ${apt_update} \ + && bash -c "${apt_install} ${APT_PKGS}" \ + && bash -c "${apt_clean}" \ + && ${dir_clean} \ + && sudo update-alternatives --set iptables /usr/sbin/iptables-legacy \ + && sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy \ + && echo + +# jq +RUN echo \ + && export NAME="jq" \ + && export TEST="${NAME} --version" \ + && export REPOSITORY="jqlang/jq" \ + && export ARCH="$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }')" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | awk -F '[\"v\",-]' '/tag_name/{print $5}')" \ + && export PKG="${NAME}-linux-${ARCH}" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${NAME}-${VERSION}/${NAME}-linux-${ARCH}" \ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && ${curl} ${URL} --output /tmp/${NAME} \ + && file /tmp/${NAME} \ + && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +# direnv +RUN echo \ + && export NAME="direnv"\ + && export PKG="install.sh"\ + && export URL="https://direnv.net/${PKG}"\ + && export TEST="${NAME} --version"\ + && echo "INFO[${NAME}] Install Package:"\ + && echo "INFO[${NAME}] Command: ${NAME}"\ + && echo "INFO[${NAME}] Package: ${PKG}"\ + && echo "INFO[${NAME}] Source: ${URL}"\ + && ${curl} ${URL} --output /tmp/${PKG} \ + && chmod +x /tmp/${PKG} \ + && sudo bash -c "/tmp/${PKG}" \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################# +# Create Users and Groups +# Create User: runner (for github actions runner support) + +RUN echo \ + && sudo mkdir -p /etc/sudoers.d || true \ + && sudo groupadd --force --system sudo || true \ + && sudo groupadd --force --gid 127 --system docker \ + && sudo echo "%sudo ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/sudo \ + && sudo echo "%runner ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/sudo \ + && sudo echo "%vscode ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/sudo \ + && echo + +# Set User & Workdir default to $HOME +USER vscode +WORKDIR /home/vscode + +# Adduser: +# - user: vscode +# - group: vscode +# - uid: 1000 +# - gid: 1000 +RUN echo \ + && export USER_ID="1000" \ + && export USER_NAME="vscode" \ + && export USER_SHELL="bash" \ + && export USER_GROUPS="${USER_NAME},sudo,docker,vscode" \ + && export USER_GROUP_NAME="${USER_NAME}" \ + && export USER_GROUP_ID="${USER_ID}" \ + && echo "INFO[${USER_NAME}] User:" \ + && echo "INFO[${USER_NAME}] User Name: ${USER_NAME}" \ + && echo "INFO[${USER_NAME}] User Group: ${USER_GROUP_NAME}" \ + && echo "INFO[${USER_NAME}] Aux Groups: ${USER_GROUPS}" \ + && echo "INFO[${USER_NAME}] Group ID: ${USER_GROUP_ID}" \ + && echo "INFO[${USER_NAME}] User ID: ${USER_ID}" \ + && echo "INFO[${USER_NAME}] SHELL: $(which ${USER_SHELL})" \ + && echo "${USER_NAME} ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers \ + && sudo groupadd --force --gid ${USER_ID} ${USER_NAME} \ + && sudo useradd --create-home --uid ${USER_ID} --gid ${USER_GROUP_ID} --shell $(which ${USER_SHELL}) --groups ${USER_GROUPS} ${USER_NAME} || true \ + && sudo usermod --append --groups ${USER_GROUPS} ${USER_NAME} \ + && sudo chsh --shell $(which ${USER_SHELL}) ${USER_NAME} \ + && sudo mkdir -p /home/vscode/.krew/bin \ + && sudo chmod 0755 -R /home/vscode/.krew/bin \ + && sudo chown ${USER_NAME}:${USER_NAME} -R /home/vscode/.krew/bin \ + && sudo su --preserve-environment --shell $(which ${USER_SHELL}) -c groups ${USER_NAME} 2>/dev/null \ + && sudo chmod 0775 /usr/local/lib \ + && sudo rm -rf /usr/local/lib/node_modules \ + && sudo mkdir -p /usr/local/lib/node_modules \ + && echo + +RUN sudo chown vscode:vscode -R /home/vscode + +# Adduser: +# - user: runner +# - group: runner +# - uid: 1001 +# - gid: 1001 +RUN echo \ + && export USER_ID="1001" \ + && export USER_NAME="runner" \ + && export USER_SHELL="bash" \ + && export USER_GROUPS="sudo,docker,vscode,runner" \ + && export USER_GROUP_ID="${USER_ID}" \ + && echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] User:" \ + && echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] UID: ${USER_ID}" \ + && echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] NAME: ${USER_NAME}" \ + && echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] SHELL: $(which ${USER_SHELL})" \ + && echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] USER GROUP: ${USER_GROUP_ID}" \ + && echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] AUX GROUPS: ${USER_GROUPS}" \ + && sudo groupadd --force --gid ${USER_ID} ${USER_NAME} \ + && sudo echo "${USER_NAME} ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers \ + && sudo useradd --create-home --uid ${USER_ID} --gid ${USER_GROUP_ID} --shell $(which ${USER_SHELL}) --groups ${USER_GROUPS} ${USER_NAME} \ + && sudo chsh --shell $(which ${USER_SHELL}) ${USER_NAME} \ + && sudo usermod --append --groups ${USER_GROUPS} ${USER_NAME} \ + && sudo usermod --append --groups ${USER_GROUPS} vscode \ + && sudo su --preserve-environment --shell $(which ${USER_SHELL}) -c groups ${USER_NAME} \ + && sudo chown runner:runner -R /home/runner \ + && sudo chmod 755 /home/vscode/.* \ + && echo + +RUN sudo chown runner:runner -R /home/runner + +################################################################################## +# Install Creature Comforts + +# Nix +RUN echo \ + && export NAME=nix-installer \ + && export TEST="${NAME} --version" \ + && export REPOSITORY="DeterminateSystems/nix-installer" \ + && export VERSION="$(${curl_github} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "x86_64"; else if ($1 == "aarch64" || $1 == "arm64") print "aarch64"; else print "unknown" }') \ + && export PKG="${NAME}-${ARCH}-linux" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && sudo ${curl} ${URL} --output /tmp/${NAME} \ + && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ + && ${NAME} install linux --init none --no-confirm --extra-conf "filter-syscalls = false" \ + && bash -c "${TEST}" \ + && sudo chown vscode -R /nix \ + && sudo usermod -aG nixbld vscode \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################# +# Install Programming Language Tooling +# - golang +# - nodejs +# - python +# - dotnet +################################################################################# + +# Python +ARG APT_PKGS="\ + pipenv \ + python3 \ + python3-pip \ + python3-dev \ + python3-venv \ + python3.11 \ + python3.11-dev \ + python3.11-venv \ + " +RUN echo \ + && bash -c "${apt_install} ${APT_PKGS}" \ + && bash -c "${apt_clean}" \ + && sudo update-alternatives --install \ + /usr/bin/python python \ + /usr/bin/python3 1 \ + && ${dir_clean} \ + && echo + +# Python Pip Packages +ARG PIP_PKGS="\ + setuptools \ + " +RUN echo \ + && sudo python3 -m pip install --no-cache-dir ${PIP_PKGS} \ + && ${dir_clean} \ + && echo + +# Golang +RUN echo ;set -ex \ + && jq --version \ + && export NAME="go" \ + && export TEST="${NAME} version" \ + && export VERSION="$(${curl} "https://go.dev/dl/?mode=json" | jq --compact-output --raw-output .[1].version)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="${VERSION}.linux-${ARCH}.tar.gz" \ + && export URL="https://go.dev/dl/${PKG}" \ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && ${curl} ${URL} | sudo tar -C /usr/local/ -xzvf - \ + && sudo chmod 755 /usr/local/go/bin/* \ + && ${TEST} \ + && echo + +## Dotnet +#ARG APT_PKGS="\ +# dotnet-sdk-7.0 \ +# dotnet-runtime-7.0 \ +# " +#RUN echo \ +# && bash -c "${apt_install} ${APT_PKGS}" \ +# && bash -c "${apt_clean}" \ +# && ${dir_clean} \ +# && echo + +## Install nodejs npm yarn +#RUN echo \ +# && export NODE_MAJOR=20 \ +# && ${curl} https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \ +# | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ +# && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" \ +# | sudo tee /etc/apt/sources.list.d/nodesource.list \ +# && sudo apt-get update \ +# && sudo apt-get install nodejs \ +# && sudo apt-get clean \ +# && sudo apt-get autoremove -y \ +# && sudo apt-get purge -y --auto-remove \ +# && ${dir_clean} \ +# && node --version \ +# && npm --version \ +# && sudo npm install --global yarn \ +# && yarn --version \ +# && true + +################################################################################# +# Image Metadata +LABEL name="Konductor" +LABEL io.k8s.display-name="Konductor" +LABEL maintainer="github.com/containercraft" +LABEL org.opencontainers.image.authors="github.com/containercraft" +LABEL io.openshift.tags="containercraft,konductor" +LABEL org.opencontainers.image.licenses="GPLv3" +LABEL distribution-scope="public" + +################################################################################## +# Install runme cli +# - https://github.com/stateful/runme/releases +RUN echo \ + && export NAME="runme" \ + && export TEST="${NAME} --version" \ + && export REPOSITORY="stateful/runme" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "x86_64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="${NAME}_linux_${ARCH}.deb" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${apt_update} \ + && ${curl} ${URL} --output /tmp/${PKG} \ + && DEBIAN_FRONTEND=noninteractive sudo -E apt-get install -y --no-install-recommends -o Dpkg::Options::='--force-confold' /tmp/${PKG} \ + && bash -c "${apt_clean}" \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Install Taskfile cli +# - https://github.com/go-task/task/releases +RUN echo \ + && export NAME="task" \ + && export TEST="${NAME} --version" \ + && export REPOSITORY="go-task/task" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="${NAME}_linux_${ARCH}.deb" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${apt_update} \ + && ${curl} ${URL} --output /tmp/${PKG} \ + && DEBIAN_FRONTEND=noninteractive sudo -E apt-get install -y --no-install-recommends -o Dpkg::Options::='--force-confold' /tmp/${PKG} \ + && bash -c "${apt_clean}" \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Install k9s CLI +# - https://k9scli.io +# - https://github.com/derailed/k9s +RUN echo \ + && export NAME=k9s \ + && export TEST="${NAME} version" \ + && export REPOSITORY="derailed/k9s" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="${NAME}_Linux_${ARCH}.tar.gz" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} | sudo tar xzvf - --directory /tmp ${NAME} \ + && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################ +# Install Pulumi CLI, ESC, & CTL +# Install Pulumi CLI Utilities and Pulumi go deps +ARG GO_PKGS="\ + golang.org/x/tools/gopls@latest \ + github.com/josharian/impl@latest \ + github.com/fatih/gomodifytags@latest \ + github.com/cweill/gotests/gotests@latest \ + github.com/go-delve/delve/cmd/dlv@latest \ + honnef.co/go/tools/cmd/staticcheck@latest \ + github.com/haya14busa/goplay/cmd/goplay@latest \ + " +RUN echo \ + && export NAME=pulumi \ + && export TEST="pulumi version" \ + && export REPOSITORY="pulumi/pulumi" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "x64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="${NAME}-${VERSION}-linux-${ARCH}.tar.gz" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} | tar xzvf - --directory /tmp \ + && sudo chmod 755 /tmp/pulumi/* \ + && sudo chown root:root /tmp/pulumi/* \ + && sudo mv /tmp/pulumi/* /usr/local/bin/ \ + && echo "+-------------------------------------------------------+"\ + && echo "| Installing Basic Pulumi Golang Deps |"\ + && echo "+-------------------------------------------------------+"\ + && for pkg in ${GO_PKGS}; do go install ${pkg}; echo "Installed: ${pkg}"; done \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +## Install pulumi esc +#RUN echo \ +# && export NAME="esc" \ +# && export TEST="esc version" \ +# && export REPOSITORY="pulumi/esc" \ +# && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +# && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "x64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +# && export PKG="${NAME}-${VERSION}-linux-${ARCH}.tar.gz" \ +# && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +# && echo "---------------------------------------------------------"\ +# && echo "INFO[${NAME}] Installed:" \ +# && echo "INFO[${NAME}] Command: ${NAME}" \ +# && echo "INFO[${NAME}] Package: ${PKG}" \ +# && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +# && echo "INFO[${NAME}] Architecture: ${ARCH}" \ +# && echo "INFO[${NAME}] Source: ${URL}" \ +# && echo "---------------------------------------------------------"\ +# && ${curl} ${URL} | tar xzvf - --directory /tmp \ +# && sudo ${INSTALL} /tmp/${NAME}/${NAME} ${BIN}/${NAME} \ +# && ${dir_clean} \ +# && ${TEST} \ +# && echo +# +## Install pulumictl +#RUN echo \ +# && export NAME="pulumictl" \ +# && export TEST="${NAME} version" \ +# && export REPOSITORY="pulumi/pulumictl" \ +# && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +# && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +# && export PKG="${NAME}-${VERSION}-linux-${ARCH}.tar.gz" \ +# && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +# && echo "---------------------------------------------------------"\ +# && echo "INFO[${NAME}] Installed:" \ +# && echo "INFO[${NAME}] Command: ${NAME}" \ +# && echo "INFO[${NAME}] Package: ${PKG}" \ +# && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +# && echo "INFO[${NAME}] Architecture: ${ARCH}" \ +# && echo "INFO[${NAME}] Source: ${URL}" \ +# && echo "---------------------------------------------------------"\ +# && ${curl} ${URL} | tar xzvf - --directory /tmp \ +# && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +# && ${dir_clean} \ +# && ${TEST} \ +# && echo + +################################################################################## +#### Common Binary Install Arguments +################################################################################## + +## Install yq +#RUN echo \ +# && export NAME="yq" \ +# && export TEST="${NAME} --version" \ +# && export REPOSITORY="mikefarah/yq" \ +# && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +# && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +# && export PKG="${NAME}_linux_${ARCH}" \ +# && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${NAME}_linux_${ARCH}" \ +# && echo "---------------------------------------------------------"\ +# && echo "INFO[${NAME}] Installed:" \ +# && echo "INFO[${NAME}] Command: ${NAME}" \ +# && echo "INFO[${NAME}] Package: ${PKG}" \ +# && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +# && echo "INFO[${NAME}] Architecture: ${ARCH}" \ +# && echo "INFO[${NAME}] Source: ${URL}" \ +# && echo "---------------------------------------------------------"\ +# && sudo ${curl} ${URL} --output /tmp/yq \ +# && sudo ${INSTALL} /tmp/yq ${BIN}/yq \ +# && ${dir_clean} \ +# && ${TEST} \ +# && echo + +################################################################################## +# Install Kubectl +# - https://kubernetes.io +# - github.com/kubernetes/kubernetes +RUN echo \ + && export NAME=kubectl \ + && export TEST="${NAME} version --client" \ + && export REPOSITORY="kubernetes/kubernetes" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="${NAME}" \ + && export URL="https://storage.googleapis.com/kubernetes-release/release/${VERSION}/bin/linux/${ARCH}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && sudo ${curl} ${URL} --output /tmp/${NAME} \ + && sudo ${INSTALL} /tmp/kubectl ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Install ttyd +# - https://tsl0922.github.io/ttyd +# - https://github.com/tsl0922/ttyd +RUN echo \ + && export NAME=ttyd \ + && export TEST="${NAME} --version" \ + && export REPOSITORY="tsl0922/ttyd" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "x86_64"; else if ($1 == "aarch64" || $1 == "arm64") print "aarch64"; else print "unknown" }') \ + && export PKG="${NAME}.${ARCH}" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} --output /tmp/${NAME} \ + && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Insall Cilium CLI +# - https://cilium.io +# - https://github.com/cilium/cilium-cli +RUN echo \ + && export NAME=cilium \ + && export TEST="${NAME} version --client" \ + && export REPOSITORY="cilium/cilium-cli" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="${NAME}-linux-${ARCH}.tar.gz" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}"/${PKG} \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} | tar xzvf - --directory /tmp ${NAME} \ + && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Insall istioctl +# - https://istio.io +# - https://github.com/istio/istio +# - https://github.com/istio/istio/releases/download/1.20.2/istio-1.20.2-linux-arm64.tar.gz +RUN echo \ + && export NAME=istioctl \ + && export TEST="${NAME} version --short 2>/dev/null" \ + && export REPOSITORY="istio/istio" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="istio-${VERSION}-linux-${ARCH}.tar.gz" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} | tar xzvf - --directory /tmp istio-${VERSION}/bin/${NAME} \ + && sudo ${INSTALL} /tmp/istio-${VERSION}/bin/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Insall Github Actions Local Testing CLI +# - https://nektosact.com +# - https://github.com/nektos/gh-act +RUN echo \ + && export NAME=act \ + && export TEST="${NAME} --version" \ + && export REPOSITORY="nektos/gh-act" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="linux-${ARCH}" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} --output /tmp/${NAME} \ + && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Insall helm cli +# - https://helm.sh +# - https://github.com/helm/helm +RUN echo \ + && export NAME=helm \ + && export TEST="${NAME} version" \ + && export REPOSITORY="helm/helm" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="${NAME}-${VERSION}-linux-${ARCH}.tar.gz" \ + && export URL="https://get.helm.sh/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} | tar xzvf - --directory /tmp linux-${ARCH}/${NAME} \ + && sudo ${INSTALL} /tmp/linux-${ARCH}/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Insall dagger cli +# - https://dagger.io +# - https://github.com/dagger/dagger +RUN echo \ + && export NAME="dagger" \ + && export TEST="${NAME} version" \ + && export REPOSITORY="dagger/dagger" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="${NAME}_${VERSION}_linux_${ARCH}.tar.gz" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} | sudo tar xzvf - --directory ${BIN} ${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Install clusterctl +RUN echo \ + && export NAME=clusterctl \ + && export TEST="${NAME} version" \ + && export REPOSITORY="kubernetes-sigs/cluster-api" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export PKG="${NAME}-linux-${ARCH}" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} --output /tmp/${NAME} \ + && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Install talosctl +RUN echo \ + && export NAME=talosctl \ + && export TEST="${NAME} version --client" \ + && export REPOSITORY="siderolabs/talos" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH="$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }')" \ + && export PKG="${NAME}-linux-${ARCH}" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} --output /tmp/${NAME} \ + && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +# Install omnictl +RUN echo \ + && export NAME=omnictl \ + && export TEST="${NAME} --version" \ + && export REPOSITORY="siderolabs/omni" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH="$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }')" \ + && export PKG="${NAME}-linux-${ARCH}" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} --output /tmp/${NAME} \ + && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Install kubelogin +# - dep of omnictl +RUN set -ex \ + && export NAME=kubelogin \ + && export TEST="${NAME} --version" \ + && export REPOSITORY="azure/kubelogin" \ + && export VERSION="$(${curl_github} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH="$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }')" \ + && export PKG="${NAME}-linux-${ARCH}.zip" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && export DIR="/usr/local/bin" \ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && ${curl} ${URL} --output /tmp/${PKG} \ + && sudo unzip /tmp/${PKG} -d /tmp/ \ + && sudo mv /tmp/bin/linux_${ARCH}/${NAME} ${DIR}/${NAME} \ + && ${TEST} \ + && ${dir_clean} \ + && echo + +################################################################################## +# Install virtctl +RUN echo \ + && export NAME=virtctl \ + && export TEST="${NAME} version --client" \ + && export REPOSITORY="kubevirt/kubevirt" \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export ARCH="$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }')" \ + && export PKG="${NAME}-${VERSION}-linux-${ARCH}" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} --output /tmp/${NAME} \ + && sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ + && ${dir_clean} \ + && ${TEST} \ + && echo + +################################################################################## +# Install Krew +ARG KREW_PKG="\ + view-utilization \ + view-secret \ + view-cert \ + rook-ceph \ + open-svc \ + whoami \ + konfig \ + ktop \ + neat \ + tail \ + ctx \ + ns \ + " +RUN echo \ + && export NAME=krew \ + && export TEST="kubectl ${NAME} version" \ + && export REPOSITORY="kubernetes-sigs/${NAME}" \ + && export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ + && export PKG="${NAME}-linux_${ARCH}.tar.gz" \ + && export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ + && echo "---------------------------------------------------------"\ + && echo "INFO[${NAME}] Installed:" \ + && echo "INFO[${NAME}] Command: (kubectl) ${NAME}" \ + && echo "INFO[${NAME}] Package: ${PKG}" \ + && echo "INFO[${NAME}] Latest Release: ${VERSION}" \ + && echo "INFO[${NAME}] Architecture: ${ARCH}" \ + && echo "INFO[${NAME}] Source: ${URL}" \ + && echo "---------------------------------------------------------"\ + && ${curl} ${URL} | tar xzvf - --directory /tmp ./${NAME}-linux_${ARCH} \ + && sudo ${INSTALL} /tmp/${NAME}-linux_${ARCH} ${BIN}/kubectl-${NAME} \ + && for pkg in ${CODE_PKGS}; do kubectl ${NAME} install ${pkg}; echo "Installed: ${pkg}"; done \ + && ${dir_clean} \ + && ${TEST} \ + && kubectl krew update \ + && kubectl krew install oidc-login \ + && echo + +################################################################################# +# Load startup artifacts +COPY ./bin/connect /bin/ +COPY ./bin/entrypoint /bin/ +COPY ./bin/devcontainer-links /bin/ + +################################################################################# +# Entrypoint & default command +ENTRYPOINT ["/bin/entrypoint"] +HEALTHCHECK --interval=120s --timeout=30s --start-period=5s --retries=3 CMD [ "true" ] +CMD ["/usr/bin/env", "connect"] + +# Ports +# - mosh +EXPOSE 6000 +# - TTYd +EXPOSE 7681 diff --git a/.github/docker/Dockerfile.code-server b/.github/hack/Dockerfile.code-server similarity index 100% rename from .github/docker/Dockerfile.code-server rename to .github/hack/Dockerfile.code-server diff --git a/.github/docker/Dockerfile b/.github/hack/Dockerfile.devcontainer similarity index 100% rename from .github/docker/Dockerfile rename to .github/hack/Dockerfile.devcontainer diff --git a/.gitmodules b/.github/hack/modules similarity index 53% rename from .gitmodules rename to .github/hack/modules index 5538572..06810eb 100644 --- a/.gitmodules +++ b/.github/hack/modules @@ -1,12 +1,6 @@ [submodule "rootfs/etc/skel/.tmux/plugins/tpm"] path = rootfs/etc/skel/.tmux/plugins/tpm url = https://github.com/tmux-plugins/tpm -[submodule "rootfs/etc/skel/.local/share/omf"] - path = rootfs/etc/skel/.local/share/omf - url = https://github.com/oh-my-fish/oh-my-fish.git [submodule "rootfs/etc/skel/.vim/bundle/Vundle.vim"] path = rootfs/etc/skel/.vim/bundle/Vundle.vim url = https://github.com/VundleVim/Vundle.vim.git -[submodule ".github/konductor"] - path = .github/konductor - url = https://github.com/containercraft/konductor diff --git a/.github/konductor b/.github/konductor deleted file mode 160000 index ed7e764..0000000 --- a/.github/konductor +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ed7e764fccd28f74407a28f49cb30faba804ca4b diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index da0261b..fd596d7 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -6,10 +6,9 @@ # - https://docs.github.com/en/enterprise-cloud@latest/actions/learn-github-actions/variables#default-environment-variables # # Develop this workflow locally with the following command: -# ~$ gh extension install nektos/gh-act -# ~$ gh act --env-file .env -s GITHUB_TOKEN=$GITHUB_TOKEN -s PULUMI_ACCESS_TOKEN=$PULUMI_ACCESS_TOKEN +# ~$ gh act --env-file .env -s GITHUB_TOKEN=$GITHUB_TOKEN +name: build -name: Build Konductor Devcontainer on: workflow_dispatch: push: @@ -17,49 +16,47 @@ on: - main paths-ignore: - "Makefile" + - "devcontainer**" - ".devcontainer/**" - - ".pulumi/**" - - ".talos/**" - - ".kube/**" - "docs/**" - "**.md" pull_request: + branches: + - main paths-ignore: - "Makefile" + - "devcontainer**" - ".devcontainer/**" - - ".pulumi/**" - - ".talos/**" - - ".kube/**" - "docs/**" - "**.md" - branches: - - main - schedule: - - cron: "0 2 * * *" # Daily at 2am UTC jobs: - build-konductor: + build-and-push: runs-on: ubuntu-latest permissions: contents: read packages: write actions: write - steps: - name: Git Checkout uses: actions/checkout@v4 id: git-checkout - with: - ref: "main" - submodules: "shallow" - name: Set up QEMU uses: docker/setup-qemu-action@v3 - id: qemu + id: qemu-install - name: Install Docker Buildx uses: docker/setup-buildx-action@v3 - id: docker-buildx + id: docker-buildx-install + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + id: docker-login-ghcr + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} - name: repository_owner to lower case uses: Entepotenz/change-string-case-action-min-dependencies@v1 @@ -73,46 +70,145 @@ jobs: with: string: ${{ github.repository }} - - name: Github Container Registry Login - id: docker-login - if: ${{ github.event_name == 'push' }} && ${{ github.ref == 'refs/heads/main' }} - run: | - echo ${{ secrets.GHA_GITHUB_TOKEN }} | docker login ghcr.io -u usrbinkat --password-stdin - -# - name: Build Konductor Container Image -# uses: docker/build-push-action@v5 -# id: docker-build-cache -# if: github.event_name == 'pull_request' || (github.event_name == 'push' && github.ref != 'refs/heads/main') -# with: -# push: false -# cache-from: | -# type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:build-cache -# type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:latest -# cache-to: type=inline,mode=max -# context: .github/devcontainer/docker -# file: .github/devcontainer/docker/Dockerfile -# platforms: linux/amd64,linux/arm64 -# tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:latest,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" - - - name: Publish Konductor Container Image + - name: Build and Push Image pulumi/devcontainer:slim + uses: docker/build-push-action@v5 + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' + with: + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache,mode=max + context: .github/docker/slim + file: .github/docker/slim/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:slim,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Build and Push Image pulumi/devcontainer:slim-node + uses: docker/build-push-action@v5 + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' + with: + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + context: .github/docker/slim-node + file: .github/docker/slim-node/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:slim-node,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Build and Push Image pulumi/devcontainer:slim-python + uses: docker/build-push-action@v5 + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' + with: + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + context: .github/docker/slim-python + file: .github/docker/slim-python/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:slim-python,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Build and Push Image pulumi/devcontainer:slim-golang + uses: docker/build-push-action@v5 + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' + with: + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + context: .github/docker/slim-golang + file: .github/docker/slim-golang/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:slim-dotnet,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Build and Push Image pulumi/devcontainer:slim-dotnet + uses: docker/build-push-action@v5 + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' + with: + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + context: .github/docker/slim-dotnet + file: .github/docker/slim-dotnet/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:slim-dotnet,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Build and Push Image pulumi/devcontainer:slim-all + uses: docker/build-push-action@v5 + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' + with: + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache,mode=max + context: .github/docker/slim-all + file: .github/docker/slim-all/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:slim-all,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Build and Push Image pulumi/devcontainer:hugo + uses: docker/build-push-action@v5 + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' + with: + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache,mode=max + context: .github/docker/hugo + file: .github/docker/hugo/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:hugo,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Build and Push Image pulumi/devcontainer:base + uses: docker/build-push-action@v5 + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' + with: + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache,mode=max + context: .github/docker/base + file: .github/docker/base/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:base,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Build and Push Image pulumi/devcontainer:dind + uses: docker/build-push-action@v5 + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' + with: + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache,mode=max + context: .github/docker/docker-in-docker + file: .github/docker/docker-in-docker/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:dind,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Build and Push Image pulumi/devcontainer:extra + uses: docker/build-push-action@v5 + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' + with: + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache,mode=max + context: .github/docker/extra + file: .github/docker/extra/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:extra,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Build and Push Image pulumi/devcontainer:code-server uses: docker/build-push-action@v5 - id: docker-build-push - #if: github.event_name == 'push' && github.ref == 'refs/heads/main' + if: github.ref == 'refs/heads/main' || github.event_name == 'pull_request' with: - push: true - context: .github/docker - file: .github/docker/Dockerfile + push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + cache-from: | + type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:server-cache + cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:cache,mode=max + context: .github/docker/code-server + file: .github/docker/code-server/Dockerfile platforms: linux/amd64,linux/arm64 - tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:latest,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" - #cache-from: | - # type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:build-cache - # type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:latest - #cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:build-cache,mode=max - - - name: Cleanup - id: make-clean-all - if: always() - run: make clean-all - env: - PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:code-server,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" diff --git a/.github/workflows/build.yaml.legacy b/.github/workflows/build.yaml.legacy new file mode 100644 index 0000000..da0261b --- /dev/null +++ b/.github/workflows/build.yaml.legacy @@ -0,0 +1,118 @@ +################################################################################## +# References: +# Built-in arguments: +# - https://docs.github.com/en/actions/learn-github-actions/contexts +# Built-in environment variables: +# - https://docs.github.com/en/enterprise-cloud@latest/actions/learn-github-actions/variables#default-environment-variables +# +# Develop this workflow locally with the following command: +# ~$ gh extension install nektos/gh-act +# ~$ gh act --env-file .env -s GITHUB_TOKEN=$GITHUB_TOKEN -s PULUMI_ACCESS_TOKEN=$PULUMI_ACCESS_TOKEN + +name: Build Konductor Devcontainer +on: + workflow_dispatch: + push: + branches: + - main + paths-ignore: + - "Makefile" + - ".devcontainer/**" + - ".pulumi/**" + - ".talos/**" + - ".kube/**" + - "docs/**" + - "**.md" + pull_request: + paths-ignore: + - "Makefile" + - ".devcontainer/**" + - ".pulumi/**" + - ".talos/**" + - ".kube/**" + - "docs/**" + - "**.md" + branches: + - main + schedule: + - cron: "0 2 * * *" # Daily at 2am UTC + +jobs: + build-konductor: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + actions: write + + steps: + - name: Git Checkout + uses: actions/checkout@v4 + id: git-checkout + with: + ref: "main" + submodules: "shallow" + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + id: qemu + + - name: Install Docker Buildx + uses: docker/setup-buildx-action@v3 + id: docker-buildx + + - name: repository_owner to lower case + uses: Entepotenz/change-string-case-action-min-dependencies@v1 + id: string-owner-to-lower + with: + string: ${{ github.repository_owner }} + + - name: Transform repository name to lower case + uses: Entepotenz/change-string-case-action-min-dependencies@v1 + id: string-repository-to-lower + with: + string: ${{ github.repository }} + + - name: Github Container Registry Login + id: docker-login + if: ${{ github.event_name == 'push' }} && ${{ github.ref == 'refs/heads/main' }} + run: | + echo ${{ secrets.GHA_GITHUB_TOKEN }} | docker login ghcr.io -u usrbinkat --password-stdin + +# - name: Build Konductor Container Image +# uses: docker/build-push-action@v5 +# id: docker-build-cache +# if: github.event_name == 'pull_request' || (github.event_name == 'push' && github.ref != 'refs/heads/main') +# with: +# push: false +# cache-from: | +# type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:build-cache +# type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:latest +# cache-to: type=inline,mode=max +# context: .github/devcontainer/docker +# file: .github/devcontainer/docker/Dockerfile +# platforms: linux/amd64,linux/arm64 +# tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:latest,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + + - name: Publish Konductor Container Image + uses: docker/build-push-action@v5 + id: docker-build-push + #if: github.event_name == 'push' && github.ref == 'refs/heads/main' + with: + push: true + context: .github/docker + file: .github/docker/Dockerfile + platforms: linux/amd64,linux/arm64 + tags: "ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:latest,ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:${{ github.sha }}" + #cache-from: | + # type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:build-cache + # type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:latest + #cache-to: type=registry,ref=ghcr.io/${{ steps.string-repository-to-lower.outputs.lowercase }}:build-cache,mode=max + + - name: Cleanup + id: make-clean-all + if: always() + run: make clean-all + env: + PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1e72168..0000000 --- a/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -local -.kube -.talos -.kube -.talos -.pulumi -.kube -.pulumi -.talos diff --git a/.kube/.gitkeep b/.kube/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/.pulumi/.gitkeep b/.pulumi/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/.talos/manifest/.gitkeep b/.talos/manifest/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/.talos/patch/.gitkeep b/.talos/patch/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/.talos/patch/machine.yaml b/.talos/patch/machine.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/.talos/secrets/.gitkeep b/.talos/secrets/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/Makefile b/Makefile deleted file mode 100644 index cb75e64..0000000 --- a/Makefile +++ /dev/null @@ -1,223 +0,0 @@ -# --- Global Variables --- -DEPLOYMENT_ENVIRONMENT := dev -LOWERCASE_GITHUB_REPOSITORY := $(shell echo ${GITHUB_REPOSITORY} | tr '[:upper:]' '[:lower:]') -REPO_NAME := $(shell echo ${LOWERCASE_GITHUB_REPOSITORY} | awk -F '/' '{print $$2}') -REPO_ORG := $(shell echo ${LOWERCASE_GITHUB_REPOSITORY} | awk -F '/' '{print $$1}') -PULUMI_STACK_IDENTIFIER := ${GITHUB_USER}/${REPO_NAME}/${DEPLOYMENT_ENVIRONMENT} - -# Escape special characters in sensitive tokens -ESCAPED_PAT := $(shell echo "${PULUMI_ACCESS_TOKEN}" | sed -e 's/[\/&]/\\&/g') -ESCAPED_GITHUB_TOKEN := $(shell echo "${GITHUB_TOKEN}" | sed -e 's/[\/&]/\\&/g') - -# Define file paths for configurations -TALOS_CONFIG_FILE := ${PWD}/.talos/config -KUBE_CONFIG_FILE := ${PWD}/.kube/config - -# Check if PULUMI_ACCESS_TOKEN is set -ifeq ($(ESCAPED_PAT),) -$(warning PULUMI_ACCESS_TOKEN is not set) -endif - -# Check if GITHUB_TOKEN is set -ifeq ($(ESCAPED_GITHUB_TOKEN),) -$(warning GITHUB_TOKEN is not set) -endif - -# --- Targets --- -.PHONY: help detect-arch pulumi-login pulumi-up up talos-gen-config talos-cluster kind-cluster clean clean-all act konductor test-kind test-talos stop - -# --- Default Command --- -all: help - -# --- Help --- -# Display available commands -help: - @echo "Available commands:" - @echo " help - Display this help message." - @echo " login - Authenticate with Pulumi." - @echo " esc ENV=foobar - Run Pulumi ESC environment. Default: ENV='kubernetes'." - @echo " up - Deploy Pulumi infrastructure." - @echo " pulumi-down - Destroy deployed Pulumi infrastructure." - @echo " talos-cluster - Deploy a Talos Kubernetes cluster." - @echo " talos-config - Generate and validate Talos configuration." - @echo " talos - Create and configure a Talos Kubernetes cluster." - @echo " kind - Create a local Kubernetes cluster using Kind." - @echo " clean - Clean up resources." - @echo " clean-all - Perform 'clean' and remove Docker volumes." - @echo " act - Test GitHub Actions locally." - @echo " konductor - Maintain .github/devcontainer submodule." - @echo " test - Run setup tests." - @echo " stop - Stop Github Codespaces." - -# --- Detect Architecture --- -detect-arch: - @echo $(shell uname -m | awk '{ if ($$1 == "x86_64") print "amd64"; else if ($$1 == "aarch64" || $$1 == "arm64") print "arm64"; else print "unknown" }') - -# --- Pulumi Login --- -pulumi-login: - @echo "Logging into Pulumi..." - @direnv allow || true - @PULUMI_ACCESS_TOKEN=${PULUMI_ACCESS_TOKEN} pulumi login 2>/dev/null | sed 's/${ESCAPED_PAT}/***PULUMI_ACCESS_TOKEN***/g' || true - @pulumi install || true - @pulumi stack select --create ${PULUMI_STACK_IDENTIFIER} || true - @echo "Login successful." - -# --- Pulumi Deployment --- -pulumi-up: - @echo "Deploying Pulumi infrastructure..." - @KUBECONFIG=${KUBE_CONFIG_FILE} PULUMI_ACCESS_TOKEN=${PULUMI_ACCESS_TOKEN} \ - pulumi up --yes --skip-preview --refresh --stack ${PULUMI_STACK_IDENTIFIER} \ - | sed 's/${ESCAPED_PAT}/***PULUMI_ACCESS_TOKEN***/g' - @echo "Deployment complete." - -pulumi-down: - @echo "Deploying Pulumi infrastructure..." - @KUBECONFIG=${KUBE_CONFIG_FILE} PULUMI_ACCESS_TOKEN=${PULUMI_ACCESS_TOKEN} \ - pulumi down --yes --skip-preview --refresh --stack ${PULUMI_STACK_IDENTIFIER} \ - | sed 's/${ESCAPED_PAT}/***PULUMI_ACCESS_TOKEN***/g' || \ - KUBECONFIG=${KUBE_CONFIG_FILE} PULUMI_ACCESS_TOKEN=${PULUMI_ACCESS_TOKEN} PULUMI_K8S_DELETE_UNREACHABLE=true \ - pulumi down --yes --skip-preview --refresh --stack ${PULUMI_STACK_IDENTIFIER} \ - | sed 's/${ESCAPED_PAT}/***PULUMI_ACCESS_TOKEN***/g' || true - @echo "Deployment complete." - -login: pulumi-login -up: pulumi-login pulumi-up wait-all-pods -down: pulumi-login pulumi-down - -# ---------------------------------------------------------------------------------------------- -# --- Control Flow --- -# ---------------------------------------------------------------------------------------------- - -# --- Wait for All Pods Ready --- -wait-all-pods: - @echo "Waiting for all pods in the cluster to be ready..." - @bash -c 'until [ "$$(kubectl get pods --all-namespaces --no-headers | grep -v "Running\|Completed\|Succeeded" | wc -l)" -eq 0 ]; do echo "Waiting for pods to be ready..."; sleep 5; done' - @kubectl get pods --all-namespaces --show-labels --kubeconfig ${KUBE_CONFIG_FILE} - @echo "All pods in the cluster are ready." - -# ---------------------------------------------------------------------------------------------- -# --- Talos Kubernetes Cluster --- -# ---------------------------------------------------------------------------------------------- - -# --- Talos Configuration --- -talos-gen-config: - @echo "Generating Talos Config..." - @mkdir -p ${HOME}/.kube .kube .pulumi .talos - @touch ${HOME}/.kube/config ${KUBE_CONFIG_FILE} ${TALOS_CONFIG_FILE} - @sudo talosctl gen config kargo https://10.5.0.2:6443 \ - --config-patch @.talos/patch/machine.yaml --output .talos/manifest - @sudo talosctl validate --mode container \ - --config .talos/manifest/controlplane.yaml - @echo "Talos Config generated." - -# --- Talos Cluster --- -talos-cluster: detect-arch talos-gen-config - @echo "Creating Talos Kubernetes Cluster..." - @sudo talosctl cluster create \ - --arch=$$(make detect-arch) \ - --workers 1 \ - --controlplanes 1 \ - --provisioner docker - @pulumi config set kubernetes talos || true - @echo "Talos Cluster provisioning..." - -# --- Wait for Talos Cluster Ready --- -talos-ready: - @echo "Waiting for Talos Cluster to be ready..." - @bash -c 'until kubectl --kubeconfig ${KUBE_CONFIG_FILE} wait --for=condition=Ready pod -l k8s-app=kube-scheduler --namespace=kube-system --timeout=180s; do echo "Waiting for kube-scheduler to be ready..."; sleep 5; done' - @bash -c 'until kubectl --kubeconfig ${KUBE_CONFIG_FILE} wait --for=condition=Ready pod -l k8s-app=kube-controller-manager --namespace=kube-system --timeout=180s; do echo "Waiting for kube-controller-manager to be ready..."; sleep 5; done' - @bash -c 'until kubectl --kubeconfig ${KUBE_CONFIG_FILE} wait --for=condition=Ready pod -l k8s-app=kube-apiserver --namespace=kube-system --timeout=180s; do echo "Waiting for kube-apiserver to be ready..."; sleep 5; done' - @echo "Talos Cluster is ready." - -# --- Talos --- -talos: clean-all talos-cluster talos-ready wait-all-pods - @echo "Talos Cluster ready." - -# ---------------------------------------------------------------------------------------------- -# --- Kind Kubernetes Cluster --- -# ---------------------------------------------------------------------------------------------- - -# --- Kind Cluster --- -kind-cluster: - @echo "Creating Kind Cluster..." - @direnv allow || true - @mkdir -p ${HOME}/.kube .kube || true - @touch ${HOME}/.kube/config .kube/config || true - @chmod 600 ${HOME}/.kube/config .kube/config || true - @sudo docker volume create cilium-worker-n01 - @sudo docker volume create cilium-worker-n02 - @sudo docker volume create cilium-control-plane-n01 - @sudo kind create cluster --wait 1m --retain --config=hack/kind.yaml - @sudo kind get clusters - @sudo kind get kubeconfig --name cilium | tee ${KUBE_CONFIG_FILE} 1>/dev/null - @sudo kind get kubeconfig --name cilium | tee ${HOME}/.kube/config 1>/dev/null - @sudo chown -R $(id -u):$(id -g) ${KUBE_CONFIG_FILE} - @pulumi config set kubernetes kind || true - @echo "Created Kind Cluster." - -# --- Wait for Kind Cluster Ready --- -kind-ready: - @echo "Waiting for Kind Kubernetes API to be ready..." - @kubectl get all --all-namespaces --show-labels --kubeconfig ${KUBE_CONFIG_FILE} || sleep 5 - @bash -c 'until kubectl --kubeconfig ${KUBE_CONFIG_FILE} wait --for=condition=Ready pod -l component=kube-apiserver --namespace=kube-system --timeout=180s; do echo "Waiting for kube-apiserver to be ready..."; sleep 5; done' - @bash -c 'until kubectl --kubeconfig ${KUBE_CONFIG_FILE} wait --for=condition=Ready pod -l component=kube-scheduler --namespace=kube-system --timeout=180s; do echo "Waiting for kube-scheduler to be ready..."; sleep 5; done' - @bash -c 'until kubectl --kubeconfig ${KUBE_CONFIG_FILE} wait --for=condition=Ready pod -l component=kube-controller-manager --namespace=kube-system --timeout=180s; do echo "Waiting for kube-controller-manager to be ready..."; sleep 5; done' - @echo "Kind Cluster is ready." - -kind: clean kind-cluster kind-ready - -# ---------------------------------------------------------------------------------------------- -# --- Maintenance --- -# ---------------------------------------------------------------------------------------------- - -# --- Cleanup --- -clean: login down - @echo "Cleaning up resources..." - @sudo kind delete cluster --name cilium \ - || echo "Kind cluster not found." - @sudo kind delete cluster --name kind \ - || echo "Kind cluster not found." - @sudo talosctl cluster destroy \ - || echo "Talos cluster not found." - @echo "Cleanup complete." - -clean-all: clean - @echo "Performing extended cleanup..." - @sudo docker volume rm cilium-worker-n01 cilium-worker-n02 cilium-control-plane-n01 \ - || echo "Docker volumes not found." - @rm -rf Pulumi.*.yaml - @echo "Extended cleanup complete." - -# --- GitHub Actions Testing --- -act: - @echo "Testing GitHub Workflows locally..." - @direnv allow || true - @GITHUB_TOKEN=${GITHUB_TOKEN} PULUMI_ACCESS_TOKEN=${PULUMI_ACCESS_TOKEN} \ - act --container-options "--privileged" --rm \ - --var GITHUB_TOKEN=${GITHUB_TOKEN} \ - --var PULUMI_ACCESS_TOKEN=${PULUMI_ACCESS_TOKEN} \ - | sed 's/${ESCAPED_PAT}/***PULUMI_ACCESS_TOKEN***/g' - @echo "GitHub Workflow Test Complete." - -# --- Maintain Devcontainer --- -konductor: - @echo "Updating Konductor Devcontainer..." - @docker pull ghcr.io/containercraft/konductor:latest 1>/dev/null & - @git submodule update --init .github/konductor - @git submodule update --remote --merge .github/konductor - @mkdir -p .devcontainer - @rsync -av .github/konductor/.github/devcontainer/* .devcontainer/ - @echo "Konductor Devcontainer is up to date." - -# --- Testing --- -test-kind: clean kind pulumi-up - @echo "Kind test complete." - -test-talos: clean talos pulumi-up - @echo "Talos test complete." - -# --- Stop Codespaces --- -stop: clean - @echo "Stopping Codespaces..." - @gh codespace --codespace ${CODESPACE_NAME} stop - @echo "Codespaces stopped." diff --git a/docker/base/Dockerfile b/docker/base/Dockerfile new file mode 100644 index 0000000..cd71dcb --- /dev/null +++ b/docker/base/Dockerfile @@ -0,0 +1,127 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:base . +############################################################################### +# Base VSCode Image +FROM ghcr.io/pulumi/devcontainer:slim-all + +################################################################################# +# Base package and user configuration +################################################################################# + +# Apt Packages +ARG APT_PKGS="\ +bc \ +mc \ +btop \ +pigz \ +ripgrep \ +tcpdump \ +libwrap0 \ +neofetch \ +" + +# Apt Packages +RUN echo \ +&& export TEST="neofetch" \ +&& ${apt_update} \ +&& bash -c "${apt_install} --no-install-recommends -o Dpkg::Options::='--force-confold' ${APT_PKGS}" \ +&& bash -c "${apt_clean}" \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +################################################################################# +# Image Metadata +################################################################################# +LABEL tag="base" + +################################################################################## +#### Common Binary Install Arguments +################################################################################## + +# Insall Github Actions Local Testing CLI +# - https://nektosact.com +# - https://github.com/nektos/gh-act +RUN echo \ +&& export NAME=act \ +&& export TEST="${NAME} --version" \ +&& export REPOSITORY="nektos/gh-act" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="linux-${ARCH}" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} --output /tmp/${NAME} \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Install Kubectl +# - https://kubernetes.io +# - github.com/kubernetes/kubernetes +RUN echo \ +&& export NAME=kubectl \ +&& export TEST="${NAME} version --client" \ +&& export REPOSITORY="kubernetes/kubernetes" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="${NAME}" \ +&& export URL="https://storage.googleapis.com/kubernetes-release/release/${VERSION}/bin/linux/${ARCH}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& sudo ${curl} ${URL} --output /tmp/${NAME} \ +&& sudo ${INSTALL} /tmp/kubectl ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Install Krew +ARG KREW_PKG="\ +view-secret \ +view-cert \ +open-svc \ +whoami \ +konfig \ +ktop \ +neat \ +tail \ +ctx \ +ns \ +" +RUN echo \ +&& export NAME=krew \ +&& export TEST="kubectl ${NAME} version" \ +&& export REPOSITORY="kubernetes-sigs/${NAME}" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export PKG="${NAME}-linux_${ARCH}.tar.gz" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: (kubectl) ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} | tar xzvf - --directory /tmp ./${NAME}-linux_${ARCH} \ +&& sudo ${INSTALL} /tmp/${NAME}-linux_${ARCH} ${BIN}/kubectl-${NAME} \ +&& for pkg in ${CODE_PKGS}; do kubectl ${NAME} install ${pkg}; echo "Installed: ${pkg}"; done \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo diff --git a/.github/docker/bin/connect b/docker/bin/connect similarity index 100% rename from .github/docker/bin/connect rename to docker/bin/connect diff --git a/.github/docker/bin/devcontainer-links b/docker/bin/devcontainer-links similarity index 100% rename from .github/docker/bin/devcontainer-links rename to docker/bin/devcontainer-links diff --git a/.github/docker/bin/entrypoint b/docker/bin/entrypoint similarity index 100% rename from .github/docker/bin/entrypoint rename to docker/bin/entrypoint diff --git a/docker/code-server/Dockerfile b/docker/code-server/Dockerfile new file mode 100644 index 0000000..71651e0 --- /dev/null +++ b/docker/code-server/Dockerfile @@ -0,0 +1,85 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:code . +# - docker run --rm -d --name devcontainer --hostname devcontainer ghcr.io/pulumi/devcontainer:code +############################################################################### +FROM ghcr.io/pulumi/devcontainer:extra + +################################################################################# +# Image Metadata +################################################################################# +LABEL tag="code-server" + +# Install VSCode Service +EXPOSE 8080 +RUN set -ex \ + && export arch=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "aarch64") print "arm64"; else print "unknown" }') \ + && export varVerCode=$(curl -s https://api.github.com/repos/coder/code-server/releases/latest | awk -F '["v,]' '/tag_name/{print $5}') \ + && curl --output /tmp/code-server.deb -L "https://github.com/coder/code-server/releases/download/v${varVerCode}/code-server_${varVerCode}_${arch}.deb" \ + && sudo apt-get update \ + && sudo apt-get install -y /tmp/code-server.deb \ + && sudo apt-get clean \ + && sudo apt-get autoremove -y \ + && sudo apt-get purge -y --auto-remove \ + && sudo rm -rf \ + /var/lib/{apt,dpkg,cache,log} \ + /usr/share/{doc,man,locale} \ + /var/cache/apt \ + /root/.cache \ + /var/tmp/* \ + /tmp/* \ + && true + +# Install VSCode Extension Plugins +ARG CODE_PKGS="\ +golang.go \ +vscodevim.vim \ +github.copilot \ +max-ss.cyberpunk \ +ms-python.python \ +redhat.vscode-yaml \ +esbenp.prettier-vscode \ +oderwat.indent-rainbow \ +okteto.kubernetes-context \ +ms-vsliveshare.vsliveshare \ +chadonsom.auto-view-readme \ +ms-azuretools.vscode-docker \ +github.vscode-github-actions \ +ms-kubernetes-tools.kind-vscode \ +ms-vscode.vscode-typescript-next \ +github.vscode-pull-request-github \ +matt-rudge.auto-open-preview-panel \ +ms-vscode-remote.remote-containers \ +bierner.markdown-preview-github-styles \ +visualstudioexptteam.vscodeintellicode \ +bierner.markdown-preview-github-styles \ +ms-kubernetes-tools.vscode-kubernetes-tools \ +" +RUN set -ex \ + && for pkg in ${CODE_PKGS}; do code-server --install-extension ${pkg}; echo "Installed: ${pkg}"; done \ + && true + +# Install ttyd +# - https://tsl0922.github.io/ttyd +# - https://github.com/tsl0922/ttyd +RUN echo \ +&& export NAME=ttyd \ +&& export TEST="${NAME} --version" \ +&& export REPOSITORY="tsl0922/ttyd" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "x86_64"; else if ($1 == "aarch64" || $1 == "arm64") print "aarch64"; else print "unknown" }') \ +&& export PKG="${NAME}.${ARCH}" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} --output /tmp/${NAME} \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo diff --git a/docker/docker-in-docker/Dockerfile b/docker/docker-in-docker/Dockerfile new file mode 100644 index 0000000..8b3d62b --- /dev/null +++ b/docker/docker-in-docker/Dockerfile @@ -0,0 +1,82 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:dind . +# - docker run --rm -d --name devcontainer --hostname devcontainer ghcr.io/pulumi/devcontainer:dind +############################################################################### +FROM ghcr.io/pulumi/devcontainer:base + +################################################################################# +# Image Metadata +################################################################################# +LABEL tag="docker-in-docker" + +################################################################################# +# Base package and user configuration +################################################################################# + +# devcontainer docker-in-docker dependencies +ARG APT_PKGS="\ +docker-buildx-plugin \ +docker-ce-cli \ +libffi-dev \ +iptables \ +" +RUN echo \ +&& ${curl} https://download.docker.com/linux/ubuntu/gpg | sudo gpg --batch --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \ +&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list \ +&& ${apt_update} \ +&& bash -c "${apt_install} ${APT_PKGS}" \ +&& bash -c "${apt_clean}" \ +&& ${dir_clean} \ +&& sudo update-alternatives --set iptables /usr/sbin/iptables-legacy \ +&& sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy \ +&& echo + +# Install Kind Kubernetes-in-Docker +RUN echo \ +&& export NAME=kind \ +&& export TEST="${NAME} version" \ +&& export REPOSITORY="kubernetes-sigs/kind" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH="$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }')" \ +&& export PKG="${NAME}-linux-${ARCH}" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} --output /tmp/${NAME} \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +################################################################################## +# Install k9s CLI +# - https://k9scli.io +# - https://github.com/derailed/k9s +RUN echo \ +&& export NAME=k9s \ +&& export TEST="${NAME} version" \ +&& export REPOSITORY="derailed/k9s" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="${NAME}_Linux_${ARCH}.tar.gz" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} | sudo tar xzvf - --directory /tmp ${NAME} \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo diff --git a/docker/extra/Dockerfile b/docker/extra/Dockerfile new file mode 100644 index 0000000..c3a5312 --- /dev/null +++ b/docker/extra/Dockerfile @@ -0,0 +1,192 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:extra . +# - docker run --rm -d --name devcontainer --hostname devcontainer ghcr.io/pulumi/devcontainer:extra +############################################################################### +FROM ghcr.io/pulumi/devcontainer:dind + +################################################################################# +# Image Metadata +################################################################################# +LABEL tag="extra" + +################################################################################# +# Base package and user configuration +################################################################################# + +# Apt Packages +ARG APT_PKGS="\ +fish \ +" +RUN echo \ +&& export TEST="fish --version" \ +&& ${apt_update} \ +&& bash -c "${apt_install} --no-install-recommends -o Dpkg::Options::='--force-confold' ${APT_PKGS}" \ +&& bash -c "${apt_clean}" \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Oh My Fish (OMF) +RUN echo \ +&& export URL="https://raw.githubusercontent.com/oh-my-fish/oh-my-fish/master/bin/install" \ +&& ${curl} ${URL} --output /tmp/install \ +&& fish -c '. /tmp/install --noninteractive' \ +&& ${dir_clean} \ +&& echo + +# SSH & SSHD Packages +# TEST is not available normally as sshd has no version flag +RUN echo \ +&& export TEST="command -v sshd" \ +&& ${apt_update} \ +&& DEBIAN_FRONTEND=noninteractive sudo -E apt-get install -y --no-install-recommends -o Dpkg::Options::='--force-confold' openssh-server ssh-askpass ssh-import-id \ +&& sudo mkdir /var/run/sshd \ +&& bash -c "${apt_clean}" \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Helm cli +# - https://helm.sh +# - https://github.com/helm/helm +RUN echo \ +&& export NAME=helm \ +&& export TEST="${NAME} version" \ +&& export REPOSITORY="helm/helm" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="${NAME}-${VERSION}-linux-${ARCH}.tar.gz" \ +&& export URL="https://get.helm.sh/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} | tar xzvf - --directory /tmp linux-${ARCH}/${NAME} \ +&& sudo ${INSTALL} /tmp/linux-${ARCH}/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Cilium CLI +# - https://cilium.io +# - https://github.com/cilium/cilium-cli +RUN echo \ +&& export NAME=cilium \ +&& export TEST="${NAME} version --client" \ +&& export REPOSITORY="cilium/cilium-cli" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="${NAME}-linux-${ARCH}.tar.gz" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}"/${PKG} \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} | tar xzvf - --directory /tmp ${NAME} \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Istioctl CLI +# - https://istio.io +# - https://github.com/istio/istio +RUN echo \ +&& export NAME=istioctl \ +&& export TEST="${NAME} version --short 2>/dev/null" \ +&& export REPOSITORY="istio/istio" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="istio-${VERSION}-linux-${ARCH}.tar.gz" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} | tar xzvf - --directory /tmp istio-${VERSION}/bin/${NAME} \ +&& sudo ${INSTALL} /tmp/istio-${VERSION}/bin/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Clusterctl CLI +RUN echo \ +&& export NAME=clusterctl \ +&& export TEST="${NAME} version" \ +&& export REPOSITORY="kubernetes-sigs/cluster-api" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="${NAME}-linux-${ARCH}" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} --output /tmp/${NAME} \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Talosctl CLI +RUN echo \ +&& export NAME=talosctl \ +&& export TEST="${NAME} version --client" \ +&& export REPOSITORY="siderolabs/talos" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH="$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }')" \ +&& export PKG="${NAME}-linux-${ARCH}" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} --output /tmp/${NAME} \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Virtctl CLI +RUN echo \ +&& export NAME=virtctl \ +&& export TEST="${NAME} version --client" \ +&& export REPOSITORY="kubevirt/kubevirt" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH="$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }')" \ +&& export PKG="${NAME}-${VERSION}-linux-${ARCH}" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} --output /tmp/${NAME} \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo diff --git a/docker/hugo/Dockerfile b/docker/hugo/Dockerfile new file mode 100644 index 0000000..00198b6 --- /dev/null +++ b/docker/hugo/Dockerfile @@ -0,0 +1,42 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:hugo . +# - docker run --rm -d --name devcontainer --hostname devcontainer ghcr.io/pulumi/devcontainer:hugo +############################################################################### +# Based from the Pulumi Devcontainer SLIM image. +FROM ghcr.io/pulumi/devcontainer:slim-all + +################################################################################# +# Image Metadata +################################################################################# +LABEL tag="hugo" + +# Apt Packages +ARG APT_PKGS="\ +chromium-browser \ +" +# Apt Packages +RUN echo \ +&& export TEST="gh version" \ +&& ${apt_update} \ +&& bash -c "${apt_install} --no-install-recommends -o Dpkg::Options::='--force-confold' ${APT_PKGS}" \ +&& bash -c "${apt_clean}" \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Install hugo +EXPOSE 1313 +RUN set -ex \ + && export arch=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ + && export urlHugoRelease="https://api.github.com/repos/gohugoio/hugo/releases/latest" \ + && export urlHugoVersion=$(curl -s ${urlHugoRelease} | awk -F '["v,]' '/tag_name/{print $5}') \ + && export urlHugoBase="https://github.com/gohugoio/hugo/releases/download" \ + && export urlHugoBin="hugo_${urlHugoVersion}_linux-${arch}.deb" \ + && export urlHugo="${urlHugoBase}/v${urlHugoVersion}/${urlHugoBin}" \ + && curl --output /tmp/${urlHugoBin} -L ${urlHugo} \ + && sudo dpkg -i /tmp/${urlHugoBin} \ + && which hugo \ + && hugo version \ + && rm -rf /tmp/* \ + && true diff --git a/docker/slim-all/Dockerfile b/docker/slim-all/Dockerfile new file mode 100644 index 0000000..4e05d88 --- /dev/null +++ b/docker/slim-all/Dockerfile @@ -0,0 +1,95 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:slim-all . +# - docker run --rm -d --name devcontainer --hostname devcontainer ghcr.io/pulumi/devcontainer:slim-all +############################################################################### +# Base VSCode Image +FROM ghcr.io/pulumi/devcontainer:slim + +################################################################################# +# Image Metadata +LABEL tag="slim-all" + +################################################################################# +# Install Programming Language Tooling +# - python +################################################################################# +# Python +ARG APT_PKGS="\ +python3 \ +python3-venv \ +python3-dev \ +python3.11 \ +python3.11-venv \ +python3.11-dev \ +python3-pip \ +" +RUN echo \ +&& bash -c "${apt_update}" \ +&& bash -c "${apt_install} ${APT_PKGS}" \ +&& bash -c "${apt_clean}" \ +&& sudo update-alternatives --install \ + /usr/bin/python python \ + /usr/bin/python3 1 \ +&& ${dir_clean} \ +&& echo + +# Python Pip Packages +ARG PIP_PKGS="\ +setuptools \ +" +RUN echo \ +&& sudo python3 -m pip install ${PIP_PKGS} \ +&& ${dir_clean} \ +&& echo + + +# Golang +RUN echo ;set -ex \ +&& jq --version \ +&& export NAME="go" \ +&& export TEST="${NAME} version" \ +&& export VERSION="$(${curl} "https://go.dev/dl/?mode=json" | jq --compact-output --raw-output .[1].version)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="${VERSION}.linux-${ARCH}.tar.gz" \ +&& export URL="https://go.dev/dl/${PKG}" \ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& ${curl} ${URL} | sudo tar -C /usr/local/ -xzvf - \ +&& sudo chmod 755 /usr/local/go/bin/* \ +&& ${TEST} \ +&& echo + +# Install nodejs npm yarn +RUN echo \ +&& export NODE_MAJOR=20 \ +&& ${curl} https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \ + | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ +&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" \ + | sudo tee /etc/apt/sources.list.d/nodesource.list \ +&& sudo apt-get update \ +&& sudo apt-get install nodejs \ +&& sudo apt-get clean \ +&& sudo apt-get autoremove -y \ +&& sudo apt-get purge -y --auto-remove \ +&& ${dir_clean} \ +&& node --version \ +&& npm --version \ +&& sudo npm install --global yarn \ +&& yarn --version \ +&& true + +# Dotnet +ARG APT_PKGS="\ +dotnet-sdk-7.0 \ +dotnet-runtime-7.0 \ +" +RUN echo \ +&& bash -c "${apt_install} ${APT_PKGS}" \ +&& bash -c "${apt_clean}" \ +&& ${dir_clean} \ +&& echo diff --git a/docker/slim-dotnet/Dockerfile b/docker/slim-dotnet/Dockerfile new file mode 100644 index 0000000..43551dd --- /dev/null +++ b/docker/slim-dotnet/Dockerfile @@ -0,0 +1,24 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:slim-dotnet . +# - docker run --rm -d --name devcontainer --hostname devcontainer ghcr.io/pulumi/devcontainer:slim-dotnet +############################################################################### +# Base VSCode Image +FROM ghcr.io/pulumi/devcontainer:slim + +################################################################################# +# Image Metadata +LABEL tag="slim-dotnet" + +################################################################################# +# Install Programming Language Tooling +# - dotnet +ARG APT_PKGS="\ +dotnet-sdk-7.0 \ +dotnet-runtime-7.0 \ +" +RUN echo \ +&& bash -c "${apt_install} ${APT_PKGS}" \ +&& bash -c "${apt_clean}" \ +&& ${dir_clean} \ +&& echo diff --git a/docker/slim-golang/Dockerfile b/docker/slim-golang/Dockerfile new file mode 100644 index 0000000..b2b1104 --- /dev/null +++ b/docker/slim-golang/Dockerfile @@ -0,0 +1,33 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:slim-golang . +# - docker run --rm -d --name devcontainer --hostname devcontainer ghcr.io/pulumi/devcontainer:slim-golang +############################################################################### +# Base VSCode Image +FROM ghcr.io/pulumi/devcontainer:slim + +################################################################################# +# Image Metadata +LABEL tag="slim-golang" + +################################################################################# +# Install Programming Language Tooling +# - golang +RUN echo ;set -ex \ +&& jq --version \ +&& export NAME="go" \ +&& export TEST="${NAME} version" \ +&& export VERSION="$(${curl} "https://go.dev/dl/?mode=json" | jq --compact-output --raw-output .[1].version)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="${VERSION}.linux-${ARCH}.tar.gz" \ +&& export URL="https://go.dev/dl/${PKG}" \ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& ${curl} ${URL} | sudo tar -C /usr/local/ -xzvf - \ +&& sudo chmod 755 /usr/local/go/bin/* \ +&& ${TEST} \ +&& echo diff --git a/docker/slim-node/Dockerfile b/docker/slim-node/Dockerfile new file mode 100644 index 0000000..cfde6ef --- /dev/null +++ b/docker/slim-node/Dockerfile @@ -0,0 +1,34 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:slim-node . +# - docker run --rm -d --name devcontainer --hostname devcontainer ghcr.io/pulumi/devcontainer:slim-node +############################################################################### +# Base VSCode Image +FROM ghcr.io/pulumi/devcontainer:slim + +################################################################################# +# Image Metadata +LABEL tag="slim-node" + +################################################################################# +# Install Programming Language Tooling +# - nodejs +# - npm +# - yarn +RUN echo \ +&& export NODE_MAJOR=20 \ +&& ${curl} https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \ + | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ +&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" \ + | sudo tee /etc/apt/sources.list.d/nodesource.list \ +&& sudo apt-get update \ +&& sudo apt-get install nodejs \ +&& sudo apt-get clean \ +&& sudo apt-get autoremove -y \ +&& sudo apt-get purge -y --auto-remove \ +&& ${dir_clean} \ +&& node --version \ +&& npm --version \ +&& sudo npm install --global yarn \ +&& yarn --version \ +&& true diff --git a/docker/slim-python/Dockerfile b/docker/slim-python/Dockerfile new file mode 100644 index 0000000..4ec8662 --- /dev/null +++ b/docker/slim-python/Dockerfile @@ -0,0 +1,41 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:slim-python . +# - docker run --rm -d --name devcontainer --hostname devcontainer ghcr.io/pulumi/devcontainer:slim-python +############################################################################### +# Base VSCode Image +FROM ghcr.io/pulumi/devcontainer:slim + +################################################################################# +# Image Metadata +LABEL tag="slim-python" + +################################################################################# +# Install Programming Language Tooling +# - python +ARG APT_PKGS="\ +python3 \ +python3-venv \ +python3-dev \ +python3.11 \ +python3.11-venv \ +python3.11-dev \ +python3-pip \ +" +RUN echo \ +&& bash -c "${apt_install} ${APT_PKGS}" \ +&& bash -c "${apt_clean}" \ +&& sudo update-alternatives --install \ + /usr/bin/python python \ + /usr/bin/python3 1 \ +&& ${dir_clean} \ +&& echo + +# Python Pip Packages +ARG PIP_PKGS="\ +setuptools \ +" +RUN echo \ +&& sudo python3 -m pip install ${PIP_PKGS} \ +&& ${dir_clean} \ +&& echo diff --git a/docker/slim/Dockerfile b/docker/slim/Dockerfile new file mode 100644 index 0000000..1a18aa7 --- /dev/null +++ b/docker/slim/Dockerfile @@ -0,0 +1,389 @@ +############################################################################### +# Use: +# - docker build --progress plain --tag ghcr.io/pulumi/devcontainer:slim . +# - docker run --rm -d --name devcontainer --hostname devcontainer ghcr.io/pulumi/devcontainer:slim +############################################################################### +# Base VSCode Image +FROM mcr.microsoft.com/devcontainers/base:ubuntu +SHELL ["/bin/bash", "-c", "-e"] + +# Append rootfs directory tree into container to copy +# additional files into the container's directory tree +ADD rootfs / +ADD rootfs/etc/skel/ /root/ +RUN cp -rf /etc/skel/.bashrc /root/.bashrc && rm /root/.vimrc +ADD rootfs/etc/skel/ /home/runner/ +ADD rootfs/etc/skel/ /home/vscode/ + +################################################################################# +# Environment Variables + +# Disable LC_ALL for Nix compatibility +# currently inheriting from base MS base image +ENV LC_ALL="" +# Disable timezone prompts +ENV TZ=UTC +# Disable package manager prompts +ENV DEBIAN_FRONTEND=noninteractive +# Add go and nix to path +ENV PATH="/home/vscode/.krew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin:/nix/var/nix/profiles/default/bin" +# Set necessary nix environment variable +ENV NIX_INSTALLER_EXTRA_CONF='filter-syscalls = false' +# Set default bin directory for new packages +ENV BIN="/usr/local/bin" +# Set default binary install command +ENV INSTALL="install -m 755 -o root -g root" +# Set additional environment variables +ENV REGISTRY_AUTH_FILE='/home/vscode/.docker/config.json' +ENV XDG_CONFIG_HOME=/home/vscode/.config + +# Common Dockerfile Container Build Functions +ENV apt_update="sudo apt-get update" +ENV apt_install="TERM=linux DEBIAN_FRONTEND=noninteractive sudo apt-get install -q --yes --purge --assume-yes --auto-remove --allow-downgrades -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold'" +ENV apt_clean="sudo apt-get clean && sudo apt-get autoremove -y && sudo apt-get purge -y --auto-remove" +ENV curl="/usr/bin/curl --silent --show-error --tlsv1.2 --location" +ENV curl_github="/usr/bin/curl --silent --show-error --tlsv1.2 --request GET --url" +ENV dir_clean="\ +sudo rm -rf \ +/var/lib/{apt,cache,log} \ +/usr/share/{doc,man,locale} \ +/var/cache/apt \ +/home/*/.cache \ +/root/.cache \ +/var/tmp/* \ +/tmp/* \ +" + +################################################################################# +# Base package and user configuration +################################################################################# + +# Apt Packages +ARG APT_PKGS="\ +gh \ +git \ +vim \ +tar \ +file \ +wget \ +tree \ +curl \ +tmux \ +socat \ +gnupg \ +pipenv \ +netcat \ +psmisc \ +procps \ +passwd \ +xz-utils \ +fontconfig \ +glibc-tools \ +build-essential \ +ca-certificates \ +libarchive-tools \ +" + +# Apt Packages +RUN echo \ +&& export TEST="gh version" \ +&& ${apt_update} \ +&& bash -c "${apt_install} --no-install-recommends -o Dpkg::Options::='--force-confold' ${APT_PKGS}" \ +&& bash -c "${apt_clean}" \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# jq +RUN echo \ +&& export NAME="jq" \ +&& export TEST="${NAME} --version" \ +&& export REPOSITORY="jqlang/jq" \ +&& export ARCH="$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }')" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | awk -F '[\"v\",-]' '/tag_name/{print $5}')" \ +&& export PKG="${NAME}-linux-${ARCH}" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${NAME}-${VERSION}/${NAME}-linux-${ARCH}" \ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& ${curl} ${URL} --output /tmp/${NAME} \ +&& file /tmp/${NAME} \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# direnv +RUN echo \ +&& export NAME="direnv"\ +&& export PKG="install.sh"\ +&& export URL="https://direnv.net/${PKG}"\ +&& export TEST="${NAME} --version"\ +&& echo "INFO[${NAME}] Install Package:"\ +&& echo "INFO[${NAME}] Command: ${NAME}"\ +&& echo "INFO[${NAME}] Package: ${PKG}"\ +&& echo "INFO[${NAME}] Source: ${URL}"\ +&& ${curl} ${URL} --output /tmp/${PKG} \ +&& chmod +x /tmp/${PKG} \ +&& sudo bash -c "/tmp/${PKG}" \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Starship +RUN echo \ +&& export NAME=starship \ +&& export TEST="${NAME} --version" \ +&& export URL="https://starship.rs/install.sh" \ +&& ${curl} ${URL} --output /tmp/${NAME} \ +&& chmod +x /tmp/${NAME} \ +&& bash -c "/tmp/${NAME} --verbose --yes" \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +################################################################################# +# Create Users and Groups +# Create User: runner (for github actions runner support) + +RUN echo \ +&& sudo mkdir -p /etc/sudoers.d || true \ +&& sudo groupadd --force --system sudo || true \ +&& sudo groupadd --force --gid 127 --system docker \ +&& sudo echo "%sudo ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/sudo \ +&& sudo echo "%runner ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/sudo \ +&& sudo echo "%vscode ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/sudo \ +&& echo + +# Set User & Workdir default to $HOME +USER vscode +WORKDIR /home/vscode + +# Adduser: +# - user: vscode +# - group: vscode +# - uid: 1000 +# - gid: 1000 +RUN echo \ +&& export USER_ID="1000" \ +&& export USER_NAME="vscode" \ +&& export USER_SHELL="bash" \ +&& export USER_GROUPS="${USER_NAME},sudo,docker,vscode" \ +&& export USER_GROUP_NAME="${USER_NAME}" \ +&& export USER_GROUP_ID="${USER_ID}" \ +&& echo "INFO[${USER_NAME}] User:" \ +&& echo "INFO[${USER_NAME}] User Name: ${USER_NAME}" \ +&& echo "INFO[${USER_NAME}] User Group: ${USER_GROUP_NAME}" \ +&& echo "INFO[${USER_NAME}] Aux Groups: ${USER_GROUPS}" \ +&& echo "INFO[${USER_NAME}] Group ID: ${USER_GROUP_ID}" \ +&& echo "INFO[${USER_NAME}] User ID: ${USER_ID}" \ +&& echo "INFO[${USER_NAME}] SHELL: $(which ${USER_SHELL})" \ +&& echo "${USER_NAME} ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers \ +&& sudo groupadd --force --gid ${USER_ID} ${USER_NAME} \ +&& sudo useradd --create-home --uid ${USER_ID} --gid ${USER_GROUP_ID} --shell $(which ${USER_SHELL}) --groups ${USER_GROUPS} ${USER_NAME} || true \ +&& sudo usermod --append --groups ${USER_GROUPS} ${USER_NAME} \ +&& sudo chsh --shell $(which ${USER_SHELL}) ${USER_NAME} \ +&& sudo mkdir -p /home/vscode/.krew/bin \ +&& sudo chmod 0755 -R /home/vscode/.krew/bin \ +&& sudo chown ${USER_NAME}:${USER_NAME} -R /home/vscode/.krew/bin \ +&& sudo su --preserve-environment --shell $(which ${USER_SHELL}) -c groups ${USER_NAME} 2>/dev/null \ +&& sudo chmod 0775 /usr/local/lib \ +&& sudo rm -rf /usr/local/lib/node_modules \ +&& sudo mkdir -p /usr/local/lib/node_modules \ +&& echo + +RUN sudo chown vscode:vscode -R /home/vscode + +# Adduser: +# - user: runner +# - group: runner +# - uid: 1001 +# - gid: 1001 +RUN echo \ +&& export USER_ID="1001" \ +&& export USER_NAME="runner" \ +&& export USER_SHELL="bash" \ +&& export USER_GROUPS="sudo,docker,vscode,runner" \ +&& export USER_GROUP_ID="${USER_ID}" \ +&& echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] User:" \ +&& echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] UID: ${USER_ID}" \ +&& echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] NAME: ${USER_NAME}" \ +&& echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] SHELL: $(which ${USER_SHELL})" \ +&& echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] USER GROUP: ${USER_GROUP_ID}" \ +&& echo "INFO[${USER_NAME}:${USER_ID}:${USER_GROUPS}] AUX GROUPS: ${USER_GROUPS}" \ +&& sudo groupadd --force --gid ${USER_ID} ${USER_NAME} \ +&& sudo echo "${USER_NAME} ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers \ +&& sudo useradd --create-home --uid ${USER_ID} --gid ${USER_GROUP_ID} --shell $(which ${USER_SHELL}) --groups ${USER_GROUPS} ${USER_NAME} \ +&& sudo chsh --shell $(which ${USER_SHELL}) ${USER_NAME} \ +&& sudo usermod --append --groups ${USER_GROUPS} ${USER_NAME} \ +&& sudo usermod --append --groups ${USER_GROUPS} vscode \ +&& sudo su --preserve-environment --shell $(which ${USER_SHELL}) -c groups ${USER_NAME} \ +&& sudo chown runner:runner -R /home/runner \ +&& sudo chmod 755 /home/vscode/.* \ +&& echo + +RUN sudo chown runner:runner -R /home/runner + +################################################################################## +# Install Creature Comforts + +# Nix +RUN echo \ +&& export NAME=nix-installer \ +&& export TEST="${NAME} --version" \ +&& export REPOSITORY="DeterminateSystems/nix-installer" \ +&& export VERSION="$(${curl_github} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "x86_64"; else if ($1 == "aarch64" || $1 == "arm64") print "aarch64"; else print "unknown" }') \ +&& export PKG="${NAME}-${ARCH}-linux" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& sudo ${curl} ${URL} --output /tmp/${NAME} \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${NAME} install linux --init none --no-confirm --extra-conf "filter-syscalls = false" \ +&& bash -c "${TEST}" \ +&& sudo chown vscode -R /nix \ +&& sudo usermod -aG nixbld vscode \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# NerdFonts: FiraCode Nerd Font Mono +RUN echo \ +&& export NAME=FiraMonoNerdFont \ +&& export TEST="fc-list --quiet ${NAME}" \ +&& export REPOSITORY="ryanoasis/nerd-fonts" \ +&& export VERSION="$(${curl_github} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH="$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }')" \ +&& export PKG="FiraMono.zip" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& export DIR="/usr/share/fonts/truetype/firacode" \ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& ${curl} ${URL} --output /tmp/fonts.zip \ +&& sudo mkdir -p $DIR \ +&& sudo rm -rf $DIR/* \ +&& sudo unzip /tmp/fonts.zip -d /usr/share/fonts/truetype/firacode \ +&& sudo fc-cache -f -v \ +&& fc-list : family | sort | uniq \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Vim Plugins +RUN echo \ +&& /bin/bash -c "vim -T dumb -n -i NONE -es -S <(echo -e 'silent! PluginInstall')" \ +&& git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim \ +&& vim -E -u NONE -S ~/.vimrc +PluginInstall +qall \ +&& echo + +# TMUX Plugins +RUN echo \ +&& ~/.tmux/plugins/tpm/bin/install_plugins || true \ +&& echo + +################################################################################ +# Install Pulumi CLI, ESC, & CTL + +# Install Pulumi CLI Utility +RUN echo \ +&& export NAME=pulumi \ +&& export TEST="pulumi version" \ +&& export REPOSITORY="pulumi/pulumi" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "x64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="${NAME}-${VERSION}-linux-${ARCH}.tar.gz" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} | tar xzvf - --directory /tmp \ +&& sudo chmod 755 /tmp/pulumi/* \ +&& sudo chown root:root /tmp/pulumi/* \ +&& sudo mv /tmp/pulumi/* /usr/local/bin/ \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Install pulumi esc +RUN echo \ +&& export NAME="esc" \ +&& export TEST="esc version" \ +&& export REPOSITORY="pulumi/esc" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "x64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="${NAME}-${VERSION}-linux-${ARCH}.tar.gz" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} | tar xzvf - --directory /tmp \ +&& sudo ${INSTALL} /tmp/${NAME}/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +# Install pulumictl +RUN echo \ +&& export NAME="pulumictl" \ +&& export TEST="${NAME} version" \ +&& export REPOSITORY="pulumi/pulumictl" \ +&& export VERSION="$(${curl} https://api.github.com/repos/${REPOSITORY}/releases/latest | jq --raw-output .tag_name)" \ +&& export ARCH=$(uname -m | awk '{ if ($1 == "x86_64") print "amd64"; else if ($1 == "aarch64" || $1 == "arm64") print "arm64"; else print "unknown" }') \ +&& export PKG="${NAME}-${VERSION}-linux-${ARCH}.tar.gz" \ +&& export URL="https://github.com/${REPOSITORY}/releases/download/${VERSION}/${PKG}" \ +&& echo "---------------------------------------------------------"\ +&& echo "INFO[${NAME}] Installed:" \ +&& echo "INFO[${NAME}] Command: ${NAME}" \ +&& echo "INFO[${NAME}] Package: ${PKG}" \ +&& echo "INFO[${NAME}] Latest Release: ${VERSION}" \ +&& echo "INFO[${NAME}] Architecture: ${ARCH}" \ +&& echo "INFO[${NAME}] Source: ${URL}" \ +&& echo "---------------------------------------------------------"\ +&& ${curl} ${URL} | tar xzvf - --directory /tmp \ +&& sudo ${INSTALL} /tmp/${NAME} ${BIN}/${NAME} \ +&& ${dir_clean} \ +&& ${TEST} \ +&& echo + +################################################################################# +# Load startup artifacts +COPY ./bin/connect /bin/ +COPY ./bin/entrypoint /bin/ +COPY ./bin/devcontainer-links /bin/ + +################################################################################# +# Entrypoint & default command +ENTRYPOINT ["/usr/bin/bash", "-c", "entrypoint"] +HEALTHCHECK --interval=120s --timeout=30s --start-period=5s --retries=3 CMD [ "true" ] + +################################################################################# +# Image Metadata +LABEL tag="slim" +LABEL name="Devcontainer" +LABEL io.k8s.display-name="Pulumi" +LABEL org.opencontainers.image.authors="github.com/pulumi" +LABEL org.opencontainers.image.source="https://github.com/pulumi/devcontainer" +LABEL org.opencontainers.image.licenses="APACHE-2.0" +LABEL distribution-scope="public" \ No newline at end of file diff --git a/docker/slim/bin/connect b/docker/slim/bin/connect new file mode 100755 index 0000000..3affd7e --- /dev/null +++ b/docker/slim/bin/connect @@ -0,0 +1,5 @@ +#!/bin/bash +# Attach to the tmux session +bash -c "env | grep -v '_=' | grep -v 'PWD' | grep -v SHLVL | grep -v 'SHELL' | tee ${HOME}/.env" > /dev/null +session_name="pulumi" +tmux attach -t "$session_name" \ No newline at end of file diff --git a/docker/slim/bin/devcontainer-links b/docker/slim/bin/devcontainer-links new file mode 100755 index 0000000..32f51c0 --- /dev/null +++ b/docker/slim/bin/devcontainer-links @@ -0,0 +1,36 @@ +#!/bin/bash + +# Change ownership of all items in /workspaces to the current user +user="$(id -u)" + +# Iterate over directories in /workspaces +run_links() { + + sudo chown "${user}" /workspaces/* 2>/dev/null + + for dir in /workspaces/*; do + # Check if it's a directory + if [[ -d "${dir}" ]]; then + # Extract the directory name + dir_name=$(basename "${dir}") + + # Check if a symlink already exists in the home directory + if [[ -L "${HOME}/${dir_name}" ]]; then + # Remove the existing symlink if it exists + rm "${HOME}/${dir_name}" + elif [[ -e "${HOME}/${dir_name}" ]]; then + # Skip if it's not a symlink (to avoid destructive actions on actual directories or files) + echo "Skipping ${HOME}/${dir_name}, as it's not a symlink." + continue + fi + + # Create a new symbolic link + ln -s "${dir}" "${HOME}/${dir_name}" + fi + done +} + +run_links 2>/dev/null || true + +# Allow direnv to set environment variables +direnv allow 2>/dev/null || true diff --git a/docker/slim/bin/entrypoint b/docker/slim/bin/entrypoint new file mode 100755 index 0000000..e848eed --- /dev/null +++ b/docker/slim/bin/entrypoint @@ -0,0 +1,210 @@ +#!/bin/bash +source ${HOME}/.bashrc +session_name="pulumi" +# define USER environment variable from 3 possible sources, in order of priority (first one wins) +# 1. USER environment variable passed in from pre-existing $USER environment variable +# 2. USER environment variable passed in from $(whoami) command +# 3. USER environment variable statically set to "vscode" if #2 returns root +export USER="${USER:-$(whoami)}" +if [ "$USER" = "root" ]; then + export USER="vscode" +fi + +################################################################################# +# Helper Functions +################################################################################# + +# Function to convert environment variables to fish syntax and save to a file +env_file="$HOME/.env_fish" +convert_env_to_fish() { + > "$1" + while IFS='=' read -r name value; do + case "$name" in + PWD|SHLVL|_) + continue + ;; + esac + + if [[ -n "$name" && -n "$value" ]]; then + echo "set -gx $name '$value';" >> "$1" + fi + done < <(env) +} + +# Only run if fish is present +if command -v fish >/dev/null 2>&1; then + convert_env_to_fish "$env_file" +else + echo "Fish shell not found, skipping..." +fi + +# Create necessary directories for SSH +create_ssh_directories() { + mkdir -p "${ssh_host_identity_path}" + mkdir -p "${ssh_user_identity_path}" + sudo chmod -R 0700 "${ssh_host_identity_path}" + sudo chmod -R 0700 "${ssh_user_identity_path}" + sudo mkdir -p /var/run/sshd +} + +# Function to generate SSH host keys if they don't exist +run_host_ssh_keygen() { + local ssh_key_types=("ecdsa" "rsa" "ed25519") + for key_type in "${ssh_key_types[@]}"; do + local key_file="${ssh_host_identity_path}/ssh_host_${key_type}_key" + echo "Generating SSH host key for ${key_type}" + sudo /usr/bin/ssh-keygen -q -t "$key_type" -f "$key_file" -C '' -N '' + done +} + +# Function to handle SSH host keys +run_host_ssh_identity() { + local ssh_key_types=("ecdsa" "rsa" "ed25519") + local key_missing=false + + for key_type in "${ssh_key_types[@]}"; do + local key_file="${ssh_host_identity_path}/ssh_host_${key_type}_key" + echo "Checking for key: $key_file" + if ! sudo test -f "$key_file"; then + echo "SSH host key for ${key_type} not found, will generate new key." + key_missing=true + else + echo "Found existing SSH host key for ${key_type}" + fi + done + + if [ "$key_missing" = true ]; then + echo "One or more SSH host keys missing, generating keys..." + run_host_ssh_keygen + else + echo "Using existing SSH host keys" + fi + + sudo chmod -R 0600 "${ssh_host_identity_path}" + sudo chown -R root:root "${ssh_host_identity_path}" + sudo bash -c "cp -rf ${ssh_host_identity_path}/* /etc/ssh/" +} + +# Function to setup user's SSH directory, generate keys, and fetch keys from GitHub +setup_user_ssh() { + local user_home="/home/${USER}" + local ssh_dir="${user_home}/.ssh" + + # Create .ssh directory if it doesn't exist + mkdir -p "${ssh_dir}" + + # Set proper permissions for .ssh directory + chmod 700 "${ssh_dir}" + + # Define the SSH key file path + local ssh_key_file="${ssh_dir}/id_rsa" + + # Generate SSH keys for the user non-interactively + if [ ! -f "${ssh_key_file}" ]; then + sudo -u ${USER} ssh-keygen -t rsa -b 4096 -f "${ssh_key_file}" -q -N "" + echo "SSH key generated for user ${USER}" + else + echo "SSH key already exists for user ${USER}" + fi + + # Set proper permissions for the SSH key files + chmod 600 "${ssh_key_file}" + chmod 644 "${ssh_key_file}.pub" + + # Append GitHub user keys to authorized_keys if GITHUB_USER is present + if [ -n "${GITHUB_USER}" ]; then + echo "Fetching SSH keys for GitHub user ${GITHUB_USER}" + curl -sL "https://github.com/${GITHUB_USER}.keys" | tee -a "${ssh_dir}/authorized_keys" + chmod 600 "${ssh_dir}/authorized_keys" + fi +} + +# Function to start SSHD +run_sshd() { + create_ssh_directories + run_host_ssh_identity + echo "Starting sshd..." + sudo bash -c "/usr/sbin/sshd -e -f /etc/ssh/sshd_config" || bash -c "echo 'Error: sshd failed to start'; exit 0" +} + +# Function to start and keep tmux session alive +run_tmux_keepalive() { + local session_name="$1" + while true; do + if ! tmux has-session -t "$session_name" 2>/dev/null; then + tmux new-session -d -s "$session_name" + #load_env_to_tmux "${HOME}/.env_tmux" "$session_name" + echo "Restarted tmux session: $session_name" + fi + sleep 5 + done +} + +# Function to start TTYD in the container directly via command line +run_ttyd_service() { + ttyd --writable -t fontFamily="'FiraCode Nerd Font Mono'" bash -c "fish" 2>/dev/null & +} + +# Function to start TTYD +run_ttyd() { + while true; do + if ! pgrep ttyd > /dev/null; then + echo "Starting TTYD..." + run_ttyd_service & + fi + sleep 5 + done +} + +# Start VSCode Web Service +#run_code () { +# echo "Starting VSCode Service on port 8080" > /dev/stdout +# code-server --auth none --bind-addr 0.0.0.0:8080 & +#} + +################################################################################# +# Main Execution +################################################################################# + +# Base Variables +export dir_platform=".platform" +export ssh_host_identity_path="/home/$USER/$dir_platform/secrets/ssh/host" +export ssh_user_identity_path="/home/$USER/$dir_platform/secrets/ssh/user" + +# Validate environment variables +if [ -z "$USER" ]; then + echo "Error: USER environment variable not set" + exit 1 +fi + +# End User Configuration +echo "user: $USER:$(whoami)" + +# Save environment variables to file for tmux to load +bash -c "env | grep -v '_=' | grep -v 'PWD' | grep -v SHLVL | grep -v 'SHELL' | tee ${HOME}/.env" +chmod 600 "${HOME}/.env" + +# Run functions + +# Only run if sshd is present +if command -v sshd >/dev/null 2>&1; then + echo "sshd is installed, proceeding with user SSH setup..." + run_sshd + setup_user_ssh +else + echo "sshd not detected, skipping setup..." +fi + +# Only run if ttyd is present +if command -v ttyd >/dev/null 2>&1; then + echo "Found TTYD, Starting service..." + run_ttyd & +else + echo "TTYD not detected, skipping setup..." +fi + +run_tmux_keepalive "pulumi" > /dev/null 2>&1 & + +sleep 5 && devcontainer-links || true + +sleep infinity diff --git a/.github/docker/rootfs/containers/containers.conf b/docker/slim/rootfs/containers/containers.conf similarity index 100% rename from .github/docker/rootfs/containers/containers.conf rename to docker/slim/rootfs/containers/containers.conf diff --git a/.github/docker/rootfs/containers/registries.conf b/docker/slim/rootfs/containers/registries.conf similarity index 100% rename from .github/docker/rootfs/containers/registries.conf rename to docker/slim/rootfs/containers/registries.conf diff --git a/.github/docker/rootfs/docker/registry/config.yml b/docker/slim/rootfs/docker/registry/config.yml similarity index 100% rename from .github/docker/rootfs/docker/registry/config.yml rename to docker/slim/rootfs/docker/registry/config.yml diff --git a/.github/docker/rootfs/environment b/docker/slim/rootfs/environment similarity index 100% rename from .github/docker/rootfs/environment rename to docker/slim/rootfs/environment diff --git a/.github/docker/rootfs/etc/ansible/ansible.cfg b/docker/slim/rootfs/etc/ansible/ansible.cfg similarity index 100% rename from .github/docker/rootfs/etc/ansible/ansible.cfg rename to docker/slim/rootfs/etc/ansible/ansible.cfg diff --git a/.github/docker/rootfs/etc/apt/apt.conf.d/99config b/docker/slim/rootfs/etc/apt/apt.conf.d/99config similarity index 100% rename from .github/docker/rootfs/etc/apt/apt.conf.d/99config rename to docker/slim/rootfs/etc/apt/apt.conf.d/99config diff --git a/.github/docker/rootfs/etc/containers/registries.conf b/docker/slim/rootfs/etc/containers/registries.conf similarity index 100% rename from .github/docker/rootfs/etc/containers/registries.conf rename to docker/slim/rootfs/etc/containers/registries.conf diff --git a/.github/docker/rootfs/etc/docker/registry/config.yml b/docker/slim/rootfs/etc/docker/registry/config.yml similarity index 100% rename from .github/docker/rootfs/etc/docker/registry/config.yml rename to docker/slim/rootfs/etc/docker/registry/config.yml diff --git a/.github/docker/rootfs/etc/dpkg/dpkg.cfg.d/01_noman b/docker/slim/rootfs/etc/dpkg/dpkg.cfg.d/01_noman similarity index 100% rename from .github/docker/rootfs/etc/dpkg/dpkg.cfg.d/01_noman rename to docker/slim/rootfs/etc/dpkg/dpkg.cfg.d/01_noman diff --git a/.github/docker/rootfs/etc/environment b/docker/slim/rootfs/etc/environment similarity index 100% rename from .github/docker/rootfs/etc/environment rename to docker/slim/rootfs/etc/environment diff --git a/.github/docker/rootfs/etc/skel/.Xresources b/docker/slim/rootfs/etc/skel/.Xresources similarity index 100% rename from .github/docker/rootfs/etc/skel/.Xresources rename to docker/slim/rootfs/etc/skel/.Xresources diff --git a/.github/docker/rootfs/etc/skel/.actrc b/docker/slim/rootfs/etc/skel/.actrc similarity index 100% rename from .github/docker/rootfs/etc/skel/.actrc rename to docker/slim/rootfs/etc/skel/.actrc diff --git a/.github/docker/rootfs/etc/skel/.bash_profile b/docker/slim/rootfs/etc/skel/.bash_profile similarity index 100% rename from .github/docker/rootfs/etc/skel/.bash_profile rename to docker/slim/rootfs/etc/skel/.bash_profile diff --git a/.github/docker/rootfs/etc/skel/.bashrc b/docker/slim/rootfs/etc/skel/.bashrc similarity index 100% rename from .github/docker/rootfs/etc/skel/.bashrc rename to docker/slim/rootfs/etc/skel/.bashrc diff --git a/.github/docker/rootfs/etc/skel/.config/fish/conf.d/omf.fish b/docker/slim/rootfs/etc/skel/.config/fish/conf.d/omf.fish similarity index 100% rename from .github/docker/rootfs/etc/skel/.config/fish/conf.d/omf.fish rename to docker/slim/rootfs/etc/skel/.config/fish/conf.d/omf.fish diff --git a/.github/docker/rootfs/etc/skel/.config/fish/config.fish b/docker/slim/rootfs/etc/skel/.config/fish/config.fish similarity index 100% rename from .github/docker/rootfs/etc/skel/.config/fish/config.fish rename to docker/slim/rootfs/etc/skel/.config/fish/config.fish diff --git a/.github/docker/rootfs/etc/skel/.config/fish/fish_variables b/docker/slim/rootfs/etc/skel/.config/fish/fish_variables similarity index 100% rename from .github/docker/rootfs/etc/skel/.config/fish/fish_variables rename to docker/slim/rootfs/etc/skel/.config/fish/fish_variables diff --git a/.github/docker/rootfs/etc/skel/.config/fish/functions/cloc.fish b/docker/slim/rootfs/etc/skel/.config/fish/functions/cloc.fish similarity index 100% rename from .github/docker/rootfs/etc/skel/.config/fish/functions/cloc.fish rename to docker/slim/rootfs/etc/skel/.config/fish/functions/cloc.fish diff --git a/.github/docker/rootfs/etc/skel/.config/fish/functions/env.fish b/docker/slim/rootfs/etc/skel/.config/fish/functions/env.fish similarity index 100% rename from .github/docker/rootfs/etc/skel/.config/fish/functions/env.fish rename to docker/slim/rootfs/etc/skel/.config/fish/functions/env.fish diff --git a/.github/docker/rootfs/etc/skel/.config/fish/functions/k.fish b/docker/slim/rootfs/etc/skel/.config/fish/functions/k.fish similarity index 100% rename from .github/docker/rootfs/etc/skel/.config/fish/functions/k.fish rename to docker/slim/rootfs/etc/skel/.config/fish/functions/k.fish diff --git a/.github/docker/rootfs/etc/skel/.config/k9s/skin.yml b/docker/slim/rootfs/etc/skel/.config/k9s/skin.yml similarity index 100% rename from .github/docker/rootfs/etc/skel/.config/k9s/skin.yml rename to docker/slim/rootfs/etc/skel/.config/k9s/skin.yml diff --git a/.github/docker/rootfs/etc/skel/.config/starship.toml b/docker/slim/rootfs/etc/skel/.config/starship.toml similarity index 100% rename from .github/docker/rootfs/etc/skel/.config/starship.toml rename to docker/slim/rootfs/etc/skel/.config/starship.toml diff --git a/.github/docker/rootfs/etc/skel/.dir_colors b/docker/slim/rootfs/etc/skel/.dir_colors similarity index 100% rename from .github/docker/rootfs/etc/skel/.dir_colors rename to docker/slim/rootfs/etc/skel/.dir_colors diff --git a/.github/docker/rootfs/etc/skel/.docker.json b/docker/slim/rootfs/etc/skel/.docker.json similarity index 100% rename from .github/docker/rootfs/etc/skel/.docker.json rename to docker/slim/rootfs/etc/skel/.docker.json diff --git a/.github/docker/rootfs/etc/skel/.gitconfig b/docker/slim/rootfs/etc/skel/.gitconfig similarity index 100% rename from .github/docker/rootfs/etc/skel/.gitconfig rename to docker/slim/rootfs/etc/skel/.gitconfig diff --git a/.github/docker/rootfs/etc/skel/.local/share/code-server/User/settings.json b/docker/slim/rootfs/etc/skel/.local/share/code-server/User/settings.json similarity index 100% rename from .github/docker/rootfs/etc/skel/.local/share/code-server/User/settings.json rename to docker/slim/rootfs/etc/skel/.local/share/code-server/User/settings.json diff --git a/.github/docker/rootfs/etc/skel/.tmux.conf b/docker/slim/rootfs/etc/skel/.tmux.conf similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux.conf rename to docker/slim/rootfs/etc/skel/.tmux.conf diff --git a/.github/docker/rootfs/etc/skel/.tmux/.gitkeep b/docker/slim/rootfs/etc/skel/.tmux/.gitkeep similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/.gitkeep rename to docker/slim/rootfs/etc/skel/.tmux/.gitkeep diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/.gitattributes b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/.gitattributes similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/.gitattributes rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/.gitattributes diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/.gitignore b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/.gitignore similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/.gitignore rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/.gitignore diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/.gitmodules b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/.gitmodules similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/.gitmodules rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/.gitmodules diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/.travis.yml b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/.travis.yml similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/.travis.yml rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/.travis.yml diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/CHANGELOG.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/CHANGELOG.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/CHANGELOG.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/CHANGELOG.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/HOW_TO_PLUGIN.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/HOW_TO_PLUGIN.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/HOW_TO_PLUGIN.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/HOW_TO_PLUGIN.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/LICENSE.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/LICENSE.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/LICENSE.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/LICENSE.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/README.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/README.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/README.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/README.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bin/clean_plugins b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bin/clean_plugins similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bin/clean_plugins rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bin/clean_plugins diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bin/install_plugins b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bin/install_plugins similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bin/install_plugins rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bin/install_plugins diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bin/update_plugins b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bin/update_plugins similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bin/update_plugins rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bin/update_plugins diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bindings/clean_plugins b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bindings/clean_plugins similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bindings/clean_plugins rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bindings/clean_plugins diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bindings/install_plugins b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bindings/install_plugins similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bindings/install_plugins rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bindings/install_plugins diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bindings/update_plugins b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bindings/update_plugins similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/bindings/update_plugins rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/bindings/update_plugins diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/docs/automatic_tpm_installation.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/docs/automatic_tpm_installation.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/docs/automatic_tpm_installation.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/docs/automatic_tpm_installation.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/docs/changing_plugins_install_dir.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/docs/changing_plugins_install_dir.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/docs/changing_plugins_install_dir.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/docs/changing_plugins_install_dir.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/docs/how_to_create_plugin.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/docs/how_to_create_plugin.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/docs/how_to_create_plugin.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/docs/how_to_create_plugin.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/docs/managing_plugins_via_cmd_line.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/docs/managing_plugins_via_cmd_line.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/docs/managing_plugins_via_cmd_line.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/docs/managing_plugins_via_cmd_line.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/docs/tpm_not_working.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/docs/tpm_not_working.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/docs/tpm_not_working.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/docs/tpm_not_working.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/.gitignore b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/.gitignore similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/.gitignore rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/.gitignore diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/.travis.yml b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/.travis.yml similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/.travis.yml rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/.travis.yml diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/CHANGELOG.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/CHANGELOG.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/CHANGELOG.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/CHANGELOG.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/LICENSE.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/LICENSE.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/LICENSE.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/LICENSE.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/README.md b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/README.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/README.md rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/README.md diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/Vagrantfile b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/Vagrantfile similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/Vagrantfile rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/Vagrantfile diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/run_framework_tests b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/run_framework_tests similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/run_framework_tests rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/run_framework_tests diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/setup b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/setup similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/setup rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/setup diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/helpers/helpers.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/helpers/helpers.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/helpers/helpers.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/helpers/helpers.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/run_tests_in_isolation b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/run_tests_in_isolation similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/run_tests_in_isolation rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/run_tests_in_isolation diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_basic_script_execution.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_basic_script_execution.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_basic_script_execution.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_basic_script_execution.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_default_session_name.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_default_session_name.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_default_session_name.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_default_session_name.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_tmux_scripting.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_tmux_scripting.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_tmux_scripting.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/tests/test_tmux_scripting.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/vagrant_centos_provisioning.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/vagrant_centos_provisioning.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/vagrant_centos_provisioning.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/vagrant_centos_provisioning.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/vagrant_ubuntu_provisioning.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/vagrant_ubuntu_provisioning.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/vagrant_ubuntu_provisioning.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/lib/tmux-test/vagrant_ubuntu_provisioning.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/check_tmux_version.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/check_tmux_version.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/check_tmux_version.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/check_tmux_version.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/clean_plugins.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/clean_plugins.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/clean_plugins.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/clean_plugins.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/plugin_functions.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/plugin_functions.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/plugin_functions.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/plugin_functions.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/shell_echo_functions.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/shell_echo_functions.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/shell_echo_functions.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/shell_echo_functions.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/tmux_echo_functions.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/tmux_echo_functions.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/tmux_echo_functions.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/tmux_echo_functions.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/tmux_utils.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/tmux_utils.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/tmux_utils.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/tmux_utils.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/utility.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/utility.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/utility.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/helpers/utility.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/install_plugins.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/install_plugins.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/install_plugins.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/install_plugins.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/source_plugins.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/source_plugins.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/source_plugins.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/source_plugins.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/update_plugin.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/update_plugin.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/update_plugin.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/update_plugin.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/update_plugin_prompt_handler.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/update_plugin_prompt_handler.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/update_plugin_prompt_handler.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/update_plugin_prompt_handler.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/variables.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/variables.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/scripts/variables.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/scripts/variables.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_failed_plugin_download b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_failed_plugin_download similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_failed_plugin_download rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_failed_plugin_download diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_clean_plugins b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_clean_plugins similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_clean_plugins rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_clean_plugins diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_multiple_plugins_download b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_multiple_plugins_download similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_multiple_plugins_download rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_multiple_plugins_download diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_plugin_download b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_plugin_download similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_plugin_download rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_plugin_download diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_update_of_a_single_plugin b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_update_of_a_single_plugin similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_update_of_a_single_plugin rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_update_of_a_single_plugin diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_update_of_all_plugins b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_update_of_all_plugins similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_update_of_all_plugins rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/expect_successful_update_of_all_plugins diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/helpers/tpm.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/helpers/tpm.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/helpers/tpm.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/helpers/tpm.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_clean.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_clean.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_clean.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_clean.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_installation.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_installation.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_installation.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_installation.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_installation_legacy.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_installation_legacy.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_installation_legacy.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_installation_legacy.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_sourcing.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_sourcing.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_sourcing.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_sourcing.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_update.sh b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_update.sh similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_update.sh rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tests/test_plugin_update.sh diff --git a/.github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tpm b/docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tpm similarity index 100% rename from .github/docker/rootfs/etc/skel/.tmux/plugins/tpm/tpm rename to docker/slim/rootfs/etc/skel/.tmux/plugins/tpm/tpm diff --git a/.github/docker/rootfs/etc/skel/.vim/colors/iceberg.vim b/docker/slim/rootfs/etc/skel/.vim/colors/iceberg.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/colors/iceberg.vim rename to docker/slim/rootfs/etc/skel/.vim/colors/iceberg.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/colors/molokai.vim b/docker/slim/rootfs/etc/skel/.vim/colors/molokai.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/colors/molokai.vim rename to docker/slim/rootfs/etc/skel/.vim/colors/molokai.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/.vintrc.yaml b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/.vintrc.yaml similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/.vintrc.yaml rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/.vintrc.yaml diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/CHANGELOG.md b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/CHANGELOG.md similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/CHANGELOG.md rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/CHANGELOG.md diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/LICENCE b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/LICENCE similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/LICENCE rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/LICENCE diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/README.markdown b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/README.markdown similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/README.markdown rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/README.markdown diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/_config.yml b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/_config.yml similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/_config.yml rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/_config.yml diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/autoload/nerdtree.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/autoload/nerdtree.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/autoload/nerdtree.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/autoload/nerdtree.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/autoload/nerdtree/ui_glue.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/autoload/nerdtree/ui_glue.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/autoload/nerdtree/ui_glue.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/autoload/nerdtree/ui_glue.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/doc/NERDTree.txt b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/doc/NERDTree.txt similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/doc/NERDTree.txt rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/doc/NERDTree.txt diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/doc/tags b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/doc/tags similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/doc/tags rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/doc/tags diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/bookmark.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/bookmark.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/bookmark.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/bookmark.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/creator.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/creator.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/creator.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/creator.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/event.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/event.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/event.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/event.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/flag_set.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/flag_set.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/flag_set.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/flag_set.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/key_map.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/key_map.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/key_map.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/key_map.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/menu_controller.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/menu_controller.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/menu_controller.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/menu_controller.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/menu_item.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/menu_item.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/menu_item.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/menu_item.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/nerdtree.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/nerdtree.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/nerdtree.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/nerdtree.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/notifier.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/notifier.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/notifier.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/notifier.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/opener.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/opener.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/opener.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/opener.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/path.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/path.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/path.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/path.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/tree_dir_node.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/tree_dir_node.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/tree_dir_node.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/tree_dir_node.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/tree_file_node.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/tree_file_node.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/tree_file_node.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/tree_file_node.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/ui.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/ui.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/ui.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/lib/nerdtree/ui.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/exec_menuitem.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/exec_menuitem.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/exec_menuitem.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/exec_menuitem.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/fs_menu.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/fs_menu.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/fs_menu.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/fs_menu.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/vcs.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/vcs.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/vcs.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/nerdtree_plugin/vcs.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/plugin/NERD_tree.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/plugin/NERD_tree.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/plugin/NERD_tree.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/plugin/NERD_tree.vim diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/screenshot.png b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/screenshot.png similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/screenshot.png rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/screenshot.png diff --git a/.github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/syntax/nerdtree.vim b/docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/syntax/nerdtree.vim similarity index 100% rename from .github/docker/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/syntax/nerdtree.vim rename to docker/slim/rootfs/etc/skel/.vim/pack/vendor/start/nerdtree/syntax/nerdtree.vim diff --git a/.github/docker/rootfs/etc/skel/.vimrc b/docker/slim/rootfs/etc/skel/.vimrc similarity index 100% rename from .github/docker/rootfs/etc/skel/.vimrc rename to docker/slim/rootfs/etc/skel/.vimrc diff --git a/.github/docker/rootfs/etc/skel/.zshrc b/docker/slim/rootfs/etc/skel/.zshrc similarity index 100% rename from .github/docker/rootfs/etc/skel/.zshrc rename to docker/slim/rootfs/etc/skel/.zshrc diff --git a/.github/docker/rootfs/etc/ssh/sshd_config b/docker/slim/rootfs/etc/ssh/sshd_config similarity index 100% rename from .github/docker/rootfs/etc/ssh/sshd_config rename to docker/slim/rootfs/etc/ssh/sshd_config diff --git a/.github/docker/rootfs/usr/bin/run_registry.sh b/docker/slim/rootfs/usr/bin/run_registry.sh similarity index 100% rename from .github/docker/rootfs/usr/bin/run_registry.sh rename to docker/slim/rootfs/usr/bin/run_registry.sh diff --git a/hack/act.json b/hack/act.json deleted file mode 100644 index 176cfa8..0000000 --- a/hack/act.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "act": true -} diff --git a/hack/kind.yaml b/hack/kind.yaml deleted file mode 100644 index 94da71d..0000000 --- a/hack/kind.yaml +++ /dev/null @@ -1,47 +0,0 @@ -kind: Cluster -apiVersion: kind.x-k8s.io/v1alpha4 -name: cilium -networking: - apiServerPort: 6443 - apiServerAddress: "0.0.0.0" - serviceSubnet: "10.12.0.0/16" - podSubnet: "10.242.0.0/16" - ###################################################################### - # The following is required for Cilium to work with kind - disableDefaultCNI: true # disable kindnet - kubeProxyMode: none # disable kube-proxy -nodes: -- role: control-plane - image: kindest/node:v1.29.0 - extraMounts: # Persistent image cache - - hostPath: /var/lib/docker/volumes/cilium-control-plane-n01/_data - containerPath: /var/lib/containerd -- role: worker - image: kindest/node:v1.29.0 - extraMounts: # Persistent image cache - - hostPath: /var/lib/docker/volumes/cilium-worker-n01/_data - containerPath: /var/lib/containerd -- role: worker - image: kindest/node:v1.29.0 - extraMounts: # Persistent image cache - - hostPath: /var/lib/docker/volumes/cilium-worker-n02/_data - containerPath: /var/lib/containerd - # Expose ports on the host: - # - 80/tcp - # - 443/tcp - extraPortMappings: - - listenAddress: "0.0.0.0" - protocol: TCP - hostPort: 80 - containerPort: 80 - - listenAddress: "0.0.0.0" - protocol: TCP - hostPort: 443 - containerPort: 443 - kubeadmConfigPatches: - - | - # Label the worker node listening on service ports - kind: JoinConfiguration - nodeRegistration: - kubeletExtraArgs: - node-labels: "ingress-ready=true" \ No newline at end of file diff --git a/hack/run.sh b/hack/run.sh deleted file mode 100755 index 6aa7271..0000000 --- a/hack/run.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -#docker kill konductor - -docker run -it --rm --pull=always --name konductor --hostname konductor \ - --user vscode \ - --publish 2222:2222 \ - --publish 7681:7681 \ - --publish 8088:8080 \ - --publish 32767:32767 \ - --cap-add=CAP_AUDIT_WRITE \ - --volume $PWD:/home/vscode/konductor:z \ - --entrypoint fish --workdir /home/vscode \ - --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ - ghcr.io/containercraft/konductor:latest - -# --user $(id -u):$(id -g) \ -# --volume="/etc/group:/etc/group:ro" \ -# --volume="/etc/passwd:/etc/passwd:ro" \ -# --volume="/etc/shadow:/etc/shadow:ro" \ -# --volume $PWD:/home/vscode/konductor:z \ - -#docker run -d --rm --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock --cap-add=CAP_AUDIT_WRITE --publish 2222:2222 --publish 7681:7681 --publish 8088:8080 --name konductor --hostname konductor --security-opt label=disable --pull=always ghcr.io/containercraft/konductor -#podman run -d --rm --cap-add=CAP_AUDIT_WRITE --publish 2222:2222 --publish 7681:7681 --publish 8088:8080 --name konductor --hostname konductor --security-opt label=disable --pull=always ghcr.io/containercraft/konductor \ No newline at end of file