83 lines
2.1 KiB
YAML
83 lines
2.1 KiB
YAML
name: Terraform Deploy
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
instance_mode:
|
|
description: "Instance mode"
|
|
required: true
|
|
default: "single"
|
|
type: choice
|
|
options:
|
|
- single
|
|
- multi
|
|
|
|
service_name:
|
|
description: "Service name (e.g. n8n)"
|
|
required: false
|
|
default: ""
|
|
|
|
vm_name:
|
|
description: "VM name (e.g. n8n-01)"
|
|
required: false
|
|
default: ""
|
|
|
|
node_name:
|
|
description: "Proxmox node (e.g. pop)"
|
|
required: false
|
|
default: ""
|
|
|
|
app_port:
|
|
description: "App port (e.g. 5678)"
|
|
required: false
|
|
default: "5678"
|
|
|
|
vm_tags:
|
|
description: "VM tags, comma-separated (e.g. agentic,prod)"
|
|
required: false
|
|
default: "agentic"
|
|
|
|
jobs:
|
|
terraform:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Build tfvars
|
|
env:
|
|
VM_USER_SSHKEY: ${{ secrets.VM_USER_SSHKEY }}
|
|
APP_PORT: ${{ github.event.inputs.app_port }}
|
|
VM_TAGS: ${{ github.event.inputs.vm_tags }}
|
|
run: |
|
|
# Convert comma-separated tags to HCL list
|
|
TAGS_HCL=$(echo "$VM_TAGS" | tr ',' '\n' | sed 's/^/"/;s/$/"/' | paste -sd ',' | sed 's/^/[/;s/$/]/')
|
|
|
|
cat > ci.tfvars <<EOF
|
|
instance_mode = "${{ github.event.inputs.instance_mode }}"
|
|
|
|
instance = {
|
|
service_name = "${{ github.event.inputs.service_name }}"
|
|
vm_name = "${{ github.event.inputs.vm_name }}"
|
|
node_name = "${{ github.event.inputs.node_name }}"
|
|
app_port = ${APP_PORT}
|
|
vm_tags = ${TAGS_HCL}
|
|
}
|
|
|
|
vm_defaults = {
|
|
vm_user_sshkey = "${VM_USER_SSHKEY}"
|
|
}
|
|
EOF
|
|
|
|
- name: Setup Terraform
|
|
uses: hashicorp/setup-terraform@v3
|
|
|
|
- name: Terraform Init
|
|
run: terraform init
|
|
|
|
- name: Terraform Plan
|
|
run: terraform plan -var-file="ci.tfvars"
|
|
|
|
- name: Terraform Apply
|
|
run: terraform apply -var-file="ci.tfvars" -auto-approve
|