Мне нужно прочитать файл, который мы используем в качестве журнала изменений в нашем проекте с открытым исходным кодом (Argentum Online http://www.argentumonline.org) и использовать некоторый текст оттуда, чтобы использовать его в описании релиза в github. .
У меня есть следующий скрипт, в основном нам нужно обратить внимание на filename
, где мы читаем файл, а затем я сохраняю значения в массиве:
# Build
# Publish on github
echo "<<< Publishing on AO-LIBRE Server Release >>>"
token="1234ASD"
# Get the last tag name
tag=$(git describe --tags)
# PAY ATTENTION HERE!!!!!
filename="C:\ao-server-release-without-rubbish-files-temp\Changelog-server.txt"
readarray -t lines <<< $(sed -n "/^- "$tag".*/,/^---.*/p" "$filename")
description=""
for line in "${lines[@]}"; do
description=$(echo "$description" "$line")
done
# PAY ATTENTION HERE!!!!!
# Get the title and the description as separated variables
name=$tag
description=$(echo "$description" | sed -z 's/\n/\\n/g') # Escape line breaks to prevent json parsing problems
# Create a release
release=$(curl -XPOST -H "Authorization:token $token" --data "{\"tag_name\": \"$tag\", \"target_commitish\": \"master\", \"name\": \"$name\", \"body\": \"$description\", \"draft\": false, \"prerelease\": false}" https://api.github.com/repos/ao-libre/ao-server/releases)
# Extract the id of the release from the creation response
id=$(echo "$release" | sed -n -e 's/"id":\ \([0-9]\+\),/\1/p' | head -n 1 | sed 's/[[:blank:]]//g')
# Upload the artifact
curl -XPOST -H "Authorization:token $token" -H "Content-Type:application/octet-stream" --data-binary @artifact.zip https://uploads.github.com/repos/ao-libre/ao-server/releases/$id/assets?name=$tag.zip
Changelog-server .txt:
-v0.13.29
* 02/04/2020: Subida de texto mas suave, sin depender de los fps. (FrankoH298)
* 02/04/2020: Arreglado reconectar al logear, y setAlpha() en drawText. (FrankoH298)
* 03/04/2020: Si no se puede descargar la lista de servers de github por que tira error 500, no hacemos nada con sinfo.dat. (Recox)
* 04/04/2020: Fix Al abrir un cartel / lapida el juego se cuelga (Wyr0x)
* 04/04/2020: Centrar texto carteles / lapidas (Wyr0x)
* 04/04/2020: Fix minimapa indicador + mostrar en barra de tareas (Wyr0x)
* 04/04/2020: Fix bug HandleHeadingChange pedia 18 bytes: podia causar NPCs y personajes no se giren bien (Wyr0x)
* 04/04/2020: Ahora anda bien la distancia con los wavs (FrankoH298)
* 04/04/2020: no mas mensajes en blanco en la consola (FrankoH298)
* 04/04/2020: fixed lblEnergia and buttonDropGold (FrankoH298)
---
Но я получаю следующий ответ от github
C:\Program Files (x86)\Jenkins\workspace\ao-server-release>exit 0
[ao-server-release] $ "C:\Program Files\Git\bin\sh.exe" -xe C:\windows\TEMP\jenkins3213339319317768479.sh
+ echo '<<< Publishing on AO-LIBRE Server Release >>>'
<<< Publishing on AO-LIBRE Server Release >>>
+ token=123456
++ git describe --tags
+ tag=v0.13.29
+ filename='C:\ao-server-release-without-rubbish-files-temp\Changelog-server.txt'
+ readarray -t lines
++ sed -n '/^- v0.13.29.*/,/^---.*/p' 'C:\ao-server-release-without-rubbish-files-temp\Changelog-server.txt'
+ description=
+ for line in "${lines[@]}"
++ echo '' '- v0.13.29'
+ description=' - v0.13.29'
+ for line in "${lines[@]}"
++ echo ' - v0.13.29' '* 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298)'
+ description=' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298)'
+ for line in "${lines[@]}"
++ echo ' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298)' '* 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo)'
+ description=' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo)'
+ for line in "${lines[@]}"
++ echo ' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo)' '* 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298)'
+ description=' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298)'
+ for line in "${lines[@]}"
++ echo ' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298)' '* 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data).'
+ description=' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298) * 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data).'
+ for line in "${lines[@]}"
++ echo ' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298) * 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data).' ''
+ description=' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298) * 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data). '
+ for line in "${lines[@]}"
++ echo ' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298) * 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data). ' ---
+ description=' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298) * 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data). ---'
+ name=v0.13.29
++ echo ' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298) * 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data). ---'
+ description=' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298) * 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data). ---'
++ echo ' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298) * 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data). ---'
++ sed -z 's/\n/\\n/g'
+ description=' - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298) * 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data). ---\n'
++ curl -XPOST -H 'Authorization:token 123456' --data '{"tag_name": "v0.13.29", "target_commitish": "master", "name": "v0.13.29", "body": " - v0.13.29 * 02/04/2020: Al desconectarse del personaje, sin cerrar el socket, te envia a la pestaña de tu cuenta. (FrankoH298) * 02/04/2020: MD universal y Daga +4 ahora la puede usar el bardo (Neo) * 02/04/2020: Fix QuitarUser() and moved Areas.AreasOptimizacion() (FrankoH298) * 02/04/2020: Usamos clsByteQueue para enviar TODOS los paquetes de manera ordenada, sacamos las llamadas a EnviarDatosASlot(id, sndData) y usamos WriteASCIIStringFixed(data). ---\n", "draft": true, "prerelease": true}' https://api.github.com/repos/ao-libre/ao-server/releases
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 716 100 132 100 584 375 1659 --:--:-- --:--:-- --:--:-- 2039
+ release='{
"message": "Problems parsing JSON",
"documentation_url": "https://developer.github.com/v3/repos/releases/#create-a-release"
}'
++ echo '{
"message": "Problems parsing JSON",
"documentation_url": "https://developer.github.com/v3/repos/releases/#create-a-release"
}'
У меня уже есть эта строка для предотвращения проблем с синтаксическим анализом json, но они все еще существуют.
description=$(echo "$description" | sed -z 's/\n/\\n/g') # Escape line breaks to prevent json parsing problems
Любая идея или помощь, пожалуйста?