Не эксперт по традиционным командам Linux, а также по grep. У меня есть настройка конвейера, и каждый раз, когда я делаю основной выпуск своего приложения, я хочу
pubspec.yaml
Создание тега GitHub уже работает, и я использовал следующую команду (я предполагаю, что есть возможности для улучшения):
echo "TAG_NAME=$(cat ${GITHUB_WORKSPACE}/pubspec.yaml | grep 'version:' | head -1 | cut -f2- -d: | sed -e 's/^[ \t]*//')" >> $GITHUB_OUTPUT
Однако для второго шага я довольно потерян. Я уже думал о поиске/замене соответствующей строки в моем pubspec.yaml, но я не знаю, как теперь я могу применить такое преобразование к своему номеру версии.
Например:
Обновлено: команды, которые у меня сейчас работают, следующие:
- name: "Retrieve version"
id: version
run: |
echo "OLD_VERSION=$(cat ${GITHUB_WORKSPACE}/pubspec.yaml | grep 'version:' | head -1 | cut -f2- -d: | sed -e 's/^[ \t]*//')" >> $GITHUB_OUTPUT
echo "NEW_VERSION=$(awk '{ match($0,/([0-9]+)\+([0-9]+)/,a); a[1]=a[1]+1; a[2]=a[2]+1; sub(/[0-9]+\+[0-9]+/,a[1]"+"a[2])}1' ${GITHUB_WORKSPACE}/pubspec.yaml | grep 'version:' | head -1 | cut -f2- -d: | sed -e 's/^[ \t]*//')" >> $GITHUB_OUTPUT
- name: "Increment version"
run: |
sed -i 's/${{ steps.version.outputs.OLD_VERSION }}/${{ steps.version.outputs.NEW_VERSION }}/g' ${GITHUB_WORKSPACE}/pubspec.yaml
echo ${{ steps.version.outputs.OLD_VERSION }}
echo ${{ steps.version.outputs.NEW_VERSION }}
Вероятно, многое можно оптимизировать.
Если awk это вариант, вы можете попробовать;
$ awk '{ match($0,/([0-9]+)\+([0-9]+)/,a); a[1]=a[1]+1; a[2]=a[2]+1; sub(/[0-9]+\+[0-9]+/,a[1]"+"a[2])}1' input_file
1.2.4+23
2.14.10+100
Большое спасибо, это сработало для меня. Даже несмотря на то, что мои линии сейчас кажутся слишком сложными. Но по крайней мере работает - спасибо.