This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Update phplist-web-frontend OpenAPI | |
| on: | |
| push: | |
| branches: | |
| - dev | |
| - main | |
| pull_request: | |
| branches: | |
| - main | |
| jobs: | |
| generate-openapi: | |
| runs-on: ubuntu-22.04 | |
| outputs: | |
| source_branch: ${{ steps.branch.outputs.source_branch }} | |
| steps: | |
| - name: Determine source branch | |
| id: branch | |
| run: | | |
| if [ "${{ github.event_name }}" = "pull_request" ]; then | |
| echo "source_branch=${{ github.head_ref }}" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "source_branch=${{ github.ref_name }}" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Checkout Source Repository | |
| uses: actions/checkout@v3 | |
| - name: Setup PHP with Composer and Extensions | |
| uses: shivammathur/setup-php@v2 | |
| with: | |
| php-version: 8.1 | |
| extensions: mbstring, dom, fileinfo, mysql | |
| - name: Cache Composer Dependencies | |
| uses: actions/cache@v3 | |
| with: | |
| path: ~/.composer/cache | |
| key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-composer- | |
| - name: Install Composer Dependencies | |
| run: composer install --no-interaction --prefer-dist | |
| - name: Generate OpenAPI Specification JSON | |
| run: vendor/bin/openapi -o docs/latest-restapi.json --format json src | |
| - name: Upload OpenAPI Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: openapi-json | |
| path: docs/latest-restapi.json | |
| update-web-frontend: | |
| runs-on: ubuntu-22.04 | |
| needs: generate-openapi | |
| env: | |
| TARGET_BRANCH: ${{ needs.generate-openapi.outputs.source_branch }} | |
| steps: | |
| - name: Checkout phpList-web-frontend Repository | |
| uses: actions/checkout@v3 | |
| with: | |
| repository: phpList/web-frontend | |
| token: ${{ secrets.PUSH_WEB_FRONTEND }} | |
| fetch-depth: 0 | |
| - name: Prepare target branch | |
| run: | | |
| git fetch origin | |
| if git ls-remote --exit-code --heads origin "$TARGET_BRANCH" >/dev/null 2>&1; then | |
| git checkout "$TARGET_BRANCH" | |
| git pull --rebase origin "$TARGET_BRANCH" | |
| else | |
| git checkout -b "$TARGET_BRANCH" | |
| fi | |
| - name: Download Generated OpenAPI JSON | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: openapi-json | |
| path: ./new-openapi | |
| - name: Compare and Check for Differences | |
| id: diff | |
| run: | | |
| # Compare the openapi files if old exists, else always deploy | |
| if [ -f openapi.json ]; then | |
| diff openapi.json new-openapi/latest-restapi.json > openapi-diff.txt || true | |
| if [ -s openapi-diff.txt ]; then | |
| echo "diff=true" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "diff=false" >> "$GITHUB_OUTPUT" | |
| fi | |
| else | |
| echo "No previous openapi.json, will add." | |
| echo "diff=true" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Update and Commit OpenAPI File | |
| if: steps.diff.outputs.diff == 'true' | |
| run: | | |
| set -euo pipefail | |
| cp new-openapi/latest-restapi.json openapi.json | |
| git config user.name "github-actions" | |
| git config user.email "github-actions@web-frontend.workflow" | |
| git add openapi.json | |
| if git diff --cached --quiet; then | |
| echo "No changes to commit" | |
| exit 0 | |
| fi | |
| git commit -m "Update openapi.json from web frontend workflow $(date -u +"%Y-%m-%dT%H:%M:%SZ")" | |
| git fetch origin "$TARGET_BRANCH" | |
| git rebase "origin/$TARGET_BRANCH" | |
| git push origin HEAD:"$TARGET_BRANCH" | |
| - name: Skip Commit if No Changes | |
| if: steps.diff.outputs.diff == 'false' | |
| run: echo "No changes to openapi.json, skipping commit." |