anomalyco/sst · warning

failed to clean up extracted directory: %w

Error message

failed to clean up extracted directory: %w

What it means

Once src/{package_name} has been moved into place, moveExtractedPackage removes the temporary extracted directory. Failure is wrapped as "failed to clean up extracted directory". By this point the package is already installed, so this is a hygiene/temp-disk issue rather than a broken build.

Source

Thrown at pkg/runtime/python/build.go:466

}

// moveExtractedPackage moves the extracted package to the correct location
func moveExtractedPackage(extractedDir, targetDir, baseName string) error {
	// For src layout, flatten src/{package_name} to {package_name}
	srcPath := filepath.Join(extractedDir, "src", baseName)
	if _, err := os.Stat(srcPath); err == nil {
		if err := os.RemoveAll(targetDir); err != nil {
			return fmt.Errorf("failed to remove old directory: %w", err)
		}

		// Move src/{package_name} to target
		if err := os.Rename(srcPath, targetDir); err != nil {
			return fmt.Errorf("failed to move src directory contents: %w", err)
		}

		// Clean up extracted directory
		if err := os.RemoveAll(extractedDir); err != nil {
			return fmt.Errorf("failed to clean up extracted directory: %w", err)
		}
	} else {
		// No src directory — check if package needs flattening
		if shouldFlattenPackage(extractedDir) {
			return flattenPackageToRoot(extractedDir, targetDir)
		}

		// Standard case: rename directory
		if err := os.RemoveAll(targetDir); err != nil {
			return fmt.Errorf("failed to remove old directory: %w", err)
		}

		if err := os.Rename(extractedDir, targetDir); err != nil {
			return fmt.Errorf("failed to rename directory: %w", err)
		}
	}

	return nil

View on GitHub (pinned to a0bd20f762)

Solutions

  1. Treat as non-fatal: the package is installed; delete the extracted dir manually later (rm -rf)
  2. Close/stop any process holding files in the temp directory
  3. Check for root-owned files (ls -la) and chown or delete them with appropriate privileges
  4. Ensure temp storage is writable and not full (df -h)
  5. Clear the whole temp/build cache on the next clean build
Defensive patterns

Strategy: try-catch

Try / catch

if err := processPackageArchive(...); err != nil {
    if strings.Contains(err.Error(), "failed to clean up extracted directory") {
        // package already installed; log and schedule temp cleanup, don't fail the build
        return nil
    }
    return err
}

Prevention

When it happens

Trigger: os.RemoveAll(extractedDir) fails, usually because some file in the temp directory is still open/locked, is owned by another user, or sits on a read-only or full filesystem.

Common situations: A virus scanner or indexer holds files in the temp dir on macOS/Windows; a forked process keeps a cwd inside extractedDir; root-owned leftovers from a previous sudo build; temp dir on a volume that went read-only.

Related errors


AI-assisted analysis of anomalyco/sst@a0bd20f762 (2026-08-30). Data as JSON: /api/errors/137b214c8957c1c6. Report an issue: GitHub.