
1. Скрипт, который автоматически создает Pull Request.
Создадим следюущий скрипт:
current_branch=$(git rev-parse --abbrev-ref HEAD)
username=''
title=''
password=''
usage() {
echo "Usage: open pr [-u <username>] [-p <password/token>] [-t <title of the PR>] <body of the PR>"
}
while getopts ":u:p:t:h" opt; do
case $opt in
u) username="$OPTARG";;
p) password="$OPTARG";;
t) title="$OPTARG";;
h)
usage
exit
\?)
echo "Invalid usage $OPTARG" >&2
usage >&2
exit 1
;;
esac
done
shift "$((OPTIND - 1))"
if [[ $current_branch ]] == 'master'; then
echo "You are already on master, create new branch, push it and then run this script" >&2
exit 1
fi
check_is_set() {
if [[ -z $2 ]]; then
echo "Error: $1 must be set" >&2
usage >&2
exit 1
fi
}
check_is_set "username" $username
check_is_set "password" $password
check_is_set "title" $title
data=$(cat <<-END
{
"title": $title,
"base": "master",
"head": $current_branch,
"body": "$@" // rest of the input
}
status_code=$(curl -s --user "$username:$password" -X POST "https://path-to-git" -d "$data" -w %{http_code} -o /dev/null)
if [[ status_code ]] == 201; then
echo "Complete"
else
echo "Error"
fi
rev-parse — это вспомогательгная команда, используемая для различных манипуляций с помощью дополнительных флагов, преобразуя эти данные в SHA1 хэш.
Отправление и получение данных из Node.js в Bash с помощью process.
Создадим JavaScript файл (не забудьте дать ему разрешение на исполнение — chmod +x) таким сожержанием:
#! /usr/bin/env node
const parse = require('querystring');
const [
queryString,
queryStringPropName,
queryStringExpected
] = process.argv.slice(2);
if (!queryString || !queryStringPropName || !queryStringExpected) {
process.stderr.write(`ERRPR, Must pass three args\n`);
process.exit(1);
}
let value = parse(queryString)[queryStringPropName];
if (value === queryStringExpected) {
process.stdout.write(`${value} is equal to ${queryStringExpected} \n`);
process.exit(0);
} else {
process.stderr.write(`${value} is not equal to ${queryStringExpected} \n`);
process.exit(1);
}
Теперь, мы можем вызвать js скрипт таким образом
./qscheck 'foo=123&bar=456' foo 123
#! — такая последовательность символов называется shebang, когда скрипт с этим сиволом выполняется как программа в Unix системах, остаток строки после сивола рассматривается как имя программы-интерпретатора, в нашем случае это Node.js.
Трансформация данных из пайпа bash в Node.js c помощью Transform Stream.
Преадположим, что у нас есть логи в таком формате:
{"level": "warn", message: "warning message"}
{"level": "info", message: "info message"}
{"level": "error", message: "error message"}
Создадим скрипт, который будет фильтровать логи с уровнем error. Для этого создадим такой скрипт:
#! /usr/bin/env node
const { Transform } = require('stream');
class FilterLogs extends Transform {
_transform(chunk, encoding, callback) {
try {
let jsonChunk = chunk.toString().split('\n').reduce((aggr, line) => {\
if (line) {
let json = JSON.parse(line);
if (json.level === "error") {
arg.push(JSON.stringify(json));
}
}
return aggr;
}, []).join('\n');
}
if (jsonChunk) {
this.push(jsonChunk + '\n');
}
callback();
}
catch(error) {
callback(error);
}
}
process.on('uncaughtException', () => {
process.stderr.write(`Uncaught Exception: ${error.message}`);
process.exit(1);
})
process.stdin
.pipe(new FilterLogs())
.pipe(process.stdout);
Теперь этот скрипт можно использовать таким образом tail -f | ./filter-pipe.js.

Оставьте комментарий