Skip to content

Deploy Testrigs of mosip using Helmsman #7

Deploy Testrigs of mosip using Helmsman

Deploy Testrigs of mosip using Helmsman #7

name: Deploy Testrigs of mosip using Helmsman
on:
workflow_dispatch:
inputs:
mode:
description: "Choose Helmsman mode: dry-run or apply"
required: true
default: "dry-run"
type: choice
options:
- dry-run
- apply
push:
paths:
- Helmsman/dsf/testrigs-dsf.yaml
jobs:
deploy:
runs-on: ubuntu-latest
environment:
name: ${{ github.ref_name }}
env:
KUBECONFIG: ${{ github.workspace }}/.kube/config
PATH: ${{ github.workspace }}/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBECTL_PATH: ${{ github.workspace }}/.local/bin/kubectl
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Setup kubectl and kubeconfig
env:
KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
run: |
# Create directories
mkdir -p ${{ github.workspace }}/.local/bin
mkdir -p ${{ github.workspace }}/.kube
# Install kubectl
curl -LO https://dl.k8s.io/release/v1.31.3/bin/linux/amd64/kubectl
chmod +x kubectl
mv ./kubectl ${{ github.workspace }}/.local/bin/kubectl
# Setup kubeconfig
echo "$KUBECONFIG_CONTENT" > ${{ github.workspace }}/.kube/config
chmod 400 ${{ github.workspace }}/.kube/config
# Add kubectl to GitHub PATH for subsequent steps
echo "${{ github.workspace }}/.local/bin" >> $GITHUB_PATH
# Export environment variables for immediate use
echo "KUBECTL_PATH=${{ github.workspace }}/.local/bin/kubectl" >> $GITHUB_ENV
# Verify installation
${{ github.workspace }}/.local/bin/kubectl version --client
${{ github.workspace }}/.local/bin/kubectl config view
- name: Set Default Mode
run: |
if [ -z "${{ github.event.inputs.mode }}" ]; then
echo "HELMSMAN_MODE=apply" >> $GITHUB_ENV
else
echo "HELMSMAN_MODE=${{ github.event.inputs.mode }}" >> $GITHUB_ENV
fi
- name: Setup ufw firewall
run: |
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 51820/udp
sudo ufw status
- name: Install WireGuard
run: sudo apt-get install -y wireguard
- name: Configure WireGuard
run: |
echo "${{ secrets.CLUSTER_WIREGUARD_WG0 }}" | sudo tee /etc/wireguard/wg0.conf
- name: Start WireGuard
run: |
sudo chmod 600 /etc/wireguard/wg0.conf
sudo chmod 700 /etc/wireguard/
sudo chmod 644 /lib/systemd/system/wg-quick@.service
sudo systemctl daemon-reload
sudo wg-quick up wg0
sudo wg show wg0
- name: Setup Helm
run: |
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
sudo chmod 700 get_helm.sh
sudo ./get_helm.sh
helm version --client
- name: Install Helmsman
run: |
curl -L https://github.com/Praqma/helmsman/releases/download/v3.17.1/helmsman_3.17.1_linux_amd64.tar.gz -o helmsman.tar.gz
tar xzf helmsman.tar.gz
sudo mv helmsman /usr/local/bin
# Verify tools are available
echo "Tools verification:"
echo "kubectl: $(which kubectl)"
echo "helmsman: $(which helmsman)"
kubectl version --client
helmsman -v
- name: Verify cluster access
run: |
# Verify tools are accessible
echo "Verifying tool availability:"
echo "kubectl path: $(which kubectl)"
echo "KUBECONFIG: $KUBECONFIG"
# Test kubectl functionality
kubectl version --client
kubectl get nodes
kubectl cluster-info
- name: Check if mosip-dsf label is completed
run: |
STATUS=$(kubectl get namespace default -o jsonpath='{.metadata.labels.mosip-dsf}')
if [[ "$STATUS" != "completed" ]]; then
echo "❌ MOSIP DSF not completed."
exit 1
fi
- name: Initiate helmsman to apply the DSF configurations
run: |
export HOME="${{ github.workspace }}"
export WORKDIR="$HOME/Helmsman"
# Verify tools are available
echo "Using kubectl: $(which kubectl)"
echo "Using kubeconfig: $KUBECONFIG"
# Run helmsman with the determined mode
helmsman --debug --${HELMSMAN_MODE} -f $WORKDIR/dsf/testrigs-dsf.yaml