Templating, lower_case variables and files
Created by: mrnugget
This builds on top of https://github.com/sourcegraph/src-cli/pull/334 and adds templating to campaign spec including lower-case variable names and access to STDOUT/STDERR.
Updated campaign spec from previous prototype:
name: templated-and-files
description: Use template variables and mount files in campaign specs
on:
- repositoriesMatchingQuery: repo:automation-testing lang:go fmt.Sprintf("%d", :[v]) patterntype:structural -file:vendor count:5
steps:
# Run comby over the search results in each repository:
- run: comby -in-place -config /tmp/go-sprintf.toml -f ${{ join repository.search_result_paths "," }}
container: comby/comby
files:
# Create files inside the container by specifying path and content here:
/tmp/go-sprintf.toml: |
[sprintf_to_strconv]
match='fmt.Sprintf("%d", :[v])'
rewrite='strconv.Itoa(:[v])'
- run: echo "comby found the following problems:" >> CHANGELOG.md && cat /tmp/comby-output.txt >> CHANGELOG.md
container: alpine:3
files:
# files also support templating:
/tmp/comby-output.txt: ${{ previous_step.stdout }}
- run: echo $MY_MODIFIED_FILES >> modified_files.txt
container: alpine:3
env:
# env vars also support templating:
MY_MODIFIED_FILES: ${{ join previous_step.modified_files "\n" }}
changesetTemplate:
title: templated-and-files
body: My not-first campaign!
branch: campaign/testing-files
commit:
message: Code your code with templates
published: false
Details
-
${{ .Repository.SearchResultPaths }}
and${{ repository.search_result_paths }}
-
${{ .Repository.Name }}
and${{ repository.name }}
and the other fields and methods on*graphql.Repository
-
${{ .PreviousStep.ModifiedFiles }}
and${{ previous_step.modified_files }}
-
${{ .PreviousStep.AddedFiles }}
and${{ previous_step.added_files }}
-
${{ .PreviousStep.DeletedFiles }}
and${{ previous_step.deleted_files }}
-
${{ .PreviousStep.Stdout }}
and${{ previous_step.stdout }}
-
${{ .PreviousStep.Stderr }}
and${{ previous_step.stderr}}
-
${{ join <list> <sep> }}
, example:${{ join repository.search_result_paths "\n" }}
-
${{ split <string> <sep> }}
, example:${{ split repository.name "/" }}
TODOs
-
Support mounting local filesErik and I decided against this, since that would make server-side execution harder. -
Parse env
too