Compare commits

...

15 Commits

9 changed files with 223 additions and 34 deletions

View File

@ -1,12 +0,0 @@
#!/bin/bash
# Get list of image IDs with <none> tag (dangling images)
dangling_images=$(podman images -f "dangling=true" -q)
if [ -z "$dangling_images" ]; then
echo "✅ No dangling images to remove."
else
echo "⚠️ Removing dangling images..."
echo "$dangling_images" | xargs podman rmi -f
echo "🧹 Done!"
fi

9
.bin/gitops Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
ssh -F /dev/null \
-o HostName=10.88.0.1 \
-o Port=22 \
-o User=infilytics \
-o IdentityFile=~/.ssh/id_ed25519 \
-o ProxyCommand=none \
gitops -- "$@"

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
home.tar.gz filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored
View File

@ -4,5 +4,4 @@ logs
.state .state
.config/fish .config/fish
.npm .npm
home.tar.gz
.config/nvim/lazy-lock.json .config/nvim/lazy-lock.json

24
.lazy.lua Normal file
View File

@ -0,0 +1,24 @@
return {
"folke/snacks.nvim",
opts = {
-- show hidden files in snacks.explorer
picker = {
sources = {
explorer = {
-- show hidden files like .env
hidden = true,
-- show files ignored by git like node_modules
ignored = false,
exclude = { ".git" },
},
files = {
-- show hidden files like .env
hidden = true,
-- show files ignored by git like node_modules
ignored = false,
exclude = { ".npm", ".git" },
},
},
},
},
}

91
.vscode/tasks.json vendored
View File

@ -2,70 +2,121 @@
"version": "2.0.0", "version": "2.0.0",
"tasks": [ "tasks": [
{ {
"label": "Build workspace image", "label": "GitOps(Build): base image",
"type": "shell", "type": "shell",
"command": "${workspaceFolder}/build-workspace.sh", "command": ".bin/gitops build base",
"group": "build",
"problemMatcher": [],
"detail": "build base image using buildah"
},
{
"label": "GitOps(Build): workspace image",
"type": "shell",
"command": ".bin/gitops build workspace",
"group": "build", "group": "build",
"problemMatcher": [], "problemMatcher": [],
"detail": "build podman image using buildah" "detail": "build podman image using buildah"
}, },
{ {
"label": "Clean dangling images", "label": "GitOps: Clean dangling images",
"type": "shell", "type": "shell",
"command": "${workspaceFolder}/.bin/clean_dangling_images.sh", "command": ".bin/gitops clean",
"problemMatcher": [], "problemMatcher": [],
"detail": "Clean podman images" "detail": "Clean podman images"
}, },
{ {
"label": "Tag image", "label": "Gitops(Update): build-base.sh",
"type": "shell", "type": "shell",
"command": "podman tag localhost/analytics-backend-workspace:latest localhost:5100/analytics-backend-workspace:latest", "command": ".bin/gitops update base",
"group": "build",
"problemMatcher": [], "problemMatcher": [],
"detail": "Tag podman image to localhost 5100" "detail": "Copy build-base.sh to /home/infilytics/.local/bin/"
}, },
{ {
"label": "Push image", "label": "GitOps(Update): build-workspace.sh",
"type": "shell", "type": "shell",
"command": "podman push --tls-verify=false localhost:5100/analytics-backend-workspace:latest", "command": ".bin/gitops update workspace",
"group": "build",
"problemMatcher": [], "problemMatcher": [],
"detail": "Push podman image to localhost 5100" "detail": "Copy build-workspace.sh to /home/infilytics/.local/bin/"
}, },
{ {
"label": "Copy ssh_router.sh", "label": "GitOps(Update): ssh_router.sh",
"type": "shell", "type": "shell",
"command": "sudo cp ssh_router.sh /home/infilytics/ && sudo chown -R infilytics:infilytics /home/infilytics/ssh_router.sh", "command": ".bin/gitops update ssh_router",
"group": "build",
"problemMatcher": [], "problemMatcher": [],
"detail": "Copy ssh_router.sh to /home/infilytics" "detail": "Copy ssh_router.sh to /home/infilytics/.local/bin/"
}, },
{ {
"label": "Copy access.yml", "label": "GitOps(Update): access.yml",
"type": "shell", "type": "shell",
"command": "sudo cp access.yml /home/infilytics/ && sudo chown -R infilytics:infilytics /home/infilytics/access.yml", "command": ".bin/gitops update access",
"group": "build",
"problemMatcher": [], "problemMatcher": [],
"detail": "Copy access.yml to /home/infilytics" "detail": "Copy access.yml to /home/infilytics/"
},
{
"label": "GitOps(Update): gitops_router.sh",
"type": "shell",
"command": ".bin/gitops update gitops_router",
"group": "build",
"problemMatcher": [],
"detail": "Copy gitops_router.sh to /home/infilytics/.local/bin"
},
{
"label": "GitOps(Update): home.tar.gz",
"type": "shell",
"command": ".bin/gitops update home_tar",
"group": "build",
"problemMatcher": [],
"detail": "Copy home.tar.gz to /home/infilytics/"
}, },
{ {
"label": "Create home tarball", "label": "Create home tarball",
"type": "shell", "type": "shell",
"command": "${workspaceFolder}/.bin/create-home-tarball.sh", "command": "${workspaceFolder}/.bin/create-home-tarball.sh",
"group": "build",
"problemMatcher": [], "problemMatcher": [],
"detail": "create home.tar.gz from .config .local .ssh start.sh" "detail": "create home.tar.gz from .config .local .ssh start.sh"
}, },
{ {
"label": "Start a tmux test session", "label": "Test: start tmux session",
"type": "shell", "type": "shell",
"group": "test",
"command": "${workspaceFolder}/.bin/test-tmux.sh", "command": "${workspaceFolder}/.bin/test-tmux.sh",
"group": "test",
"problemMatcher": [], "problemMatcher": [],
"detail": "run tmux with project room as home" "detail": "run tmux with project room as home"
}, },
{ {
"label": "Delete .gitignore files", "label": "GitOps: Show image status",
"type": "shell",
"command": ".bin/gitops status",
"problemMatcher": [],
"detail": "run podman images on remote"
},
{
"label": "GitOps: Remove workspace container",
"type": "shell",
"command": ".bin/gitops remove ${input:container} -f",
"problemMatcher": [],
"detail": "run podman rm $args on remote"
},
{
"label": "Cleanup worktree",
"type": "shell", "type": "shell",
"command": "git clean -Xfd", "command": "git clean -Xfd",
"problemMatcher": [], "problemMatcher": [],
"detail": "delete all untracked files listed in .gitignore" "detail": "delete all untracked files listed in .gitignore"
} }
], ],
"inputs": [] "inputs": [
{
"id": "container",
"type": "pickString",
"description": "Pick a container",
"options": ["pallav", "palak", "param", "darshan"],
"default": "pallav"
}
]
} }

