NOTE: Sourcegraph Instance Validation is currently experimental. We're exploring this feature set. Let us know what you think! File an issue with feedback/problems/questions, or contact us directly.
Instance validation provides a quick way to check that a Sourcegraph instance functions properly after a fresh install or an update.
The src CLI has an experimental command validate which drives the
validation from a user-provided configuration file with a validation specification (in JSON or YAML format). if no validation specification file is provided it will execute the following:
- temporarily add an external service
- wait for a repository to be cloned
- perform a search on the cloned repo
- perform a search on a non-indexed branch of the cloned repo
- remove the added external service
Validation specifications can be provided in either a YAML or JSON format. The best way to describe this initial, simple, and experimental validation specification is with the example below:
# creates the first admin user on a fresh install (skips creation if user exists)
firstAdmin:
email: [email protected]
username: foo
password: "{{ .admin_password }}"
# adds the specified code host
externalService:
config:
url: https://github.com
token: "{{ .github_token }}"
orgs: []
repos:
- sourcegraph-testing/zap
kind: GITHUB
displayName: footest
# set to true if this code host config should be deleted at the end of validation
deleteWhenDone: true
# checks maxTries if specified repo is cloned and waits sleepBetweenTriesSeconds between checks
waitRepoCloned:
repo: github.com/sourcegraph-testing/zap
maxTries: 5
sleepBetweenTriesSeconds: 2
# performs the specified search and checks that at least one result is returned
searchQuery:
- repo:^github.com/sourcegraph-testing/zap$ test
- repo:^github.com/sourcegraph-testing/[email protected] test{
"firstAdmin": {
"email": "[email protected]",
"username": "foo",
"password": "{{ .admin_password }}"
},
"externalService": {
"config": {
"url": "https://github.com",
"token": "{{ .github_token }}",
"orgs": [],
"repos": [
"sourcegraph-testing/zap"
]
},
"kind": "GITHUB",
"displayName": "footest",
"deleteWhenDone": true
},
"waitRepoCloned": {
"repo": "github.com/sourcegraph-testing/zap",
"maxTries": 5,
"sleepBetweenTriesSeconds": 5
},
"searchQuery": [
"repo:^github.com/sourcegraph-testing/zap$ test",
"repo:^github.com/sourcegraph-testing/[email protected] test"
]
}With this configuration, the validation command executes the following steps:
- create the first admin user
- add an external service
- wait for a repository to be cloned
- perform a search
NOTE: Every step is optional (if the corresponding top-level key is not present then the step is skipped).
It is often the case that the config file with the validation specification needs to declare passwords, tokens, or other secrets and these secrets should not be exposed or committed to a git repo.
The validation specification can refer to string values that come from a context specified outside the config file
(see the Usage section below). References to string values from this outside context are specified like so:
{{ .some_key }}. The context will have a string value defined under the key some_key and the validation execution will
use that.
Use the src CLI to validate with a validation specification file:
src validate -context github_token=$GITHUB_TOKEN validate.yamlsrc validate -context github_token=$GITHUB_TOKEN validate.jsonTo execute default validation checks:
src validate -context github_token=$GITHUB_TOKENThe src binary finds the Sourcegraph instance to validate from the environment variables
SRC_ENDPOINT and SRC_ACCESS_TOKEN.
Note: The
SRC_ACCESS_TOKENis not needed when a first admin user is declared in the validation specification.