Move executed command printing to output prefix to constant

This commit is contained in:
Lauris BH 2024-03-07 01:39:53 +02:00
parent 1d093f1b39
commit 52c9ff5eb1
No known key found for this signature in database
GPG key ID: DFDE60A0093EB926
9 changed files with 41 additions and 34 deletions

View file

@ -19,6 +19,8 @@ import (
"fmt"
"github.com/alessio/shellescape"
backend "go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types"
)
// generateScriptPosix is a helper function that generates a step script
@ -31,7 +33,7 @@ func generateScriptPosix(commands []string) string {
for _, command := range commands {
buf.WriteString(fmt.Sprintf(
traceScript,
shellescape.Quote(command),
shellescape.Quote(backend.CommandPrefix+" "+command),
command,
))
}
@ -58,6 +60,6 @@ unset CI_SCRIPT
// traceScript is a helper script that is added to the step script
// to trace a command.
const traceScript = `
echo + %s
echo %s
%s
`

View file

@ -40,13 +40,13 @@ unset CI_NETRC_USERNAME
unset CI_NETRC_PASSWORD
unset CI_SCRIPT
echo + 'echo ${PATH}'
echo ' echo ${PATH}'
echo ${PATH}
echo + 'go build'
echo ' go build'
go build
echo + 'go test'
echo ' go test'
go test
`,
},

View file

@ -7,8 +7,8 @@ import (
)
const (
windowsScriptBase64 = "CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCc7CiZjbWQgL2MgIm1rZGlyIGM6XHJvb3QiOwppZiAoJEVudjpDSV9ORVRSQ19NQUNISU5FKSB7CiRuZXRyYz1bc3RyaW5nXTo6Rm9ybWF0KCJ7MH1cX25ldHJjIiwkRW52OkhPTUUpOwoibWFjaGluZSAkRW52OkNJX05FVFJDX01BQ0hJTkUiID4+ICRuZXRyYzsKImxvZ2luICRFbnY6Q0lfTkVUUkNfVVNFUk5BTUUiID4+ICRuZXRyYzsKInBhc3N3b3JkICRFbnY6Q0lfTkVUUkNfUEFTU1dPUkQiID4+ICRuZXRyYzsKfTsKW0Vudmlyb25tZW50XTo6U2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiQ0lfTkVUUkNfUEFTU1dPUkQiLCRudWxsKTsKW0Vudmlyb25tZW50XTo6U2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiQ0lfU0NSSVBUIiwkbnVsbCk7CgpXcml0ZS1PdXRwdXQgKCcrICJlY2hvIGhlbGxvIHdvcmxkIicpOwomIGVjaG8gaGVsbG8gd29ybGQ7IGlmICgkTEFTVEVYSVRDT0RFIC1uZSAwKSB7ZXhpdCAkTEFTVEVYSVRDT0RFfQoK"
posixScriptBase64 = "CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnVuc2V0IENJX1NDUklQVAoKZWNobyArICdlY2hvIGhlbGxvIHdvcmxkJwplY2hvIGhlbGxvIHdvcmxkCg=="
windowsScriptBase64 = "CiRFcnJvckFjdGlvblByZWZlcmVuY2UgPSAnU3RvcCc7CiZjbWQgL2MgIm1rZGlyIGM6XHJvb3QiOwppZiAoJEVudjpDSV9ORVRSQ19NQUNISU5FKSB7CiRuZXRyYz1bc3RyaW5nXTo6Rm9ybWF0KCJ7MH1cX25ldHJjIiwkRW52OkhPTUUpOwoibWFjaGluZSAkRW52OkNJX05FVFJDX01BQ0hJTkUiID4+ICRuZXRyYzsKImxvZ2luICRFbnY6Q0lfTkVUUkNfVVNFUk5BTUUiID4+ICRuZXRyYzsKInBhc3N3b3JkICRFbnY6Q0lfTkVUUkNfUEFTU1dPUkQiID4+ICRuZXRyYzsKfTsKW0Vudmlyb25tZW50XTo6U2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiQ0lfTkVUUkNfUEFTU1dPUkQiLCRudWxsKTsKW0Vudmlyb25tZW50XTo6U2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiQ0lfU0NSSVBUIiwkbnVsbCk7CgpXcml0ZS1PdXRwdXQgKCfirp4gZWNobyBoZWxsbyB3b3JsZCcpOwomIGVjaG8gaGVsbG8gd29ybGQ7IGlmICgkTEFTVEVYSVRDT0RFIC1uZSAwKSB7ZXhpdCAkTEFTVEVYSVRDT0RFfQoK"
posixScriptBase64 = "CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnVuc2V0IENJX1NDUklQVAoKZWNobyAn4q6eIGVjaG8gaGVsbG8gd29ybGQnCmVjaG8gaGVsbG8gd29ybGQK"
)
func TestGenerateContainerConf(t *testing.T) {

View file

@ -18,16 +18,16 @@ import (
"bytes"
"fmt"
"strings"
backend "go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types"
)
func generateScriptWindows(commands []string) string {
var buf bytes.Buffer
for _, command := range commands {
escaped := fmt.Sprintf("%q", command)
escaped = strings.ReplaceAll(escaped, "$", `\$`)
buf.WriteString(fmt.Sprintf(
traceScriptWin,
escaped,
strings.ReplaceAll(backend.CommandPrefix+" "+command, "'", "''"),
command,
))
}
@ -55,6 +55,6 @@ $netrc=[string]::Format("{0}\_netrc",$Env:HOME);
// traceScript is a helper script that is added to the step script
// to trace a command.
const traceScriptWin = `
Write-Output ('+ %s');
Write-Output ('%s');
& %s; if ($LASTEXITCODE -ne 0) {exit $LASTEXITCODE}
`

View file

@ -39,13 +39,13 @@ $netrc=[string]::Format("{0}\_netrc",$Env:HOME);
[Environment]::SetEnvironmentVariable("CI_NETRC_PASSWORD",$null);
[Environment]::SetEnvironmentVariable("CI_SCRIPT",$null);
Write-Output ('+ "echo %PATH%"');
Write-Output (' echo %PATH%');
& echo %PATH%; if ($LASTEXITCODE -ne 0) {exit $LASTEXITCODE}
Write-Output ('+ "go build"');
Write-Output (' go build');
& go build; if ($LASTEXITCODE -ne 0) {exit $LASTEXITCODE}
Write-Output ('+ "go test"');
Write-Output (' go test');
& go test; if ($LASTEXITCODE -ne 0) {exit $LASTEXITCODE}
`,

View file

@ -112,10 +112,10 @@ func TestToConfigSmall(t *testing.T) {
"wp_uuid": "09238932",
},
Env: []string{
"CI_SCRIPT=CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW" +
"5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9" +
"GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JE" +
"CnVuc2V0IENJX1NDUklQVAoKZWNobyArICdnbyB0ZXN0JwpnbyB0ZXN0Cg==",
"CI_SCRIPT=CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW5lI" +
"CRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCm" +
"NobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnV" +
"uc2V0IENJX1NDUklQVAoKZWNobyAn4q6eIGdvIHRlc3QnCmdvIHRlc3QK",
"HOME=/root",
"SHELL=/bin/sh",
},
@ -170,11 +170,11 @@ func TestToConfigFull(t *testing.T) {
"wp_uuid": "09238932",
},
Env: []string{
"CI_SCRIPT=CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW" +
"5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU" +
"9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1" +
"JECnVuc2V0IENJX1NDUklQVAoKZWNobyArICdnbyB0ZXN0JwpnbyB0ZXN0CgplY2hvICsgJ2dvIHZldCAuLy4uLicKZ28gdmV0IC" +
"4vLi4uCg==",
"CI_SCRIPT=CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW5l" +
"ICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9G" +
"CmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JE" +
"CnVuc2V0IENJX1NDUklQVAoKZWNobyAn4q6eIGdvIHRlc3QnCmdvIHRlc3QKCmVjaG8gJ+KuniBnbyB2ZXQgLi8uLi4nCmdvIHZl" +
"dCAuLy4uLgo=",
"HOME=/root",
"SHELL=/bin/sh",
"TAGS=sqlite",

View file

@ -101,6 +101,10 @@ func TestTinyPod(t *testing.T) {
"name": "CI",
"value": "woodpecker"
},
{
"name": "CI_SCRIPT",
"value": "CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnVuc2V0IENJX1NDUklQVAoKZWNobyAn4q6eIGdyYWRsZSBidWlsZCcKZ3JhZGxlIGJ1aWxkCg=="
},
{
"name": "HOME",
"value": "/root"
@ -108,10 +112,6 @@ func TestTinyPod(t *testing.T) {
{
"name": "SHELL",
"value": "/bin/sh"
},
{
"name": "CI_SCRIPT",
"value": "CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnVuc2V0IENJX1NDUklQVAoKZWNobyArICdncmFkbGUgYnVpbGQnCmdyYWRsZSBidWlsZAo="
}
],
"resources": {},
@ -202,12 +202,12 @@ func TestFullPod(t *testing.T) {
"env": [
"<<UNORDERED>>",
{
"name": "CGO",
"value": "0"
"name": "CI_SCRIPT",
"value": "CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnVuc2V0IENJX1NDUklQVAoKZWNobyAn4q6eIGdvIGdldCcKZ28gZ2V0CgplY2hvICfirp4gZ28gdGVzdCcKZ28gdGVzdAo="
},
{
"name": "CI_SCRIPT",
"value": "CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnVuc2V0IENJX1NDUklQVAoKZWNobyArICdnbyBnZXQnCmdvIGdldAoKZWNobyArICdnbyB0ZXN0JwpnbyB0ZXN0Cg=="
"name": "CGO",
"value": "0"
},
{
"name": "HOME",

View file

@ -22,12 +22,14 @@ import (
"strings"
"github.com/alessio/shellescape"
backend "go.woodpecker-ci.org/woodpecker/v2/pipeline/backend/types"
)
func (e *local) genCmdByShell(shell string, cmds []string) (args []string, err error) {
script := ""
for _, cmd := range cmds {
script += fmt.Sprintf("echo %s\n%s\n", strings.TrimSpace(shellescape.Quote("+ "+cmd)), cmd)
script += fmt.Sprintf("echo %s\n%s\n", strings.TrimSpace(shellescape.Quote(backend.CommandPrefix+" "+cmd)), cmd)
}
script = strings.TrimSpace(script)
@ -35,7 +37,7 @@ func (e *local) genCmdByShell(shell string, cmds []string) (args []string, err e
case "cmd":
script := "@SET PROMPT=$\n"
for _, cmd := range cmds {
script += fmt.Sprintf("@echo + %s\n", strings.TrimSpace(shellescape.Quote(cmd)))
script += fmt.Sprintf("@echo %s\n", strings.TrimSpace(shellescape.Quote(backend.CommandPrefix+" "+cmd)))
script += fmt.Sprintf("@%s\n", cmd)
script += "@IF NOT %ERRORLEVEL% == 0 exit %ERRORLEVEL%\n"
}
@ -51,7 +53,7 @@ func (e *local) genCmdByShell(shell string, cmds []string) (args []string, err e
case "fish":
script := ""
for _, cmd := range cmds {
script += fmt.Sprintf("echo %s\n%s || exit $status\n", strings.TrimSpace(shellescape.Quote("+ "+cmd)), cmd)
script += fmt.Sprintf("echo %s\n%s || exit $status\n", strings.TrimSpace(shellescape.Quote(backend.CommandPrefix+" "+cmd)), cmd)
}
return []string{"-c", script}, nil
case "powershell", "pwsh":

View file

@ -21,6 +21,9 @@ import (
"github.com/urfave/cli/v2"
)
// CommandPrefix is the prefix to output before each command
const CommandPrefix = "⮞"
// Backend defines a container orchestration backend and is used
// to create and manage container resources.
type Backend interface {