Folder Origin & Destination
Folder Origin & Destination
Section titled “Folder Origin & Destination”Folder-based origins and destinations work with the local filesystem, useful for testing and development.
folder.origin
Section titled “folder.origin”Read from a local directory:
origin = folder.origin()Parameters
Section titled “Parameters”| Parameter | Description |
|---|---|
materialize_outside_symlinks | Handle symlinks pointing outside |
# Run with local folderjava -jar copybara.jar migrate copy.bara.sky workflow --folder-origin /path/to/sourcefolder.destination
Section titled “folder.destination”Write to a local directory:
destination = folder.destination()# Run with local destinationjava -jar copybara.jar migrate copy.bara.sky workflow --folder-destination /path/to/outputTesting Workflows
Section titled “Testing Workflows”Use folder origin/destination to test transformations locally:
core.workflow( name = "test", origin = folder.origin(), destination = folder.destination(), authoring = authoring.overwrite("Test <test@example.com>"), transformations = [ core.move("src/", "lib/"), core.replace("old", "new"), ],)# Test the workflowjava -jar copybara.jar migrate test.bara.sky test \ --folder-origin /path/to/source \ --folder-destination /tmp/output
# Inspect the outputls /tmp/outputDevelopment Workflow
Section titled “Development Workflow”A common pattern during development:
-
Create test workflow:
core.workflow(name = "test-local",origin = folder.origin(),destination = folder.destination(),...) -
Test locally:
Terminal window java -jar copybara.jar migrate copy.bara.sky test-local \--folder-origin . \--folder-destination /tmp/test -
Verify output:
Terminal window diff -r /tmp/test expected/ -
Switch to Git when ready:
core.workflow(name = "production",origin = git.origin(...),destination = git.destination(...),...)
Preview Mode
Section titled “Preview Mode”Use folder destination to preview what Copybara would produce:
# Same transformations, different destinationcore.workflow( name = "preview", origin = git.origin(url = "...", ref = "main"), destination = folder.destination(), # Local output transformations = [...],)java -jar copybara.jar migrate copy.bara.sky preview \ --folder-destination /tmp/preview
# Review the output before running production workflowLimitations
Section titled “Limitations”- No state tracking: Folder operations don’t track what’s been synced
- No Git history: Output is just files, no commits
- CLI paths: Source/destination paths must be provided via CLI