@@ -6,7 +6,13 @@ includes:
66
77vars :
88 # Application configuration
9- APP_SLUG : ' {{.REPLICATED_APP | default "wg-easy"}}'
9+ APP_NAME : ' {{.REPLICATED_APP | default "wg-easy"}}'
10+ APP_SLUG : ' {{.REPLICATED_APP_SLUG | default "wg-easy-cre"}}'
11+
12+ # Release configuration
13+ RELEASE_CHANNELd : ' {{.RELEASE_CHANNEL | default "Unstable"}}'
14+ RELEASE_VERSION : ' {{.RELEASE_VERSION | default "0.0.1"}}'
15+ RELEASE_NOTES : ' {{.RELEASE_NOTES | default "Release created via task release-create"}}'
1016
1117 # Cluster configuration
1218 CLUSTER_NAME : ' {{.CLUSTER_NAME | default "test-cluster"}}'
@@ -131,14 +137,14 @@ tasks:
131137 - echo "Updating Helm dependencies for all charts..."
132138 - |
133139 # Find all charts and update their dependencies
134- for chart_dir in $(find . -maxdepth 2 -name "Chart.yaml" | xargs dirname); do
140+ for chart_dir in $(find charts/ -maxdepth 2 -name "Chart.yaml" | xargs dirname); do
135141 echo "Updating dependency $chart_dir"
136- helm dependency update "$chart_dir"
142+ helm dependency update --skip-refresh "$chart_dir"
137143 done
138144 - echo "All dependencies updated!"
139145
140- ports-expose :
141- desc : Expose configured ports and capture exposed URLs
146+ cluster- ports-expose :
147+ desc : Expose configured ports for a cluster and capture exposed URLs
142148 silent : false
143149 run : once
144150 status :
@@ -166,8 +172,8 @@ tasks:
166172 deps :
167173 - cluster-create
168174
169- helm-deploy :
170- desc : Deploy all charts using helmfile
175+ helm-install :
176+ desc : Install all charts using helmfile
171177 silent : false
172178 cmds :
173179 - echo "Installing all charts via helmfile"
@@ -185,10 +191,10 @@ tasks:
185191 # Deploy with helmfile
186192 echo "Using $ENV_VARS"
187193 eval "KUBECONFIG={{.KUBECONFIG_FILE}} $ENV_VARS helmfile sync --wait"
188- - echo "All charts deployed !"
194+ - echo "All charts installed !"
189195 deps :
190196 - setup-kubeconfig
191- - ports-expose
197+ - cluster- ports-expose
192198
193199 cluster-delete :
194200 desc : Delete all test clusters with matching name and clean up kubeconfig
@@ -270,10 +276,10 @@ tasks:
270276 - echo "Packaging Helm charts..."
271277 - |
272278 # Find top-level directories containing Chart.yaml files
273- for chart_dir in $(find . -maxdepth 2 -name "Chart.yaml" | xargs dirname); do
279+ for chart_dir in $(find charts/ -maxdepth 2 -name "Chart.yaml" | xargs dirname); do
274280 echo "Packaging chart: $chart_dir"
275281 # Navigate to chart directory, package it, and move the resulting .tgz to release folder
276- (cd "$chart_dir" && helm package . && mv *.tgz ../release/)
282+ (cd "$chart_dir" && helm package . && mv *.tgz ../../ release/)
277283 done
278284
279285 - echo "Release files prepared in ./release/ directory"
@@ -283,8 +289,10 @@ tasks:
283289 release-create :
284290 desc : Create and promote a release using the Replicated CLI
285291 silent : false
292+ run : once
286293 vars :
287294 CHANNEL : ' {{.CHANNEL | default "Unstable"}}'
295+ VERSION : ' {{.VERSION | default "0.0.1"}}'
288296 RELEASE_NOTES : ' {{.RELEASE_NOTES | default "Release created via task release-create"}}'
289297 requires :
290298 vars : [APP_SLUG, VERSION]
@@ -298,6 +306,53 @@ tasks:
298306 deps :
299307 - release-prepare
300308
309+ customer-create :
310+ desc : Create a new customer or get existing customer with matching name and return their ID
311+ silent : false
312+ run : once
313+ vars :
314+ CUSTOMER_NAME : ' {{.CUSTOMER_NAME | default "test-customer"}}'
315+ CUSTOMER_EMAIL :
' {{.CUSTOMER_EMAIL | default "[email protected] "}}' 316+ CHANNEL : ' {{.CHANNEL | default "Unstable"}}'
317+ LICENSE_TYPE : ' {{.LICENSE_TYPE | default "dev"}}'
318+ EXPIRES_IN : ' {{.EXPIRES_IN | default ""}}'
319+ requires :
320+ vars : [APP_SLUG]
321+ cmds :
322+ - |
323+ # First check if customer already exists
324+ echo "Looking for existing customer {{.CUSTOMER_NAME}} for app {{.APP_SLUG}}..."
325+ EXISTING_CUSTOMER=$(replicated customer ls --app {{.APP_SLUG}} --output json | jq -r '.[] | select(.name=="{{.CUSTOMER_NAME}}") | .id' | head -1)
326+
327+ if [ -n "$EXISTING_CUSTOMER" ]; then
328+ echo "Found existing customer {{.CUSTOMER_NAME}} with ID: $EXISTING_CUSTOMER"
329+ echo "$EXISTING_CUSTOMER"
330+ exit 0
331+ fi
332+
333+ # No existing customer found, create a new one
334+ echo "Creating new customer {{.CUSTOMER_NAME}} for app {{.APP_SLUG}}..."
335+
336+ # Build the command with optional expiration
337+ CMD="replicated customer create \
338+ --app {{.APP_SLUG}} \
339+ --name {{.CUSTOMER_NAME}} \
340+ --email {{.CUSTOMER_EMAIL}} \
341+ --channel {{.CHANNEL}} \
342+ --type {{.LICENSE_TYPE}} \
343+ --output json"
344+
345+ # Add expiration if specified
346+ if [ -n "{{.EXPIRES_IN}}" ]; then
347+ CMD="$CMD --expires-in {{.EXPIRES_IN}}"
348+ fi
349+
350+ # Create the customer and capture the output
351+ CUSTOMER_JSON=$($CMD)
352+
353+ # Extract and output just the customer ID
354+ echo "$CUSTOMER_JSON" | jq -r '.id'
355+
301356 gcp-vm-create :
302357 desc : Create a simple GCP VM instance
303358 silent : false
@@ -355,14 +410,79 @@ tasks:
355410 GCP_ZONE : ' {{.GCP_ZONE}}'
356411 VM_NAME : ' {{.VM_NAME}}'
357412
413+ customer-ls :
414+ desc : List customers for the application
415+ silent : false
416+ vars :
417+ OUTPUT_FORMAT : ' {{.OUTPUT_FORMAT | default "table"}}'
418+ requires :
419+ vars : [APP_SLUG]
420+ cmds :
421+ - echo "Listing customers for app {{.APP_SLUG}}..."
422+ - replicated customer ls --app {{.APP_SLUG}} --output {{.OUTPUT_FORMAT}}
423+
424+ customer-delete :
425+ desc : Archive a customer by ID
426+ silent : false
427+ vars :
428+ CUSTOMER_ID : ' {{.CUSTOMER_ID}}'
429+ requires :
430+ vars : [APP_SLUG, CUSTOMER_ID]
431+ cmds :
432+ - echo "Archiving customer with ID {{.CUSTOMER_ID}} from app {{.APP_SLUG}}..."
433+ - |
434+ # Verify customer exists before attempting to archive
435+ CUSTOMER_EXISTS=$(replicated customer ls --app {{.APP_SLUG}} --output json | jq -r '.[] | select(.id=="{{.CUSTOMER_ID}}") | .id')
436+ if [ -z "$CUSTOMER_EXISTS" ]; then
437+ echo "Error: Customer with ID {{.CUSTOMER_ID}} not found for app {{.APP_SLUG}}"
438+ exit 1
439+ fi
440+
441+ # Get customer name for confirmation message
442+ CUSTOMER_NAME=$(replicated customer ls --app {{.APP_SLUG}} --output json | jq -r '.[] | select(.id=="{{.CUSTOMER_ID}}") | .name')
443+
444+ # Archive the customer
445+ replicated customer archive {{.CUSTOMER_ID}} --app {{.APP_SLUG}}
446+
447+ # Confirm archiving
448+ echo "Customer '$CUSTOMER_NAME' (ID: {{.CUSTOMER_ID}}) successfully archived"
449+
450+ clean :
451+ desc : Remove temporary Helm directories, chart dependencies, and release folder
452+ silent : false
453+ cmds :
454+ - echo "Cleaning temporary directories and dependencies..."
455+ - |
456+ # Remove the release directory
457+ if [ -d "./release" ]; then
458+ echo "Removing release directory..."
459+ rm -rf ./release
460+ fi
461+
462+ # Find and remove tmpcharts-* directories in charts/
463+ echo "Removing temporary chart directories..."
464+ find charts/ -type d -name "tmpcharts-*" -print
465+ find charts/ -type d -name "tmpcharts-*" -exec rm -rf {} \; 2>/dev/null || true
466+
467+ # Clean up chart dependencies (.tgz files) in charts/*/charts/
468+ echo "Removing chart dependencies..."
469+ find charts/ -path "*/charts/*.tgz" -type f -print
470+ find charts/ -path "*/charts/*.tgz" -type f -delete
471+
472+ # Clean up any tmpcharts directories in subdirectories
473+ echo "Cleaning up any remaining tmpcharts directories..."
474+ find . -type d -name "tmpcharts-*" -print
475+ find . -type d -name "tmpcharts-*" -exec rm -rf {} \; 2>/dev/null || true
476+ - echo "Cleaning complete!"
477+
358478 full-test-cycle :
359479 desc : Create cluster, get kubeconfig, expose ports, update dependencies, deploy charts, test, and delete
360480 silent : false
361481 cmds :
362482 - task : cluster-create
363483 - task : setup-kubeconfig
364- - task : ports-expose
484+ - task : cluster- ports-expose
365485 - task : dependencies-update
366- - task : helm-deploy
486+ - task : helm-install
367487 - task : test
368488 - task : cluster-delete
0 commit comments