View File

@ -10,7 +10,7 @@ ctr=$(buildah from archlinux)
buildah run "$ctr" -- bash -c " buildah run "$ctr" -- bash -c "
pacman -Sy --noconfirm && \ pacman -Sy --noconfirm && \
pacman -S --noconfirm --needed base-devel neovim git fish tmux \ pacman -S --noconfirm --needed base-devel neovim git git-lfs fish tmux \
nodejs python podman fzf fd ripgrep jdk-openjdk fisher yazi less buildah \ nodejs python podman fzf fd ripgrep jdk-openjdk fisher yazi less buildah \
lazygit luarocks python-pynvim npm bash-completion tree-sitter-cli kitty-terminfo \ lazygit luarocks python-pynvim npm bash-completion tree-sitter-cli kitty-terminfo \
lua51 openssh && \ lua51 openssh && \

114
gitops_router.sh Normal file
View File

@ -0,0 +1,114 @@
#!/usr/bin/env bash
set -euo pipefail
PERSON="$1"
HOST="alps:3222"
PROTOCOL="http"
REPO="babbarc/workspaces"
BRANCH="master"
LOG_FILE="/tmp/.gitops-router-${PERSON}.log"
log() {
local level="${1^^}" # convert to uppercase
shift
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $*" | tee -a "$LOG_FILE"
}
log info "Received SSH_ORIGINAL_COMMAND: $SSH_ORIGINAL_COMMAND"
# Ensure the variable is set
if [[ -z "${SSH_ORIGINAL_COMMAND:-}" ]]; then
log error "No SSH_ORIGINAL_COMMAND provided."
exit 1
fi
geturl() {
echo "$PROTOCOL://$HOST/$REPO/$1/branch/$BRANCH/$2"
}
function run() {
"$HOME"/.local/bin/"$1"
}
function update() {
type=${4:-raw}
fname=$(basename "$1")
output_path="$HOME/$2/$fname"
url=$(geturl "$type" "$1")
[ -f "$output_path" ] && chmod 700 "$output_path"
curl -fsSL "$url" -o "$output_path" && log info "Downloaded $url to $output_path"
chmod "$3" "$output_path"
}
clean_images() {
# Get list of image IDs with <none> tag (dangling images)
dangling_images=$(podman images -f "dangling=true" -q)
if [ -z "$dangling_images" ]; then
echo "✅ No dangling images to remove."
else
echo "⚠️ Removing dangling images..."
echo "$dangling_images" | xargs podman rmi
echo "🧹 Done!"
fi
}
# Strip arguments and parse command
read -r command args <<<"$SSH_ORIGINAL_COMMAND"
# Define command routing
case "$command" in
build)
case "$args" in
base)
run build-base.sh
;;
workspace)
run build-workspace.sh
;;
*)
log error "Invalid arguments for build command: $args"
;;
esac
;;
update)
case "$args" in
workspace)
update build-workspace.sh .local/bin 500
;;
base)
update build-base.sh .local/bin 500
;;
access)
update access.yml . 400
;;
ssh_router)
update ssh_router.sh .local/bin 500
;;
gitops_router)
update gitops_router.sh .local/bin 500
;;
home_tar)
update home.tar.gz . 500 media
;;
*)
log error "Invalid arguments for update command: $args"
;;
esac
;;
clean)
clean_images
;;
status)
podman images
;;
remove)
podman rm "$args"
;;
*)
log error "Unknown command: $command"
exit 127
;;
esac

BIN
home.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.