Batch changes are created by writing a batch spec and executing that batch spec with the Sourcegraph CLI src
.
Batch changes can also be used on multiple projects within a monorepo by using the workspaces
key in your batch spec.
- Sourcegraph instance with repositories in it. See the "Quickstart" guide on how to setup a Sourcegraph instance.
- Installed and configured Sourcegraph CLI (see "Install the Sourcegraph CLI" in the Batch Changes quickstart for detailed instructions).
- Configured credentials for the code host(s) that you'll be creating changesets on. See "Configuring user credentials" for a guide on how to add and manage credentials.
In order to create a batch change, you need a batch spec that describes the batch change. Here is an example batch spec that describes a batch change to add "Hello World" to all README.md
files:
name: hello-world
description: Add Hello World to READMEs
# Find all repositories that contain a README.md file.
on:
- repositoriesMatchingQuery: file:README.md
# In each repository, run this command. Each repository's resulting diff is captured.
steps:
- run: echo Hello World | tee -a $(find -name README.md)
container: alpine:3
# Describe the changeset (e.g., GitHub pull request) you want for each repository.
changesetTemplate:
title: Hello World
body: My first batch change!
branch: hello-world # Push the commit to this branch.
commit:
message: Append Hello World to all README.md files
published: false # Do not publish any changes to the code hosts yet
The commits created from your spec will use the git config values for user.name
and user.email
from your local environment, or "[email protected]" if no user is set. Alternatively, you can also specify an author
in this spec.
See the "batch spec YAML reference" and the tutorials for more details on how to write batch specs.
After writing a batch spec you use the Sourcegraph CLI (src
) to execute the batch spec and upload it to Sourcegraph, where you can preview the changes and apply the batch spec to create a batch change:
-
Run the following command in your terminal:
src batch preview -f YOUR_BATCH_SPEC.batch.yaml
Don't worry! Before any branches are pushed or changesets (e.g., GitHub pull requests) are created, you will see a preview of all changes and can confirm each one before proceeding. NOTE: Batch Changes's default behavior is to stop if computing changes in a repository errors. You can choose to ignore errors instead by adding the
skip-errors
flag :src batch preview -f spec.batch.yml -skip-errors
-
Wait for it to run and compute the changes for each repository (using the repositories and commands in the batch spec).
-
Examine the preview. This is the result of executing the batch spec. Confirm that the changes are what you intended. If not, edit the batch spec and then rerun the command above.
-
Click the Apply button to create the batch change.
After you've applied a batch spec, you can publish changesets to the code host when you're ready. This will turn the patches into commits, branches, and changesets (such as GitHub pull requests) for others to review and merge.
You can share the link to your batch change with other people if you want their help. Any person on your Sourcegraph instance can view it in the batch changes list.
If a person viewing the batch change lacks read access to a repository in the batch change, they can only see limited information about the changes to that repository (and not the repository name, file paths, or diff).
You can update a batch change's changes at any time, even after you've published changesets. For more information, see Updating a batch change.
You can use Sourcegraph CLI (src
) to directly apply a batch spec to create or update a batch change without having to use the UI.
Instead of running src batch preview
you run the following:
src batch apply -f YOUR_BATCH_SPEC.batch.yaml
This command won't print a link to a preview. It will create or update the batch change it describes directly.
That can be useful if you just want to update a single field in the batch spec, i.e. the description
or the changesetTemplate.body
, or if you want to continously update a batch change by running src
in a CI workflow.
Batch changes are uniquely identified by their name and namespace. The namespace can be any Sourcegraph username or the name of a Sourcegraph organization.
By default, batch changes will use your username on Sourcegraph as your namespace. To create batch changes in a different namespace use the -namespace
flag when previewing or applying a batch spec:
src batch preview -f your_batch_spec.batch.yaml -namespace USERNAME_OR_ORG