* Expose the authorized keys tmate feature Described here: https://tmate.io/ in "Access Control" The variable accepts the file content in raw format (with \n) and dumps it into a file which tmate reads * Use echo instead of printf * Add missing quote * Only setup tmate settings if debug is activated
81 lines
2.0 KiB
Go
81 lines
2.0 KiB
Go
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
|
// Use of this source code is governed by the Polyform License
|
|
// that can be found in the LICENSE file.
|
|
|
|
// Package shell provides functions for converting shell commands
|
|
// to posix shell scripts.
|
|
package shell
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// Script converts a slice of individual shell commands to
|
|
// a posix-compliant shell script.
|
|
func Script(commands []string) string {
|
|
buf := new(bytes.Buffer)
|
|
fmt.Fprintln(buf)
|
|
fmt.Fprintf(buf, optionScript)
|
|
fmt.Fprintf(buf, tmateScript)
|
|
fmt.Fprintln(buf)
|
|
for _, command := range commands {
|
|
escaped := fmt.Sprintf("%q", command)
|
|
escaped = strings.Replace(escaped, "$", `\$`, -1)
|
|
buf.WriteString(fmt.Sprintf(
|
|
traceScript,
|
|
escaped,
|
|
command,
|
|
))
|
|
}
|
|
return buf.String()
|
|
}
|
|
|
|
// optionScript is a helper script this is added to the build
|
|
// to set shell options, in this case, to exit on error.
|
|
const optionScript = `
|
|
if [ ! -z "${DRONE_NETRC_FILE}" ]; then
|
|
echo $DRONE_NETRC_FILE > $HOME/.netrc
|
|
chmod 600 $HOME/.netrc
|
|
fi
|
|
|
|
unset DRONE_SCRIPT
|
|
unset DRONE_NETRC_MACHINE
|
|
unset DRONE_NETRC_USERNAME
|
|
unset DRONE_NETRC_PASSWORD
|
|
unset DRONE_NETRC_FILE
|
|
|
|
set -e
|
|
`
|
|
|
|
// traceScript is a helper script that is added to
|
|
// the build script to trace a command.
|
|
const traceScript = `
|
|
echo + %s
|
|
%s
|
|
`
|
|
|
|
const tmateScript = `
|
|
remote_debug() {
|
|
if [ "$?" -ne "0" ]; then
|
|
/usr/drone/bin/tmate -F
|
|
fi
|
|
}
|
|
|
|
if [ "${DRONE_BUILD_DEBUG}" = "true" ]; then
|
|
if [ ! -z "${DRONE_TMATE_HOST}" ]; then
|
|
echo "set -g tmate-server-host $DRONE_TMATE_HOST" >> $HOME/.tmate.conf
|
|
echo "set -g tmate-server-port $DRONE_TMATE_PORT" >> $HOME/.tmate.conf
|
|
echo "set -g tmate-server-rsa-fingerprint $DRONE_TMATE_FINGERPRINT_RSA" >> $HOME/.tmate.conf
|
|
echo "set -g tmate-server-ed25519-fingerprint $DRONE_TMATE_FINGERPRINT_ED25519" >> $HOME/.tmate.conf
|
|
|
|
if [ ! -z "${DRONE_TMATE_AUTHORIZED_KEYS}" ]; then
|
|
echo "$DRONE_TMATE_AUTHORIZED_KEYS" > $HOME/.tmate.authorized_keys
|
|
echo "set -g tmate-authorized-keys \"$HOME/.tmate.authorized_keys\"" >> $HOME/.tmate.conf
|
|
fi
|
|
fi
|
|
trap remote_debug EXIT
|
|
fi
|
|
`
|