WEBcoast Logo

TER-Upload per GitHub Release

Ich bin ein großer Fan von automatisierten Release-Prozessen. Deshalb wollte ich gerne die GitHub Releases und GitHub Actions für einen automatisierten Upload meiner Extensions ins TER nutzen. Glücklicherweise gibt es breits ein Tool, um per Kommandozeile mit dem TER zu kommunizieren: Tailor. Doch eine Sache bereitete mir eine Zeit lang Kopfschmerzen: Wie bekomme ich die mehrzeilige Beschreibung des GitHub Releases in das Kommentarargument des `tailor ter:publish` Kommandos. Der Trick dabei ist bestimmte Zeichen zu ersetzen, um die Beschreibung währen der Verarbeitung per `::set-output name=` in einer Zeile zu halten.

Meine Release-Tags starten mit `v`. Mein GitHub Actions Workflow sieht folgender Maßen aus:

name: publish
on:
    release:
        types: [created, edited]
jobs:
    publish:
        name: Publish to TER
        if: startsWith(github.ref, 'refs/tags/v')
        runs-on: ubuntu-20.04
        env:
            TYPO3_API_TOKEN: ${{ secrets.TYPO3_API_TOKEN }}
        steps:
            - name: Checkout repository
              uses: actions/checkout@v2

            - name: Check tag
              run: |
                  if ! [[ ${{ github.ref }} =~ ^refs/tags/v[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]]; then
                    exit 1
                  fi

            - name: Get version
              id: get-version
              run: echo ::set-output name=version::${GITHUB_REF/refs\/tags\/v/}

            - name: Get comment
              id: get-comment
              run: |
                  comment="${{ github.event.release.body }}"
                  comment="${comment//'%'/'%25'}"
                  comment="${comment//$'\n'/'%0A'}"
                  comment="${comment//$'\r'/'%0D'}"

                  if [[ -z "${comment// }" ]]; then
                    echo ::set-output name=comment::Released version ${{ steps.get-version.outputs.version }}
                  else
                    echo ::set-output name=comment::$comment
                  fi

            - name: Setup PHP
              uses: shivammathur/setup-php@v2
              with:
                  php-version: 7.4
                  extensions: intl, mbstring, json, zip, curl
                  tools: composer:v2

            - name: Install tailor
              run: composer global require typo3/tailor --prefer-dist --no-progress --no-suggest

            - name: Publish to TER
              run: php ~/.composer/vendor/bin/tailor ter:publish --comment "${{ steps.get-comment.outputs.comment }}" ${{ steps.get-version.outputs.version }}

Darf gerne kopiert und ggf. angepasst werden.