1+ #! /bin/bash
2+ # Helper script for local testing of the Spice.ai Terraform provider
3+ #
4+ # Usage:
5+ # ./scripts/local-test.sh [command]
6+ #
7+ # Commands:
8+ # build - Build the provider binary
9+ # setup - Set up ~/.terraformrc with dev_overrides
10+ # plan - Run terraform plan in examples/test
11+ # apply - Run terraform apply in examples/test
12+ # destroy - Run terraform destroy in examples/test
13+ # clean - Clean up terraform state files
14+ # all - Build, setup, and run plan
15+
16+ set -e
17+
18+ SCRIPT_DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd) "
19+ PROJECT_DIR=" $( cd " $SCRIPT_DIR /.." && pwd) "
20+ PROVIDER_BINARY=" $PROJECT_DIR /terraform-provider-spiceai"
21+ TEST_DIR=" $PROJECT_DIR /examples/test"
22+ TERRAFORMRC=" $HOME /.terraformrc"
23+
24+ # Colors for output
25+ RED=' \033[0;31m'
26+ GREEN=' \033[0;32m'
27+ YELLOW=' \033[1;33m'
28+ NC=' \033[0m' # No Color
29+
30+ log_info () {
31+ echo -e " ${GREEN} [INFO]${NC} $1 "
32+ }
33+
34+ log_warn () {
35+ echo -e " ${YELLOW} [WARN]${NC} $1 "
36+ }
37+
38+ log_error () {
39+ echo -e " ${RED} [ERROR]${NC} $1 "
40+ }
41+
42+ check_credentials () {
43+ if [ -z " $SPICEAI_CLIENT_ID " ]; then
44+ log_error " SPICEAI_CLIENT_ID environment variable is not set"
45+ echo " export SPICEAI_CLIENT_ID=\" your-client-id\" "
46+ return 1
47+ fi
48+ if [ -z " $SPICEAI_CLIENT_SECRET " ]; then
49+ log_error " SPICEAI_CLIENT_SECRET environment variable is not set"
50+ echo " export SPICEAI_CLIENT_SECRET=\" your-client-secret\" "
51+ return 1
52+ fi
53+ log_info " Credentials configured"
54+ return 0
55+ }
56+
57+ cmd_build () {
58+ log_info " Building provider..."
59+ cd " $PROJECT_DIR "
60+ go build -o terraform-provider-spiceai .
61+ log_info " Provider built: $PROVIDER_BINARY "
62+ }
63+
64+ cmd_setup () {
65+ log_info " Setting up ~/.terraformrc with dev_overrides..."
66+
67+ if [ -f " $TERRAFORMRC " ]; then
68+ if grep -q " spiceai/spiceai" " $TERRAFORMRC " ; then
69+ log_warn " ~/.terraformrc already contains spiceai/spiceai override"
70+ log_warn " Please verify the path is correct: $PROJECT_DIR "
71+ return 0
72+ fi
73+ log_warn " ~/.terraformrc exists, creating backup..."
74+ cp " $TERRAFORMRC " " $TERRAFORMRC .backup.$( date +%Y%m%d%H%M%S) "
75+ fi
76+
77+ cat > " $TERRAFORMRC " << EOF
78+ # Terraform CLI configuration for local provider development
79+ # Generated by terraform-provider-spiceai/scripts/local-test.sh
80+
81+ provider_installation {
82+ dev_overrides {
83+ "spiceai/spiceai" = "$PROJECT_DIR "
84+ }
85+
86+ direct {}
87+ }
88+ EOF
89+
90+ log_info " Created ~/.terraformrc with dev_overrides"
91+ log_info " Provider path: $PROJECT_DIR "
92+ }
93+
94+ cmd_plan () {
95+ check_credentials || exit 1
96+
97+ if [ ! -f " $PROVIDER_BINARY " ]; then
98+ log_warn " Provider binary not found, building..."
99+ cmd_build
100+ fi
101+
102+ log_info " Running terraform plan..."
103+ cd " $TEST_DIR "
104+ terraform plan
105+ }
106+
107+ cmd_apply () {
108+ check_credentials || exit 1
109+
110+ if [ ! -f " $PROVIDER_BINARY " ]; then
111+ log_warn " Provider binary not found, building..."
112+ cmd_build
113+ fi
114+
115+ log_info " Running terraform apply..."
116+ cd " $TEST_DIR "
117+ terraform apply
118+ }
119+
120+ cmd_destroy () {
121+ check_credentials || exit 1
122+
123+ log_info " Running terraform destroy..."
124+ cd " $TEST_DIR "
125+ terraform destroy
126+ }
127+
128+ cmd_clean () {
129+ log_info " Cleaning up terraform state files..."
130+ cd " $TEST_DIR "
131+ rm -rf .terraform .terraform.lock.hcl terraform.tfstate terraform.tfstate.backup
132+ log_info " Cleaned up state files"
133+ }
134+
135+ cmd_all () {
136+ cmd_build
137+ cmd_setup
138+ cmd_plan
139+ }
140+
141+ cmd_help () {
142+ echo " Spice.ai Terraform Provider - Local Testing Helper"
143+ echo " "
144+ echo " Usage: $0 [command]"
145+ echo " "
146+ echo " Commands:"
147+ echo " build - Build the provider binary"
148+ echo " setup - Set up ~/.terraformrc with dev_overrides"
149+ echo " plan - Run terraform plan in examples/test"
150+ echo " apply - Run terraform apply in examples/test"
151+ echo " destroy - Run terraform destroy in examples/test"
152+ echo " clean - Clean up terraform state files"
153+ echo " all - Build, setup, and run plan"
154+ echo " help - Show this help message"
155+ echo " "
156+ echo " Environment variables required for plan/apply/destroy:"
157+ echo " SPICEAI_CLIENT_ID - OAuth client ID"
158+ echo " SPICEAI_CLIENT_SECRET - OAuth client secret"
159+ echo " "
160+ echo " Example:"
161+ echo " export SPICEAI_CLIENT_ID=\" your-client-id\" "
162+ echo " export SPICEAI_CLIENT_SECRET=\" your-client-secret\" "
163+ echo " $0 all"
164+ }
165+
166+ # Main
167+ case " ${1:- help} " in
168+ build)
169+ cmd_build
170+ ;;
171+ setup)
172+ cmd_setup
173+ ;;
174+ plan)
175+ cmd_plan
176+ ;;
177+ apply)
178+ cmd_apply
179+ ;;
180+ destroy)
181+ cmd_destroy
182+ ;;
183+ clean)
184+ cmd_clean
185+ ;;
186+ all)
187+ cmd_all
188+ ;;
189+ help|--help|-h)
190+ cmd_help
191+ ;;
192+ * )
193+ log_error " Unknown command: $1 "
194+ cmd_help
195+ exit 1
196+ ;;
197+ esac
0 commit comments