@@ -205,274 +205,6 @@ tasks:
205205 desc : build desktop flatpak using act
206206 cmd : act workflow_dispatch -W .github/workflows/act.yml -j build-flatpak
207207
208- rename :
209- # usage: NEW_OWNER=myorg NEW_NAME=mytool task rename
210- desc : rename the project (owner + binary name) across the entire repository
211- preconditions :
212- - sh : ' [ -n "$NEW_OWNER" ] && [ -n "$NEW_NAME" ]'
213- msg : " usage: NEW_OWNER=myorg NEW_NAME=mytool task rename"
214- cmds :
215- - |
216- set -euo pipefail
217- OLD_OWNER="skevetter"
218- OLD_NAME="devpod"
219- NEW_OWNER="${NEW_OWNER}"
220- NEW_NAME="${NEW_NAME}"
221-
222- echo "=== Renaming: $OLD_OWNER/$OLD_NAME -> $NEW_OWNER/$NEW_NAME ==="
223-
224- # --- Go source constants (the canonical source of truth) ---
225- echo "[1/8] Updating pkg/config/repo.go..."
226- sed -i "s|RepoOwner.*=.*\"$OLD_OWNER\"|RepoOwner = \"$NEW_OWNER\"|" pkg/config/repo.go
227- sed -i "s|RepoName.*=.*\"$OLD_NAME\"|RepoName = \"$NEW_NAME\"|" pkg/config/repo.go
228-
229- # --- TypeScript constants ---
230- echo "[2/8] Updating desktop/src/client/repo.ts..."
231- sed -i "s|REPO_OWNER = \"$OLD_OWNER\"|REPO_OWNER = \"$NEW_OWNER\"|" desktop/src/client/repo.ts
232- sed -i "s|REPO_NAME = \"$OLD_NAME\"|REPO_NAME = \"$NEW_NAME\"|" desktop/src/client/repo.ts
233-
234- # --- Go module path ---
235- echo "[3/8] Updating Go module path..."
236- find . -name '*.go' -not -path './vendor/*' -exec sed -i "s|github.com/$OLD_OWNER/$OLD_NAME|github.com/$NEW_OWNER/$NEW_NAME|g" {} +
237- sed -i "s|github.com/$OLD_OWNER/$OLD_NAME|github.com/$NEW_OWNER/$NEW_NAME|g" go.mod go.sum
238-
239- # --- Goreleaser ---
240- echo "[4/8] Updating .goreleaser.yml..."
241- sed -i "s|project_name: $OLD_NAME|project_name: $NEW_NAME|g" .goreleaser.yml
242- sed -i "s|binary: $OLD_NAME-|binary: $NEW_NAME-|g" .goreleaser.yml
243- sed -i "s|id: $OLD_NAME|id: $NEW_NAME|g" .goreleaser.yml
244- sed -i "s|github.com/$OLD_OWNER/$OLD_NAME|github.com/$NEW_OWNER/$NEW_NAME|g" .goreleaser.yml
245-
246- # --- Tauri / Desktop config ---
247- echo "[5/8] Updating Tauri and Flatpak configs..."
248- sed -i "s|bin/$OLD_NAME|bin/$NEW_NAME|g" desktop/src-tauri/tauri.conf.json
249- sed -i "s|sh.loft.$OLD_NAME|sh.loft.$NEW_NAME|g" desktop/src-tauri/tauri.conf.json
250- sed -i "s|$OLD_OWNER/$OLD_NAME|$NEW_OWNER/$NEW_NAME|g" desktop/src-tauri/tauri.conf.json
251- sed -i "s|bin/$OLD_NAME|bin/$NEW_NAME|g" desktop/src-tauri/capabilities/migrated.json
252- sed -i "s|run-path-$OLD_NAME|run-path-$NEW_NAME|g" desktop/src-tauri/capabilities/migrated.json
253- sed -i "s|/app/bin/$OLD_NAME|/app/bin/$NEW_NAME|g" desktop/src-tauri/capabilities/migrated.json
254- sed -i "s|name = \"$OLD_NAME-desktop\"|name = \"$NEW_NAME-desktop\"|" desktop/src-tauri/Cargo.toml
255-
256- # --- Flatpak manifest ---
257- sed -i "s|sh.loft.$OLD_NAME|sh.loft.$NEW_NAME|g" desktop/flatpak/sh.loft.$OLD_NAME.yml
258- sed -i "s|$OLD_OWNER/$OLD_NAME|$NEW_OWNER/$NEW_NAME|g" desktop/flatpak/sh.loft.$OLD_NAME.yml
259- sed -i "s|bin/$OLD_NAME|bin/$NEW_NAME|g" desktop/flatpak/sh.loft.$OLD_NAME.yml
260- sed -i "s|name: $OLD_NAME$|name: $NEW_NAME|g" desktop/flatpak/sh.loft.$OLD_NAME.yml
261- if [ "$OLD_NAME" != "$NEW_NAME" ]; then
262- git mv "desktop/flatpak/sh.loft.$OLD_NAME.yml" "desktop/flatpak/sh.loft.$NEW_NAME.yml" 2>/dev/null || true
263- fi
264-
265- # --- GitHub Actions workflows ---
266- echo "[6/8] Updating GitHub Actions workflows..."
267- for f in .github/workflows/*.yml; do
268- sed -i "s|$OLD_OWNER/$OLD_NAME|$NEW_OWNER/$NEW_NAME|g" "$f"
269- sed -i "s| $OLD_NAME-| $NEW_NAME-|g" "$f"
270- sed -i "s|name: $OLD_NAME-|name: $NEW_NAME-|g" "$f"
271- sed -i "s|$OLD_NAME-bin|$NEW_NAME-bin|g" "$f"
272- sed -i "s|\"$OLD_NAME-\*\"|\"$NEW_NAME-*\"|g" "$f"
273- sed -i "s|\"$OLD_NAME-linux|\"$NEW_NAME-linux|g" "$f"
274- sed -i "s|\"$OLD_NAME-darwin|\"$NEW_NAME-darwin|g" "$f"
275- sed -i "s|\"$OLD_NAME-windows|\"$NEW_NAME-windows|g" "$f"
276- sed -i "s|$OLD_NAME-flatpak|$NEW_NAME-flatpak|g" "$f"
277- sed -i "s|/tmp/$OLD_NAME/|/tmp/$NEW_NAME/|g" "$f"
278- sed -i "s|sh.loft.$OLD_NAME|sh.loft.$NEW_NAME|g" "$f"
279- sed -i "s|id $OLD_NAME|id $NEW_NAME|g" "$f"
280- sed -i "s|id: $OLD_NAME-dev|id: $NEW_NAME-dev|g" "$f"
281- sed -i "s|id: $OLD_NAME-linux|id: $NEW_NAME-linux|g" "$f"
282- done
283-
284- # --- Taskfile.yml ---
285- echo "[7/8] Updating Taskfile.yml..."
286- sed -i "s|GITHUB_REPOSITORY_OWNER: $OLD_OWNER|GITHUB_REPOSITORY_OWNER: $NEW_OWNER|g" Taskfile.yml
287- sed -i "s|$OLD_NAME-cache|$NEW_NAME-cache|g" Taskfile.yml
288- sed -i "s|$OLD_NAME-dev|$NEW_NAME-dev|g" Taskfile.yml
289- sed -i "s|$OLD_NAME-pro-dev|$NEW_NAME-pro-dev|g" Taskfile.yml
290- sed -i "s|/$OLD_NAME-linux|/$NEW_NAME-linux|g" Taskfile.yml
291- sed -i "s|bin/$OLD_NAME-linux|bin/$NEW_NAME-linux|g" Taskfile.yml
292- sed -i "s|--repo $OLD_OWNER/$OLD_NAME|--repo $NEW_OWNER/$NEW_NAME|g" Taskfile.yml
293- sed -i "s|id $OLD_NAME |id $NEW_NAME |g" Taskfile.yml
294-
295- # --- Devcontainer ---
296- echo "[8/13] Updating .devcontainer..."
297- sed -i "s|$OLD_OWNER/$OLD_NAME|$NEW_OWNER/$NEW_NAME|g" .devcontainer/devcontainer.json 2>/dev/null || true
298-
299- # --- Provider YAML files ---
300- echo "[9/13] Updating provider YAML files..."
301- for f in providers/*/provider.yaml hack/pro/provider.yaml; do
302- [ -f "$f" ] || continue
303- sed -i "s|$OLD_OWNER/$OLD_NAME|$NEW_OWNER/$NEW_NAME|g" "$f"
304- sed -i "s|$OLD_NAME\.sh/assets|$NEW_NAME.sh/assets|g" "$f"
305- sed -i "s|name: $OLD_NAME-pro|name: $NEW_NAME-pro|g" "$f"
306- sed -i "s|default: \"$OLD_NAME\"|default: \"$NEW_NAME\"|g" "$f"
307- done
308-
309- # --- User-facing CLI messages in Go ---
310- echo "[10/13] Updating CLI help text and messages..."
311- OLD_UPPER=$(echo "$OLD_NAME" | tr '[:lower:]' '[:upper:]')
312- NEW_UPPER=$(echo "$NEW_NAME" | tr '[:lower:]' '[:upper:]')
313- find . -name '*.go' -not -path './vendor/*' -not -path './e2e/*' | while read -r f; do
314- # CLI examples: 'devpod up', 'devpod delete', etc.
315- sed -i "s|'$OLD_NAME |'$NEW_NAME |g" "$f"
316- sed -i "s|'$OLD_NAME\`|'$NEW_NAME\`|g" "$f"
317- sed -i "s|\`$OLD_NAME |\`$NEW_NAME |g" "$f"
318- # Paths with /devpod/ or /devpod-
319- sed -i "s|/usr/local/share/$OLD_NAME/|/usr/local/share/$NEW_NAME/|g" "$f"
320- sed -i "s|/var/lib/loft/$OLD_NAME|/var/lib/loft/$NEW_NAME|g" "$f"
321- sed -i "s|/opt/$OLD_NAME/|/opt/$NEW_NAME/|g" "$f"
322- sed -i "s|/var/lib/$OLD_NAME/|/var/lib/$NEW_NAME/|g" "$f"
323- sed -i "s|/home/$OLD_NAME/|/home/$NEW_NAME/|g" "$f"
324- # Volume names, pipe names
325- sed -i "s|src=$OLD_NAME-|src=$NEW_NAME-|g" "$f"
326- sed -i "s|pipe\\\\$OLD_NAME|pipe\\\\$NEW_NAME|g" "$f"
327- sed -i "s|localclient.$OLD_NAME:|localclient.$NEW_NAME:|g" "$f"
328- # Protocol handler
329- sed -i "s|$OLD_NAME://|$NEW_NAME://|g" "$f"
330- # Error messages mentioning the binary
331- sed -i "s|\"$OLD_NAME version|\"$NEW_NAME version|g" "$f"
332- sed -i "s|updated $OLD_NAME to|updated $NEW_NAME to|g" "$f"
333- # Shell scripts embedded in Go strings
334- sed -i "s|/usr/local/bin/$OLD_NAME|/usr/local/bin/$NEW_NAME|g" "$f"
335- sed -i "s|waiting for $OLD_NAME agent|waiting for $NEW_NAME agent|g" "$f"
336- sed -i "s|$OLD_NAME agent git-ssh-signature|$NEW_NAME agent git-ssh-signature|g" "$f"
337- # --devpod-home flag
338- sed -i "s|--$OLD_NAME-home|--$NEW_NAME-home|g" "$f"
339- # Kubernetes label domain
340- sed -i "s|$OLD_NAME\.sh/|$NEW_NAME.sh/|g" "$f"
341- done
342-
343- # --- E2E tests and testdata ---
344- echo "[11/13] Updating e2e tests..."
345- find e2e/ -name '*.go' -o -name '*.yaml' -o -name '*.json' | while read -r f; do
346- sed -i "s|$OLD_OWNER/$OLD_NAME|$NEW_OWNER/$NEW_NAME|g" "$f"
347- sed -i "s|/usr/local/bin/$OLD_NAME|/usr/local/bin/$NEW_NAME|g" "$f"
348- sed -i "s|/tmp/$OLD_NAME|/tmp/$NEW_NAME|g" "$f"
349- sed -i "s|/opt/$OLD_NAME|/opt/$NEW_NAME|g" "$f"
350- sed -i "s|name: $OLD_NAME|name: $NEW_NAME|g" "$f"
351- sed -i "s|app: $OLD_NAME|app: $NEW_NAME|g" "$f"
352- sed -i "s|$OLD_NAME-container|$NEW_NAME-container|g" "$f"
353- sed -i "s|$OLD_NAME-storage|$NEW_NAME-storage|g" "$f"
354- sed -i "s|$OLD_NAME-e2e|$NEW_NAME-e2e|g" "$f"
355- sed -i "s|$OLD_NAME\.sh/|$NEW_NAME.sh/|g" "$f"
356- sed -i "s|KUBERNETES_NAMESPACE=$OLD_NAME|KUBERNETES_NAMESPACE=$NEW_NAME|g" "$f"
357- sed -i "s|\"$OLD_NAME-|\"$NEW_NAME-|g" "$f"
358- done
359-
360- # --- Desktop package.json ---
361- echo "[12/13] Updating package.json files..."
362- sed -i "s|\"$OLD_NAME-desktop\"|\"$NEW_NAME-desktop\"|g" desktop/package.json 2>/dev/null || true
363- sed -i "s|$OLD_OWNER/$OLD_NAME|$NEW_OWNER/$NEW_NAME|g" package.json 2>/dev/null || true
364-
365- # --- Examples ---
366- echo "[13/13] Updating examples..."
367- find examples/ -name '*.yaml' -o -name '*.yml' | while read -r f; do
368- sed -i "s|$OLD_OWNER/$OLD_NAME|$NEW_OWNER/$NEW_NAME|g" "$f"
369- sed -i "s|app: $OLD_NAME|app: $NEW_NAME|g" "$f"
370- sed -i "s|$OLD_NAME\.sh/|$NEW_NAME.sh/|g" "$f"
371- sed -i "s|name: $OLD_NAME|name: $NEW_NAME|g" "$f"
372- done
373-
374- # --- Taskfile descriptions and goreleaser IDs ---
375- echo "[14/16] Updating Taskfile descriptions..."
376- sed -i "s|desc: .*$OLD_NAME|desc: \0|" Taskfile.yml # no-op placeholder; real fix below
377- sed -i "s|build $OLD_NAME CLI|build $NEW_NAME CLI|g" Taskfile.yml
378- sed -i "s|build $OLD_NAME for|build $NEW_NAME for|g" Taskfile.yml
379- sed -i "s|run $OLD_NAME linters|run $NEW_NAME linters|g" Taskfile.yml
380- sed -i "s|run $OLD_NAME unit|run $NEW_NAME unit|g" Taskfile.yml
381- sed -i "s|build $OLD_NAME gRPC|build $NEW_NAME gRPC|g" Taskfile.yml
382- sed -i "s|build $OLD_NAME Desktop|build $NEW_NAME Desktop|g" Taskfile.yml
383- sed -i "s|id $OLD_NAME --snapshot|id $NEW_NAME --snapshot|g" Taskfile.yml
384-
385- # --- Workflow Tauri target binary names ---
386- echo "[15/16] Updating Tauri target binary names in workflows..."
387- for f in .github/workflows/*.yml; do
388- sed -i "s|$OLD_NAME-x86_64-unknown|$NEW_NAME-x86_64-unknown|g" "$f"
389- sed -i "s|$OLD_NAME-aarch64-unknown|$NEW_NAME-aarch64-unknown|g" "$f"
390- sed -i "s|$OLD_NAME-x86_64-apple|$NEW_NAME-x86_64-apple|g" "$f"
391- sed -i "s|$OLD_NAME-aarch64-apple|$NEW_NAME-aarch64-apple|g" "$f"
392- sed -i "s|$OLD_NAME-x86_64-pc-windows|$NEW_NAME-x86_64-pc-windows|g" "$f"
393- sed -i "s|$OLD_NAME-aarch64-pc-windows|$NEW_NAME-aarch64-pc-windows|g" "$f"
394- done
395-
396- # --- Remaining Go user-facing strings ---
397- echo "[16/16] Updating remaining Go strings..."
398- find . -name '*.go' -not -path './vendor/*' | while read -r f; do
399- sed -i "s|\"$OLD_NAME |\"$NEW_NAME |g" "$f"
400- sed -i "s| $OLD_NAME | $NEW_NAME |g" "$f"
401- sed -i "s|$OLD_NAME pro login|$NEW_NAME pro login|g" "$f"
402- sed -i "s|$OLD_NAME pro start|$NEW_NAME pro start|g" "$f"
403- sed -i "s|$OLD_NAME pro daemon|$NEW_NAME pro daemon|g" "$f"
404- sed -i "s|$OLD_NAME provider use|$NEW_NAME provider use|g" "$f"
405- sed -i "s|$OLD_NAME provider update|$NEW_NAME provider update|g" "$f"
406- sed -i "s|$OLD_NAME provider add|$NEW_NAME provider add|g" "$f"
407- sed -i "s|$OLD_NAME up |$NEW_NAME up |g" "$f"
408- sed -i "s|$OLD_NAME delete |$NEW_NAME delete |g" "$f"
409- sed -i "s|$OLD_NAME context |$NEW_NAME context |g" "$f"
410- sed -i "s|$OLD_NAME import|$NEW_NAME import|g" "$f"
411- sed -i "s|Docker repository that hosts $OLD_NAME|Docker repository that hosts $NEW_NAME|g" "$f"
412- sed -i "s|save $OLD_NAME config|save $NEW_NAME config|g" "$f"
413- sed -i "s|authenticate $OLD_NAME cli|authenticate $NEW_NAME cli|g" "$f"
414- sed -i "s|$OLD_NAME container daemon|$NEW_NAME container daemon|g" "$f"
415- sed -i "s|$OLD_NAME-pro-url|$NEW_NAME-pro-url|g" "$f"
416- sed -i "s|ghcr.io/loft-sh/$OLD_NAME-pro|ghcr.io/loft-sh/$NEW_NAME-pro|g" "$f"
417- sed -i "s|${OLD_NAME}Ingress|${NEW_NAME}Ingress|g" "$f"
418- sed -i "s|$OLD_NAME\.svg|$NEW_NAME.svg|g" "$f"
419- done
420-
421- # --- Provider description text ---
422- for f in providers/*/provider.yaml; do
423- [ -f "$f" ] || continue
424- sed -i "s|Defaults to $OLD_NAME|Defaults to $NEW_NAME|g" "$f"
425- sed -i "s|the $OLD_NAME pod|the $NEW_NAME pod|g" "$f"
426- sed -i "s|$OLD_NAME\.sh/example|$NEW_NAME.sh/example|g" "$f"
427- done
428-
429- # --- Root package.json ---
430- sed -i "s|\"name\": \"$OLD_NAME\"|\"name\": \"$NEW_NAME\"|g" package.json 2>/dev/null || true
431-
432- echo ""
433- echo "=== Done. Run 'task rename:verify' to check for remaining references ==="
434-
435- rename:verify :
436- # usage: task rename:verify
437- desc : check for remaining references to the old name after rename
438- vars :
439- OLD_NAME : devpod
440- cmds :
441- - |
442- echo "=== Scanning for remaining '{{.OLD_NAME}}' references ==="
443- FOUND=$(grep -rn "{{.OLD_NAME}}" \
444- --include='*.go' --include='*.ts' --include='*.tsx' \
445- --include='*.yml' --include='*.yaml' --include='*.json' --include='*.toml' \
446- . \
447- | grep -v vendor | grep -v node_modules | grep -v '.git/' \
448- | grep -v go.sum | grep -v Cargo.lock | grep -v target/ \
449- | grep -v uv.lock | grep -v yarn.lock | grep -v package-lock \
450- | grep -v dist/ \
451- | grep -v 'OLD_NAME="{{.OLD_NAME}}"' \
452- | grep -v 'OLD_NAME: {{.OLD_NAME}}' \
453- | grep -v 'loft-sh/api' \
454- | grep -v 'loft-sh/apiserver' \
455- | grep -v 'devpodhttp\|devpodlog\|devpodclient\|devpodconfig' \
456- | grep -v 'devpod\.PlatformOptions\|devpod\.WorkspaceInstance\|devpod\.CloneOptions\|devpod\.CloneRequest\|devpod\.DevPod\|devpod\.PlatformBuildOptions\|devpod\.RunnerClient' \
457- | grep -v 'devpodworkspaceinstances' \
458- | grep -v '// ' \
459- | grep -v '# ' \
460- | grep -v '_test\.go' \
461- | grep -v 'community\.yaml' \
462- | grep -v 'fallbackProvider' \
463- | grep -v 'rename:verify' \
464- | grep -v 'OLD_NAME' \
465- || true)
466- if [ -z "$FOUND" ]; then
467- echo "PASS: No remaining references found"
468- else
469- echo "FAIL: Found remaining references:"
470- echo "$FOUND"
471- echo ""
472- echo "$(echo "$FOUND" | wc -l) remaining reference(s)"
473- exit 1
474- fi
475-
476208 github:dev-release:upload :
477209 desc : upload dev binaries to GitHub release tag v0.0.0-10 for testing
478210 cmds :
0 commit comments