11name : Terraform Destroy Workflow 
2- 
32on :
43  workflow_dispatch :
54
65jobs :
76  terraform-destroy :
87    name : Terraform Destroy 
98    runs-on : ubuntu-latest 
10- 
9+     environment : production 
10+     
1111    steps :
1212      - name : Checkout Repository 
1313        uses : actions/checkout@v5 
14- 
14+         
15+       - name : Verify Variables Available 
16+         run : | 
17+           echo "CLUSTER_NAME: ${{ vars.CLUSTER_NAME }}" 
18+           echo "NAMESPACE: ${{ vars.APP_NAMESPACE }}" 
19+           echo "MONITORING_NAMESPACE: ${{ vars.MONITORING_NAMESPACE }}" 
20+           echo "ARGOCD_NAMESPACE: ${{ vars.ARGOCD_NAMESPACE }}" 
21+           if [[ -z "${{ vars.CLUSTER_NAME }}" ]]; then 
22+             echo "ERROR: CLUSTER_NAME variable not found. Infrastructure may not be deployed." 
23+             exit 1 
24+           fi 
25+           if [[ -z "${{ vars.APP_NAMESPACE }}" ]]; then 
26+             echo "ERROR: APP_NAMESPACE variable not found. Infrastructure may not be deployed." 
27+             exit 1 
28+           fi 
29+          
1530       - name : Login to AWS 
1631        uses : 
aws-actions/[email protected]   1732        with :
1833          aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }} 
1934          aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }} 
2035          aws-region : us-east-1 
21- 
36+            
2237      - name : Setup Terraform 
23382439        with :
2540          terraform_version : 1.5.7 
26- 
41+            
2742      - name : Update kubeconfig 
28-         run : aws eks update-kubeconfig --name otel-cluster --region us-east-1 
43+         run : aws eks update-kubeconfig --name ${{ vars.CLUSTER_NAME }} --region us-east-1 
44+         continue-on-error : true 
45+         
46+       - name : Install Helm 
47+ 48+         with :
49+           version : v3.14.0 
50+         continue-on-error : true 
2951
3052      #  ---------------------------
3153      #  Delete ArgoCD Applications
@@ -34,31 +56,35 @@ jobs:
3456        run : | 
3557          kubectl delete application my-app -n argocd --ignore-not-found 
3658          kubectl delete application kube-prometheus-stack -n argocd --ignore-not-found 
59+          continue-on-error : true 
3760
3861      #  ---------------------------
3962      #  Uninstall Helm Releases
4063      #  ---------------------------
4164      - name : Uninstall Helm Releases 
4265        run : | 
43-           helm uninstall my-app -n my-app-namespace || true  
44-           helm uninstall kube-prometheus-stack -n monitoring || true  
45-           helm uninstall argocd -n argocd || true  
66+           helm uninstall my-app -n ${{ vars.APP_NAMESPACE }} || true  
67+           helm uninstall kube-prometheus-stack -n ${{ vars.MONITORING_NAMESPACE }} || true  
68+           helm uninstall argocd -n ${{ vars.ARGOCD_NAMESPACE }} || true  
69+          continue-on-error : true 
4670
4771      #  ---------------------------
4872      #  Delete Namespaces
4973      #  ---------------------------
5074      - name : Delete Namespaces 
5175        run : | 
52-           kubectl delete namespace my-app-namespace --ignore-not-found 
53-           kubectl delete namespace monitoring --ignore-not-found 
54-           kubectl delete namespace argocd --ignore-not-found 
76+           kubectl delete namespace ${{ vars.APP_NAMESPACE }} --ignore-not-found 
77+           kubectl delete namespace ${{ vars.MONITORING_NAMESPACE }} --ignore-not-found 
78+           kubectl delete namespace ${{ vars.ARGOCD_NAMESPACE }} --ignore-not-found 
79+          continue-on-error : true 
5580
5681      #  ---------------------------
5782      #  Delete CRDs (Prometheus & Grafana)
5883      #  ---------------------------
5984      - name : Delete CRDs 
6085        run : | 
6186          kubectl get crd -o name | grep -E 'prometheus|grafana|alertmanager|servicemonitor|prometheusrule' | xargs -r kubectl delete || true  
87+          continue-on-error : true 
6288
6389      #  ---------------------------
6490      #  Cleanup PVCs & PVs
@@ -67,14 +93,38 @@ jobs:
6793        run : | 
6894          kubectl delete pvc --all -A || true  
6995          kubectl delete pv --all || true  
96+          continue-on-error : true 
97+ 
98+       #  ---------------------------
99+       #  Wait for cleanup to complete
100+       #  ---------------------------
101+       - name : Wait for cleanup 
102+         run : sleep 30 
70103
71104      #  ---------------------------
72105      #  Terraform Destroy
73106      #  ---------------------------
74107      - name : Terraform Init 
75108        run : terraform init 
76109        working-directory : ./Terraform 
77- 
110+         
111+       - name : Terraform Destroy Plan 
112+         run : terraform plan -destroy 
113+         working-directory : ./Terraform 
114+         
78115      - name : Terraform Destroy 
79116        run : terraform destroy -auto-approve 
80117        working-directory : ./Terraform 
118+ 
119+       #  ---------------------------
120+       #  Clean up GitHub Variables
121+       #  ---------------------------
122+       - name : Remove GitHub repository variables 
123+         run : | 
124+           gh variable delete CLUSTER_NAME --repo $GITHUB_REPOSITORY || true  
125+           gh variable delete APP_NAMESPACE --repo $GITHUB_REPOSITORY || true  
126+           gh variable delete MONITORING_NAMESPACE --repo $GITHUB_REPOSITORY || true  
127+           gh variable delete ARGOCD_NAMESPACE --repo $GITHUB_REPOSITORY || true  
128+          env :
129+           GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }} 
130+         continue-on-error : true 
0 commit comments