big update

This commit is contained in:
2026-08-05 18:45:55 +02:00
parent 2cd5ebbb40
commit 9a906669d0
4 changed files with 146 additions and 93 deletions
@@ -0,0 +1,102 @@
name: 'Configure Homelab SSH'
description: 'Fetches SSH keys from Infisical and configures SSH config with a jump host'
inputs:
infisical_cicd_token:
description: 'Infisical Service Token for CI/CD secrets'
required: true
infisical_api_url:
description: 'Infisical API URL (for self-hosted instances)'
required: false
default: 'https://secrets.itlab-ffeks.dnu.edu.ua'
infisical_env:
description: 'Infisical Environment (defaults to Gitea branch/ref name)'
required: false
default: ''
jump_host:
description: 'Jump host IP or hostname'
required: false
default: '212.3.125.242'
jump_port:
description: 'Jump host SSH port'
required: false
default: '2222'
jump_user:
description: 'Jump host SSH username'
required: false
default: 'jump'
vm_ip:
description: 'Target VM IP'
required: true
vm_port:
description: 'Target VM SSH port'
required: false
default: '22'
vm_user:
description: 'Target VM SSH username'
required: false
default: 'debian'
ssh_host_alias:
description: 'Alias for target VM in SSH config'
required: false
default: 'vm'
runs:
using: 'composite'
steps:
- name: Install Infisical CLI
shell: bash
run: |
if ! command -v infisical &> /dev/null; then
curl -1sLf 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' | sudo -E bash
sudo apt-get update && sudo apt-get install -y infisical
else
echo "Infisical CLI already installed"
fi
- name: Configure SSH
shell: bash
run: |
mkdir -p ~/.ssh
chmod 700 ~/.ssh
export INFISICAL_TOKEN="${{ inputs.infisical_cicd_token }}"
export INFISICAL_API_URL="${{ inputs.infisical_api_url }}"
export INFISICAL_DOMAIN="$INFISICAL_API_URL"
export INFISICAL_DISABLE_UPDATE_CHECK=true
INFISICAL_ENV="${{ inputs.infisical_env }}"
if [ -z "$INFISICAL_ENV" ]; then
INFISICAL_ENV="${{ gitea.ref_name }}"
fi
echo "Fetching SSH keys from Infisical..."
JUMP_KEY=$(infisical secrets get JUMP_SSH_KEY --env="$INFISICAL_ENV" --plain)
VM_KEY=$(infisical secrets get VM_SSH_KEY --env="$INFISICAL_ENV" --plain)
if [ -z "$JUMP_KEY" ] || [ -z "$VM_KEY" ]; then
echo "Error: SSH keys retrieved from Infisical are empty!" >&2
exit 1
fi
echo "$JUMP_KEY" > ~/.ssh/jump_key
chmod 600 ~/.ssh/jump_key
echo "$VM_KEY" > ~/.ssh/vm_key
chmod 600 ~/.ssh/vm_key
cat > ~/.ssh/config <<EOF
Host jump
HostName ${{ inputs.jump_host }}
User ${{ inputs.jump_user }}
Port ${{ inputs.jump_port }}
IdentityFile ~/.ssh/jump_key
StrictHostKeyChecking no
Host ${{ inputs.ssh_host_alias }}
HostName ${{ inputs.vm_ip }}
User ${{ inputs.vm_user }}
Port ${{ inputs.vm_port }}
IdentityFile ~/.ssh/vm_key
ProxyJump jump
StrictHostKeyChecking no
EOF
+17 -45
View File
@@ -35,6 +35,11 @@ on:
required: false required: false
default: "https://secrets.itlab-ffeks.dnu.edu.ua" default: "https://secrets.itlab-ffeks.dnu.edu.ua"
infisical_env:
description: "Infisical Environment"
type: string
required: false
secrets: secrets:
infisical_cicd_token: infisical_cicd_token:
description: "Infisical Service Token for CI/CD secrets" description: "Infisical Service Token for CI/CD secrets"
@@ -46,52 +51,19 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Install Infisical CLI
run: |
curl -1sLf 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' | sudo -E bash
sudo apt-get update && sudo apt-get install -y infisical
- name: Configure SSH - name: Configure SSH
run: | uses: ./.gitea/actions/configure-homelab-ssh
mkdir -p ~/.ssh with:
chmod 700 ~/.ssh infisical_cicd_token: ${{ secrets.infisical_cicd_token }}
infisical_api_url: ${{ inputs.infisical_api_url }}
export INFISICAL_TOKEN="${{ secrets.infisical_cicd_token }}" infisical_env: ${{ inputs.infisical_env }}
export INFISICAL_API_URL="${{ inputs.infisical_api_url }}" jump_host: ${{ inputs.jump_host }}
export INFISICAL_DOMAIN="$INFISICAL_API_URL" jump_port: ${{ inputs.jump_port }}
export INFISICAL_DISABLE_UPDATE_CHECK=true jump_user: ${{ inputs.jump_user }}
vm_ip: ${{ inputs.vm_ip }}
echo "Fetching SSH keys from Infisical..." vm_port: ${{ inputs.vm_port }}
JUMP_KEY=$(infisical secrets get JUMP_SSH_KEY --plain) vm_user: ${{ inputs.vm_user }}
VM_KEY=$(infisical secrets get VM_SSH_KEY --plain) ssh_host_alias: caddy
if [ -z "$JUMP_KEY" ] || [ -z "$VM_KEY" ]; then
echo "Error: SSH keys retrieved from Infisical are empty!" >&2
exit 1
fi
echo "$JUMP_KEY" > ~/.ssh/jump_key
chmod 600 ~/.ssh/jump_key
echo "$VM_KEY" > ~/.ssh/vm_key
chmod 600 ~/.ssh/vm_key
cat > ~/.ssh/config <<EOF
Host jump
HostName ${{ inputs.jump_host }}
User ${{ inputs.jump_user }}
Port ${{ inputs.jump_port }}
IdentityFile ~/.ssh/jump_key
StrictHostKeyChecking no
Host caddy
HostName ${{ inputs.vm_ip }}
User ${{ inputs.vm_user }}
Port ${{ inputs.vm_port }}
IdentityFile ~/.ssh/vm_key
ProxyJump jump
StrictHostKeyChecking no
EOF
- name: Upload Caddyfile - name: Upload Caddyfile
+16 -46
View File
@@ -39,7 +39,7 @@ on:
infisical_env: infisical_env:
description: "Infisical Environment" description: "Infisical Environment"
type: string type: string
required: true required: false
infisical_path: infisical_path:
description: "Infisical secret path" description: "Infisical secret path"
@@ -69,52 +69,19 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Install Infisical CLI
run: |
curl -1sLf 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' | sudo -E bash
sudo apt-get update && sudo apt-get install -y infisical
- name: Configure SSH - name: Configure SSH
run: | uses: ./.gitea/actions/configure-homelab-ssh
mkdir -p ~/.ssh with:
chmod 700 ~/.ssh infisical_cicd_token: ${{ secrets.infisical_cicd_token }}
infisical_api_url: ${{ inputs.infisical_api_url }}
export INFISICAL_TOKEN="${{ secrets.infisical_cicd_token }}" infisical_env: ${{ inputs.infisical_env }}
export INFISICAL_API_URL="${{ inputs.infisical_api_url }}" jump_host: ${{ inputs.jump_host }}
export INFISICAL_DOMAIN="$INFISICAL_API_URL" jump_port: ${{ inputs.jump_port }}
export INFISICAL_DISABLE_UPDATE_CHECK=true jump_user: ${{ inputs.jump_user }}
vm_ip: ${{ inputs.vm_ip }}
echo "Fetching SSH keys from Infisical..." vm_port: ${{ inputs.vm_port }}
JUMP_KEY=$(infisical secrets get JUMP_SSH_KEY --plain) vm_user: ${{ inputs.vm_user }}
VM_KEY=$(infisical secrets get VM_SSH_KEY --plain) ssh_host_alias: vm
if [ -z "$JUMP_KEY" ] || [ -z "$VM_KEY" ]; then
echo "Error: SSH keys retrieved from Infisical are empty!" >&2
exit 1
fi
echo "$JUMP_KEY" > ~/.ssh/jump_key
chmod 600 ~/.ssh/jump_key
echo "$VM_KEY" > ~/.ssh/vm_key
chmod 600 ~/.ssh/vm_key
cat > ~/.ssh/config <<EOF
Host jump
HostName ${{ inputs.jump_host }}
User ${{ inputs.jump_user }}
Port ${{ inputs.jump_port }}
IdentityFile ~/.ssh/jump_key
StrictHostKeyChecking no
Host vm
HostName ${{ inputs.vm_ip }}
User ${{ inputs.vm_user }}
Port ${{ inputs.vm_port }}
IdentityFile ~/.ssh/vm_key
ProxyJump jump
StrictHostKeyChecking no
EOF
- name: Test SSH connection to VM - name: Test SSH connection to VM
run: | run: |
@@ -136,6 +103,9 @@ jobs:
export INFISICAL_DISABLE_UPDATE_CHECK=true export INFISICAL_DISABLE_UPDATE_CHECK=true
INFISICAL_ENV="${{ inputs.infisical_env }}" INFISICAL_ENV="${{ inputs.infisical_env }}"
if [ -z "$INFISICAL_ENV" ]; then
INFISICAL_ENV="${{ gitea.ref_name }}"
fi
INFISICAL_PATH="${{ inputs.infisical_path }}" INFISICAL_PATH="${{ inputs.infisical_path }}"
echo "Running docker compose down and up under Infisical..." echo "Running docker compose down and up under Infisical..."
+11 -2
View File
@@ -11,6 +11,10 @@ on:
type: string type: string
required: false required: false
default: "https://secrets.itlab-ffeks.dnu.edu.ua" default: "https://secrets.itlab-ffeks.dnu.edu.ua"
infisical_env:
description: "Infisical Environment"
type: string
required: false
secrets: secrets:
infisical_cicd_token: infisical_cicd_token:
description: "Infisical Service Token for CI/CD secrets" description: "Infisical Service Token for CI/CD secrets"
@@ -49,10 +53,15 @@ jobs:
export INFISICAL_DOMAIN="$INFISICAL_API_URL" export INFISICAL_DOMAIN="$INFISICAL_API_URL"
export INFISICAL_DISABLE_UPDATE_CHECK=true export INFISICAL_DISABLE_UPDATE_CHECK=true
INFISICAL_ENV="${{ inputs.infisical_env }}"
if [ -z "$INFISICAL_ENV" ]; then
INFISICAL_ENV="${{ gitea.ref_name }}"
fi
# Fetch secrets (assuming CLI is pre-installed) # Fetch secrets (assuming CLI is pre-installed)
echo "Fetching secrets from Infisical..." echo "Fetching secrets from Infisical..."
PROXMOX_VE_API_TOKEN=$(infisical secrets get PROXMOX_VE_API_TOKEN --plain) PROXMOX_VE_API_TOKEN=$(infisical secrets get PROXMOX_VE_API_TOKEN --env="$INFISICAL_ENV" --plain)
INFRASTRUCTURE_TOKEN=$(infisical secrets get INFRASTRUCTURE_TOKEN --plain) INFRASTRUCTURE_TOKEN=$(infisical secrets get INFRASTRUCTURE_TOKEN --env="$INFISICAL_ENV" --plain)
# Mask values in logs immediately # Mask values in logs immediately
echo "::add-mask::$PROXMOX_VE_API_TOKEN" echo "::add-mask::$PROXMOX_VE_API_TOKEN"